TECH
QUESTION
자주하는 질문답변 입니다.
Oracle
작성자 | 유건데이타 | 등록일 | 2015-05-07 |
제목 | NLS CHARACTER SET 변경 방법 (ORACLE 7) | ||
---|---|---|---|
NLS CHARACTER SET 변경 방법 (ORACLE 7)
====================================== PURPOSE -------- 이 자료는 Oracle RDBMS SERVER에서 NLS CHARACTER SET 변경 방법에 대한 내용을 소개한다. [ ORACLE 7 에서만 가능 ] 데이타베이스의 CHARACTER SET은 데이타 딕셔너리 테이블인 sys.props$에 들어 있다. SQL>desc sys.props$ Name Null? Type ------------------------- ----------------- --------------- NAME NOT NULL VARCHAR2(30) VALUE$ VARCHAR2(2000) COMMENT$ VARCHAR2(2000) SQL>column c1 format a30 SQL>select name c1, value$ c1 from sys.props$; C1 C1 ----------------------------- ------------------------ DICT.BASE 2 NLS_LANGUAGE AMERICAN NLS_TERRITORY AMERICA NLS_CURRENCY $ NLS_ISO_CURRENCY AMERICA NLS_NUMERIC_CHARACTERS ., NLS_DATE_FORMAT DD-MON-YY NLS_DATE_LANGUAGE AMERICAN NLS_CHARACTERSET US7ASCII NLS_SORT BINARY GLOBAL_DB_NAME 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 전체를 백업 받아두도록 한다. CHARACTER SET 을 잘못 변경하면 DB 를 OPEN 할 수가 없기 때문이다. -------------------------------------------------------------- 1. 다음의 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부터 다시 하도록 한다. 2. 환경 변수 NLS_LANG 을 변경한다. .profile 에서 NLS_LANG=American_America.KO16KSC5601; export NLS_LANG 또는 .cshrc 에서. setenv NLS_LANG American_America.KO16KSC5601 *** win95 및 winnt의 client에서는 registry editor에서 NLS_LANG 값을 맞추어준다. 주의 !!! : 위의 작업을 하기 전에 발생할 가능성이 있는 문제점 1) update 중 KO16KSC5601 이나 US7ASCII 등에서 철자를 잘못 입력하시면, db 재기동 후에, 다음과 같은 에러가 발생합니다. ora-12708 12708, 00000, "error while loading create database NLS parameter %s" 2) KO16KSC5601과 US7ASCII의 비교 Character set : KO16KSC5601 인 경우 =================================== : double byte encoding schema 이므로, 한글의 경우 2 bytes 를 크기 1로 계산하는 함수들이 있습니다. 그리고, table , column name에 한글을 double quote 없이 사용할 수 있습니다. 예) SQL> create table 시험1 2 (컬럼1 varchar(10)); 가 a 홍길동 SQL> select length(컬럼1) from 시험1; 1 1 3 SQL> select lengthb(컬럼1) from 시험1; 2 1 6 Character set : US7ASCII 인 경우 ================================= : single byte 7 bit encoding 을 사용합니다. 한글로 된 table, column 이름 사용 시 double quote를 반드시 사용해야 한다. 예) SQL> create table "사원" 2 ("사원이름" varchar2(10)); 가 a 홍길동 SQL> select length("사원이름") from "사원"; 2 1 6 SQL> select lengthb("사원이름") from "사원"; 2 1 6 US7ASCII일 때에는 vsize, lengthb function의 결과가 length 함수와 모두 동일합니다. cf) substr, substrb 함수도 위의 length, lengthb의 관계와 같음. 출처 : Technical Bulletin (Korean) |
Comment | |||
---|---|---|---|
등록된 코멘트가 없습니다. |