發新話題

技術專區 - 如何在Linux上安裝 unixODBC + DBMaker

技術專區 - 如何在Linux上安裝 unixODBC + DBMaker


技術專區 - 如何在Linux上安裝 unixODBC + DBMaker

目錄

  
1 如何在Linux上安裝 unixODBC + DBMaker

2 unixODBC介紹

3 DBMaker簡介
3.1 DBMaker在Linux上的安裝
3.2 下載DBMaker 4.2
3.3 安裝DBMaker
3.4 檢視安裝後的環境

4 安裝unixODBC
4.1 設定unixODBC連接DBMaker 4.2
   4.1.1 設定Driver
   4.1.2 設定ODBC DSN
   4.1.3 測試連接
4.2 PHP+unixODBC+DBMaker

5 結語
5.1 提供了邏輯與實體資料庫的轉換
5.2 連接不同版本的DBMaker
5.3 更多的應用



如何在Linux上安裝 unixODBC + DBMaker
在Windows中相當好用的ODBC Driver Manager,在Linux中卻一直沒有相同的設定;而現在Linux也有了類似的unixODBC了!在本文中,除了介紹unixODBC的設定外,也會介紹如何透過PHP去連接DBMaker資料庫,及使用unixODBC所帶來的好處。




unixODBC介紹
ODBC(Open DataBase Connectivity)是一個跨平台的標準介面,從1990年代開始推行以來,一直廣為業界所使用,即使如今有ADO或JDBC等新的標準,在業界中卻仍時常見到這種界面。即是因為推廣的時間久及開放式的架構,讓用戶已經習慣且易於去使用它了。

在Windows中,透過ODBC Driver Manager,各家資料庫可個自保留自己的Native Driver,然後使用一層轉接接口,將相對應的ODBC Call轉化成自己的Native API Call;但在User的角度而言,這兩者在外觀上是完全相同的,而各家資料庫則需負責將標準的ODBC Call,轉換成自己獨特的Native Call。

這樣的使用方式,讓ODBC在推出不久,即廣為用戶所接受,User也都習慣在ODBC Driver Manager中註冊自己的Driver,及設定相關的DSN(Data Source Name)。

這樣方便的設計,在Linux中,卻一直欠缺相同的機制;使得當要使用各式語言去連接資料庫時,便得依該語言的特性去重build一版可呼叫Native Call的模組(module),而一旦Build完後,若當中需要一些變動(如版本昇級),常常就要重build一次,這樣的設計使得Linux在使用資料庫時,極為不便!!

有鑑於此,便有一unixODBC的組織嚐試在Linux底下,建立類似ODBC Driver Manager的機制。此一機制與ODBC Driver Manager的功能相仿,便是要能提供Runtime的動態變換功能,讓AP可以透過ODBC Driver Manager,動態地載入不同的資料庫Driver,透過這樣的方式去連接資料庫。

如今,許多Distribution廠商都已經將unixODBC列為標準安裝的套件,而愈來愈廣為人知,本文即是要安裝unixODBC,並利用PHP去連接DBMaker 4.2資料庫,並由此來看看使用unixODBC所帶來的方便性。有關unixODBC的其他說明,請參閱官方網站。

DBMaker簡介
DBMaker為一跨平台的大型關聯式資料庫,符合SQL 99標準,擁有開放式架構,在處理多媒體、全文檢索上擁有強大的搜尋性能;有關DBMaker Engine部份的介紹,請參閱DBMaker的其他相關文章,本文不再贅述,而只著重在使用unixODBC方式的介紹。

首先DBMaker是一跨平台的大型資料庫,故在Windows、Linux上的安裝與使用幾乎是一致的。若您尚未使用過DBMaker,我們簡單介紹如何在Linux上安裝DBMaker,與其他資料庫相較,您會發現在Linux安裝DBMaker是一件相當輕鬆愉快的工作。

DBMaker在Linux上的安裝
加入dbmaker的user 首先您須在Linux底下,加入dbmaker這個user,不要忘記請一併將密碼設定好:


