免费注册 查看新帖 |

Chinaunix

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

Perl Oracle环境变量 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-04-27 19:23 |只看该作者 |倒序浏览
本帖最后由 shaunsyb 于 2015-04-27 19:26 编辑

服务器:CentOS 5.8

在一台服务器上 2 个用户ora10g,ora11g 分别安装了oracle 10g 和 11g,
在安装DBD-Oracle 模块的时候,获取的是 ora10g 的环境变量,这时候 ora11g 通过Perl 连接Oracle 的时候报如下错误

DBI connect('','/',...) failed: ERROR OCIEnvNlsCreate. Check ORACLE_HOME (Linux) env var  or PATH (Windows) and or NLS settings, permissions, etc. at ./alertcheck.pl line 37
ERROR OCIEnvNlsCreate. Check ORACLE_HOME (Linux) env var  or PATH (Windows) and or NLS settings, permissions, etc.

而 卸载Oracle模块  重新安装获取ora11g 用户环境变量的时候,ora10g 用户报同样错误,

但是我另一台 服务器上 也是2个用户都分别安装oracle 11g ,2个用户perl 连接 oracle 都没有问题,这说明2个家目录不一样是可以同时使用perl脚本的。。。

请问下,这要怎么解决2个用户才可以都执行perl 脚本?

求职 : 软件工程师
论坛徽章:
3
程序设计版块每日发帖之星
日期:2015-10-07 06:20:00程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2016-05-05 06:20:00
2 [报告]
发表于 2015-04-27 19:39 |只看该作者
我感觉是权限的问题,每个版本的 ora10g/11g 都自带了 Perl 的发行版,但版本不同,系统也自带了 Perl 的发行版,也许是环境变量顺序的问题,先找 centos 自带 root 的 Perl 的环境变量,然后再找 user 的 ora10g/11g 的环境变量,就会出现调用权限的问题。

论坛徽章:
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
3 [报告]
发表于 2015-04-28 08:23 |只看该作者
在连接oracle的时候,自己用%ENV设置相关环境变量。
perl作为客户端,用10g/11g都没有什么关系。都可以连1g/11g的服务端。
关键就是这两个
        $ENV{ORACLE_HOME} = $orahome;
        $ENV{NLS_LANG} = "SIMPLIFIED CHINESE_CHINA.ZHS16GBK";

论坛徽章:
0
4 [报告]
发表于 2015-04-28 11:33 |只看该作者
回复 3# laputa73

这个问题我是想过了的,
我自己在脚本中也直接指定了相关的Oracle变量,然后也通过print $ENV{XX}  打印出来看过了,都没有问题,
区别就是在 安装dbd—oracle 模块的时候 获取的是哪个用户的变量,
因为另一台机器2个11g 的用户都没问题,所以我想的是不是 有哪个模块文件 在安装的获取了 库文件之类  的路径,所以相同版本的 oracle 就没问题,不同版本的oracle就出问题了
   

论坛徽章:
0
5 [报告]
发表于 2015-04-28 11:44 |只看该作者

use strict;
use warnings;
use DBI;
use DBD::Oracle;
use File::Copy;


open(NEWENV, "source ~/.bash_profile && env|");

while (<NEWENV>){
          if (/(\w+)=(.*)/){

                $ENV{$1}="$2";
           }
    }
close NEWENV;

print $ENV{ORACLE_HOME}."\n";
print $ENV{NLS_LANG}."\n";


my $dbh = DBI->connect('dbi:Oracle:','/','',{ora_session_mode =>2}) or die( $DBI::errstr . "\n" );



这是我配置的脚本,环境变量我觉得是没有问题的,

论坛徽章:
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
6 [报告]
发表于 2015-04-29 18:49 |只看该作者
看下$LD_LIBRARY_PATH
不同版本的oracle确实会冲突

论坛徽章:
0
7 [报告]
发表于 2015-04-30 13:44 |只看该作者
回复 6# laputa73

也没问题的

论坛徽章:
0
8 [报告]
发表于 2015-04-30 15:42 |只看该作者
临时解决了下,又安装了一个DBD-ORACLE 模块包,安装在自定义的目录下。。。
让其中一个用户先读取这个自定义目录

论坛徽章:
0
9 [报告]
发表于 2015-05-05 17:42 |只看该作者
这种情况用perlbrew最合适啦。
装起来也放便,各个用户用各自的perl和module互不干扰。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP