2011-05-11 90 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 . 
相关问题