[root@support root]# adduser dbmaker
[root@support root]# passwd dbmaker
Changing password for user dbmaker.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

一般說來,除非另行指定,否則dbmaker的家目錄會放在/home/dbmaker底下。

下載DBMaker 4.2
接下來,請至DBMaker的官方網站下載區,去下載最新的DBMaker 4.2版本,將其放在適當的地方。(本文將其放置在/tmp底下)

[root@support tmp]# pwd
/tmp
[root@support tmp]# ls -al dbm*
-rwxr--r-- 1 alen alen 34649895 11§ 23 14:48 dbmaker-4.2.0-Linux2.x86.tar.gz
[root@support tmp]# tar zxvof dbmaker-4.2.0-Linux2.x86.tar.gz <==解壓縮
dm420.tar
setup

安裝DBMaker
接下來,請切換至dbmaker這個user,並執行setup程式,為了能正確執行setup,請將setup程式改變模式成「可執行」。


[root@support tmp]# chmod a+x setup <==切換成可執行
[root@support tmp]# su dbmaker <==切換成dbmaker後,進行安裝
[dbmaker@support tmp]$ ./setup


==============================================================
DBMaker Database Management System Installation
For DBMaker Release 4.2.0
Copyright(C) 1995-2004 CASEMaker Inc. All rights reserved.
==============================================================
Install Components:
[A] DBMaker Server .............. (yes) Language: [ Western, Big5 ]
[B] DBMaker Client ............... (yes)
[C] Sample Programs............... (yes)
[D] Tutorial Database.............. (no)
[E] Documentation ................. (no)
Install Path:
DBMaker Home directory: /home/dbmaker
[Y] Start Install [N] Quit
Please press [ A B C D E Y N ] Y <==為簡單計,請直接使用「Y」進行安裝

當您按下Start Install後,DBMaker就開始安裝,約1-3分鐘內,安裝便可完成,可說是又快速、又方便呢!

檢視安裝後的環境
在上述安裝完DBMaker後,DBMaker會自動產生一個範例資料庫-DBSample4,我們可以用下面的方法來啟動這個資料庫:

