"Oracle 언어설정"의 두 판 사이의 차이
DB CAFE
(새 문서: Oracle DataBase 문자셋과 언어셋 확인 및 변경하기 A db에서 export 한 것을 B db로 import 하려니 한글이 들어있는 칼럼의 경우에 사이즈가 맞지 않...) |
|||
7번째 줄: | 7번째 줄: | ||
잘 정리된 글을 보고 따라했기에 그 글을 올린다. | 잘 정리된 글을 보고 따라했기에 그 글을 올린다. | ||
− | Oracle DataBase 문자셋과 언어셋 확인 및 | + | == Oracle DataBase 문자셋과 언어셋 확인 및 변경 == |
− | |||
− | + | === 문자셋 확인 === | |
+ | <source lang=sql> | ||
SELECT name, value$ | SELECT name, value$ | ||
− | FROM sys.props$ | + | FROM sys.props$ |
− | WHERE name | + | WHERE name in('NLS_CHARACTERSET','NLS_NCHAR_CHARACTERSET'); |
+ | </source> | ||
− | + | === 문자셋 변경 === | |
− | |||
− | |||
− | + | * Oracle DataBase 관리자로 접속 NLS_CHARACTERSET, NCHAR의 CHARACTERSET에 원하는 문자셋을 변경 | |
− | |||
− | |||
− | |||
− | + | <source lang=sql> | |
+ | UPDATE sys.props$ | ||
+ | SET value$ = '[ 변경을 원하는 문자셋 (KO16KSC5601, AL32UTF8 등)]' | ||
+ | WHERE name = 'NLS_CHARACTERSET'; | ||
+ | </source> | ||
− | + | <source lang=sql> | |
− | + | UPDATE sys.props$ | |
− | + | SET value$ = '[ 변경을 원하는 문자셋 (KO16KSC5601, AL32UTF8 등)]' | |
+ | WHERE name = 'NLS_NCHAR_CHARACTERSET'; | ||
+ | </source> | ||
− | + | === 언어셋 확인 === | |
− | + | <source lang=sql> | |
− | + | SELECT name, value$ | |
− | WHERE name = ' | + | FROM sys.props$ |
+ | WHERE name = 'NLS_LANGUAGE'; -- AMERICAN , KOREAN | ||
+ | </source> | ||
+ | === 언어셋 변경 === | ||
+ | * 오라클 데이터베이스 관리자로 접속하여 NLS_LANGUAGE에 원하는 언어셋을 변경 | ||
+ | <source lang=sql> | ||
UPDATE sys.props$ | UPDATE sys.props$ | ||
− | SET value$ = '[ 변경을 원하는 문자셋 (KO16KSC5601, | + | SET value$ = '[ 변경을 원하는 문자셋 (AMERICAN_AMERICA.KO16KSC5601, AMERICAN_AMERICA.AL32UTF8등)]' |
− | WHERE name = ' | + | 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번째 줄: | 61번째 줄: | ||
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번째 줄: | 77번째 줄: | ||
update props$ set VALUE$='KOREA' where name='NLS_TERRITORY'; | update props$ set VALUE$='KOREA' where name='NLS_TERRITORY'; | ||
+ | </source> | ||
− | + | == 캐릭터셋 확인 쿼리 == | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | <source lang=sql> | |
− | select distinct(nls_charset_name(charsetid)) CHARACTERSET, | + | select distinct(nls_charset_name(charsetid)) CHARACTERSET,decode(type#, 1, decode(charsetform, 1, 'VARCHAR2', 2, 'NVARCHAR2','UNKOWN'), |
− | decode(type#, 1, decode(charsetform, 1, 'VARCHAR2', 2, 'NVARCHAR2','UNKOWN'), | ||
9, decode(charsetform, 1, 'VARCHAR', 2, 'NCHAR VARYING', 'UNKOWN'), | 9, decode(charsetform, 1, 'VARCHAR', 2, 'NCHAR VARYING', 'UNKOWN'), | ||
96, decode(charsetform, 1, 'CHAR', 2, 'NCHAR', 'UNKOWN'), | 96, decode(charsetform, 1, 'CHAR', 2, 'NCHAR', 'UNKOWN'), | ||
112, decode(charsetform, 1, 'CLOB', 2, 'NCLOB', 'UNKOWN')) TYPES_USED_IN | 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); | + | from sys.col$ |
+ | where charsetform in (1,2) and type# in (1, 9, 96, 112); | ||
+ | </source> | ||
− | 캐릭터셋 확인 쿼리 결과(잘못된 경우): varchar2가 2개 의 캐릭터셋이 설정되어있음. | + | |
+ | === 캐릭터셋 확인 쿼리 결과(잘못된 경우): === | ||
+ | * varchar2가 2개 의 캐릭터셋이 설정되어있음. | ||
+ | <source lang=sql> | ||
CHARACTERSET TYPES_USED_IN | CHARACTERSET TYPES_USED_IN | ||
----------------------------------------------------- | ----------------------------------------------------- | ||
117번째 줄: | 104번째 줄: | ||
WE8DEC VARCHAR2 | WE8DEC VARCHAR2 | ||
US7ASCII CLOB | US7ASCII CLOB | ||
+ | </source> | ||
+ | === 캐릭터셋 확인 쿼리 결과(정상인 경우): === | ||
+ | * TYPES_USERD_IN 하나당 하나의 캐릭터셋 | ||
+ | <source lang=sql> | ||
− | |||
CHARACTERSET TYPES_USED_IN | CHARACTERSET TYPES_USED_IN | ||
----------------------------------------------------- | ----------------------------------------------------- | ||
128번째 줄: | 118번째 줄: | ||
AL32UTF8 VARCHAR2 | AL32UTF8 VARCHAR2 | ||
AL32UTF8 CLOB | AL32UTF8 CLOB | ||
+ | </source> | ||
− | + | === 해결 방법 : === | |
− | 해결 방법 : | ||
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 | ||
+ | </source> | ||
2. sqlplus "/as sysdba"로 다음 쿼리 실행(기존 데이터 백업 필수) | 2. sqlplus "/as sysdba"로 다음 쿼리 실행(기존 데이터 백업 필수) | ||
+ | <source lang=sql> | ||
SHUTDOWN IMMEDIATE; | SHUTDOWN IMMEDIATE; | ||
STARTUP MOUNT; | STARTUP MOUNT; | ||
146번째 줄: | 139번째 줄: | ||
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> | |
-- 한글로 바꿀 경우(선택) | -- 한글로 바꿀 경우(선택) | ||
+ | <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 수정한 경우 원복. |
2019년 8월 5일 (월) 11:00 판
thumb_up 추천메뉴 바로가기
- DBA { Oracle DBA 명령어 > DBA 초급 과정 > DBA 고급 과정 }
- 튜닝 { 오라클 튜닝 목록 }
- 모델링 { 데이터 모델링 가이드 }
Oracle DataBase 문자셋과 언어셋 확인 및 변경하기 A db에서 export 한 것을 B db로 import 하려니 한글이 들어있는 칼럼의 경우에 사이즈가 맞지 않다고 나온다. 디비에 대해서 전혀 고려하지 않고 내리고 올리려고 했던터라 혹시나해서 보니 역시나 디비의 캐릭터가 다르더라.
그나저나 이 경우에는 기존에 데이터가 없어서 그냥 바꿔도 괜찮더라.
잘 정리된 글을 보고 따라했기에 그 글을 올린다.
목차
1 Oracle DataBase 문자셋과 언어셋 확인 및 변경[편집]
1.1 문자셋 확인[편집]
SELECT name, value$
FROM sys.props$
WHERE name in('NLS_CHARACTERSET','NLS_NCHAR_CHARACTERSET');
1.2 문자셋 변경[편집]
- 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.3 언어셋 확인[편집]
SELECT name, value$
FROM sys.props$
WHERE name = 'NLS_LANGUAGE'; -- AMERICAN , KOREAN
1.4 언어셋 변경[편집]
- 오라클 데이터베이스 관리자로 접속하여 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';
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);
2.1 캐릭터셋 확인 쿼리 결과(잘못된 경우):[편집]
- varchar2가 2개 의 캐릭터셋이 설정되어있음.
CHARACTERSET TYPES_USED_IN
-----------------------------------------------------
AL16UTF16 NCHAR
AL16UTF16 NVARCHAR2
AL16UTF16 NCLOB
US7ASCII CHAR
US7ASCII VARCHAR2
WE8DEC VARCHAR2
US7ASCII CLOB
2.2 캐릭터셋 확인 쿼리 결과(정상인 경우):[편집]
- TYPES_USERD_IN 하나당 하나의 캐릭터셋
CHARACTERSET TYPES_USED_IN
-----------------------------------------------------
AL16UTF16 NCHAR
AL16UTF16 NVARCHAR2
AL16UTF16 NCLOB
AL32UTF8 CHAR
AL32UTF8 VARCHAR2
AL32UTF8 CLOB
2.3 해결 방법 :[편집]
1. INIT.ORA 안에 있는 parallel_server parameter 가 false 거나 아예 세팅되어있지 않은지 확인.
SQL>show parameter parallel_server
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;
-- 한글로 바꿀 경우(선택)
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 수정한 경우 원복.