24th Sep

MSSQL adatelérés ORACLE adatbázisból

Tuesday, September 24, 2013 - 14:36
0
Author: Fegyver Gyula

Egyik partnerünknél párhuzamosan - éles üzemben alkalmaznak egy 11gR2 ORACLE, és egy MSSQL 2012 adatbázist is. Igényként jelentkezett, hogy a rendszert elsődlegesen kiszolgáló ORACLE adatbázisának képesek legyünk adatokat szolgáltatni a partner – egyéb háttérfolyamatokat biztosító – MSSQL adatbázisából.

Konkrétan azt kell biztosítani, hogy ORACLE DBLINK segítségével el tudjuk érni az MSSQL kiszolgáló egyik adatbázisát. Csak lekérdezési igényeket szükséges kiszolgálni a megoldásnak, tehát különösebb jogosultság problémákkal nem kell számolni.

NET –n több hasonló bejegyzés is található, de az előjöhető problémák számossága miatt talán érdekes lehet, hogy mi, hogy csináltuk.

A környezetről:

ORACLE oldalán egy HP-UX operációs rendszer található, erősnek mondható HOST paraméterekkel, komoly DISK rendszerrel, RAC környezetben. Verzió: 11gR2

MSSQL oldalon egy WINDOWS szerver található. MSSQL 2012 a verzió. Kb. 4 nagyobb, és több kisebb adatbázist szolgál ki.

Lépések:

Az alábbi két programra van szükségünk: UNIXODBC, FREETDS Innen tölthetők le:

http://www.unixodbc.org/
http://freetds.org/

 

1. Először telepítem a két csomagot.

tar -xvzf unixODBC-2.2.12.tar.gz

tar -xvzf freetds-stable.tgz

  1. Kicsomagolás:
  2. Telepítés, fordítás:

Én a UNIXODBC –vel kezdtem:

./configure --prefix=/usr/local --disable-gui

make

make install

majd a FREETDS:

./configure --with-tdsver=8.0 --with-unixodbc=/usr/local

make

make install

 

2. Konfigurálás

Az alábbi 3 konfigurációs fájlt kell beállítanom:

/usr/local/etc/freetds.conf

/usr/local/etc/odbc.ini

/usr/local/etc/odbcinst.ini

Nekem így néznek ki a fájlok:

freetds.conf

[global]

tds version = 8.0

text size = 64512

[MSS]

host = TEAM2012

instance = MSSQL2012

odbc.ini:

[MSS]

Driver = TDS

Server = TEAM2012\MSSQL2012

Database = <db_neve>

User = <user_neve>

Password = <pwd>

odbcinst.ini:

[TDS]

Driver = /usr/local/lib/libtdsodbc.so

Setup = /usr/local/lib/libtdsodbc.so

Trace = yes

TraceFile = /tmp/freetds.log

FileUsage = 1

 

3. Adatforrások tesztelése

cd /usr/local/bin

./tsql -S MSS –U<user> -P<pwd>

Amennyiben minden rendben van, akkor így néz ki a válasz:

[oracle@localhost bin]$ ./tsql -S MSS –U<user> -P<pwd>

locale is "en_US.UTF-8"

locale charset is "UTF-8"

1>

Ha valami rosszul lett kitöltve a freetds.conf -ban, akkor hasonló hibákat kaphatunk:

[oracle@localhost bin]$ ./tsql -S MSS –U<user> -P<pwd>

locale is "en_US.UTF-8"

locale charset is "UTF-8"

There was a problem connecting to the server

Ellenőrizzük le az ODBC kapcsolatot

cd /usr/local/bin

isql -v mss <user><pwd>

Amennyiben minden rendben van, akkor így néz ki a válasz:

[oracle@localhost bin]$ isql -v mss <user><pwd>

+---------------------------------------+

| Connected!

| sql-statement

| help [tablename]

| quit

+---------------------------------------+

SQL>

Itt már konkrét SQL –ket is lehet futtatni az MS kiszolgálóról. Hiba esetén pedig valami hasonló lesz a válasz:

[oracle@localhost bin]$ isql -v mss <user><pwd>

[S1000][unixODBC][FreeTDS][SQL Server]Unable to connect to data source

[ISQL]ERROR: Could not SQLConnect

[oracle@localhost bin]$

Ha volt valami hiba a két teszt során, akkor javasolt átnézni a 3 db. konfigurációs állományt.

4. Oracle heterogeneous services beállítása

