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

By haisins

오라클 DBA 박용석 입니다. haisins@gmail.com 으로 문의 주세요.

5 thoughts on “한글이 ??? 로 DISPLAY 되는 경우”
  1. Appreciating the persistence you put into your blog and detailed information you
    present. It’s awesome to come across a blog every once in a while that isn’t the same unwanted rehashed material.
    Great read! I’ve bookmarked your site and I’m including your
    RSS feeds to my Google account.

  2. Bom dia tudo legal? adorei do seu post, bem interessante se pensamos da maneira como você expressou. É verdade que vinga uma hora em que devemos cortar as asas e desassistir. É árduo mas será bom para a criatura que vai entender com seus desacertos e acertos. Um opulento abraço companheiro.

  3. Boa noite tudo joia? adorei do seu artigo, bem legal se pensamos da maneira como você relatou. É verdade que vinga uma hora em que devemos cortar as asas e desamparar. É trabalhoso mas será aprazível para a criatura que vai saber com seus desacertos e acertos. Um opulento abraço amigo.

  4. OI tudo legal? adorei do seu artigo, bem interessante se pensamos da maneira como você expressou. É verdade que vinga uma hora em que temos que cortar as asas e deixar. É duro mas será afável para a criatura que vai entender com seus desacertos e acertos. Um grande abraço camarada.

  5. OI tudo legal? adorei do seu artigo, bem interessante se pensamos da maneira como você expressou. É verdade que vinga uma hora em que devemos cortar as asas e deixar. É custoso mas será bom para a criatura que vai entender com seus desacertos e acertos. Um largo abraço companheiro.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다