반응형

이번에 고객사에서 연락이 왔다. " 서버 상태가 좋지 않으니 서버를 새로 구성해야 겠습니다. "

나는 그리하여 기존에 납품나간 서버를 분석(?) 하고 있었다.

데이터를 최종적으로 백업 받으려고 EXPORT를 진행 한 순간 로그에 에러가 쌓이면서 백업이 Export 가 되지 않아 에러 내용을 보는순간 캐릭터 셋 문제인것을 확인 했습니다.


당시 Export시 화면

Connected to: Oracle Database 11g Release 11.2.0.1.0 - 64bit Production

Export done in US7ASCII character set and AL16UTF16 NCHAR character set


About to export the entire database ...

. exporting tablespace definitions

. exporting profiles

. exporting user definitions

. exporting roles

. exporting resource costs

. exporting rollback segment definitions

. exporting database links

. exporting sequence numbers

. exporting directory aliases

. exporting context namespaces

. exporting foreign function library names

. exporting PUBLIC type synonyms

EXP-00008: ORACLE error 6552 encountered

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

ORA-06553: PLS-553: character set name is not recognized

EXP-00000: Export terminated unsuccessfully


EXP-00008: ORACLE error 6552 encountered

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

ORA-06553: PLS-553: character set name is not recognized

EXP-00000: Export terminated unsuccessfully


원인 : 캐릭터셋(문자셋) 중복 으로 인해  발생한 문제


 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

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

KO16MSWIN949                             CLOB         

US7ASCII                                 CLOB         

AL16UTF16                                NCLOB        

AL16UTF16                                NVARCHAR2    

KO16MSWIN949                             CHAR         

US7ASCII                                 VARCHAR2     

KO16MSWIN949                             VARCHAR2     

AL16UTF16                                NCHAR        

US7ASCII                                 CHAR         


9 rows selected.


이 서버의 경우는 KO16MSWIN949 , US7ASCII 두 캐릭터셋이 중복되어 발생한 문제였습니다.

TYPES_USED_IN 이 두가지 이상 중복된경우 문제가 발생합니다.


KO16MSWIN949                             CLOB         

US7ASCII                                 CLOB  

KO16MSWIN949                             CHAR   

US7ASCII                                 CHAR

KO16MSWIN949                             VARCHAR2

US7ASCII                                 VARCHAR2 


KO16MSWIN949 , US7ASCII 이두가지 에서 문제가 발생한것 입니다.


해결방법

로그인>sqlplus "/as sysdba"


SQL*Plus: Release 11.2.0.1.0 Production on Thu Jan 17 23:39:12 2019


Copyright (c) 1982, 2010, Oracle.  All rights reserved.



Connected to:

Oracle Database 11g Release 11.2.0.1.0 - 64bit Production


SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.


SQL> STARTUP MOUNT;

ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance

ORACLE instance started.


Total System Global Area 6831239168 bytes

Fixed Size                  2188728 bytes

Variable Size            3976202824 bytes

Database Buffers         2835349504 bytes

Redo Buffers               17498112 bytes

Database mounted.

SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;


System altered.


SQL> ALTER SYSTEM SET AQ_TM_PROCESSES = 0;


System altered.


SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES = 0;


System altered.


SQL> ALTER DATABASE OPEN;


Database altered.


SQL> col value new_value charset

SQL> SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET';


VALUE

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

US7ASCII


SQL> col value new_value ncharset

SQL> SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER = '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 US7ASCII


Database altered.


SQL> ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE & NCHARSET;

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;

ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance

ORACLE instance started.


Total System Global Area 6831239168 bytes

Fixed Size                  2188728 bytes

Variable Size            3976202824 bytes

Database Buffers         2835349504 bytes

Redo Buffers               17498112 bytes

Database mounted.

Database opened.

SQL> SHUTDOWN IMMEDIATE;

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> STARTUP;

ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance

ORACLE instance started.


Total System Global Area 6831239168 bytes

Fixed Size                  2188728 bytes

Variable Size            3976202824 bytes

Database Buffers         2835349504 bytes

Redo Buffers               17498112 bytes

Database mounted.

Database opened.


완료시 정상 캐릭터셋


CHARACTERSET                             TYPES_USED_IN

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

US7ASCII                                 CLOB         

AL16UTF16                                NCLOB        

US7ASCII                                 VARCHAR2     

AL16UTF16                                NVARCHAR2    

US7ASCII                                 CHAR         

AL16UTF16                                NCHAR        


6 rows selected.



저는 문제없이 해결이 완료 되었으나 이 작업을 시도중 에러가 생기실수 있습니다.

