2011-05-11 132 views
3

我試圖從運行OSX 10.6雪豹的intel mac上的遠程系統上連接到Oracle 10.2.0.4。我試過使用perl CPAN來安裝DBD :: Oracle(DBI工作正常),但得到編譯錯誤。有人可以提供一個易於遵循的指南嗎?如何在OSX Snow Leopard上安裝perl DBD :: Oracle 10.6

+0

如果按照nickistat的配方和得到它的工作,你會介意在CPAN點組織對結果和任何更改您郵寄馬丁製作。然後我將它添加到DBD :: Oracle中的README.macosx.txt文件中。瞭解你的確切的mac處理器和版本細節將是有用的。 – bohica 2011-05-11 13:42:25

回答

4

獲得一個Mac上安裝Perl來與Oracle發揮很好的是一個有點疼痛的 - 一旦它的運行它是太棒了,得到它運行的是一個有點沮喪..

以下爲我工作在一個幾個不同的intel mac,那裏可能是多餘的步驟,它可能不會在其他平臺相同。

這將需要使用shell,root用戶和一點CPANing - 沒有什麼太繁重

首先爲Oracle PAP目錄 - 圖書館,即時客戶端等

sudo mkdir /usr/oracle_instantClient64 

下載並將所有64位即時客戶端軟件包從oracle中提取到上述目錄中

在該目錄中爲其中一個文件創建一個符號鏈接

sudo cd /usr/oracle_instantClient64 
sudo ln -s /usr/oracle_instantClient64/libclntsh.dylib.10.1 libclntsh.dylib 

下面的目錄是硬編碼到Oracle即時客戶端 - 只有天知道爲什麼 - 所以需要創建和符號鏈接它

sudo mkdir -p /b/227/rdbms/ 
sudo cd /b/227/rdbms/ 
sudo ln -s /usr/oracle_instantClient64/ lib 

需要添加一些環境變量,所以編輯/ etc/profile文件和添加它們,所以它們存在於所有用戶:

export ORACLE_HOME=/usr/oracle_instantClient64 
export DYLD_LIBRARY_PATH=/usr/oracle_instantClient64 

現在嘗試通過CPAN安裝DBD ::甲骨文 - 這將失敗,但它意味着任何依賴關係將會被下載並檢索模塊爲我們

sudo perl -MCPAN -e shell 
install DBD::Oracle 

當失敗退出CPAN和頭部到您的.cpan/build目錄 - 如果你使用CPAN的自動配置它會

cd ~/.cpan/build 

如果你沒有自動配置,你可以找到你在CPAN

o conf build_dir 

一旦在build目錄查找剛剛創建(它會被稱爲像DBD-Oracle的1.28-?)和DBD ::甲骨文DIR建立與下面的命令目錄cd進入它。

現在我們需要切換到root用戶。根不是默認的OSX啓用 - 的詳細信息,使看到的apple website

這個帖子一旦以root身份登錄,我們需要爲根設置上述環境變量:

export ORACLE_HOME=/usr/oracle_instantClient64 
export DYLD_LIBRARY_PATH=/usr/oracle_instantClient64 

現在同時還以root身份登錄,我們需要運行該模塊的makefile文件,然後進行,然後再安裝

perl Makefile.pl 
make 
make install 

假設所有沒有錯誤日誌中摸索出根:我們DBD'd了!如果沒有工作,現在是時候出局對任何錯誤,谷歌,你看到

現在只要安裝DBI模塊

sudo perl -MCPAN -e shell 
install DBI 

現在你所有的設置 - 享受佩爾利oracley新生活

從user852637附加信息:

  1. 修正該步驟

    perl Makefile.pl 
    make 
    install 
    

    最後一步應該是make install

  2. 在做什麼,你可能會遇到的,看起來像一個錯誤:

    脂:無法打開輸入文件:/ var/tmp中// ccIevTzM。出(沒有這樣的文件或目錄)

    要糾正這一點,你必須編輯「perl的Makefile.pl」步驟之後創建的文件「Makefile」文件並刪除以下文本的所有匹配:

    -arch ppc 
    

    這將消除錯誤。

  3. 在安裝DBI模塊期間會發生(2.)中所述的相同錯誤。你必須編輯perl Makefile.pl步驟之後創建的Makefile並刪除以下文本的所有匹配:

    -arch ppc 
    
+0

這聽起來很有用,我注意到在readme.macosx.txt和DBD :: Oracle的10.6中沒有任何東西。你介意把它添加到DBD :: Oracle嗎? – bohica 2011-05-11 13:44:04

+0

去吧 - 我已經運行這個過程:Macmini3,1; MacPro1,1;和一箇舊的MacbookPro(不知道是什麼型號的標識符) – beresfordt 2011-05-11 13:48:54

