Kapcsolat létesítése Microsoft SQL 7.0 szerver és OpenOffice.org 1.1.1 között unixODBC segítségével SuSE Linux 9.0 Professional alatt

A HupWiki-ből...

Tartalomjegyzék

I. Az MS SQL szerver és a unixODBC kapcsolat kialakítása

1. A feladat elvégzéséhez szükségesek az alábbiak:

Telepített unixODBC és FreeTDS (Tabular Data Stream protokoll*) csomagok.

A FreeTDS RPM csomagjait elkészítettem és azok letölthetők az alábbi helyről:

http://www.mylinux.hu/data/9.0/freetds-0.62.4-1.tmk.i586.rpm http://www.mylinux.hu/data/9.0/freetds-devel-0.62.4-1.tmk.i586.rpm http://www.mylinux.hu/data/9.0/freetds-doc-0.62.4-1.tmk.i586.rpm http://www.mylinux.hu/data/9.0/freetds-unixodbc-0.62.4-1.tmk.i586.rpm http://www.mylinux.hu/data/9.0/freetds-0.62.4-1.tmk.src.rpm

http://www.mylinux.hu/data/9.0/freetds-0.63.dev.20040721-1.tmk.i586.rpm http://www.mylinux.hu/data/9.0/freetds-devel-0.63.dev.20040721-1.tmk.i586.rpm http://www.mylinux.hu/data/9.0/freetds-doc-0.63.dev.20040721-1.tmk.i586.rpm http://www.mylinux.hu/data/9.0/freetds-unixodbc-0.63.dev.20040721-1.tmk.i586.rpm http://www.mylinux.hu/data/9.0/freetds-0.63.dev.20040721-1.tmk.src.rpm

A forrást a http://www.freetds.org oldalról szereztem be, az rpm-ek spec fájlját a PLD lengyel disztróéból alakítottam át.
Én a freetds-0.63.dev.20040721-es verziót használtam a kapcsolat kialakításához.

*-Pár szót a Tabular Data Stream protokollról:

A TDS protokollt a Sybase Inc. fejlesztette ki a Sybase SQL Server relációs adatbázis motorjához 1984-ben. Az a probléma mellyel a Sybase szembesült manapság is létezik: Nem volt általánosan elfogadott alkalmazás-szintű, az adatok az adatbázis szerver és a klinesek közötti továbítására szolgáló protokoll. A termékük használatát elősegítendő a Sybase előállt egy rugalmas, netlib-nek és db-lib-nek nevezett termékpárral.

A netlib feladata az adatok továbbítása volt a két számítógép között. Evégett együtt kellett működjön számos hálózati protokollal. Emlékezzünk, abban az időben a TCP/IP még nem volt az az általánosan használt dolog mint manapság. A TCP/IP mellett a netlib futott DECnet, IPX/SPX, NetBEUI és hasonló protokollokon.

A db-lib biztosította az API-t a kliens program számára és kommunikált a szerverrel a netlib-en keresztül. Amit a db-lib a szervernek küldött az byte folyamot képezett, olyan strukturált byte folyamot, mely adattáblákat képezett vagyis Táblázatos (Tabular) Adat (Data) Folyamot (Stream).

1990-ben a Sybase technológiacsere egyezményt kötött a Microsoft-tal, aminek az eredménye a Microsoft marketingjében megjelenő saját SQL Szerver lett. A Microsoft megtartotta a db-lib API-t és hozzáadta az ODBC-t. (Azóta a Microsoft számos egyéb API-t is adott hozzá.) Körülbelül ezzel egyidőben a Sybase bevezetette a db-lib egy jóval erőteljesebb „utódját” a ct-lib-et, melyet OpenClient párnak nevezett el.

A ct-lib, a db-lib és az ODBC API-k, melyek -jóllehet programozási stílusuk különböző- a netlib-et használják a szerverrel való kommunikációhoz. Az általuk használt nyelv a TDS. A TDS protokoll számos változatban jött ki, melyek többsége sohasem lett nyilvánosan dokumentálva. Ha valamit, hát ezt tekintették kereskedelmi titoknak vagy legalábbis saját tulajdonú technológiának. A kivétel az 5.0-ás TDS volt, melyet kizárólag a Sybase használt és amelynek a dokumentációja hozzáférhető a Sybase weboldalán.

A FreeTDS története


A FreeTDS-t megfigyeléssel és kísérletezéssel fejlesztették ki, próbálkozással és hibajavítással.
1997 elején az egyetlen lehetőség a Linux vagy egyéb szabad szoftver rendszerből Sybase szerverhez kapcsolódásra a Sybase által kibocsátott öregecske OpenClient volt. Sajnos ennek volt néhány hibája. Az eredeti verzió a.out alapú volt jóllehet Greg Thain nagy szolgálatott tett azzal, hogy átalakította a library-t ELF alapúra. Másodsorban ez csak az újabb ct-lib API-t tartalmazta, a régebbi db-lib API-t pedig nem.

