Xử lý lỗi ORA-00257: Archiver error

Một trong các lỗi kinh điển mà rất nhiều DBA gặp phải đó là sự cố liên quan đến đầy phân vùng chứa archive log: Lỗi ORA-00257: Archiver error. Khi gặp lỗi này ứng dụng của bạn sẽ không thể hoạt động (các câu lệnh DML, DDL đều bị treo), các user không thể kết nối tới Cơ sở dữ liệu. Bạn sẽ nhận thấy cảnh báo với mã lỗi kèm theo yêu cầu liên hệ trợ giúp từ DBA
ORA-00257: Archiver error. Connect AS SYSDBA only until resolved.

Hôm nay tôi sẽ demo tình huống lỗi này kèm một trong các phương án để xử lý rất nhanh gọn.

1. Giả lập tình huống người dùng kết nối đến Cơ sở dữ liệu và gặp lỗi

# Đăng nhập vào Cơ sở dữ liệu tên là TALENT5 bằng user huytq, mật khẩu là oracle.

[oracle@werac1 ~]$ sqlplus huytq/oracle@talent5

SQL*Plus: Release 12.2.0.1.0 Production on Tue Oct 20 23:46:56 2020

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

ERROR:
ORA-00257: Archiver error. Connect AS SYSDBA only until resolved.

2. DBA kiểm tra và xử lý sự cố như sau

Bước 1: Đăng nhập vào hệ thống với quyền sysdba (với quyền này thì bạn vẫn có thể đăng nhập thành công), kiểm tra thông tin hiện tại của nơi lưu trữ archive log

[oracle@werac1 ~]$ sqlplus / as sysdba

SQL*Plus: Release 12.2.0.1.0 Production on Tue Oct 20 23:51:46 2020

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

Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL> archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination +FRA
Oldest online log sequence 257
Next log sequence to archive 257
Current log sequence 258

-> Với kết quả kiểm tra trên thì Archive log của Database đang được lưu trữ ở diskgroup +FRA (Nếu bạn nào chưa biết về ASM có thể tìm hiểu ở các bài viết khác của tôi).

Bước 2: Kiểm tra phân vùng +FRA xem hệ thống có thật sự bị đầy không

[oracle@werac1 ~]$ . oraenv
ORACLE_SID = [wec1] ? +ASM1
The Oracle base remains unchanged with value /u01/app/oracle
[oracle@werac1 ~]$ asmcmd
ASMCMD> lsdg

-> Với kết quả bên trên ta có thể thấy Diskgroup FRA tuy vẫn con dung lượng, nhưng phần dung lượng còn trống quá nhỏ (36MB), không đủ để chứa 01 archive log (hệ thống hiện tại tôi cấu hình mỗi redo log là 200MB). Do hệ thống không thể sinh ra archive log mới được nên xuất hiện cảnh báo như các bạn đã thấy.

Bước 3: Thực hiện xóa archive log dùng lệnh RMAN. Lưu ý: Tôi đặc biệt khuyến cáo bạn xóa archive log bằng lệnh RMAN, không nên xóa sử dụng lệnh từ phía OS.

[oracle@werac1 ~]$ rman target /

Recovery Manager: Release 12.2.0.1.0 - Production on Wed Oct 21 00:05:51 2020

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

connected to target database: WEC (DBID=3360290170)

RMAN>
RMAN>
RMAN>
RMAN> delete archivelog all;

using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=65 instance=wec1 device type=DISK
List of Archived Log Copies for database with db_unique_name WEC
=====================================================================

Key Thrd Seq S Low Time
------- ---- ------- - ---------
457 1 194 A 07-SEP-20
Name: +FRA/WEC/ARCHIVELOG/2020_09_10/thread_1_seq_194.355.1050754093

458 1 195 A 07-SEP-20
Name: +FRA/WEC/ARCHIVELOG/2020_09_10/thread_1_seq_195.301.1050754095

465 1 202 A 12-SEP-20
Name: +FRA/WEC/ARCHIVELOG/2020_09_12/thread_1_seq_202.327.1050919661

466 1 203 A 12-SEP-20
Name: +FRA/WEC/ARCHIVELOG/2020_09_12/thread_1_seq_203.340.1050935913

467 1 204 A 12-SEP-20
Name: +FRA/WEC/ARCHIVELOG/2020_09_12/thread_1_seq_204.283.1050950359

468 1 205 A 12-SEP-20
Name: +FRA/WEC/ARCHIVELOG/2020_09_12/thread_1_seq_205.305.1050962979

519 1 256 A 25-SEP-20
Name: +FRA/WEC/ARCHIVELOG/2020_09_25/thread_1_seq_256.360.105208674

Do you really want to delete the above objects (enter YES or NO)? YES

archived log file name=+FRA/WEC/ARCHIVELOG/2020_09_10/thread_1_seq_194.355.1050754093 RECID=457 STAMP=1050754094
deleted archived log
archived log file name=+FRA/WEC/ARCHIVELOG/2020_09_10/thread_1_seq_195.301.1050754095 RECID=458 STAMP=1050754108
deleted archived log
archived log file name=+FRA/WEC/ARCHIVELOG/2020_09_10/thread_1_seq_196.276.1050760383 RECID=459 STAMP=1050760388
deleted archived log
archived log file name=+FRA/WEC/ARCHIVELOG/2020_09_10/thread_1_seq_197.277.1050793233 RECID=460 STAMP=1050793238
deleted archived log
archived log file name=+FRA/WEC/ARCHIVELOG/2020_09_11/thread_1_seq_198.279.1050818909 RECID=461 STAMP=1050818916

Ghi chú: Output đã được loại bỏ bớt danh sách các archive log bị xóa để tránh mất quá nhiều trang thông tin hiển thị.

Bước 4: Sau khi đã xóa archive log, bạn báo ứng dụng kết nối lại và xác thức mọi thứ đã bình thường

[oracle@werac1 ~]$ sqlplus huytq/oracle@talent5

SQL*Plus: Release 12.2.0.1.0 Production on Wed Oct 21 00:17:30 2020

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

Last Successful login time: Mon Sep 21 2020 22:46:16 +07:00

Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL> show user
USER is "HUYTQ"

Ghi chú: Tùy thuộc vào yêu cầu của từng hệ thống mà bạn có thể sử dụng linh hoạt những phương án sau:

  • Backup lại archivelog rồi sau đó mới xóa
  • Khi xóa có thể không xóa toàn bộ archive log mà chỉ xóa các archive log cũ hơn một số ngày nhất định (Ví dụ: xóa archive log cũ hơn 2 ngày)

Hi vọng thông qua bài viết này, bạn sẽ giải quyết được lỗi ORA-00257 khi gặp phải trong khi làm việc.
Hẹn gặp lại tại các bài viết sau!

Trần Quốc Huy

Leave a Reply

avatar
  Subscribe  
Notify of