Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
环境变量(NLS_LANG)值在Java进程中更改?_Java_Oracle_Environment Variables - Fatal编程技术网

环境变量(NLS_LANG)值在Java进程中更改?

环境变量(NLS_LANG)值在Java进程中更改?,java,oracle,environment-variables,Java,Oracle,Environment Variables,在一些遗留Java应用程序(HP-UX上的jre1.4)中注意到了这一点 父进程(shell脚本S1)正在启动Java进程,而Java进程本身正在启动子进程(shell脚本S2)。示意图是:S1>Java>S2 注意!Java应用程序使用OCI驱动程序连接到Oracle DB 奇怪的是,运行S1的进程将环境变量NLS_LANG设置为american_america.BLT8MSWIN1257,Java使用以下方式生成S2: Runtime.getRuntime().exec(cmd); S2显

在一些遗留Java应用程序(HP-UX上的jre1.4)中注意到了这一点

父进程(shell脚本S1)正在启动Java进程,而Java进程本身正在启动子进程(shell脚本S2)。示意图是:S1>Java>S2

注意!Java应用程序使用OCI驱动程序连接到Oracle DB

奇怪的是,运行S1的进程将环境变量
NLS_LANG
设置为
american_america.BLT8MSWIN1257
,Java使用以下方式生成S2:

Runtime.getRuntime().exec(cmd);
S2显示
NLS\u LANG
设置为
american\u america.UTF8
(!)

这种情况发生在某些有限访问环境(生产环境)上,我无法在使用jre 1.5的linux上重现同样的问题


好的,Java进程应该从它的对应项(S1)继承环境,并将所有环境变量传递给它的子项S2(因为使用了单参数
exec
call)。然而,情况似乎并非如此。你知道为什么NLS_LANG出现了变化吗?

系统中有登录触发器吗?在登录触发器中设置许多环境变量(通常为NLS_*\u格式)以使系统行为不依赖于环境配置是非常常见的

SELECT * FROM DBA_TRIGGERS
 WHERE TRIGGERING_EVENT = 'LOGON';
NLS_LANG如何设置


由于NLS_LANG是由父级导出的,因此我假设它是由子级继承的。在这种情况下,您正在寻找某个启动脚本正在某个地方启动,该脚本将被american_america.UTF8覆盖。我会寻找一个.cshrc(或类似的,取决于shell S2是什么)。可能在用户区域或/etc全局区域。

是的,在启动child之前会导出NLS_LANG。恐怕目前无法选中此选项,但您能否解释如何使用DB触发器更改某些Unix进程的环境?如果我不清楚,我很抱歉;不会修改Unix环境变量,但可以在Oracle会话的上下文中修改NLS_LANG参数。它可以从调用进程继承,在所有情况下都由客户端设置,或由数据库触发器重写。选中,未找到任何内容。无论如何,谢谢你:)