Site icon DBA의 정석

한글이 ??? 로 DISPLAY 되는 경우

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을 수정

Exit mobile version