TECH
QUESTION
자주하는 질문답변 입니다.
Oracle
작성자 | 유건데이타 | 등록일 | 2015-05-14 |
제목 | 환경 변수들이 모두 올바른 데도 character set 에 문제가 있는 경우 | ||
---|---|---|---|
환경 변수들이 모두 올바른 데도 character set 에 문제가 있는 경우
============================================================= Oracle version 7.2 에서부터 사용되는 환경변수인 ORA_NLS 를 잘못 setting 하면, 다음과 같은 character set 문제가 발생할 수 있습니다. server version 환경변수 ============== ========= 7.2 ORA_NLS 7.3 ORA_NLS32 8.0 ORA_NLS33 9i ORA_NLS33 10G ORA_NLS10 11G ORA_NLS10 즉, 다음의 경우에 위처럼 환경 변수 ORA_NLS 가 DB version 과 일치하는 지를 확인해야 합니다. 1) US7ASCII 에서 KO16KSC5601 로 character set 을 변경하기 전에 변경이 되는지 확인하는 조회에서 다음과 같은 에러 발생하는 경우 select convert('a','KO16KSC5601','US7ASCII') from dual; Ora-1482 "unsupported character set" 2) props$, v$nls_parameters 의 character set 이 서로 다른 값을 가질 경우 3) v$nls_valid_values 에 default value 만 조회되는 경우 (즉, select count(*) from v$nls_valid_values; 의 결과가 4 인 경우 ORA_NLS 가 setting 되어 있지 않기 때문) 4) table 생성시에 ora-911 "invalid character", ora-904 "invalid column name" 빌생하는 경우 5) NLS_LANG 을 올바로 setting 하였는 데도, 한글이 ??? 로 나오는 경우 $ env | grep ORA_NLS ORA_NLS=$ORACLE_HOME/ocommon/nls/admin/data $ cd $ORA_NLS ls -l boot -rw-r--r-- 1 rctest72 dba 13572 Dec 2 1995 lx0boot.d -rw-r--r-- 1 rctest72 dba 13572 Dec 2 1995 lx1boot.d 이 두개의 화일이 ORA_NLS 디렉토리에 있어야 합니다. (version 에 따라 size 는 다를 수 있습니다.) 해결 방법 ======== 만약,ORA_NLS(ORA_NLS32,ORA_NLS33) 이 setting 되지 않았거나,rdbms version 과 맞지 않을 경우 다시 수정한 후에 restartup 하면 이와 관련된 문제는 해결됩니다. (특정 OS, Ticom 의 경우 OS 를 rebooting 해야 하는 경우도 있습니다.) 해결 방법은 ORA_NLS 를 정상적으로 setting 한 후에 restartup 하면, v$nls_valid_values 에 KO16KSC5601 이 조회되었고, 한글 테이블명이나 컬럼명이 가능해지고, dictionary 도 KO16KSC5601 로 일치하게 됩니다. 다음의 CASE1, CASE2 를 통해 이 환경 변수가 DB 에 미치는 영향을 확인할 수 있습니다. CASE1 ===== 위의 lx0boot.d, lx1boot.d 화일을 ACCESS 할 수 있을 때, 기동된 instance 의 dictionary를 조회하면, 많이 사용하는 KO16KSC5601, US7ASCII 등의 character set 을 조회할 수 있습니다. SQLDBA> select * from v$nls_valid_values; ... 313 rows selected. SQLDBA> select * from v$nls_valid_values where value='KO16KSC5601'; PARAMETER VALUE -------------------------------------------- --------------- CHARACTERSET KO16KSC5601 1 row selected. ; 즉, total 313 row 가 있고 그 중에 KO16KSC5601,US7ASCII 도 있음 CASE2 ===== 그러나, lx0boot.d, lx1boot.d 화일을 ACCESS 할 수 없을 때, 기동된 instance 의 dictionary 를 조회하면, default value 들만 조회됩니다. SQLDBA> select * from v$nls_valid_values; PARAMETER VALUE -------------------------------------------- --------------- LANGUAGE AMERICAN TERRITORY AMERICA CHARACTERSET US7ASCII SORT BINARY 4 rows selected. ;즉, lx0boot.d, lx1boot.d 를 access 할 수 없을 경우에는 위의 US7ASCII 만 지원합니다. |
Comment | |||
---|---|---|---|
등록된 코멘트가 없습니다. |