[Oracle] ORA-06552, 06553 에러/ORA-01031 에러

이선아·2021년 10월 1일
2

📌 에러 발생

ORA-06552, 06553SQLDeveloper 에서 scott 계정을 열다가 생긴 에러고, ORA-01031 에러는 위 에러를 잡기 위해서 해결하다 생긴 에러로 구글링을 통해 해결한 방법이다.


미리 진행했던 설정들❗️

먼저 아마도 windows 버전은 오라클 유저네임과 패스워드가 system/system 일 것이다. MAC OS 버전은 system/oracle 이며 Docker 환경을 사용해야 한다. 그리고 sqldeveloper.conf 파일에 language와 contry를 kr로 바꾼 상태이다. 이 정도까지는 시도했다는 점에서 에러 잡기를 시작한다.


📌 ORA-01031 에러 해결하기

맨 마지막 파트에 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 에러 해결하기

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에서 확인 가능하다.

참고한 블로그-1
참고한 블로그-2
참고한 블로그-3

profile
깃허브 놀러오세용 -> Tistory로 블로그 이전합니다.

0개의 댓글