DB-link Oracle és MS-SQL közé

A minap felmerült a kér(d)és, hogy jó lenne Oracle adatbázisból "belátni" egy MS-SQL-be közvetlenül, nem pedig  scriptekkel, ODBC-n pakolgatni fájlokon keresztül az adatokat.

Scenario egyszerűnek tűnt: Linux-ről odbc működik, adott user belát az MSSQL-be, megy a lekérdezés, scriptelve szépen be lehet tölteni adatokat.

Linux még CentOS7, rajta friss unixODBC-2.3.11-1.rh.x86_64 illetve msodbcsql17-17.10.5.1-1.x86_64 is helyet foglal, ODBC-n mindenből szépen elérhető a DSN=SQLSRV1 kiszolgáló, de a DB-link nem akarja az igazságot: tcpdumppal látszik, hogy még oda sem fordul az SQL-serverhez.

 

Itt tartok:

#hs/admin/initDEMMO.ora
HS_FDS_CONNECT_INFO = SQLSRV1
HS_FDS_TRACE_LEVEL = Debug
HS_FDS_SHAREABLE_NAME = /usr/lib64/libodbc.so

 

#network/admin/tnsnames.ora - részlet

DEMMO =
    ( DESCRIPTION =
        ( ADDRESS = ( PROTOCOL = TCP )
            ( HOST = orcl.local)
            ( PORT = 1545 )
        )
        ( CONNECT_DATA =
            ( SID = DEMMO )
        )
        ( HS = OK )
    )

 

#network/admin/listener.ora - részlet

DEMMO =
      (ADDRESS = (PROTOCOL = TCP)(HOST = orcl.local)(PORT = 1545))

SID_LIST_DEMMO =
  (SID_LIST =
    (SID_DESC=
      (SID_NAME=DEMMO)
      (ORACLE_HOME=/opt/oracle/product/19.3.0/)
      (PROGRAM=dg4odbc)
        (ENVS=LD_LIBRARY_PATH="/usr/lib64:/opt/oracle/product/19.3.0/lib/")

    )
 )

 

A DBlink a create database link SQLSRV1 connect to "mssqluser" identified by "mssqluserpass" using 'DEMMO'; készült.

Kérdés,hogy mit rontottam el/mit néztem be?

Tűzfal kifelé nincs, selinux permissive módban, a 1545-ös port szabad.

Hozzászólások

Az ODBC-s DSN az SQLSRV1, az én értelmezésem szerint azt kell itt megadni, de majd megnézem.

Megnéztem, oda egy valid DSN kell. Játszadoztam a driver-rel (fretds, Microsoft-os), de mindegy volt, ugyanúgy nem kezdenek tcp-n beszélgetni...

Update: működik, csak a select ... from tabla@DBLINK -ben nem kell semmilyen idézőjelet használni... Viszont evés közben étvágy - mindezt jó lenne AD-s userrel összehozni...

Update: valami mókolás volt az mssql oldalon, mert most nem döglik a select - ellenben n darab sorhoz hozzárak n darab csupa null elemből álló sort - és a kapott adatok is elég csúnyán néznek ki... :-/ Ugyanaz a select isql-ből teljesen jól/helyesen működik...

 

Ha ezt beállítod a #hs/admin/initDEMMO.ora -ban akkor változik az eredmény ?

HS_NLS_NCHAR = UCS2

A 18-as orákulumról meg a régi centos-ról letettem, mert úgyis sokszorosan EOL rajta minden is - OEL 9.4-en Oracle 19.24.0.0 az új tesztkörnyezet, msodbcsql18-18.4.1.1-1.x86_64 és hozzá mssql-tools18-18.4.1.1-1.x86_64 van felrakva.

Most az isql-ben beküldött query korrekten hozza az ékezetes betűket is (ez megvolt korábban is), ellenben az Oracle DB-link nem akarja így sem (mivel nincs encryption/valid cert a túloldalon, ezért az odbc.ini -be kellett egy Encrypt=optional paraméter is) - ezekkel a beállításokkal továbbra sincs ugyan ékezetes karakter az Oracle-oldalon futó query-k eredményében - de legalább nem "szemetes" az eredmény...

HS_FDS_CONNECT_INFO = ODBCCONN
HS_FDS_TRACE_LEVEL = Debug
HS_FDS_TRACE_FILE_NAME = /tmp/hstrace.log
HS_FDS_SHAREABLE_NAME = /opt/microsoft/msodbcsql18/lib64/libmsodbcsql-18.4.so.1.1
HS_FDS_QUOTE_IDENTIFIER=TRUE
LD_LIBRARY_PATH=/u01/app/oracle/product/19.0.0/dbhome_1/lib:/lib:/usr/lib
set ODBCINI=/etc/odbc.ini
HS_NLS_NCHAR=UCS2
HS_LANGUAGE=AL32UTF8