"Oracle 언어설정"의 두 판 사이의 차이
DB CAFE
(새 문서: Oracle DataBase 문자셋과 언어셋 확인 및 변경하기 A db에서 export 한 것을 B db로 import 하려니 한글이 들어있는 칼럼의 경우에 사이즈가 맞지 않...) |
(→문자셋 변경(SERVER)) |
||
(사용자 2명의 중간 판 43개는 보이지 않습니다) | |||
1번째 줄: | 1번째 줄: | ||
− | Oracle DataBase 문자셋과 언어셋 확인 및 | + | == Oracle DataBase 문자셋과 언어셋 확인 및 변경 == |
− | + | === 개요 === | |
− | + | ==== NLS_LANG ==== | |
+ | {{틀:타이틀 투명 | ||
+ | |보더색=#696969 | ||
+ | |배경색=#483d8b | ||
+ | |제목= - NLS_LANG = [언어]_[영역].[캐릭터셋] | ||
+ | <language>_<Territory>.<client characterset> | ||
+ | ex) AMERICAN_ARERICA.KO16KSC5601, AMERICAN_AMRRICA.UTF8 | ||
+ | }} | ||
+ | ==== NLS_LANG 설명 ==== | ||
− | + | ● <Territory> - (국가) 영역정보, 달력 설정 방법, 통화기호(달라), 숫자그룹 | |
+ | 날짜 포맷(한국 - "05/08/12 오후 07:28:03", 체코 - "10.08.05 19:28:03") | ||
+ | Language 값만 설정하면, Language 값을 따른다. ( AMERICAN ==> AMERICA ) | ||
− | + | ● <language> - 캐릭터셋, 정렬방식, 날짜 표기에 사용되는 기호(년/월/일, YYYY/MM/DD) | |
+ | Default 값은 AMERICAN 이다. | ||
+ | 실제 날짜 표기(TO_CHAR,TO_DATE 실행시 - 월요일, MON 으로 표시를 좌우하는 | ||
+ | NLS_DATE_FORMAT 값은 NLS_LANGUAGE 을 따른다. | ||
− | + | ● <client characterset> | |
+ | ◇ 기본적으로 Server characterset 과 동일하게 설정된다. | ||
+ | - 클라이언트에서 캐릭터셋만 설정하면, 디폴트로 AMERICAN_AMERICA 로 Territory_language 값이 설정된다. | ||
+ | |||
+ | ◇ Client Characterset 을 Server 와 다르게 설정 상태에서, | ||
+ | SQL> SELECT SYS_CONTEXT('USERENV','LANGUAGE') "NLS SET" from dual; | ||
+ | 을 실행 하여도, 항상 CharacterSet 은 항상 서버 CharacterSet 값을 가져온다. | ||
+ | |||
+ | ◇ client characterset을 서버와 다르게 하는 경우는 크게 | ||
+ | |||
+ | 1. 다른 캐릭터셋 DB로 데이타 이전시(EXPORT/IMPORT) | ||
+ | △ EXPORT/IMPORT 시에는 반드시 서버의 Character Set 동일하게 설정 후 Export/Import 한다. | ||
+ | △ 다른 캐릭터셋의 DB(데이타가 깨지지 않고, 지원되는 경우, SubSet Characterset 일경우)로 IMPORT 시에는 | ||
+ | Import 대상의 DB 캐릭터셋으로 환경 설정 후, Export/Import 한다. | ||
+ | |||
+ | 2. Server(UTF8) - Client(KO16KSC5601) | ||
+ | △ 다국어 지원되는 데이타베이스에다 한글 입출력 하기 위해서는 | ||
+ | 입력시 - 내가 입력 하는 데이타의 캐릭터셋이 한글임을 알리기 위해서, | ||
+ | 출력시 - Unicode 의 Data를 한글로 표현해 달라고 하기 위해서. | ||
− | + | === 문자셋 확인 === | |
− | SELECT name, value$ | + | <source lang=sql> |
− | FROM sys.props$ | + | -- NLS_LANG 조회 |
− | WHERE name | + | SELECT (SELECT value |
+ | FROM nls_database_parameters | ||
+ | WHERE parameter = 'NLS_LANGUAGE') | ||
+ | || '_' | ||
+ | || (SELECT value | ||
+ | FROM nls_database_parameters | ||
+ | WHERE parameter = 'NLS_TERRITORY') | ||
+ | || '.' | ||
+ | || (SELECT value | ||
+ | FROM nls_database_parameters | ||
+ | WHERE parameter = 'NLS_CHARACTERSET') NLS_LANG | ||
+ | FROM dual | ||
+ | </source> | ||
+ | |||
+ | <source lang=sql> | ||
+ | -- NLS_LANGUAGE/ NLS_CHARACTERSET / NLS_NCHAR_CHARACTERSET | ||
+ | SELECT name | ||
+ | , value$ | ||
+ | FROM sys.props$ | ||
+ | WHERE name in('NLS_LANGUAGE','NLS_TERRITORY','NLS_CHARACTERSET','NLS_NCHAR_CHARACTERSET'); | ||
− | + | </source> | |
− | |||
− | |||
− | + | === CHAR 와 NCHAR 캐릭터 셋 === | |
− | + | # NLS_CHARACTERSET : char, varchar 데이터 타입에서 사용하는 문자 집합 | |
− | + | # NLS_NCHAR_CHARACTERSET : nchar, nvarchar 데이터 타입에서 사용하는 문자 집합 | |
− | |||
− | + | === 문자셋 변경(SERVER) === | |
− | + | * Oracle DataBase 관리자로 접속 NLS_CHARACTERSET, NCHAR의 CHARACTERSET에 원하는 문자셋을 변경 | |
− | |||
− | |||
− | + | <source lang=sql> | |
UPDATE sys.props$ | UPDATE sys.props$ | ||
− | SET value$ = '[ 변경을 원하는 문자셋 (KO16KSC5601, AL32UTF8 등)]' | + | SET value$ = '[ 변경을 원하는 문자셋 (KO16KSC5601, AL32UTF8 등)]' |
− | WHERE name = 'NLS_CHARACTERSET'; | + | WHERE name = 'NLS_CHARACTERSET'; |
+ | </source> | ||
+ | <source lang=sql> | ||
UPDATE sys.props$ | UPDATE sys.props$ | ||
− | SET value$ = '[ 변경을 원하는 문자셋 (KO16KSC5601, AL32UTF8 등)]' | + | SET value$ = '[ 변경을 원하는 문자셋 (KO16KSC5601, AL32UTF8 등)]' |
− | WHERE name = 'NLS_NCHAR_CHARACTERSET'; | + | WHERE name = 'NLS_NCHAR_CHARACTERSET'; |
+ | </source> | ||
+ | |||
+ | === 언어셋 확인 === | ||
+ | <source lang=sql> | ||
+ | SELECT name, value$ | ||
+ | FROM sys.props$ | ||
+ | WHERE name = 'NLS_LANGUAGE'; -- AMERICAN , KOREAN | ||
+ | </source> | ||
− | + | === 언어셋 변경(SERVER) === | |
+ | * 오라클 데이터베이스 관리자로 접속하여 NLS_LANGUAGE에 원하는 언어셋을 변경 | ||
+ | <source lang=sql> | ||
UPDATE sys.props$ | UPDATE sys.props$ | ||
− | SET value$ = '[ 변경을 원하는 문자셋 (AMERICAN_AMERICA.KO16KSC5601, AMERICAN_AMERICA.AL32UTF8등)]' | + | SET value$ = '[ 변경을 원하는 문자셋 (AMERICAN_AMERICA.KO16KSC5601, AMERICAN_AMERICA.AL32UTF8등)]' |
− | WHERE name = 'NLS_LANGUAGE''; | + | WHERE name = 'NLS_LANGUAGE''; |
− | + | </source> | |
− | + | ||
+ | <source lang=shell> | ||
#################################################### | #################################################### | ||
#### .bash_profile 환경변수 | #### .bash_profile 환경변수 | ||
+ | |||
export ORACLE_BASE=/home/oracle | export ORACLE_BASE=/home/oracle | ||
export ORACLE_HOME=$ORACLE_BASE/oracle/product/10.2.0/db_1 | export ORACLE_HOME=$ORACLE_BASE/oracle/product/10.2.0/db_1 | ||
57번째 줄: | 116번째 줄: | ||
export NLS_LANG=KOREAN_KOREA.KO16MSWIN949 #한글(추천:지원캐릭터가 더 많음 -뷃,숖..) | export NLS_LANG=KOREAN_KOREA.KO16MSWIN949 #한글(추천:지원캐릭터가 더 많음 -뷃,숖..) | ||
export NLS_LANG=AMERICAN_AMERICA.UTF8 #유니코드 | export NLS_LANG=AMERICAN_AMERICA.UTF8 #유니코드 | ||
− | |||
− | |||
− | |||
#################################################### | #################################################### | ||
#### 캐릭터 셋 설정 확인 | #### 캐릭터 셋 설정 확인 | ||
76번째 줄: | 132번째 줄: | ||
update props$ set VALUE$='KOREA' where name='NLS_TERRITORY'; | update props$ set VALUE$='KOREA' where name='NLS_TERRITORY'; | ||
+ | </source> | ||
− | + | === 언어셋 RAC 환경 에서 변경하기 KSC5601 -> KO16MSWIN949 이나 UTF-8 === | |
− | + | ==== 언어 변경 절차 ==== | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | ============== | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
1. INIT.ORA 안에 있는 parallel_server parameter 가 false 거나 아예 세팅되어있지 않은지 확인. | 1. INIT.ORA 안에 있는 parallel_server parameter 가 false 거나 아예 세팅되어있지 않은지 확인. | ||
+ | <source lang=sql> | ||
SQL>show parameter parallel_server | SQL>show parameter parallel_server | ||
+ | -- RAC 인 경우 클러스터 사용 중지 | ||
+ | SQL>alter system set cluster_database=false scope=spfile; | ||
+ | </source> | ||
2. sqlplus "/as sysdba"로 다음 쿼리 실행(기존 데이터 백업 필수) | 2. sqlplus "/as sysdba"로 다음 쿼리 실행(기존 데이터 백업 필수) | ||
+ | <source lang=sql> | ||
SHUTDOWN IMMEDIATE; | SHUTDOWN IMMEDIATE; | ||
STARTUP MOUNT; | STARTUP MOUNT; | ||
146번째 줄: | 156번째 줄: | ||
COL VALUE NEW_VALUE NCHARSET | COL VALUE NEW_VALUE NCHARSET | ||
SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_NCHAR_CHARACTERSET'; | SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_NCHAR_CHARACTERSET'; | ||
− | + | </source> | |
-- UTF8로 바꿀 경우(선택) | -- UTF8로 바꿀 경우(선택) | ||
+ | <source lang=sql> | ||
ALTER DATABASE CHARACTER SET INTERNAL_USE UTF8; | ALTER DATABASE CHARACTER SET INTERNAL_USE UTF8; | ||
ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE AL16UTF16; | ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE AL16UTF16; | ||
− | + | </source> | |
− | -- | + | -- 한글 KO16MSWIN949 로 바꿀 경우(선택) |
+ | <source lang=sql> | ||
ALTER DATABASE CHARACTER SET INTERNAL_USE KO16MSWIN949 | ALTER DATABASE CHARACTER SET INTERNAL_USE KO16MSWIN949 | ||
ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE AL16UTF16; | ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE AL16UTF16; | ||
− | + | </source> | |
-- oracle reboot 2번. | -- oracle reboot 2번. | ||
+ | <source lang=sql> | ||
SHUTDOWN IMMEDIATE; | SHUTDOWN IMMEDIATE; | ||
STARTUP; | STARTUP; | ||
SHUTDOWN IMMEDIATE; | SHUTDOWN IMMEDIATE; | ||
STARTUP; | STARTUP; | ||
+ | </source> | ||
3. parallel_server parameter 수정한 경우 원복. | 3. parallel_server parameter 수정한 경우 원복. | ||
+ | <source lang=sql> | ||
+ | -- RAC 클러스터 사용 중지 | ||
+ | SQL>alter system set cluster_database=true scope=spfile; | ||
+ | -- 확인 | ||
+ | SQL>show parameter parallel_server | ||
+ | </source> | ||
+ | |||
+ | ==== 서버 기동 후 캐릭셋 확인 ==== | ||
+ | <source lang=sql> | ||
+ | -- 캐릭터셋 확인 | ||
+ | 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 NCLOB | ||
+ | KO16KSC5601 CLOB | ||
+ | AL16UTF16 NCHAR | ||
+ | AL16UTF16 NVARCHAR2 | ||
+ | KO16KSC5601 CHAR | ||
+ | KO16KSC5601 VARCHAR2 | ||
+ | |||
+ | |||
+ | -- 1호기,2호기 확인 | ||
+ | CHARACTERSET TYPES_USED_IN | ||
+ | ---------------------------------------- ------------- | ||
+ | AL16UTF16 NCLOB | ||
+ | KO16MSWIN949 CHAR | ||
+ | KO16MSWIN949 VARCHAR2 | ||
+ | KO16MSWIN949 CLOB | ||
+ | AL16UTF16 NCHAR | ||
+ | AL16UTF16 NVARCHAR2 | ||
+ | </source> | ||
+ | |||
+ | === DB 이관시 한글이 서로 맞지 않을때 === | ||
+ | |||
+ | 예시) 소스DB : US7ASCII >>>> 타겟DB : KO16MSWIN949 | ||
+ | |||
+ | {{틀:타이틀 투명 | ||
+ | |보더색=#696969 | ||
+ | |배경색=#483d8b | ||
+ | |제목= 예시) 소스DB : US7ASCII >>>> 타겟DB : KO16MSWIN949 | ||
+ | # 소스DB의 한글 컬럼 UTL_RAW.CAST_TO_RAW 함수로 감싸고 (주로 뷰를 생성) | ||
+ | # 타겟DB에서 RAW.CAST_TO_VARCHAR2 함수로 풀어서 사용. | ||
+ | }} | ||
+ | * UTL_RAW.CAST_TO_RAW /* 한글을 16진수 핵사 코드로 변환 */ | ||
+ | * RAW.CAST_TO_VARCHAR2 /* 16진수 핵사 한글로 변환 */ | ||
+ | |||
+ | <source lang=sql> | ||
+ | select '홍길동', UTL_RAW.CAST_TO_RAW('홍길동') from TB_XXX; | ||
+ | select UTL_RAW.CAST_TO_VARCHAR2('C8ABB1E6B5BF') from TB_YYY; | ||
+ | </source> | ||
+ | |||
+ | === 참조 URL === | ||
+ | # US7ASCII 캐릭터셋 변경 https://javafactory.tistory.com/242 | ||
+ | |||
+ | |||
+ | [[Category:oracle]] |
2024년 4월 22일 (월) 14:17 기준 최신판
thumb_up 추천메뉴 바로가기
- DBA { Oracle DBA 명령어 > DBA 초급 과정 > DBA 고급 과정 }
- 튜닝 { 오라클 튜닝 목록 }
- 모델링 { 데이터 모델링 가이드 }
목차
1 Oracle DataBase 문자셋과 언어셋 확인 및 변경[편집]
1.1 개요[편집]
1.1.1 NLS_LANG[편집]
attach_file - NLS_LANG = [언어]_[영역].[캐릭터셋]
<language>_<Territory>.<client characterset> ex) AMERICAN_ARERICA.KO16KSC5601, AMERICAN_AMRRICA.UTF8
1.1.2 NLS_LANG 설명[편집]
● <Territory> - (국가) 영역정보, 달력 설정 방법, 통화기호(달라), 숫자그룹 날짜 포맷(한국 - "05/08/12 오후 07:28:03", 체코 - "10.08.05 19:28:03") Language 값만 설정하면, Language 값을 따른다. ( AMERICAN ==> AMERICA )
● <language> - 캐릭터셋, 정렬방식, 날짜 표기에 사용되는 기호(년/월/일, YYYY/MM/DD) Default 값은 AMERICAN 이다. 실제 날짜 표기(TO_CHAR,TO_DATE 실행시 - 월요일, MON 으로 표시를 좌우하는 NLS_DATE_FORMAT 값은 NLS_LANGUAGE 을 따른다.
● <client characterset> ◇ 기본적으로 Server characterset 과 동일하게 설정된다. - 클라이언트에서 캐릭터셋만 설정하면, 디폴트로 AMERICAN_AMERICA 로 Territory_language 값이 설정된다.
◇ Client Characterset 을 Server 와 다르게 설정 상태에서, SQL> SELECT SYS_CONTEXT('USERENV','LANGUAGE') "NLS SET" from dual; 을 실행 하여도, 항상 CharacterSet 은 항상 서버 CharacterSet 값을 가져온다.
◇ client characterset을 서버와 다르게 하는 경우는 크게
1. 다른 캐릭터셋 DB로 데이타 이전시(EXPORT/IMPORT) △ EXPORT/IMPORT 시에는 반드시 서버의 Character Set 동일하게 설정 후 Export/Import 한다. △ 다른 캐릭터셋의 DB(데이타가 깨지지 않고, 지원되는 경우, SubSet Characterset 일경우)로 IMPORT 시에는 Import 대상의 DB 캐릭터셋으로 환경 설정 후, Export/Import 한다.
2. Server(UTF8) - Client(KO16KSC5601) △ 다국어 지원되는 데이타베이스에다 한글 입출력 하기 위해서는 입력시 - 내가 입력 하는 데이타의 캐릭터셋이 한글임을 알리기 위해서, 출력시 - Unicode 의 Data를 한글로 표현해 달라고 하기 위해서.
1.2 문자셋 확인[편집]
-- NLS_LANG 조회
SELECT (SELECT value
FROM nls_database_parameters
WHERE parameter = 'NLS_LANGUAGE')
|| '_'
|| (SELECT value
FROM nls_database_parameters
WHERE parameter = 'NLS_TERRITORY')
|| '.'
|| (SELECT value
FROM nls_database_parameters
WHERE parameter = 'NLS_CHARACTERSET') NLS_LANG
FROM dual
-- NLS_LANGUAGE/ NLS_CHARACTERSET / NLS_NCHAR_CHARACTERSET
SELECT name
, value$
FROM sys.props$
WHERE name in('NLS_LANGUAGE','NLS_TERRITORY','NLS_CHARACTERSET','NLS_NCHAR_CHARACTERSET');
1.3 CHAR 와 NCHAR 캐릭터 셋[편집]
- NLS_CHARACTERSET : char, varchar 데이터 타입에서 사용하는 문자 집합
- NLS_NCHAR_CHARACTERSET : nchar, nvarchar 데이터 타입에서 사용하는 문자 집합
1.4 문자셋 변경(SERVER)[편집]
- Oracle DataBase 관리자로 접속 NLS_CHARACTERSET, NCHAR의 CHARACTERSET에 원하는 문자셋을 변경
UPDATE sys.props$
SET value$ = '[ 변경을 원하는 문자셋 (KO16KSC5601, AL32UTF8 등)]'
WHERE name = 'NLS_CHARACTERSET';
UPDATE sys.props$
SET value$ = '[ 변경을 원하는 문자셋 (KO16KSC5601, AL32UTF8 등)]'
WHERE name = 'NLS_NCHAR_CHARACTERSET';
1.5 언어셋 확인[편집]
SELECT name, value$
FROM sys.props$
WHERE name = 'NLS_LANGUAGE'; -- AMERICAN , KOREAN
1.6 언어셋 변경(SERVER)[편집]
- 오라클 데이터베이스 관리자로 접속하여 NLS_LANGUAGE에 원하는 언어셋을 변경
UPDATE sys.props$
SET value$ = '[ 변경을 원하는 문자셋 (AMERICAN_AMERICA.KO16KSC5601, AMERICAN_AMERICA.AL32UTF8등)]'
WHERE name = 'NLS_LANGUAGE'';
####################################################
#### .bash_profile 환경변수
export ORACLE_BASE=/home/oracle
export ORACLE_HOME=$ORACLE_BASE/oracle/product/10.2.0/db_1
export ORACLE_SID=ora10
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
#export LD_ASSUME_KERNEL=2.4.19
export PATH=$PATH:$ORACLE_HOME/bin
export NLS_LANG=KOREAN_KOREA.KO16KSC5601 #한글
export NLS_LANG=KOREAN_KOREA.KO16MSWIN949 #한글(추천:지원캐릭터가 더 많음 -뷃,숖..)
export NLS_LANG=AMERICAN_AMERICA.UTF8 #유니코드
####################################################
#### 캐릭터 셋 설정 확인
SELECT NAME,VALUE$ FROM PROPS$ WHERE NAME ='NLS_LANGUAGE' OR NAME ='NLS_TERRITORY' OR NAME ='NLS_CHARACTERSET';
####################################################
#### 오라클 캐릭터 셋 변경
update props$ set VALUE$='UTF-8' where name='NLS_CHARACTERSET';
update props$ set VALUE$='KO16MSWIN949' where name='NLS_CHARACTERSET';
update props$ set VALUE$='KO16KSC5601' where name='NLS_CHARACTERSET';
update props$ set VALUE$='KOREAN' where name='NLS_LANGUAGE';
update props$ set VALUE$='KOREA' where name='NLS_TERRITORY';
1.7 언어셋 RAC 환경 에서 변경하기 KSC5601 -> KO16MSWIN949 이나 UTF-8[편집]
1.7.1 언어 변경 절차[편집]
1. INIT.ORA 안에 있는 parallel_server parameter 가 false 거나 아예 세팅되어있지 않은지 확인.
SQL>show parameter parallel_server
-- RAC 인 경우 클러스터 사용 중지
SQL>alter system set cluster_database=false scope=spfile;
2. sqlplus "/as 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';
-- UTF8로 바꿀 경우(선택)
ALTER DATABASE CHARACTER SET INTERNAL_USE UTF8;
ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE AL16UTF16;
-- 한글 KO16MSWIN949 로 바꿀 경우(선택)
ALTER DATABASE CHARACTER SET INTERNAL_USE KO16MSWIN949
ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE AL16UTF16;
-- oracle reboot 2번.
SHUTDOWN IMMEDIATE;
STARTUP;
SHUTDOWN IMMEDIATE;
STARTUP;
3. parallel_server parameter 수정한 경우 원복.
-- RAC 클러스터 사용 중지
SQL>alter system set cluster_database=true scope=spfile;
-- 확인
SQL>show parameter parallel_server
1.7.2 서버 기동 후 캐릭셋 확인[편집]
-- 캐릭터셋 확인
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 NCLOB
KO16KSC5601 CLOB
AL16UTF16 NCHAR
AL16UTF16 NVARCHAR2
KO16KSC5601 CHAR
KO16KSC5601 VARCHAR2
-- 1호기,2호기 확인
CHARACTERSET TYPES_USED_IN
---------------------------------------- -------------
AL16UTF16 NCLOB
KO16MSWIN949 CHAR
KO16MSWIN949 VARCHAR2
KO16MSWIN949 CLOB
AL16UTF16 NCHAR
AL16UTF16 NVARCHAR2
1.8 DB 이관시 한글이 서로 맞지 않을때[편집]
예시) 소스DB : US7ASCII >>>> 타겟DB : KO16MSWIN949
attach_file 예시) 소스DB : US7ASCII >>>> 타겟DB : KO16MSWIN949
- 소스DB의 한글 컬럼 UTL_RAW.CAST_TO_RAW 함수로 감싸고 (주로 뷰를 생성)
- 타겟DB에서 RAW.CAST_TO_VARCHAR2 함수로 풀어서 사용.
- UTL_RAW.CAST_TO_RAW /* 한글을 16진수 핵사 코드로 변환 */
- RAW.CAST_TO_VARCHAR2 /* 16진수 핵사 한글로 변환 */
select '홍길동', UTL_RAW.CAST_TO_RAW('홍길동') from TB_XXX;
select UTL_RAW.CAST_TO_VARCHAR2('C8ABB1E6B5BF') from TB_YYY;
1.9 참조 URL[편집]
- US7ASCII 캐릭터셋 변경 https://javafactory.tistory.com/242