java - Java 进程中环境变量 (NLS_LANG) 值已更改?

标签 java oracle environment-variables

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

父进程(shell 脚本 S1)正在启动 Java 进程,该进程本身正在启动子进程(shell 脚本 S2)。概括地说,它是:S1 > Java > S2

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

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

Runtime.getRuntime().exec(cmd);

并且 S2 显示 NLS_LANG 设置为 american_america.UTF8 (!)

这发生在某些访问受限的环境(生产)上,我无法使用 jre 1.5 在 Linux 上重现相同的问题。

据我所知,Java 进程应该从其父进程 (S1) 继承环境,并且应该将所有环境变量传递给其子进程 S2(因为使用了单参数 exec 调用)。然而,情况似乎并非如此。您知道为什么 NLS_LANG 似乎被更改了吗?

最佳答案

系统中是否有登录触发器?在登录触发器中设置大量环境变量(通常为 NLS_*_FORMAT)以不依赖于系统行为的环境配置是很常见的。

SELECT * FROM DBA_TRIGGERS
 WHERE TRIGGERING_EVENT = 'LOGON';

关于java - Java 进程中环境变量 (NLS_LANG) 值已更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2456106/

相关文章:

java - Spring MVC - 如何将继承类型从jsp传递到 Controller

java - 如何使用 Spring Boot 和 Angular 自动运行日常 PL/SQL 脚本(Oracle)?

java - 并发HashMap和原子值

java - 如何使用java验证html? jsoup 库出现问题

不在查询中的 oracle 比在查询中需要更长的时间

c - 如何通过execl函数显示HOME值?

bash - 使用 ENV 变量或默认值定义 Makefile 变量

java - 如何访问web.xml中的环境变量

java - 如何从文件创建 Rascal AST

oracle - 插入时可以在表上创建索引