2008년 1월 10일 목요일

oracle nls_lang

케릭터셋 오류발생

증상 :

터미널이나 기타 툴을 이용해서 로그인을 하면 로그인은 되지만 한글관련해서는 깨져서 나옴.

select * from v$nls_parameters;

기존 오라클 서버의 NLS_CHARACTERSET이 WE8MSWIN1252로 설정되어 있었다.

우선

select convert('a', 'WE8MSWIN1252', 'AL32UTF8') from dual; 

로 변경 가능한 character set인지 확인한다.

이상없으면 DBA 권한으로

update sys.props$ set value$ = 'AL32UTF8' where name = 'NLS_CHARACTERSET'

쿼리를 실행시킨다. 이때 잘못된 값을 넣게 되면 oracle 자체가 구동이 안될 수 도 있기 때문에 commit 전에 select로 꼭 확인을 해야한다.

update props$ set value$='AL32UTF8' where name='NLS_NCHAR_CHARACTERSET';

확인.

select * from sys.props$ where name='NLS_NCHAR_CHARACTERSET';

오라클 재 가동후에 이런 증상이 나왔다.

SQLPLUS 로 로그인하면 정상적으로 로그인되는데 sqldeveloper에서 로그인하려면

ORA-06552: PS/SQL: Compilation unit analysis terminated
ORA-06553: PLS-553: character set name is not recognized

위의 에러가발생하면서 로그인은 정상적으로 된다.


이때 작업 할 내용은 다음 쿼리를 실행 DBA 로 실행한다.

SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER SYSTEM ENABLE RESTRICTED SESSION;
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
ALTER SYSTEM SET AQ_TM_PROCESSES=0;
ALTER DATABASE OPEN;
COL VALUE NEW_VALUE CHARSET
SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET';
COL VALUE NEW_VALUE NCHARSET
SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_NCHAR_CHARACTERSET';
ALTER DATABASE CHARACTER SET INTERNAL_USE &CHARSET;
ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE &NCHARSET;
SHUTDOWN IMMEDIATE;
STARTUP;
SHUTDOWN IMMEDIATE;
STARTUP;

sqldevelopment 재 시작 한 후에는 오라클 에러나 한글이 깨지지 않고 정상적으로 사용 가능하다.

참조 url : http://database.sarange.net/

댓글 없음: