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.gz
DBD-Oracle-1.22
shawn@shawn-laptop:/tmp/DBD-Oracle-1.22$ls
Changes Makefile.PL oraperl.ph README.login.txt
dbdimp.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.PL
Using 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$make
cp Oracle.pm blib/lib/DBD/Oracle.pm
cp oraperl.ph blib/lib/oraperl.ph
cp dbdimp.h blib/arch/auto/DBD/Oracle/dbdimp.h
I/Driver.xst > Oracle.xsi
[..省略部分屏幕輸出..]
然後切換成root用戶make install
shawn@shawn-laptop:/tmp/DBD-Oracle-1.22$su
PassWord:
root@shawn-laptop:/tmp/DBD-Oracle-1.22#make install
[..省略部分屏幕輸出..]
至此,DBD::Oracle配置安裝完畢,用戶可以使用此模塊連接Oracle進行相應的操作