„A nem Oracle alapú rendszerekkel való kommunikációhoz szükséges feldolgozást az Oracle8-ban megjelenő, az Oracle adatbázisszerverbe integrált, Heterogeneous Services nevű komponens biztosítja. A Heterogeneous Services (HS) kibővíti az Oracle SQL-feldolgozómotorját a távoli nem Oracle alapú rendszerek SQL-utasításainak és eljáráshívásainak értelmezéséhez szükséges funkciókkal, illetve a szükséges adatszótár-információk kiolvasásához megkövetelt leképezésekkel. Mivel integrált komponensként működik, a Heterogeneous Services képes kihasználni az Oracle adatbázisszerver hatékony SQL-utasításelemzési és elosztott optimalizálási lehetőségeit. Emellett az adatbázisszerver tranzakció-koordinációs funkciói biztosítják a tranzakciók összehangolását az Oracle alapú helyi és a nem Oracle alapú (idegen) távoli jóváhagyási (commit) protokollal, még akkor is, ha az idegen rendszer nem támogatja natív módon a kétfázisos jóváhagyást. Ez az integráció emellett azt is biztosítja, hogy a transzparens átjáró automatikusan kihasználja az Oracle adatbázis-kiszolgáló jövőbeni verzióiban megjelenő összes továbbfejlesztés  előnyeit.  Az Oracle adatbázis-kiszolgáló integrált komponenseként működő Heterogeneous Services a következő szolgáltatásokat nyújtja:

  • Transaction Service (tranzakciókezelés)
  • SQL Service (SQL-hívások)
  • Procedural Service (eljáráshívások)

A fenti szolgáltatásokon felül a Heterogeneous Services lehetőséget biztosít natív SQL-utasítások kiadására az idegen célrendszernek. Ezt nevezik PassThrough SQL-nek."

Oracle Generic Connectivity és Oracle Transparent Gateways.  Az Oracle tájékoztató kiadványa 2003. november –ből.

Ehhez nekünk gyakorlatilag egy db. újabb konfig. állományt kell beállítanunk. A helye nekem itt található: /home/oracle/app/oracle/product/11.2.0/dbhome_2/hs/admin
Neve: initdg4odbc.ora

Valójában nem is ezt kell módosítani, hanem kell készíteni egy másolatot belőle, de fontos, hogy a neve így nézzen ki: initMSS.ora Az „init” és a „.ora” közé az adatforrás azonosítója kell kerüljön. Fontos, hogy az azonosító beírásakor kisbetű / nagybetű azonosságot meg kell tartani.

HS_FDS_CONNECT_INFO = MSS

HS_FDS_SHAREABLE_NAME = /usr/local/lib/libodbc.so

HS_FDS_TRACE_LEVEL=debug

HS_LANGUAGE=HUNGARIAN_HUNGARY.EE8PC852

HS_FDS_SUPPORT_STATISTICS=TRUE

HS_FDS_SQLLEN_INTERPRETATION=32

 

set ODBCINI=/usr/local/etc/odbc.ini

set ODBCINSTINI=/usr/local/etc/odbcinst.ini

 

5. LISTENER konfiguráció

A LISTNER –be fel kell paraméterezni az új szolgáltatást, hogy az hozzáférhető legyen. Pl. így: (SID név a létrehozott adatkapcsolat neve, PROGRAM=dg4odbc, és ENV paraméterek a HS kapcsolat miatt szükségesek.)

LISTENER =

 (ADDRESS_LIST=

      (ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))

 )

SID_LIST_LISTENER=

  (SID_LIST=

      (SID_DESC=

         (SID_NAME=MSS)

         (ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_2)

         (PROGRAM=dg4odbc)

         (ENV = "LD_LIBRARY_PATH=/usr/local/lib"))

)

Ha megvan a paraméterezése, akkor indítsuk el az új LISTENER –t. A LOG –ban csak ennyi hivatkozás lesz az új adatforrásra:

Service "MSS" has 1 instance(s).

  Instance "MSS", status UNKNOWN, has 1 handler(s) for this service...

 

6. TNS rekord készítése

Kell készíteni egy bármilyen alias névvel ellátott leírót, aminek a SID –je az adatkapcsolatra utal, és tartalmazza a HS=OK paramétert.

MSS =

  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))

    )

    (CONNECT_DATA =

      (SID = MSS)

    )

    ( HS = OK )

  )

Most már le is tesztelhetjük:

[oracle@localhost bin]$ tnsping mss

TNS Ping Utility for Linux: Version 11.2.0.2.0 - Production on 15-AUG-2013 05:02:36

Copyright (c) 1997, 2010, Oracle.  All rights reserved.

Used parameter files:

Used TNSNAMES adapter to resolve the alias

Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))) (CONNECT_DATA = (SID = MSS)) ( HS=OK))

OK (0 msec)

 

7. Utolsó lépésként kell egy DBLink

create database link mss

  connect to "<user>" identified by "<pwd>"

  using 'MSS';

 

Tesztelés

A tesztelés viszonylag egyszerű. Ki kell próbálni, hogy tudjuk –e olvasni az MSS –s adattáblákat.

[oracle@localhost bin]$ sqlplus / as sysdba

SQL*Plus: Release 11.1.0.7.0 - Production on Thu Aug 15 06:04:58 2013

Copyright (c) 1982, 2008, Oracle.  All rights reserved.

Connected to:

Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> select count(1) from sysobjects@mss;

  COUNT(1)

----------

264

SQL>

 

Comments (0)
0