+0

你可以使用'look DBD :: Oracle'來代替退出CPAN shell,找到構建目錄和'cd'到它。 – hobbs 2011-05-11 13:51:25

3

這是一個偉大的指令集。我還有其他一些關於潛在「陷阱」的評論。

  1. 修正到了這一步

    perl Makefile.pl 
    make 
    install 
    

    最後一步應該是make install

  2. 在做什麼,你可能會遇到的,看起來像一個錯誤:

    脂:能打開輸入文件:/var/tmp//ccIevTzM.out(沒有這樣的文件或目錄)

    要糾正這一點,你必須編輯「perl的Makefile.pl」步驟之後創建的文件「Makefile」文件並刪除以下文本的所有匹配:

    -arch ppc 
    

    這將消除錯誤。

  3. 在安裝DBI模塊期間會發生(2.)中所述的相同錯誤。你必須編輯perl Makefile.pl步驟之後創建的Makefile並刪除以下文本的所有匹配:

    -arch ppc 
    
+0

固定make步驟,歡呼 – 2011-08-05 13:49:21

1

它好像在「Perl的MakeFile.pl」命令沒有找到正確的Perl的版本和我得到這個錯誤信息:

bash-3.2# perl Makefile.PL 
Multiple copies of Driver.xst found in: /Library/Perl/5.10.0/darwin-thread-multi-2level/auto/DBI/ /System/Library/Perl/Extras/5.10.0/darwin-thread-multi-2level/auto/DBI/ at Makefile.PL line 37 
Using DBI 1.616 (for perl 5.010000 on darwin-thread-multi-2level) installed in /Library/Perl/5.10.0/darwin-thread-multi-2level/auto/DBI/ 

Configuring DBD::Oracle for perl 5.010000 on darwin (darwin-thread-multi-2level) 

Remember to actually *READ* the README file! Especially if you have any problems. 

Installing on a darwin, Ver#10.0 
Using Oracle in /usr/oracle_instantClient64 
Can't find sqlplus. Pity, it would have helped. 
I'm having trouble finding your Oracle version number... trying harder 

WARNING: I could not determine Oracle client version so I'll just 
default to version 8.0.0.0. Some features of DBD::Oracle may not work. 
Oracle version based logic in Makefile.PL may produce erroneous results. 
You can use "perl Makefile.PL -V X.Y.Z" to specify a your client version. 

Oracle version 8.0.0.0 (8.0) 
DBD::Oracle no longer supports Oracle client versions before 9.2 
Try a version before 1.25 for 9 and 1.18 for 8! at Makefile.PL line 175. 

I've triple checked that I've downloaded and installed the proper 64-bit drivers from Oracle. I also checked to make sure that I'm running 64-bit Perl. 

如果我強迫這樣的版本號:

perl MakeFile.pl -V 10.2.0.4 

它完成,但運行「製造」當我收到錯誤消息:

Oracle.c:2267: error: ‘SQLT_BIN’ undeclared (first use in this function) 
Oracle.c:2277: error: ‘SQLCS_NCHAR’ undeclared (first use in this function) 
Oracle.c:2281: error: ‘SQLT_INT’ undeclared (first use in this function) 
Oracle.c:2283: error: ‘OCI_FETCH_PRIOR’ undeclared (first use in this function) 
Oracle.c:2287: error: ‘OCI_FETCH_NEXT’ undeclared (first use in this function) 
lipo: can't open input file: /var/tmp//ccyIFLPN.out (No such file or directory) 
make: *** [Oracle.o] Error 1 

我知道這是因爲需要從Makefile中去掉了「-arch競價排名」的說法,但即使去除後刪除所有的32位引用,我仍然看到了錯誤信息。

運行10.6.8 Snow Leopard中與Oracle驅動程序版本10.2.0.4

我發現,關鍵就在這問題是確保MakeFile.pl能找到的Oracle版本。

我遇到的問題是,Safari從Oracle.com下載zip文件,但解壓縮它們並以某種方式破壞了庫。

取而代之,我使用了不同的瀏覽器並將所有zip文件下載到一個目錄中。然後,我跑到下面的tar命令:

tar -xf instantclient-basic-10.2.0.4.0-macosx-x64.zip 
tar -xf instantclient-sdk-10.2.0.4.0-macosx-x64.zip 
tar -xf instantclient-sqlplus-10.2.0.4.0-macosx-x64.zip 

副本中的所有文件夾「instantclient_10_2」到$ ORACLE_HOME(預先設定的)

