免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 5427 | 回复: 22
打印 上一主题 下一主题

32位perl如何读取64位oracle? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-12-13 17:32 |只看该作者 |倒序浏览
如题:

网上查询了一下,都是说因为32位perl不能访问64位oracle的数据库。

请问如下错误如何解决:

Can't load 'C:/Perl/lib/auto/DBD/Oracle/Oracle.dll' for module DBD::Oracle: load_file:找不到指定的模块。 at C:/Perl/lib/DynaLoader.pm line 191.


我用64位的perl,没有错误~!

谢谢~!

论坛徽章:
0
2 [报告]
发表于 2016-12-13 23:11 |只看该作者
不可能吧,肯定是你哪错了。
Oracle服务器进程通过处理SQL和PL/SQL请求,代表每个用户与SGA进行交互,根本就不会理会客户端是多少位的应用。
我客户端是32 位,用得好好的。
SELECT * FROM v$version;
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi
PL/SQL Release 10.2.0.4.0 - Production
CORE        10.2.0.4.0        Production
TNS for IBM/AIX RISC System/6000: Version 10.2.0.4.0 - Productio
NLSRTL Version 10.2.0.4.0 - Production

论坛徽章:
0
3 [报告]
发表于 2016-12-13 23:34 |只看该作者
本帖最后由 beyondlee1 于 2016-12-13 23:39 编辑

你没明白我的问题,
我指用32位perl程序脚本访问64位oracle数据库
不是指用PL/SQL之类的软件

论坛徽章:
42
19周年集字徽章-周
日期:2019-10-14 14:35:31平安夜徽章
日期:2015-12-26 00:06:30数据库技术版块每日发帖之星
日期:2015-12-01 06:20:002015亚冠之首尔
日期:2015-11-04 22:25:43IT运维版块每日发帖之星
日期:2015-08-17 06:20:00寅虎
日期:2014-06-04 16:25:27狮子座
日期:2014-05-12 11:00:00辰龙
日期:2013-12-20 17:07:19射手座
日期:2013-10-24 21:01:23CU十二周年纪念徽章
日期:2013-10-24 15:41:34IT运维版块每日发帖之星
日期:2016-01-27 06:20:0015-16赛季CBA联赛之新疆
日期:2016-06-07 14:10:01
4 [报告]
发表于 2016-12-14 08:27 |只看该作者
oracle的client自带32客户端的
DBD编译的时候会自动找到lib32目录
如果没找到,也可手动修改解决。
不过LZ是windows,windows的包没弄过。。。

论坛徽章:
0
5 [报告]
发表于 2016-12-14 10:17 |只看该作者
本帖最后由 hn_weicr 于 2016-12-14 11:04 编辑

回复 3# beyondlee1

我的意思就是32位perl 访问64位oracle。你对“服务”的概念了解是浅了点。
这么说吧,服务对客户端,网络路由等是透明的。这好比一妓女对外提供“服务”,管你是黑人白人大人小孩,
照单全收,日了再说。
另外, Oracler 的 “PL/SQL”是开发语言,不是什么工具。Oracle有个第三方厂家开发的工具叫 pl/sql developer,
还有:有时候,如果客户端确实不好布署,我们可以换个思路,用 DBI的ProxyServer 作为代理,
在很多无法装oracle客户端的unix/linux主机上(要root权限,要重启主机),通过代理也是个不错的选择。

论坛徽章:
0
6 [报告]
发表于 2016-12-14 10:18 |只看该作者
本帖最后由 hn_weicr 于 2016-12-14 10:21 编辑

回复 4# laputa73

我常用的就是32位windows, oracle DBI.
其实windows的perl更容易部署,装好一台,把整的目录copy至另一台主机上就可以了。 activeperl安装模块更容易。

论坛徽章:
0
7 [报告]
发表于 2016-12-14 18:49 |只看该作者
本帖最后由 beyondlee1 于 2016-12-14 18:53 编辑

我现在就是用perl写的程序访问oracle,
安装的64的activeperl可以正常访问和编译,
但换在32位windows,如xp下,就出现上述错误。

能否说一下简单步骤,如何解决?
注:64位和32位perl安装的模块是一样的。

论坛徽章:
0
8 [报告]
发表于 2016-12-14 21:02 |只看该作者
本帖最后由 hn_weicr 于 2016-12-14 23:12 编辑

xp下就应该下载32位的activeperl。至于DBI等模块,应该用ppm(装好activeperl后,在CMD 下敲ppm就出来)来安装。要学好perl最需要的是不断的思索与折腾。

通过dbi proxyserver来实现也很简单。
./dbiproxy --localport 3333 --mode fork --debug --logfile /dev/tty
Wed Dec 14 22:31:46 2016 debug, Server starting in operation mode fork
Wed Dec 14 22:31:46 2016 notice, Server starting
Wed Dec 14 22:31:56 2016 debug, Connection from 13.71.2.88, port 44020
Wed Dec 14 22:31:56 2016 debug, Child clone: DBI::ProxyServer=HASH(0x3006ba48)