에러에 대해서는 차후에 포스팅 하겠습니다.

반응형
반응형

오랜만에  글을 쓰게 되었습니다.. (그동안 바쁘기도 하고 서버가 터지는 일이 많이 줄어서..)

앞선 글에 ORA-01653 오류 대처에 대한 정보만 남겼는데 더 간단하고 쉽게 설명하기 위해서 글을 다시 씁니다.

(사실 최근에 이 문제로 한번 더 터졌습니다 서버가..)

 

 

고객사에서 기능들이 작동하지 않는다고 차장님에게 전화가 왔습니다.

 

차장님이 확인 후 혹시 이 문제에 대한 해결방법을 알고있냐고 물었고 발생한 에러를 보니

 

ORA-00604 : error occurred at recursive SQL level 1

 

ORA-01653 : unable to extend table SYS.AUD$ by 8192 in tablespace SYSTEM

 

ORA-02002 : error while writing to audit trail

 

ORA-00604 : error occurred at recursive SQL level 1

 

ORA-01653 : unable to extend table SYS.AUD$ by 8192 in tablespace SYSTEM

 

에러가 뿜어져 나오고 있었습니다.. 

 

이 에러에 원인을 알고 있던 저는 바로 자리에서 원격을 접속하여 (윈도우버전)


 

 

sqlplus /nolog     - sqlplus 로 패스워드없이 접속

 

conn /as sysdba     - sysdba 계정권한으로 로그인

 

truncate table SYS.AUD$;     -테이블 잘라내기

 

commit;    -저장

 

 

명령어를 입력 후 서버데몬을 시작하니

 

정상 작동 되었습니다.

 

 

이 문제가 리눅스 버전에서도 발생 할수 있기 때문에 리눅스에서 발생시 해결 방법을 알려드립니다.

 

리눅스 터미널에 접속하여 (리눅스버전)

 

 

su - oracle 

 

sqlplus /nolog

 

connect /as sysdba 

 

truncate table SYS.AUD$;

 

commit;

 

 

명령어를 입력하면 정상적으로 오라클 이용이 가능 합니다.

 

 

추가로 윈도우 에서는 이렇게 지속적으로 명령어 치기가 힘든경우 윈도우 배치파일 과 작업 스케줄러 를 이용하면 더욱 쉽게 사용 가능 합니다.

 

추가적인 방법은 차후에 또 다른 글로 설명 드리겠습니다.

 

 

반응형
반응형

2018-05-21 업체에서 프로그램 사용중 ORA-12571: TNS:패킷 기록자 실패. 라는 alert 창이 화면에 떠있다며 연락이 왔습니다.


DB 서버가 터진줄 알고 부랴부랴 원격을 통해 들어가보니 DB 서버는 정상 동작중이고 특정PC 1대 에서만 ORA-12571: TNS:패킷 기록자 실패. alert 창을 확인하였고, 프로그램 상에서 로그 확인 결과  Network Connection Fail 이 발생되었던 것을 확인 했습니다. 즉 PC에 인터넷이 잠시동안 끊기면서 생긴 에러로 추정 됩니다.

제가 업무를 하면서 처음 보았던 ORA-12571 ERROR 이기에 검색 등을 통해서 무엇이 문제인지 파악 하던 도중 최근에 sqlnet.ora에 적용 하였던 SQLNET.EXPIRE_TIME=3 문구가 ORA-12571 관련 에러로 보이기 시작해 찾아보기 시작 하였습니다. 

SQLNET.EXPIRE_TIME=10 을 설정하면 10분에 한번씩 맺어진 연결들에 대해서 DB쪽에서 패킷을 자동 전송해줌으로, 중간에 네트웍이나 방화벽에서 Session을 끊지 않음
 

출처: http://soul0.tistory.com/211 [돌이의 소소한 이야기★]
SQLNET.EXPIRE_TIME=3 즉 3분 동안 PC에서 DB 쪽에 신호를 보내지 않아 끊기면서 발생한 에러였던 것입니다. 그 이유인 즉슨 3분 이상 동안 인터넷 연결이 끊어지면서 서버와 통신 하지 못하고 ORA-12571 얼럿창이 발생 하였던 문제였습니다. 더 자세한 문제 파악을 위해 고객사에 네트워크 작업 여부를 문의 해놓은 상태 입니다.
인터넷에서는 SQLNET.EXPIRE_TIME=3 을 주석처리 하거나 0 으로 바꾸라는 이야기를 보았는데요, 사실상 이러면 SQLNET.EXPIRE_TIME=3 를 쓰는 의미가 없기에 따로 바꾸거나 다른 조치를 취하지는 않았습니다.

반응형

+ Recent posts