ORA-06552, 06553 은 SQLDeveloper 에서 scott 계정을 열다가 생긴 에러고, ORA-01031 에러는 위 에러를 잡기 위해서 해결하다 생긴 에러로 구글링을 통해 해결한 방법이다.
먼저 아마도 windows 버전은 오라클 유저네임과 패스워드가 system/system 일 것이다. MAC OS 버전은 system/oracle 이며 Docker 환경을 사용해야 한다. 그리고 sqldeveloper.conf 파일에 language와 contry를 kr로 바꾼 상태이다. 이 정도까지는 시도했다는 점에서 에러 잡기를 시작한다.
맨 마지막 파트에 ORA-06552, 06553 에러를 잡기 위해 사용해야 하는 명령어(shutdown immediate와 같은) 가 있다. 그렇지만 보통 계정을 사용하면 ORA-01031 insufficient privileges 또 다른 에러가 뜬다. 불충분한 권한 이라는 뜻으로 이를 해결하기 위해 다른 계정으로 들어가 시도한다.
sql> conn sys as sysdba
패스워드는 oracle 이다. (MAC OS에서는 oracle이 맞지만 windows는 잘 모르겠다.)
이제 ORA-01031 insufficient privileges 에러는 간단히 해결했고, 다음 ORA-06552, 06553 오류를 해결해본다.
ORA-06552, 06553 에러는 문자셋이 중복되어 나타나는 오류이다.
아래는 문자셋이 중복되었는지 확인하는 명령어이다. 이해는 못했지만 이 명령어로 확인할 수 있다고 한다.
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 가 FALSE 인지 확인하고 맞다면 그대로 진행한다.
SQL> show parameter parallel_server
NAME TYPE VALUE
---------------------- ----------- -------------
parallel_server boolean FALSE
이제 본격적으로 문자셋을 변경한다. 아래 명령어를 차례대로 입력하고 오류 없이 입력되면 성공이다.
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter system enable restricted session;
SQL> alter system set AQ_TM_PROCESSES=0;
SQL> alter system set JOB_QUEUE_PROCESSES=0;
SQL> alter database open;
SQL> col value new_value charset
SQL> select value from NLS_DATABASE_PARAMETERS where parameter='NLS_CHARACTERSET';
SQL> col value new_value ncharset
SQL> select value from NLS_DATABASE_PARAMETERS where parameter='NLS_NCHAR_CHARACTERSET';
SQL> alter database character set INTERNAL_USE & CHARSET;
SQL> alter database national character set INTERNAL_USE & NCHARSET;
SQL> shutdown immediate;
SQL> startup;
결국 궁극적으로 해결하고 싶었던 SQLDeveloper 내의 오류를 해결할 수 있었다. 👇🏻scott 계정 내 테이블을 SQLDeveloper에서 확인 가능하다.