--------------------------------------------------------------------------------
[dbmaker@support bin]$ cd /home/dbmaker/4.2/bin <=切換至命令目錄,注意此時使用的user為dbmaker!
[dbmaker@support bin]$ ./dmserver dbsample4 <= 使用此命令來啟動資料庫
DBMaker 4.2.0 (#4721, 20040924)
Copyright(C) 1995-2004 CASEMaker Inc. All rights reserved.
SQL Server bound to port 2450 <==已在埠位2450上準備接收request
Database Server is running in the background mode.
Process ID = 15668

這樣資料庫就啟動了,您可以參考DBMaker的其他手冊,使用其他工具來操作這個資料庫;(有關資料庫服務的埠位、名稱等設定,都記錄在/home/dbmaker/data/dmconfig.ini文檔中,有關此文檔中的相關設定,也請參考DBMaker線上手冊)。
在安裝完DBMaker後,應該就可以在/home/dbmaker/4.2/lib/so中,找到DBMaker的odbc native driver。

[dbmaker@support bin]$ ls /home/dbmaker/4.2/lib/so/
libdmapic.so libdmjdbc42.so libdmxtt.so libiconv.so.2.2.0
libdmapis.so libdmjsvrut.so libexpat.so libxerces-c.so
libdmdttut.so libdmudf.so libiconv.so libxerces-c.so.21
libdmjdbaut.so libdmxtm.so libiconv.so.2 libxerces-c.so.21.0

其中的dmapic.so,便是DBMaker的native driver;由於DBMaker在開發之初,便是使用ODBC的開發介面,所以DBMaker的Native Driver,便是一符合ODBC API標準的Native Driver;而不像有些資料庫廠商,事實上還是需要另一層薄薄的轉換接口,才能將ODBC API轉成實際的Native Driver API。

安裝unixODBC
接下來談到本文的主角-unixODBC,由於多數人已習慣RedHat的rpm安裝方式,故本文會使用rpm來安裝,至於若要自行build者,請參閱unixODBC的官方網站。
首先至官方網站中取得最新的unixODBC package,本文使用的是2.2.3-6的版本。
接著,我們使用rpm將unixODBC安裝上去:

[root@support tmp]# rpm -ihv unixODBC-2.2.3-6.i386.rpm
warning: unixODBC-2.2.3-6.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e
Preparing... ########################################### [100%]
[root@support RPMS]# rpm -ql unixODBC|more<==檢查一下到底安裝了那些檔案!
/etc/odbc.ini <==這是安裝DSN的檔案,本文的重點
/etc/odbcinst.ini <==這是Driver Manager所放置的Driver設定區,亦為本文重點
/usr/bin/dltest
/usr/bin/isql
/usr/bin/iusql
/usr/bin/odbcinst
/usr/bin/odbctest
/usr/lib/libboundparam.so.1
/usr/lib/libboundparam.so.1.0.0
/usr/lib/libesoobS.so.1
/usr/lib/libesoobS.so.1.0.0
/usr/lib/libgtrtst.so.1
/usr/lib/libgtrtst.so.1.0.0
/usr/lib/libnn.so.1
/usr/lib/libnn.so.1.0.0
/usr/lib/libodbc.so
/usr/lib/libodbc.so.1
/usr/lib/libodbc.so.1.0.0
............



設定unixODBC連接DBMaker 4.2
如上所述,我們接下來就是要將unixODBC與DBMaker的Driver串接在一起,如同在Windows上,去設定Driver Manager一樣。

設定Driver
在Windows的Driver Manager中,我們所使用的Driver,事實上也是需先向Driver Manager登記的,這個動作由於多數是由資料庫廠商的安裝程式作掉,所以User可能完全不知覺。
但在unixODBC中,則必須由使用者自己來進行註冊Driver的動作,這個登錄的動作,即是要在/etc/odbcinst.ini中加上DBMaker相關Driver的資訊,我們首先打開這個檔案,並加上下面的幾行:

[root@support RPMS]# more /etc/odbcinst.ini
# Example driver definitinions
#
#

# Included in the unixODBC package
[PostgreSQL]
Description = ODBC for PostgreSQL
Driver = /usr/lib/libodbcpsql.so
Setup = /usr/lib/libodbcpsqlS.so
FileUsage = 1
....
[DBMaker 4.2 Driver] <==這就是您向unixODBC註冊的Driver名稱,可自行定義
Description = ODBC for DBMaker 4.2
Driver = /home/dbmaker/4.2/lib/so/libdmapic.so <==必須登記您環境中,DBMaker所使用的Driver完整路徑
#Setup = /usr/lib/libodbcdbmakerS.so
FileUsage = 0


在設定Windows的Driver Manager時,在加上一個新的DSN時,資料庫廠商通常都提供一個安裝程式,讓使用者可以登記如Server位置、Port Number、須要使用什麼認證…等等。這個畫面就是上述的「Setup」,由於DBMaker目前在unixODBC中並未提供安裝畫面,故須暫時將它關閉;待之後的版本提供後,再把它開啟。

設定ODBC DSN
接下來便是設定Data Source Name了(DSN),在Windows時,有所謂的System DSN及User DSN,其實主要的差別便是System DSN是可為所有User所存取,而User DSN則只能為某特定user存取;當login成另一位user時,便看不到原來User登錄的DSN了!
而在unixODBC中,則是使用不同位置的檔案,來存放System DSN及User DSN,在我們的環境中,System DSN會放在/etc/odbc.ini,而User DSN則會放在個別User的家目錄/.odbc.ini。
由於我們要使用Web的PHP來連接DBMaker,所以要設定System DSN,以下是我們所放置的內容:

[dbsample4]
Description = Database for dbsample4
Driver = DBMaker 4.2 Driver <==注意,此處須與之前Driver設定的名稱相同
Database = dbsample4 <== 資料庫名稱
Host = localhost <== server所在位置
Port = 2450 <== 埠位置
User = SYSADM <==使用名稱(DBMaker預設所使用的管理者名稱)
Password = <==使用密碼 (DBMaker預設所使用的管理者密碼)
當然您可以使用不同的帳號/密碼登入,但此處為方便,使用DBMaker所預設建立的管理者帳號SYSADM,及預設的密碼(空白)

測試連接
接下來,我們使用unixODBC所附的isql來連接dbsample4的資料庫,isql的標準語法為:

isql DSN [UID [PWD]] [options]
我們直接用下方命令來連接資料庫:

[root@support RPMS]# isql dbsample4 sysadm

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

| Connected! |

| |

| sql-statement |

| help [tablename] |

| quit |

| |

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

SQL> select * from SYSTABLE;

.......


這樣便可確認我們的確能從unixODBC中,正確連接到DBMaker sample4的資料庫!

PHP+unixODBC+DBMaker
現在我們能用unixODBC來連接DBMaker了,剩下來的工作就簡單多了,首先我們先確認我們的php是能夠呼叫odbc function的,先用測試程式看看php是否包含了odbc呼叫:
=>存成phptest.php
然後在Browser底下,查閱Configure Command,是否有--with-unixODBC=shared的文字!
接著再查閱網頁中的ODBC該節,是否顯示ODBC Library為unixODBC!
若是以上都無誤的話,您可以撰寫以下的程式php_odbc.php:

很有可能(最少筆者就碰到),此時卻顯示了無法認識odbc function call;這個問題在筆者這邊碰到時,先查了一下php裝設了那些rpm,後來便發現少裝了php-odbc這個套件,不知道是不是Distribution的問題(筆者裝的是RedHat 9.0)。當正確安裝了 php-odbc-4.2.2-17.i386.rpm後,再執行上述程式,便沒有發現錯誤了!
有關php的設定及它與apache的設定,網站上另有一篇專文,請自行參閱。
至此已經大功告成,user可以自行撰寫幾個簡單的測試程式,測試看看是否可以正確使用DBMaker,開始撰寫自己的網頁囉~

結語
使用至今,我們發現unixODBC至少提供了幾個好處:
提供了Logical DSN對應到實體的Database Name
可同時連接不同版本的DBMaker

提供了邏輯與實體資料庫的轉換
這也是為何Windows ODBC Driver Manager為何歷久不衰的原因;透過odbc.ini的設定,將邏輯的資料庫名稱,對應到實際的driver及database name。這樣的設定,也一併解決了下面要說的版本問題

連接不同版本的DBMaker
這是筆者最喜歡的一點!在早期build PHP時,必須要使用下面的方式來生成:
./configure --with-apxs=/usr/sbin/apxs --with-dbmaker=/home/dbmaker/4.2 --enable-track-vars
在這樣的設定中,其實已經把DBMaker的版本給設死在面,所build出來的libphp4.so,就是已經設死成只能連接DBMaker 4.2版本。
若是今天想寫一支php程式能同時連接3.7及4.2時,那要怎麼辦呢?這就慘了,因為在這樣的架構下,是沒有辦法作到的。
所以筆者有些機械的php就固定只能連3.7,有些機械就是放4.0;若要跨兩個版本的Database,就只能靠別的方法了。
但unixODBC提供了這一層轉換方式,讓libphp4.so不是設死只能連DBMaker 4.2,而是能動態存取外在的ini檔案後,再去連接DBMaker不同版本的so。這樣一來,筆者就能在同一支程式,靠著不同版本在odbc.ini中的設定,而能同時存取了!

更多的應用
目前unixODBC已逐漸廣為人所接受,不單PHP,包括Perl、Python甚至Java-ODBC Bridge都能使用。如此一來,所有的資料源都可以集中交由unixODBC來管理,這個發展過程,在Windows Driver Manager發展之時也都有過,而它顯而易見的好處,造成了Driver Manager及ODBC的風行!而也希望透過這篇文章,幫助使用者瞭解它,學習它,使用它,最後能真正地喜歡它!



1  
      1  
      1                        


TOP

發新話題

本站所有圖文均屬網友發表,僅代表作者的觀點與本站無關,如有侵權請通知版主會盡快刪除。