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 installEzek után már indulhat a móka, vi-re fel!
# cd /usr/local/etc/# vi odbcinst.ini[FreeTDS]Description = FreeTDS DriverDriver = /usr/local/lib/libtdsodbc.soUsageCount = 2TDS_Version = 8.0# vi odbc.ini[Northwind]Driver = /usr/local/lib/libtdsodbc.soDescription = Northwind DSNTrace = Yes# ide fogunk logolniTraceFile = /tmp/sql.logForceTrace = Yes# az SQL Server IP cime ezServer = 192.168.1.100Database = NorthwindPort = 1433# SQL Server 2000-t hasznalunkTDS_Version = 8.0# vi freetds.conf…# A typical Microsoft server[TZ] host = 192.168.1.100 port = 1433 tds version = 8.0Akkor 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 salocale is "en_US.UTF-8"locale charset is "UTF-8"Password:1> select 12> go1(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 11 rows fetchedSQL> quitEz 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.oraSID_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 hsodbcTNS Ping Utility for Linux: Version 10.2.0.3.0 - Production on 05-JUL-2008 07:48:23Copyright (c) 1997, 2006, Oracle. All rights reserved.Used parameter files:Used TNSNAMES adapter to resolve the aliasAttempting 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@orclSQL*Plus: Release 10.2.0.3.0 - Production on Sat Jul 5 07:52:29 2008Copyright (c) 1982, 2006, Oracle. All Rights Reserved.Enter password:Connected to:Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - ProductionWith the Partitioning, Oracle Label Security, OLAP and Data Mining Scoring Engine optionsSQL> CREATE DATABASE LINK HSTEST CONNECT TO sa IDENTIFIED BY sa USING 'HSODBC';Database link created.SQL> SELECT COUNT(*) FROM Customers@hstest; COUNT(*)---------- 91Ezzel meg is volnánk, mostantól használhatjuk az előbb elkészített linket akár Warehouse Builder-ben, akár máshol.