sudo cp -R instantclient_10_2/* $ORACLE_HOME 

而且內容,我並不需要編輯Makefile由MakeFile.pl腳本生成以刪除「-arch ppc」引用。

4

它看起來與XCode4的變化(刪除PPC拱支持)的Perl安裝沒有更新的任何10.6.X更新也刪除PPC二進制文件(可能是因爲羅塞塔仍然存在)。

因此,配置文件保留「-arch ppc」,導致所有CPAN模塊與C庫編譯失敗,因爲MakeMaker的輸出Makefile包含-arch ppc。

爲了解決這個問題一個可以編輯以下文件:

/System/Library/Perl/5.10.0/darwin-thread-multi-2level/Config_heavy.pl 

在行1219,你會看到:

$archflags = exists($ENV{ARCHFLAGS}) ? $ENV{ARCHFLAGS} : '-arch x86_64 -arch i386 -arch ppc'; 

變化,爲:

$archflags = exists($ENV{ARCHFLAGS}) ? $ENV{ARCHFLAGS} : '-arch x86_64 -arch i386'; 

一旦你這樣做這個生成的Makefile將是正確的。

+0

謝謝!一直在挖掘一個很好的解決方案。 – gaige 2013-03-05 17:04:05

1

您不應該在您的機器上重新創建與客戶端庫包裝程序相同的目錄結構。

不要做mkdir -p /b/227/rdbms/

使用MacOSX的庫頭管理工具:otoolinstall_name_tool

舉例來說,我有庫頭更新到我的部署架構:

otool -L /usr/oracle_instantclient/11.2.0.3.0-64-bit/libclntsh.dylib.11.1 
/usr/oracle_instantclient/11.2.0.3.0-64-bit/libclntsh.dylib.11.1: 
    /ade/b/2649109290/oracle/rdbms/lib/libclntsh.dylib.11.1 (compatibility version 0.0.0, current version 0.0.0) 
    /ade/b/2649109290/oracle/ldap/lib/libnnz11.dylib (compatibility version 0.0.0, current version 0.0.0) 
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0) 

install_name_tool -id /usr/oracle_instantclient/11.2.0.3.0-64-bit/libclntsh.dylib.11.1 \ 
       -change /ade/b/2649109290/oracle/ldap/lib/libnnz11.dylib /usr/oracle_instantclient/11.2.0.3.0-64-bit/libnnz11.dylib /usr/oracle_instantclient/11.2.0.3.0-64-bit/libclntsh.dylib.11.1 


otool -L /usr/oracle_instantclient/11.2.0.3.0-64-bit/libclntsh.dylib.11.1 
/usr/oracle_instantclient/11.2.0.3.0-64-bit/libclntsh.dylib.11.1: 
    /usr/oracle_instantclient/11.2.0.3.0-64-bit/libclntsh.dylib.11.1 (compatibility version 0.0.0, current version 0.0.0) 
    /usr/oracle_instantclient/11.2.0.3.0-64-bit/libnnz11.dylib (compatibility version 0.0.0, current version 0.0.0) 
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0) 

檢查所有Oracle InstantClient庫附帶的文件並修復所有相關庫的路徑

otool -L adrci 
otool -L genezi 
otool -L libclntsh.dylib.11.1 
otool -L libheteroxa11.dylib 
otool -L libnnz11.dylib 
otool -L libocci.dylib.11.1 
otool -L libociei.dylib 
otool -L libocijdbc11.dylib 
otool -L libsqlplus.dylib 
otool -L libsqlplusic.dylib 
otool -L sqlplus 
otool -L uidrvci 

然後,您將動態庫鏈接到它們應該是的位置。

而且你能避免使用export DYLD_LIBRARY_PATH因爲你知道如何設置你的系統

cd /usr/lib 
ln -s ../oracle_instantclient/11.2.0.3.0-64-bit/libclntsh.dylib.11.1 . 
ln -s ../oracle_instantclient/11.2.0.3.0-64-bit/libclntsh.dylib.11.1 libclntsh.dylib 
ln -s ../oracle_instantclient/11.2.0.3.0-64-bit/libheteroxa11.dylib . 
ln -s ../oracle_instantclient/11.2.0.3.0-64-bit/libnnz11.dylib . 
ln -s ../oracle_instantclient/11.2.0.3.0-64-bit/libocci.dylib.11.1 . 
ln -s ../oracle_instantclient/11.2.0.3.0-64-bit/libocci.dylib.11.1 libocci.dylib 
ln -s ../oracle_instantclient/11.2.0.3.0-64-bit/libociei.dylib . 
ln -s ../oracle_instantclient/11.2.0.3.0-64-bit/libocijdbc11.dylib . 
ln -s ../oracle_instantclient/11.2.0.3.0-64-bit/libsqlplus.dylib . 
ln -s ../oracle_instantclient/11.2.0.3.0-64-bit/libsqlplusic.dylib . 
相關問題