No. 11546
여기에서 기술되는 사항은 공식적으로 지원되는 사항은 아니며, sql reference manual에서도 언급되지 않은 사항입니다.
작업을 진행하기 전에 반드시 cold backup을 확보하시기 바랍니다. 현재 TEST DB인 o200 (IRIX64 6.4, oracle 8.0.4.1)과 krrcsun (SunOS 5.4, oracle 8.0.4.0), NT oracle 8.0.5에서 TEST 한 결과 정확한 동작을 하고 있구요, 여타 다른 OS에서도 크게 이상이 없이 작업이 가능하리라 생각됩니다.
Oracle8에서의 character set 변경
oracle7에서는 SYS.PROPS$ table을 update하여 character set을 변경할 수 있었으나, oracle8에서는 character set에 대한 정보가 여러 곳에 저장되어 있어, 단순히 SYS.PROPS$ table을 update하는 것만으로 character set을 변경할 수는 없으며, 다음의 방법으로 character set 변경을 지원합니다. 여기에서 사용되는 command는 8.0.X version에서는 manual 상에 소개되지 않으며, 8.1.X version에서는 manual 상에 언급할 것이라고 합니다.
ALTER DATABASE [<db_name>] CHARACTER SET <new_character_set> ALTER DATABASE [<db_name>] NATIONAL CHARACTER SET <new_NCHAR_character_set>
db_name은 optional이며 character set name은 single quotes 없이 그대로 사용됩니다. 예) ALTER DATABASE CHARACTER SET KO16KSC5601;
Database의 character set을 변경하기 위해서는 아래의 절차대로 작업을 수행하시기 바랍니다.
SVRMGR> SHUTDOWN IMMEDIATE; -- or NORMAL
< do a full backup >
SVRMGR> STARTUP MOUNT; SVRMGR> ALTER SYSTEM ENABLE RESTRICTED SESSION; SVRMGR> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0; SVRMGR> ALTER SYSTEM SET AQ_TM_PROCESSES=0; SVRMGR> ALTER DATABASE OPEN; SVRMGR> ALTER DATABASE CHARACTER SET <new_character_set>; SVRMGR> ALTER DATABASE NATIONAL CHARACTER SET <new_character_set>; SVRMGR> SHUTDOWN IMMEDIATE; -- or NORMAL SVRMGR> STARTUP;
National character set을 변경하기 위해서는 "alter database national character set ..." command를 사용하실 수 있으며, db character set과 동시에 변경이 가능합니다.
<발생 가능 문제>
작업을 수행하는 도중 다음과 같은 error를 만날 수 있으며, 이 때는 아래의
사항을 check하여 보시기 바랍니다.
ORA-01679: database must be mounted EXCLUSIVE and not open to activate
- enable restricted session 이 수행되었나 ? - queue process의 값을 0로 setting 하였나 ? - 작업자 이외의 다른 login user가 존재하는가 ?
Error message가 잘못 기술된 사항으로 보이며, 작업자 이외의 다른 session이 존재하지 않아야 하며, command를 수행하는 단 한사람만이 db에 connect하여야 합니다.
***< 중요 >*** 상기 작업은 이전의 character set이 US7ASCII 이거나, 변경하려는 character set과 동일한 경우(old character set itself)를 제외하고는 수행되지 않으며, 그렇지 않은 경우에는 ORA-24329 error를 받게 됩니다.
ORA-24329: invalid character set identifier
***< TEST 필요 >***
oracle 8.1에서는 manual 상에는 소개하지 않았지만 INTERNAL_USE option을 character set 변경 command에 추가하여 사용할 수 있다고 하며, 이 option을 사용하는 경우, character set verification을 off함으로써 어떤 database character set이라도 변경이 가능하다고 합니다.
ALTER DATABASE [NATIONAL] CHARACTER SET INTERNAL_USE <new_character_set>;
INTERNAL_USE option에 대해서는 이후에 좀 더 test를 진행하여 본 후 user에게 open하여야 할 사항으로 보이며, 8.0 version에서 INTERNAL_USE option의 사용이 반드시 필요한 고객이 있는 경우에는 backport를 요청하는 것도 허용된다고 합니다. <bug:508017>
참조 : <Note:66320.1>
|