2013년 8월 21일 수요일

[oracle] sqlplus 한글 깨짐 현상 문제

[oracle] sqlplus 한글 깨짐 현상 문제1

업무이야기|2010.04.06 10:15

방법1  >>> 윈도우7 사용자 추천
오라클 클라이언트를 설치 하고 나서 오렌지를 실행하니 테이블 컬럼상 한글이 깨진걸 확인.
검색 결과 다음과 같이 해결 하였다.

- 한글깨짐
select문으로 확인해보면
한글이 ??? 같은 물음표로 나온다면 다음과 같이 설정
윈도우 계열은
시스템 등록정보 -> 고급 -> 환경변수(N)에 다음 추가

NLS_LANG
AMERICAN_AMERICA.KO16KSC5601
or
NLS_LANG
KOREAN_KOREA.KO16KSC5601


유닉스 계열은
export NLS_LANG=AMERICAN_AMERICA.KO16KSC5601
(계속 등록해보려면 .profile 수정)

- TNSNAMES.ORA 설정파일 예제
tnsnames.ora파일은 다음과 같은 형식
TNS이름 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 아이피)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = 에스아이디 혹은 네임)
    )
  )

- 필수 환경변수 관련 내용들
TNS_ADMIN=tnsnames.ora가있는폴더
예: TNS_ADMIN=C:\instantclient_11
ORACLE_HOME=오라클이깔린폴더
예: ORACLE_HOME=C:\instantclient_11
대충 이정도면 오라클클라이언트로 select문으로 확인가능한 정도 사용가능
sqlplus같은경우는 path에 해당폴더를 추가해 두면 편함
sqlplus를 통한 접속방법은 $sqlplus id/pass@TNS


방법2

SQL> select * from nls_database_parameters;
PARAMETER                            VALUE
------------------------------ ----------------------------
NLS_LANGUAGE                       AMERICAN
NLS_TERRITORY                       AMERICA
NLS_CURRENCY                       $
NLS_ISO_CURRENCY                AMERICA
NLS_NUMERIC_CHARACTERS    .,
NLS_CHARACTERSET               KO16KSC5601

NLS_CALENDAR                       GREGORIAN
NLS_DATE_FORMAT                 DD-MON-RR
NLS_DATE_LANGUAGE             AMERICAN
NLS_SORT                               BINARY
NLS_TIME_FORMAT                  HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT        DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT             HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT   DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY              $
NLS_COMP                              BINARY
NLS_LENGTH_SEMANTICS        BYTE
NLS_NCHAR_CONV_EXCP         FALSE
NLS_NCHAR_CHARACTERSET   AL16UTF16
NLS_RDBMS_VERSION              11.1.0.6.0

이제 클라이언트를 종료하고 레지스트리 편집기(윈도우-실행에 regedit 입력)를 연다.
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE 에 있는 NLS_LANG 의 편집창을 연다.

없다면 새로 생성 해서 수정 하여 아래의 값을 입력한다

위와 같은 예일 경우 AMERICAN_AMERICA.KO16KSC5601 을 입력한다.
이제 오라클에 접속하여 확인 하면 끝.. 참 쉽죠잉~


---------------------------------------------------------------------------

오라클 한글깨짐 문제 처리법입니다.
원인은 오라클의 서버와 클라이언트간의 NLS_LANG설정문제 때문입니다.
이것을 일치시켜 주어야 하는데.
Step by Step.
시작 -> 실행
regedit으로 레지스트리 편집기를 열고, " HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\ "의 하위 폴더에보면 자신의 오라클베이스폴더가 있습니다. 그것을 클릭해보면 NLS_LANG키가 있는데. 키값을 KOREAN_KOREA.KO16MSWIN949 KOREAN_KOREA.KO16KSC5601 로 바꿔줍니다.
레지스트리편집기를 끈후 다시 시작 -> 실행
cmd로 커맨드입력창을 하나 띄웁니다.
sqlplus /nolog
conn /as sysdba;
update props$ set VALUE$='KO16MSWIN949' where name='NLS_CHARACTERSET';
commit;
shutdown immediate;(데이터베이스를 언마운트 하는작업이라 시간이 걸립니다.)
startup;
하시고 해당 테이블을 조회해 보시면 됩니다.
참고로 조회했는데 한글이 역시나 깨져보인다면 리부팅은 센스!!! 100% 해결될 것입니다.
------------------------------------------------------------------------------------------------------
 방법3
NLS_LANGUAGE :데이터 베이스에서 메세지를 보여줄때의 메세지 언어 설정이다 AMERICAN 되여있다 
NLS_TERRITORY :금액을 표시 할때 날짜를 표현할때 표현 방법이다 
AMERIC 방식은 금액은 "$" 날짜는 DD-MON-YY 형식이고 
한글 방식은 :금액은"//" (원) 표시 날짜는 YYYY-MM-DD 형식으로 보여준다 
NLS_CHARACTERSET :데이블명 컬럼명을 한글로 사용할수있다 컬럼의 데이터는 정의 된 값과 상관없이 한글입력이 가능하다

댓글 4개: