반응형

1. 해당 유저가 가진 테이블의 개수
SELECT count(*) FROM user_tables;

2. 해당 DB의 CHARACTERSET 확인
SELECT parameter, value FROM nls_database_parameters WHERE parameter='NLS_CHARACTERSET';
SELECT parameter, value FROM nls_database_parameters WHERE parameter like '%CHARACTER%';

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

3. CHARACTERSET 재설정하기
http://angdekim.egloos.com/3619358

[출처 : 서책임님 자료 및 웹검색 자료]

오라클 설치후 CHARACTER SET이 맞지 않는 경우 SELECT후 한글이 깨지거나

한글컬럼에 INSERT 할 경우 INSERT에 실패하는 경우가 종종 발생한다.

크게 봤을 때 두가지 케이스 인데

한가지는 서버의 CHARACTER SET 문제, 다른 한가지는 클라이언트 피씨의 레지스트리 문제이다.

MSTR데모를 만들다 위와 같은 문제가 발생하여 다음과 같이 처리 하였다.

오라클은 10g R2버젼을 사용하였다.

먼저 CHARACTER SET을 확인한다.

select * from v$nls_parameters;

DW권한으로 DB에 접속한다.

[oracle@XXX]$sqlplus/nolog

SQL>conn /as sysdba
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;
SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
SQL> ALTER DATABASE OPEN;

-->한글 CHARACTER SET은 KO16KSC5601을 사용한다.

SQL> ALTER DATABASE CHARACTER SET INTERNAL_USE KO16KSC5601 ;
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP;

-->CHARACTER SET을 확인한다.

SQL> SELECT * FROM sys.props$ where name='NLS_CHARACTERSET';

정상적으로 작업하였다면 변경되어 있을 것이다.
하지만 여기까지 작업을 한 이후 다시 한글 데이터를 조회하였으나
여전히 한글이 깨져있었다.
원인을 찾아보니 NLS_LANGUAGE와 NLS_TERRITORY가
각각 AMERICAN, AMERICA로 설정되어 있었기 때문이다.

따라서 다음과 같이 설정을 해주니 한글이 정상적으로 출력되었다.

DBA권한으로 다시 로그인한다.

conn /as sysdba

설정을 확인한다.

SELECT NAME, VALUE$ FROM PROPS$
WHERE NAME = 'NLS_LANGUAGE' OR
NAME = 'NLS_TERRITORY OR
NAME  = 'NLS_CHARACTERSET';

다음과 같이 UPDATE 하였다.

UPDATE props$ SET VALUES$='KOREAN' WHERE NAME ='NLS_LANGUAGE';
UPDATE props$ SET VALUES$='KOREA' WHERE NAME ='NLS_TERRITORY';

commit;

다시 확인해보면 변경되어 있을 것이다.

SELECT NAME, VALUE$ FROM PROPS$
WHERE NAME = 'NLS_LANGUAGE' OR
NAME = 'NLS_TERRITORY OR
NAME  = 'NLS_CHARACTERSET';

정상적으로 변경되었다면 오라클을 재시작한다.

shutdown immediate
startup

모든 작업이 완료되었다.

이제 한글 데이터가 들어있는 테이블을 조회해본다.

여기서 유의할점은 이미 한글이 insert되어 있다면 역시나 깨져서 보일 것이다.

따라서 기존 데이터를 삭제한후 다시 Insert를 해야하는 번거로움이 발생한다.

이부분은 어떤면에서는 상당히 이슈가 될 수 있으므로 정책을 세워줄 필요가 있을 듯 싶다.


반응형