Application → DBI (Database Interface) → DBD::Oracle (Driver) → Oracle Database
無需完整 Oracle Database 安裝,僅需 Instant Client 庫即可編譯/執行 DBD::Oracle。
官網 Instant Client 下載頁 取得 (版本 11.1.0.7 為例):
instantclient-basic-linux32-11.1.0.7.zipinstantclient-sdk-linux32-11.1.0.7.zipinstantclient-sqlplus-linux32-11.1.0.7.zipunzip *.zip
# 自動產生 instantclient_11_1 目錄
rm *.zip # 清理壓縮檔
wget https://search.cpan.org/CPAN/authors/id/P/PY/PYTHIAN/DBD-Oracle-1.22.tar.gz
tar zxf DBD-Oracle-1.22.tar.gz
cd DBD-Oracle-1.22
export ORACLE_HOME=/tmp/InstantClient/instantclient_11_1
echo $ORACLE_HOME
# 輸出: /tmp/InstantClient/instantclient_11_1
perl Makefile.PL
# 偵測 DBI 1.607, Oracle 11.1.0.7, Instant Client 安裝確認
make
# 編譯生成 Oracle.pm, dbdimp.o 等
su -c 'make install'
# 安裝至 Perl site_perl 目錄
perl -MDBI -e 'my $dbh = DBI->connect("dbi:Oracle:host=dbserver;sid=ORCL", "user", "pass"); print "Connected!\n" if $dbh;'
| 現象 | 可能原因 | 解決方向 |
|---|---|---|
| Makefile.PL 抱怨找不到 OCI 庫 | ORACLE_HOME 未正確指向 instantclient_11_1 | 確認路徑包含 libclntsh.so, oci.h |
| 編譯錯誤:缺少 dbdimp.h | SDK 套件未解壓或路徑錯誤 | 重新解壓 sdk 套件至同目錄 |
| 執行期錯誤:ORA-12541 | Listener 未啟動或連線描述錯誤 | 檢查 tnsnames.ora / EZConnect 字串 |
| 64 位元系統庫不匹配 | 下載 32 位元 Instant Client | 改用 64 位元套件 (linux.x64_64) |
LD_LIBRARY_PATH 加入 $ORACLE_HOME 確保執行期載入共享庫。Oracle Instant Client RPM 套件管理部署。DBI_TRACE 除錯 SQL 互動細節。