ORACLE TOOLS(SQLPLUS,등)을 이용하여 한글DATA를 조회할 때 ???로 출력는데 해결 방법
======================================================================================
DATABASE는 SQL COMMAND ‘CREATE DATABASE’를 포함하는 STATEMENT를 수행할 때 만들어지는데 우리가 그STATEMENT를 수행하기 앞서 고려해야 사항중의 하나가 DB CHARACTERSET 이다.
DB를 CREATE할때 DATABSE CHARACTERSET을 명시해야만 하는데 한번 선택되고 난후에는 CHARACTERSET 을 변경하는 것은 쉽지가 않다.
DATA DICTIONARY에 있는 DATA를 포함해서 모든 DATA는 선택된 CHARACTERSET 에 의해 입출력 되기 때문에 USER가 다른 CHARATERSET으로 ACCESS한다면 한글 데이타가 ???로 출력된다.
또한 분산 DB 환경에서나 UPGRADE할 경우에는 DATABASE CHARACTERSET이 같아야 함으로 사용자들은 DATABASE의 CHARACTERSET을 알아아 두어야 한다.
< 현재 DATABASE 의 CHARACTERSET 확인 및 변경 >
1. 데이타베이스 CHARACTERSET 확인
$ sqldba lmode=y
SQL> connect internal
SQL> select * from v$nls_parameters;
PARAMETER VALUE
—————————— ————–
….
NLS_CHARACTERSET KO16KSC5601 (or US7ASCII)
(A)
2. 환경 변수의 NLS_LANG 확인
$ env
…
NLS_LANG=American_America.US7ASCII
(B)
위의 (A)와 (B) 가 동일 해야만 한글 데이타 처리가 잘되고 서로 다른 상태에서 한글 데이타를 조회 할경우 ??? 로 출력 된다.
3. CHARACTERSET 을 일치 시키는 방법
* NLS_LANG 환경 변수를 변경하여 일치시키는 방법
Bourne shell, k-shell 을 사용 하는경우 . profile 을 수정
NLS_LANG = American_Amerca.KO16KSC5601; export NLS_LANG
c-chell 을 사용하는 경우 .cshrc 혹은 .login 수정
setenv NLS_LANG American_America.KO16KSC5601
수정후 다시 $ env 를 실행하여 변경 되었는지 확인한다.
C:\WINDOWS\ORACLE.INI 수정
NLS_LANG=American_America.KO16KSC5601
WINDOW 재기동
* 그리고 예를 들어서 SERVER의 character set이 US7ASCII 이고 PC의 NLS_LANG이
American_America.KO16KSC5601 과 같이 서로 다르게 설정되어 있는 경우 다음을 하나 더
oracle.ini에 추가하면 한글문제가 해결됩니다.
ORA_NLS_CHARACTERSET_CONVERSION=NO_CHARACTER_SET_CONVERSION
WINDOWS 95에서는 NLS_LANG이 ORACLE.INI에 들어 있지 않고 REGISTRY에 기록되므로 REGISTRY
EDITOR를 이용하여 수정해야 한다.
MSDOS 창으로 나가서 REGEDIT.EXE 샐행
HKEY_LOCAL_MACHINE -> SOFTWARE -> ORACLE 선택
오른쪽 마우스 버튼을 이용하여 NLS_LANG을 수정
REGISTRY 변경 후에 PC를 REBOOTING 할 필요는 없습니다.
WINDOWS NT 에서도 WINDOWS 95의 경우와 마찬가지로 REGISTRY 에 기록된 정보를 변경해 주면
됩니다. 다음과 같이 합니다.
DOS 창에서 REGEDT32.EXE 실행
HKEY_LOCAL_MACHINE -> SOFTWARE -> ORACLE 선택
메뉴를 선택하여 NLS_LANG을 수정