Web開發,不外乎兩點,一為版面,一為內容。
論版面,PERL的CGI模組功能強大,又簡單易用,短短數行,便能動態產生HTML網頁。
而論內容,那麼必然會用到資料庫,用資料庫來管理內容。PERL對資料庫的支援廣而且全,幾乎所有的主流資料庫都有與之相應的PERL模組支援。為了開發可在不同資料庫上移植的PERL應用,DBI(DataBase Interface)模組應運而生,使用這個模組,應用只需使用統一的介面便能操作不同的資料庫,真正實現了可移植;當然,這個DBI也配備有相應的開關來支援不同資料庫的各種特性,每一個資料庫都能單獨成文,本篇暫不涉及這此點。
DBI只是個抽象層,要實現支援不同的資料庫,則需要在DBI之下,編寫針對不同資料庫的驅動。對MySql來說,有DBD::Mysql, 而對Oracle來說,則是DBD::Oracle。其中的DBD這是DataBase Driver之簡寫。
所以總的體繫結構如下所示:
應用(Application) -> DBI -> DBD -> DB
要串連不同類型的資料庫,就得在應用所在主機上配置安裝DBI以及相對應的DBD模組,關於DBI的安裝配置,偶遇此文,大家全可拿來參考,我就不重新造輪子,安裝順序是先裝DBI,再裝DBD::Oracle。
DBD::Oracle模組不是Oracle官方開發的,而是由Pythian Group這個很有名的DBA諮詢公司組織專人開發,目前的最新版本是1.22,首頁在http://www.pythian.com/news/dbd-oracle,讀者可以到那裡找到關於此模組的最新動向。
接下來把如何安裝DBD::Oracle的步驟羅列如下,供大家參考。
DBD::Oracle模組既可安裝在有Oracle Database的主機上,也可以裝在沒有Oracle Database的主機上,後者需要安裝Oracle Instant Client進行遠端資料庫串連,本文只關注第二種配置,即DBD::Oracle通過Instant Client實現資料庫訪問。
第一步: 下載Oracle Instant Client
Oracle Instant Client的首頁在http://www.oracle.com/technology/tech/oci/instantclient/index.html ; 秉承了Oracle公司的一貫做法,同一軟體按配置分成了不同的可下載包,讓使用者可以按照自己的需求,找到最合適的部分下載。要成功配置DBD::Oracle, 需要Basic,SQL*Plus,SDK這三個配置,讀者需要把這三個包下載並放到同一目錄,如下所示為我已經下載的三個包,版本是當前最新的11.1.0.7
shawn@shawn-laptop:/tmp/InstantClient$ls
instantclient-basic-linux32-11.1.0.7.zip
instantclient-sdk-linux32-11.1.0.7.zip
instantclient-sqlplus-linux32-11.1.0.7.zip
使用unzip命令在目前的目錄解壓這三個zip檔案,會自動產生instantclient_11_1目錄,這裡麵包含了以上三個包裡面的所有檔案,解壓後的目錄結構:
shawn@shawn-laptop:/tmp/InstantClient$ls
instantclient_11_1
instantclient-basic-linux32-11.1.0.7.zip
instantclient-sdk-linux32-11.1.0.7.zip
instantclient-sqlplus-linux32-11.1.0.7.zip
這時候這三個zip檔案已經沒用,可以刪之,也可備份供以後重用。
第二步:下載DBD::Oracle
這個時候,我們可以使用PERL內建的CPAN進行自動安裝,也可以手動下載此模組,編譯安裝,此文採用後者。
DBD::Oracle在search.cpan.org的是http://search.cpan.org/CPAN/authors/id/P/PY/PYTHIAN/DBD-Oracle-1.22.tar.gz,下載後隨便放到某一目錄,這裡我放到/tmp,然後解壓,如下:
shawn@shawn-laptop:/tmp$tarzxf DBD-Oracle-1.22.tar.gzDBD-Oracle-1.22shawn@shawn-laptop:/tmp/DBD-Oracle-1.22$lsChanges Makefile.PL oraperl.ph README.login.txtdbdimp.c MANIFEST Oraperl.pm README.longs.txt[..省略部分螢幕輸出..]
第三步:配置ORACLE_HOME環境變數
如果安裝了Oracle Database軟體,這個ORACLE_HOME就是安裝oracle時所設值。在只安裝Instant Client的情形下,此值設為第一步中instantclient_11_1目錄的絕對路徑,如下:
shawn@shawn-laptop:/tmp/DBD-Oracle-1.22$exportORACLE_HOME=/tmp/InstantClient/instantclient_11_1
shawn@shawn-laptop:/tmp/DBD-Oracle-1.22$echo $ORACLE_HOME
/tmp/InstantClient/instantclient_11_1
第四步:編譯安裝DBD::Oracle模組
首先是使用PERL的Makefile.PL來產生makefile
shawn@shawn-laptop:/tmp/DBD-Oracle-1.22$perl Makefile.PLUsing DBI 1.607 (for perl 5.008008 on i486-linux-gnu-thread-multi) installed in /usr/local/lib/perl/5.8.8/auto/DBI/Configuring DBD::Oracle for perl 5.008008 on linux (i486-linux-gnu-thread-multi)Remember to actually *READ* the README file! Especially if you have any problems.
Installing on a linux, Ver#2.6
Using Oracle in /tmp/InstantClient/instantclient_11_1
DEFINE _SQLPLUS_RELEASE = "1101000700" (CHAR)
Oracle version 11.1.0.7 (11.1)
Looks like an Instant Client installation, okay
[..省略部分螢幕輸出..]
運行make
shawn@shawn-laptop:/tmp/DBD-Oracle-1.22$makecp Oracle.pm blib/lib/DBD/Oracle.pmcp oraperl.ph blib/lib/oraperl.phcp dbdimp.h blib/arch/auto/DBD/Oracle/dbdimp.hI/Driver.xst > Oracle.xsi[..省略部分螢幕輸出..]
然後切換成root使用者make install
shawn@shawn-laptop:/tmp/DBD-Oracle-1.22$suPassword:root@shawn-laptop:/tmp/DBD-Oracle-1.22#make install[..省略部分螢幕輸出..]
至此,DBD::Oracle配置安裝完畢,使用者可以使用此模組串連Oracle進行相應的操作,