티스토리 뷰

oracle

ORA-00257 오류 해결하기

pajama 2022. 1. 9. 23:48
반응형

안녕하세요. 오라클의 ORA-00257 오류메시지가 발생한 문제를 해결한 방법에 대해 정리해보고자 합니다.

평소와 다름없이 sqlplus를 사용해서 오라클에 접속하려고 하는데 아래처럼 오류메시지가 나왔습니다.

$ sqlplus scott/tiger

SQL*Plus: Release 11.2.0.1.0 Production on Sun Jan 9 17:21:31 2022

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

ERROR:
ORA-00257: archiver error. Connect internal only, until freed.

테스트 서버이고, 생소한 오류이지만 archiver라는 내용으로 유추했을때 로그 아카이브가 안되나? 생각으로 파일시스템을 확인했지만 사용량이 100%인 곳은 없었습니다.

그래서 에러메시지 그대로 복사해서 검색을 해보니, flash recovery area 경로에 지정한 사이즈 만큼의 아카이브 로그 파일이 누적되었기 때문이었습니다.

구글등에서 검색해보시면 다양한 내용이 나오기 때문에, 여기서는 제가 조치한 순서와 시행착오에 대해서만 간략하게 정리해보겠습니다.

 

1. flash recovery area 설정 파라미터 확인

오류가 발생한 상태이더라도, sysdba 권한으로는 접속이 가능합니다. 아래 파라미터 설정값을 먼저 확인합니다.

SQL> show parameter recovery

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest                string      /ORACLE/ARLOG
db_recovery_file_dest_size           big integer 3852M

 

2. 해당 디렉토리의 파일 크기 확인

해당 디렉토리의 파일이 얼마나 쌓였는지 확인해봅니다. 위에 나온것과 정확히 일치하지는 않았습니다.

[oracle:/ORACLE/ARLOG] du -k
1295404 ./TEST/archivelog/2021_12_19
156212  ./TEST/archivelog/2021_12_20
157844  ./TEST/archivelog/2021_12_21
137476  ./TEST/archivelog/2021_12_22
158920  ./TEST/archivelog/2021_12_23
135128  ./TEST/archivelog/2021_12_24
159580  ./TEST/archivelog/2021_12_25
161624  ./TEST/archivelog/2021_12_26
171484  ./TEST/archivelog/2021_12_27
172956  ./TEST/archivelog/2021_12_28
158220  ./TEST/archivelog/2021_12_29
124300  ./TEST/archivelog/2021_12_30
166388  ./TEST/archivelog/2021_12_31
163160  ./TEST/archivelog/2022_01_01
95480   ./TEST/archivelog/2022_01_02
30052   ./TEST/archivelog/2022_01_03
0       ./TEST/archivelog/2022_01_04
0       ./TEST/archivelog/2022_01_05
0       ./TEST/archivelog/2022_01_06
0       ./TEST/archivelog/2022_01_07
0       ./TEST/archivelog/2022_01_08
0       ./TEST/archivelog/2022_01_09
3444232 ./TEST/archivelog
3444232 ./TEST
3444232 .

 

3. Dictionary View 확인

v$recovery_file_dest 뷰를 살펴보면 위에서 확인한 내용을 확인할 수 있습니다.

여기까지 확인하고 아카이브 로그 파일을 OS상에서 삭제하더라도 사용량이 줄지 않는 것도 확인했습니다.

SQL> select name, space_limit, space_used from v$recovery_file_dest;

NAME          SPACE_LIMIT SPACE_USED
------------- ----------- ----------
/ORACLE/ARLOG  4039114752 4010724864

 

4. 아카이브 로그 파일 삭제 및 카탈로그 정보 업데이트

파일을 다른 디렉토리로 옮기고나면 RMAN으로 카탈로그 정보를 업데이트해야 합니다.

crosscheck archivelog all 명령을 수행하면 해당 디렉토리에 카탈로그 정보의 아카이브 로그 파일이 있는지 검사합니다.

삭제한 디렉토리의 파일에는 validation failed 라는 메시지가 보입니다.

[oracle:/ORACLE/ARLOG] mv ./TEST/archivelog/2021_12_19 /tmp
[oracle:/ORACLE/ARLOG] rman target /

Recovery Manager: Release 11.2.0.1.0 - Production on Sun Jan 9 17:24:53 2022

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

connected to target database: TEST (DBID=2222577416)

RMAN> crosscheck archivelog all;

using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=71 device type=DISK
validation failed for archived log
archived log file name=/work2/ORACLE/ARLOG/TEST/archivelog/2021_12_19/o1_mf_1_4582_jvxxhxq4_.arc RECID=1 STAMP=1091729165
validation failed for archived log
...
Crosschecked 116 objects

 

5. CROSSCHEK로 감지된 만료된 아카이브 로그 카탈로그에서 삭제

delete expired archivelog all 명령으로 validation failed로 감지된 아카이브 로그 목록을 카탈로그에서 삭제합니다.

RMAN>  delete expired archivelog all;

released channel: ORA_DISK_1
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=71 device type=DISK
List of Archived Log Copies for database with db_unique_name TEST
=====================================================================

Key     Thrd Seq     S Low Time
------- ---- ------- - ---------
1       1    4582    X 19-DEC-21
        Name: /work2/ORACLE/ARLOG/TEST/archivelog/2021_12_19/o1_mf_1_4582_jvxxhxq4_.arc

2       1    4583    X 19-DEC-21
        Name: /work2/ORACLE/ARLOG/TEST/archivelog/2021_12_19/o1_mf_1_4583_jvxxk4tt_.arc
...

 

6. Dictionary View 확인

카탈로그가 업데이트된 후 아래와 같이 사용량이 감소한 것을 확인할 수 있습니다.

SQL> select name, space_limit, space_used from v$recovery_file_dest;

NAME          SPACE_LIMIT SPACE_USED
------------- ----------- ----------
/ORACLE/ARLOG  4039114752 2309889536

 

* 참고

http://www.dba-oracle.com/t_v$_flash_recovery_area.htm    

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=withme9004&logNo=80090275834   

반응형
댓글