2010-03-16 2 views
0

이것은 일부 레거시 Java 응용 프로그램 (HP-UX의 경우 jre1.4)에서 나타납니다.Java 프로세스에서 환경 변수 (NLS_LANG) 값이 변경 되었습니까?

부모 프로세스 (셸 스크립트 S1)가 자체적으로 하위 프로세스 (셸 스크립트 S2)를 시작하는 Java 프로세스를 시작합니다. 개략적으로 그것은 S1> Java> S2입니다.

NB! Java 응용 프로그램은 OCI 드라이버를 사용하여 Oracle DB에 연결합니다.

Runtime.getRuntime().exec(cmd); 

과 S2는 NLS_LANGamerican_america.UTF8

로 설정되어 있는지 보여줍니다 (!) :

은 여기에서 이상한 것은 자바가 사용 S2를 생성합니다, S1을 실행하는 프로세스가 american_america.BLT8MSWIN1257에 환경 변수 NLS_LANG 세트를 가지고있다

이것은 일부 제한된 액세스 환경 (프로덕션)에서 발생합니다. Linux에서 동일한 문제를 jre 1.5로 재현 할 수 없었습니다.

AFAIK, Java 프로세스는 해당 병렬 (S1)에서 환경을 상속해야하며 모든 환경 변수를 자식 S2 (단일 인수 exec 호출이 사용되었으므로)로 전달해야합니다. 그러나 그것은 그럴 듯하지 않습니다. NLS_LANG이 변경된 것으로 보이는 이유는 무엇입니까?

답변

1

시스템에 로그온 트리거가 있습니까? 로그온 트리거에 많은 환경 변수 (일반적으로 NLS _ * _ FORMAT)를 설정하여 시스템 동작에 대한 환경 구성에 의존하지 않는 것이 일반적입니다.

SELECT * FROM DBA_TRIGGERS 
WHERE TRIGGERING_EVENT = 'LOGON'; 
+0

지금 당장이 항목을 선택할 수는 없지만 DB 트리거를 사용하여 유닉스 프로세스 환경을 어떻게 변경할 수 있는지 설명해 주시겠습니까? – Ralkie

+0

불분명하다면 유감입니다. Unix 환경 변수는 수정되지 않지만 Oracle 세션의 컨텍스트 내에서 NLS_LANG 매개 변수를 수정할 수 있습니다. 호출 프로세스에서 상속되거나 클라이언트에 의해 모든 경우에 설정되거나 데이터베이스 트리거에 의해 무시 될 수 있습니다. –

0

, 나는 그것이 아이에 의해 상속되는 가정합니다. 어떤 경우에는 일부 시작 스크립트가 american_america.UTF8로 덮어 쓰는 어딘가에서 시작됩니다. 나는 .cshrc (또는 셸 S2가 무엇인지에 따라 유사)를 찾는다. 사용자 영역 또는/etc 전역 영역에있을 수 있습니다.

+0

확인되었습니다. 아무 것도 발견되지 않았습니다. 어쨌든 고마워 :) – Ralkie