오라클 한글 2byte로 바꾸기
오라클 설치시 문자집합 설정에 따라 한글을 인식하는 Byte 길이가 달라진다.
아래 퀴리문으로 현재 오라클에 문자집합을 알아보자.
select * from nls_database_parameters where parameter like '%CHARACTERSET%';
한글을 2byte로 읽는다.
KO16KSC5601 한글 완성형 2350 한글 4888 한자 히라가나 카타카나 영문 기호
KO16MSWIN949 한글 KO16KSC5601 를 포함한 현대한글조합 가능 8822자 까지 표현
한글을 2byte 또는 3byte로 읽는다.
UTF8
AL32UTF8
한글 2byte로 인식하게 변경해보자.
update props$ set VALUE$='KO16MSWIN949' where name='NLS_CHARACTERSET';
commit;
shutdown immediate;
startup;
EXP-00008: ORACLE 오류 6552가 발생했습니다
ORA-06552: PL/SQL: Compilation unit analysis terminated
ORA-06553: PLS-553: 알 수 없는 문자 집합 이름입니다
character set 이 섞였기 때문이다.
/* Formatted on 2009/01/31 00:30 (Formatter Plus v4.8.8) */
SELECT DISTINCT (NLS_CHARSET_NAME (CHARSETID)) CHARACTERSET,
DECODE (type#,
1, DECODE (CHARSETFORM,
1, 'VARCHAR2',
2, 'NVARCHAR2',
'UNKOWN'
),
9, DECODE (CHARSETFORM,
1, 'VARCHAR',
2, 'NCHAR VARYING',
'UNKOWN'
),
96, DECODE (CHARSETFORM,
1, 'CHAR',
2, 'NCHAR',
'UNKOWN'
),
112, DECODE (CHARSETFORM,
1, 'CLOB',
2, 'NCLOB',
'UNKOWN'
)
) types_used_in
FROM SYS.col$
WHERE CHARSETFORM IN (1, 2) AND type# IN (1, 9, 96, 112);
결과에서
CHARACTERSET TYPES_USED_IN
-----------------------------------------------------
AL16UTF16 NCHAR
AL16UTF16 NVARCHAR2
AL16UTF16 NCLOB
AL32UTF8 CHAR
AL32UTF8 VARCHAR2
AL32UTF8 CLOB
위처럼이 아니라
CHARACTERSET TYPES_USED_IN
-----------------------------------------------------
AL16UTF16 NCHAR
AL16UTF16 NVARCHAR2
AL16UTF16 NCLOB
US7ASCII CHAR
US7ASCII VARCHAR2
WE8DEC VARCHAR2
US7ASCII CLOB
이런 식으로 하나의 varchar2 에 대해 2개의 characterset 이 나온다면 mix 된 것이다.
이 문제에 대한 처리는 아래처럼 하도록 한다.
첫번째로 INIT.ORA 안에 있는 parallel_server parameter 가 false 거나 아예 세팅되어있지 않은지 확인한다
SQL>show parameter parallel_server
SQLPLUS에서 SYSDBA로 실행한다.
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;
-- yes, 2 times startup/shutdown . This is not a typo
SHUTDOWN IMMEDIATE;
STARTUP;
parallel_server parameter 을 원상복구한다.
이제 한글을 2BYTE로 인식 한다.
'Oracle' 카테고리의 다른 글
오라클 http 포트번호 변경, 오라클 포트번호변경 (0) | 2014.02.12 |
---|
WRITTEN BY
- 먿쨍이
개발바보