Study/DB

Oracle Characterset 변경

LoonyHyun 2016. 8. 3. 14:16
반응형

[참조]

http://rocksea.tistory.com/241

http://glory74.blogspot.kr/2014/07/oracle-database.html

https://dbacatalog.wordpress.com/2013/12/09/ora-12720-operation-requires-database-is-in-exclusive-mode/

http://withmule.tistory.com/2

[참조]



------------------------------------------------------------------------------

# 첫번째


1. client set


export NLS_LANG=KOREAN_KOREA.KO16KSC5601 #한글

export NLS_LANG=KOREAN_KOREA.KO16MSWIN949 #한글(추천:지원캐릭터가 더 많음 -뷃,숖..)

export NLS_LANG=AMERICAN_AMERICA.UTF8 #유니코드


2. db 환경변수 확인


select * from nls_database_parameters where parameter like '%CHARACTERSET%';

select VALUE$ from sys.props$ where name='NLS_LANGUAGE';


3. db 환경변수 변경


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';


4. shutdown 및 startup


shutdown immediate;


startup;


------------------------------------------------------------------------------

# 두번째


1. sysdba 접속

sqlplus / as sysdba


2. 일반 사용자의 세션 가능 제한 모드

alter system enable restricted session;


3. job_queue_processes 에 등록된 job 프로세스 정지

alter system set job_queue_proccesses = 0;


4. aq_tm_processes에 등록된 job 프로세스 정지

alter system set aq_tm_processes = 0;


5. db 오픈

alter database open;


6. 변경할 캐릭터 셋으로 변경

alter database character set internal_se KO16MSWIN949;


7. shutdown 및 startup

shutdown immediate;

startup;


------------------------------------------------------------------------------


# 이슈사항


EXP-00008: ORACLE 오류 6552가 발생했습니다

ORA-06552: PL/SQL: Compilation unit analysis terminated

ORA-06553: PLS-553: 알 수 없는 문자 집합 이름입니다


캐릭터셋 확인 쿼리 :

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);


# 중복으로 설정된 변수 타입의 캐릭터셋이 있음. #


해결 방법 : 


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;



# 이슈사항 2


ERROR at line 1:

ORA-12720: operation requires database is in EXCLUSIVE mode


# 클러스터 중인 경우 위 에러 발생 #


alter system set cluster_database=FALSE scope=spfile sid='*';

shutdown immdeiate;

startup nomount;


alter system set cluster_database=TRUE scope=spfile sid='*';

shutdown immdeiate;

startup nomount;

'Study > DB' 카테고리의 다른 글

Oracle Procedure Or Function 확인  (0) 2016.08.09
Oracle sid 확인  (0) 2016.08.05
Oracle DataBase Version 확인 Query.  (0) 2014.12.10
Oracle 다중 Row 를 한개의 Row 로 변형  (0) 2014.03.14
Oracle Hex to Decimal, Decimal to Hex  (0) 2014.01.22