오라클

DATABASE CHARACTER SET을 변경하는 방법

OEasy 2006. 10. 30. 20:00
BULLETIN CATEGORY
BULLETIN TOPIC
: RDBMS         
: DATABASE CHARACTER SET을 변경하는 방법

* 데이타베이스의  CHARACTER SET은 데이타 딕셔너리 테이블인 sys.props$에 들어 있다.   

   SQL>desc sys.props$ 
    

Name 
--------------------
NAME 
VALUE$ 
COMMENT$
Null? 
--------------------
NOT NULL 
  
 
Type 
---------------------
VARCHAR2(30) 
VARCHAR2(2000) 
VARCHAR2(2000)
   SQL>column c1 format a30 
   SQL>select name c1, value$ c1 from sys.props$; 
  
C1 
----------------------------- 
DICT.BASE 
NLS_LANGUAGE 
NLS_TERRITORY 
NLS_CURRENCY 
NLS_ISO_CURRENCY 
NLS_NUMERIC_CHARACTERS 
NLS_DATE_FORMAT 
NLS_DATE_LANGUAGE 
NLS_CHARACTERSET 
NLS_SORT 
GLOBAL_DB_NAME
C1 
------------------------------ 
2 
AMERICAN 
AMERICA 
$ 
AMERICA 
., 
DD-MON-YY 
AMERICAN 
US7ASCII 
BINARY 
NLSV7.WORLD
  
 여기서 NLS_CHARACTERSET에 현재 DB의 CHARACTER SET이 들어 있는데 이 값을 변경하여 DB의 CHARACTER SET을 변경할 수 있다. 여기서는 US7ASCII에서  KO16KSC5601 로 옮기는 경우를 알아보자. 
     
* 우선 바꾸고자 하는 CHRACTER SET이 지원되는 지를 다음 명령으로 확인한다. 

             select convert('a','KO16KSC5601','US7ASCII') from dual; 

   만약 이 Select 문에서 ORA-01482 에러가 발생하면 지정한 CHARACTER SET이 지원되지 않는  경우이며  에러가 발생하지 않으면 CHARACTER SET을 변경할 수 있다. 작업을 하기 전에는 만약을 위해서 DB 전체를 백업 받아두도록 한다. 

*  다음의 Update문을 실행하여 CHARACTER SET을 변경한다. 

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

  Update 시에 NLS_CHARACTERSET을 지원되지 않는 값으로 잘못 설정하거나 실수로 콘트롤 문자 같은 것이 들어가게 되면 DB가 Shutdown 된 다음에는 Startup 이 안 되므로 Update 후에 다음 명령으로 확인을 한 다음에  Commit을 하도록 한다. 

        select name, value$ 
        from sys.props$ 
        where value$ = 'KO16KSC5601'; 

   Select가 제대로 출력되면 Commit 하고 Shutdown 했다가 Startup 하게 되면  새로운 CHARACTER SET 값을 갖게 된다. SELECT가 안 되면 ROLLBACK하고 UPDATE부터 다시 하도록 한다.


Oracle Korea Customer Support Technical Bulletins