Brian Bruns Sybase adatbázis fejlesztő és a FreeTDS projekt kezdeményezője rendelkezett néhány db-lib programmal és szerette volna azokat Linux-on futtatni. Így megkezdődött a FreeTDS projekt. Az eredeti munka a db-lib-re és az 5.0-ás protokollra koncentrált de hamarosan kibővült a ct-lib kompatibilis réteggel és a 4.2-es TDS verzióval. Később hozzáadták az ODBC és a 7.0-ás és 8.0-ás TDS verziókat is. Craig Spannring megírta a Java JDBC drivert, ami így a FeeTDS/JDBC-vé vált.

Ahogy a projekt egyre érettebb lett úgy növekedett a benne résztvevők száma. Frediano Ziglio jelentősen kibővítette az ODBC drivert és folytatta annak és az ahhoz kapcsolódó TDS library fejlesztését. Bill Thompson írta az aktuális BCP rendszer jelentős részét és kurzorokat adott a ct-lib-ünkhöz. A dokumentum szerény szerzője a projekthez a dokumentumok elkészítése végett csatlakozott és a projekt maintainer-jeként végezte. Ez a jó cselekedetek jutalma.

Forrás: FreeTDS UserGuide - http://www.freetds.org/userguide

2. A megfelelő TDS protokoll beállítása

Első lépésként az rpm-eket készítettem el 7.0-ás TDS protokollra optimalizálva a FreeTDS UserGuide-jában leírtaknak megfelelően (forrás: http://www.freetds.org/userguide/choosingtdsprotocol.htm). Értelemszerűen érdemes a csomagokat újrafordítani ha másik protokollra lenne szükség. Ehhez a spec fájlban a configure szakasz –with-tdsver=7.0 részét kell a megfelelő verziószámra átírni:

Sybase System 10 előtti verzióihoz: 	4.2
Microsoft SQL Server 6.x: 		4.2
Sybase System 10 és afelett: 		5.0
Sybase system SQL Anywhere: 	csak 5.0
Microsoft SQL Server 7.0: 		7.0 
Microsoft SQL Server 2000: 		8.0

3. A telepítés tesztelése

A telepítés után leteszteltem, hogy a FreeTDS képes kapcsolódni az MS SQL szerverhez:

tsql -S <sql.szerver.címe> -U <érvényes felhasználónév>
Password:<jelszó>

Sikeres esetben az alábbi promptot kaptam:

1>

A Ctrl+C billentyűkombinációval kilépek. (forrás: http://networkpenguin.dyndns.org:8000/modules.php?op=modload&name=News&file=article&sid=3 )

4. Konfigurálás

A /etc könyvtárban található a freetds.conf fájl. Ennek csak az alábbiakat kell tartalmaznia:

[TDS]
host= sql.szerver.címe
port =1433
tds version = 7.0 

5. ODBC driver regisztrálása

Ezek után regisztrálnom kell az ODBC driver-t a unixODBC-vel:

a. Létrehozom a tds.driver.template fájlt a /etc könyvtárban, ami az alábbiakat tartalmazza:

[TDS] 
Description = v0.63 with protocol v7.0 
Driver = /usr/lib/libtdsodbc.so

b. Az odbcinst parancsot végrehajtom:

odbcinst -i -d -f tds.driver.template 

c. Létrehozom a tds.datasource.template fájlt a /etc könyvtárban ami az alábbiakat tartalmazza:

[PROBA] 
Driver = TDS 
Description = MSSQL adatbázis 
Trace = No 
Server = sql.szerver.címe
Database = <adatbázis>

Az <adatbázis> értelemszerűen egy létező adatbázis neve kell legyen.

d. Létrehozom az ODBC kapcsolatot:

odbcinst -i -s -f tds.datasource.template 

6. ODBC kapcsolat tesztelése

Miután a kapcsolat létrejött letesztelem:

isql -v PROBA sa <jelszó>

Ekkor megkapom az SQL promptot:

SQL>

Innen már indíthatok SQL lekérdezéseket.

II. Az ODBC adatforrás OpenOffice.org alá illesztése

Az eljárás nagymértékben hasonlít ahhoz, ahogy azt a http://www.unixodbc.org/doc/OOoMySQL9.pdf dokumentum leírja.

Érdemes azonban az .odbcinst.ini és az .odbc.ini fájlokat kézzel létrehozni a megfelelő felhasználó könyvtárában, az adott felhasználó jogosultságaival (rw-,rw-,---):

/home/<user>/.odbcinst.ini
[TDS]
Description = v0.63 with protocol v7.0 
Driver = /usr/lib/libtdsodbc.so
/home/<user>/.odbc.ini
[PROBA] 
Driver = TDS 
Description = MSSQL adatbázis 
Trace = No 
Server = sql.szerver.címe
Database = <adatbázis>
Port = 1433

A további lépéseket a fenti pdf dokumentum tökéletesen leírja.

Licenc

A dokumentum licensze GNU/GPL. Bárki szabadon felhasználhatja és módosíthatja a licensz előírásainak megfelelően.

Források

http://networkpenguin.dyndns.org:8000/modules.php?op=modload&name=News&file=article&sid=3

Szerző

Csepinszky András aka Vakvarju