Csatlakozás Oracle adatbázisból MS SQL Server-hez Linux alatt

Előfordulhat, hogy valaki egy Oracle adatbázisból egy másik, külső adatbázis szerverhez szeretne csatlakozni. Például Oracle Warehouse Builder-ben szeretne adatforrásnak SQL Server-t használni. Ennek a megvalósítására számos (1 2 3) leírás létezik, én viszont szerettem volna kicsit komplikálni a szituációt (csesszünk ki magunkkal mozgalom): az Oracle adatbázis Linux alatt fut (VMware image-ben), és ingyenes drivereket szeretnék használni.

Oracle alól ODBC-vel (vagy JDBC-vel) lehet külső szerverekhez kapcsolódni a heterogeneous services segítségével. Tehát először is szükség van egy linuxos ODBC megvalósításra, legyen ez a unixODBC.

unixODBC-vel SQL Server-hez többféle módon is lehet kapcsolódni: vagy használjuk az EasySoft driver-ét (30 napos trial verzió, avagy 500 angol font), vagy FreeTDS segítségével, ami egy ingyenes TDS (Tabular Data Stream) implementáció. Én mindkettőt kipróbáltam, az EasySoft driverével szinte minden ment azonnal, viszont kicsit drága. A unixODBC + FreeTDS kombó habár ingyenes, közel sem annyira triviális a beállítása.

Első lépésben nem árt feltelepíteni mindkettőt:

# wget http://www.unixodbc.org/unixODBC-2.2.12.tar.gz
# tar zxvf unixODBC-2.2.12.tar.gz
# cd unixODBC-2.2.12
# ./configure –-enable-gui=no
# make
# make install
# wget http://ibiblio.org/pub/Linux/ALPHA/freetds/stable/freetds-stable.tgz
# tar zxvf freetds-stable.tgz
# cd freetds-0.82
# ./configure --with-tdsver=8.0 --with-unixodbc=/usr/local
# make
# make install

Ezek után már indulhat a móka, vi-re fel!

# cd /usr/local/etc/
# vi odbcinst.ini

[FreeTDS]
Description = FreeTDS Driver
Driver = /usr/local/lib/libtdsodbc.so
UsageCount = 2
TDS_Version = 8.0


# vi odbc.ini
[Northwind]
Driver = /usr/local/lib/libtdsodbc.so
Description = Northwind DSN
Trace = Yes
# ide fogunk logolni
TraceFile = /tmp/sql.log
ForceTrace = Yes
# az SQL Server IP cime ez
Server = 192.168.1.100
Database = Northwind
Port = 1433
# SQL Server 2000-t hasznalunk
TDS_Version = 8.0

# vi freetds.conf

# A typical Microsoft server
[TZ]
host = 192.168.1.100
port = 1433
tds version = 8.0

Akkor teszteljük is le azt, amit eddig műveltünk. Jár a FreeTDS-hez egy tsql nevű utility, ami tökéletesen megfelel diagnosztikai célokra:

# tsql -S TZ -U sa
locale is "en_US.UTF-8"
locale charset is "UTF-8"
Password:
1> select 1
2> go

1
(1 row affected)
1> quit
#

Juhé, a FreeTDS-st sikeresen beállítottuk, nézzük mi a helyzet az ODBC-vel:

# isql -v Northwind sa sa
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL> select 1
+------------+
| |
+------------+
| 1 |
+------------+
SQLRowCount returns 1
1 rows fetched
SQL> quit

Ez eddig már fél siker! Most már „csak” az Oracle db-t kell rávenni, hogy csatlakozzon ő is:

# cd $ORACLE_HOME/hs/admin
# vi tnsnames.ora

hsodbc =
(DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)
(HOST=localhost)
(PORT=1521))
(CONNECT_DATA=(SID=hsodbc))
(HS=OK)
)


# vi listener.ora
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /ora/db/10.2.0)
(PROGRAM = extproc)
)
(SID_DESC=
(SID_NAME=hsodbc)
(ORACLE_HOME=/ora/db/10.2.0)
(PROGRAM=hsodbc)
)
)

LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
)

HSODBC =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))
(ADDRESS=(PROTOCOL=ipc)(KEY=PNPKEY))
)
)

Ezek után szükség van egy inicializáló fájlra is, aminek a neve init.ora kell, hogy legyen. Ebben a példában inithsodbc.ora:

# vi inithsodbc.ora
# This is a sample agent init file that contains the HS parameters that are
# needed for an ODBC Agent.

#
# HS init parameters
#
HS_FDS_CONNECT_INFO = "DSN=Northwind;UID=sa;PWD=sa"
HS_FDS_SHAREABLE_NAME = /usr/lib/libodbc.so

#
# ODBC specific environment variables
#

#
# Environment variables required for the non-Oracle system
#
#set =


Ennél a pontnál nem tudom pontosan, hogy újra kell-e indítani valamit vagy sem, mindenesetre én újraindítottam az egész gépet :)
Jöjjön az utolsó ellenőrzés:

# cd $ORACLE_HOME/bin
# ./tnsping hsodbc

TNS Ping Utility for Linux: Version 10.2.0.3.0 - Production on 05-JUL-2008 07:48:23

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

Used parameter files:


Used TNSNAMES adapter to resolve the alias

Attempting to contact (DESCRIPTION= (ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521)) (CONNECT_DATA= (SID=hsodbc)) (HS=OK))
OK (20 msec)

Ez az OK mondja meg nekünk, hogy jók vagyunk! Akkor hozzuk létre az adatbázis linket, lépjünk be a kedvenc SQL konzolunkba:

# sqlplus tz@orcl
SQL*Plus: Release 10.2.0.3.0 - Production on Sat Jul 5 07:52:29 2008

Copyright (c) 1982, 2006, Oracle. All Rights Reserved.

Enter password:

Connected to:

Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Production
With the Partitioning, Oracle Label Security, OLAP and Data Mining Scoring Engine options

SQL> CREATE DATABASE LINK HSTEST CONNECT TO sa IDENTIFIED BY sa USING 'HSODBC';

Database link created.

SQL> SELECT COUNT(*) FROM Customers@hstest;

COUNT(*)
----------
91

Ezzel meg is volnánk, mostantól használhatjuk az előbb elkészített linket akár Warehouse Builder-ben, akár máshol.

2 megjegyzés:

    On 2010. március 22. 3:56 Névtelen írta...

    You could easily be making money online in the underground world of [URL=http://www.www.blackhatmoneymaker.com]blackhat traffic[/URL], Don’t feel silly if you don't know what blackhat is. Blackhat marketing uses little-known or misunderstood methods to generate an income online.

     
    On 2013. február 26. 16:55 Névtelen írta...

    [url=http://www.casino-online.gd]casinos online[/url], also known as agreed casinos or Internet casinos, are online versions of household ("buddy and mortar") casinos. Online casinos funding gamblers to revel and wager on casino games with the return the Internet.
    Online casinos habitually send behind bars up respecting trade odds and payback percentages that are comparable to land-based casinos. Some online casinos exhort on higher payback percentages in the smoke of lacuna automobile games, and some impel known payout deal out audits on their websites. Assuming that the online casino is using an fittingly programmed unspecific condense up generator, put up games like blackjack coveted an established restrain edge. The payout be suffering with a appropriation after these games are established at coming the rules of the game.
    Multitudinous online casinos absolve gone from or generate their software from companies like Microgaming, Realtime Gaming, Playtech, Worldwide Sophistry Technology and CryptoLogic Inc.