Wed Dec 14 22:31:56 2016 debug, New child starting (DBI::ProxyServer=HASH(0x3006ba48)).
Wed Dec 14 22:31:56 2016 debug, Accepting client from 133.71.24.88, port 44020
Wed Dec 14 22:31:56 2016 debug, Client logs in: Application dbi:Oracle:crmdb1, version 0.2004, user ai_sel
Wed Dec 14 22:31:56 2016 debug, Connecting to dbi:Oracle:crmdb1 as ai_sel
Wed Dec 14 22:31:56 2016 debug, Accepting client
Wed Dec 14 22:31:56 2016 debug, Client executes method Version
Wed Dec 14 22:31:56 2016 debug, Client executes method CallMethod
Wed Dec 14 22:31:56 2016 debug, CallMethod: => DBI::ProxyServer::db=HASH(0x30439ce8),STORE,AutoCommit,1
Wed Dec 14 22:31:56 2016 debug, CallMethod: <= 1
Wed Dec 14 22:31:56 2016 debug, Client executes method CallMethod
Wed Dec 14 22:31:56 2016 debug, CallMethod: => DBI::ProxyServer::db=HASH(0x30439ce8),prepare, SELECT service_num ,subscription_id  FROM hiucrm1o.ucs_subscription WHERE ROWNUM<200,,ARRAY(0x3043a028),1
Wed Dec 14 22:31:56 2016 debug, CallMethod: <= DBI::ProxyServer::st=HASH(0x3043a208),2,0,ARRAY(0x3043a438),ARRAY(0x3043a488),0E0
Wed Dec 14 22:31:56 2016 debug, Client executes method CallMethod
Wed Dec 14 22:31:56 2016 debug, CallMethod: => DBI::ProxyServer::st=HASH(0x3043a208),fetch,20
Wed Dec 14 22:31:56 2016 debug, CallMethod: <= ARRAY(0x30439fc8),ARRAY(0x3043a0a8),ARRAY(0x3043a418),ARRAY(0x3043a538),ARRAY(0x3043a578),ARRAY(0x3043a588),ARRAY(0x3043a5c8),ARRAY(0x3043a608),ARRAY(0x3043a648),ARRAY(0x3043a688),ARRAY(0x3043a6c8),ARRAY(0x3043a708),ARRAY(0x3043a748),ARRAY(0x3043a788),ARRAY(0x3043a7c8),ARRAY(0x3043a808),ARRAY(0x3043a848),ARRAY(0x3043a888),ARRAY(0x3043a8c8),ARRAY(0x3043a908)


结果:

13198||5723
13016||576478
13016||576919
13016||56508
130008||80072
1303352||574390
13004630||80647
130162||565541
1309890||5643
13005001||80
130397||800

。。。。。。。。。。。。。。。。
。。。。。。。。。

测试草码(基本上就是仿模块内的测试代码)

$ vi b.pl
use strict;
use DBI;
$ENV{DBI_AUTOPROXY}='dbi:Proxy:hostname=133.2.2.5;port=3333';
my ($dbh,$sth);
my $user = 'ai_sel';
my $pass ='jbjbjbjb';
my $remote="dbi:Oracle:crmdb1";
$dbh = DBI->connect($remote, $user, $pass) ||die "connect did not work: $DBI::errstr";
my $sql = " SELECT service_num ,subscription_id
                  FROM hiucrm1o.ucs_subscription
                  WHERE ROWNUM<200";
printf $sql."\n";
$sth=$dbh->prepare($sql);
$sth->execute();
my @ora_cursors=();
while(@ora_cursors=$sth->fetchrow_array)
{
  print  $ora_cursors[0]."||".$ora_cursors[1]."\n";

$sth->finish();
$dbh->disconnect();           

论坛徽章:
89
水瓶座
日期:2014-04-01 08:53:31天蝎座
日期:2014-04-01 08:53:53天秤座
日期:2014-04-01 08:54:02射手座
日期:2014-04-01 08:54:15子鼠
日期:2014-04-01 08:55:35辰龙
日期:2014-04-01 08:56:36未羊
日期:2014-04-01 08:56:27戌狗
日期:2014-04-01 08:56:13亥猪
日期:2014-04-01 08:56:02亥猪
日期:2014-04-08 08:38:58程序设计版块每日发帖之星
日期:2016-01-05 06:20:00程序设计版块每日发帖之星
日期:2016-01-07 06:20:00
9 [报告]
发表于 2016-12-14 22:24 |只看该作者
这个是可能的。

我之前有一次安装了32为的wamp,里面的php是32位的,然后没法调用本机的64位的postgresql里面的lib,所以就没法访问64位的postgresql数据库。。。

论坛徽章:
0
10 [报告]
发表于 2016-12-14 22:51 |只看该作者
本帖最后由 hn_weicr 于 2016-12-15 08:42 编辑

回复 9# fender0107401
那我就不太清楚了。我的生产环境是AIX+64位oracle 机群,一般我写应用都先在windows7 (32位)下反复折腾(人笨)好再移至unix/linux上。
我个人本本上用的activeperl 是从官网下的,模块都是用ppm安装的,非常顺。
后来我试过,把整个perl_home tar出来,在windows32的机子上解tar 就行了。

小结一下:为了节省时间不折腾
                   32位的windows 就应装32位的oracle客户端,装32位的activeperl,然后用ppm装相关模块
                   64位的windows就应装64位的oracle客户端,装64位的activeperl,然后用ppm装相关模块。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP