일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- MariaDB
- author style
- OTP 오류
- ZipArchive 오류
- postfix
- 갈레라
- 디스크 용량 확인
- php 7.3
- 국민은행(기업)
- php 업로드 파일 삭제
- user style
- wsrep
- html 구성
- php excel
- php 파일 삭제
- 복구
- disk full
- Laravel
- OTP 보정오류
- error 1728
- nginx
- nginx 1.12.0
- disk 100% 사용
- DOTCOM 마케팅 설계자 SECRET
- CSS
- centos7
- Oracle
- navicat
- mysql.proc 오류
- php zip 모듈
- Today
- Total
Jehna :)
ORA-06552, 06553 문자셋 변경 후 오류 본문
"[ORACLE] 문자셋 변경 후 오류 해결 방법"
역시나.. 과감하게 문자셋을 변경했더니.. 오류가 발생했다.
허허허허.. 오라클에 오자도 모르는 나란 인간..
* 오류 메시지 ORA-06552: PL/SQL: Compilation unit analysis terminated ORA-06553: PLS-553: character set name is not recognized * 원인 문자셋이 중복되어 발생 * 해결 방법 문자셋을 제대로 변경해주면 된다.. |
1. 문자셋 중복 확인
- 솔직히 아래 쿼리를 이해하고 실행한건 아니다.. 이해하려고 했으나 너무 어렵다능 T^T
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 NVARCHAR2 AL16UTF16 NCHAR AL16UTF16 NCLOB KO16MSWIN949 VARCHAR2 KO16MSWIN949 CHAR KO16MSWIN949 CLOB |
※ 문자셋 변경 전 주의사항
- parallel_server가 true일 경우, false로 변경해야 한다.
- parallel_server=true는 multi-instance database(OPS)환경에서 데이터베이스를 구동시키기위해 설정한 것이므로
false로 변경한 후, 문자셋을 설정해야 오류가 발생하지 않는다.
SQL> show parameter parallel_server //확인 방법 NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ parallel_server boolean FALSE parallel_server_instances integer 1 |
참고) parallel_server 파라미터값의 의미
- 데이터베이스를 OPS환경에서 구동시키기 위한 parameter
- single-instance database의 경우, false값을 설정
- multi-instance database(OPS)의 경우, true값이 설정
2. 문자셋 변경하기
- // 뒤에 설명을 달아두어 좀 지저분하지만 나중에도 알아보기 위해 설명을 달아놨다능..
SQL> SHUTDOWN IMMEDIATE; // 접속중인 세션이나 진행 중인 트랜잭션 모두 강제 종료 Database closed. Database dismounted. ORACLE instance shut down. SQL> STARTUP MOUNT; // 마운트 단계까지 오라클 시작 Total System Global Area 536870912 bytes Fixed Size 2097696 bytes Variable Size 230690272 bytes Database Buffers 297795584 bytes Redo Buffers 6287360 bytes Database mounted. SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION; // 세션 제한 모드 활성화 (문자셋 변경 중 오류를 막기 위해) System altered. SQL> ALTER SYSTEM SET AQ_TM_PROCESSES = 0; // 문자셋 변경 중 오류를 막기 위해 QueueMonitorCoordinator 비활성화 (자세한 내용은 아래참고) System altered. SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES = 0; // job queue안의 job을 수행하지 않도록 설정 (문자셋 변경 중 오류를 막기 위해) System altered. SQL> ALTER DATABASE OPEN; // 데이터 베이스 오픈 System altered. SQL> col value new_value charset // SELECT 쿼리 실행 시 결과값과 컬럼명을 같이 보여주라는 의미 SQL> SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET'; // NLS_CHARACTERSET 의 문자셋 확인 VALUE -------------------------------------------------------------------------------- KO16MSWIN949 SQL> col value new_value ncharset SQL> SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER = 'NLS_NCHAR_CHARACTERSET'; //NLS_NCHAR_CHARACTERSET 확인 VALUE -------------------------------------------------------------------------------- AL16UTF16 SQL> ALTER DATABASE CHARACTER SET INTERNAL_USE & CHARSET; old 1: ALTER DATABASE CHARACTER SET INTERNAL_USE & CHARSET new 1: ALTER DATABASE CHARACTER SET INTERNAL_USE KO16MSWIN949 Database altered. SQL> ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE & NCHARSET; //문자셋 변경시, 데이터 손상 방지를 위한 검사를 건너뛰고 변경(INTERNAL_USE가 검사를 건너뛰겠다는 의미) old 1: ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE & NCHARSET new 1: ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE AL16UTF16 Database altered.
SQL> SHUTDOWN IMMEDIATE; // 종료 Database closed. Database dismounted. ORACLE instance shut down. SQL> STARTUP; // 시작 ORACLE instance started. Total System Global Area 536870912 bytes Fixed Size 2097696 bytes Variable Size 230690272 bytes Database Buffers 297795584 bytes Redo Buffers 6287360 bytes Database mounted. Database opened SQL> SHUTDOWN IMMEDIATE; // 종료 Database closed. Database dismounted. ORACLE instance shut down. SQL> STARTUP; // 시작 ORACLE instance started. Total System Global Area 536870912 bytes Fixed Size 2097696 bytes Variable Size 230690272 bytes Database Buffers 297795584 bytes Redo Buffers 6287360 bytes Database mounted. Database opened
|
참고) aq_tm_processes
- aq_tm_processes 란, 큐 메시지를 모니터링하면서 시간을 컨트롤하고 지연되거나 만료된 상태의 메시지 프로세싱을 컨트롤한다 - 오라클에서는 aq_tmp_processes를 0으로 설정하지 않는 것을 강력하게 권장하고 있다, 0으로 설정할 경우, QueueMonitorCoordinator가 비활성화 되면서 오라클 스트림 사용 시 데이터베이스의 기준이 없어 심각한 문제가 발생할 수 있다고 한다. |
혹시나 나같이 헤매는 분들을 위해 최대한 자세히 남기려고 했지만.. 어렵다 ㅠㅠ 정말 너무 어렵다.
대부분 oracle사이트에서 찾은 것들이나 영어능력이 부족한 나이기에.. 혹시나 내용이 이상할 경우 oracle사이트를 찾아보시길 바란다..
'윌리 > DB' 카테고리의 다른 글
[Oracle] 날짜형식 변경 (yy/mm/dd 변경) (0) | 2018.03.30 |
---|---|
[oracle] ORA-12541 오류 해결방법 (1) | 2018.03.23 |
[Navicat] 오라클 ORA-12737 에러 해결방법 (0) | 2018.03.21 |
[Oracle] 문자셋(characterset) 확인 및 변경 (0) | 2018.03.21 |
Navicat으로 오라클(sys) 접속하기 (1) | 2018.03.19 |