Xử lý sự cố

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

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.

[[email protected] ~]$ sqlplus huytq/[email protected]

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 CSDL  với quyền sysdba, kiểm tra thông tin hiện tại của nơi lưu trữ archive log

[[email protected] ~]$ 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

[[email protected] ~]$ . oraenv
ORACLE_SID = [wec1] ? +ASM1
The Oracle base remains unchanged with value /u01/app/oracle
[[email protected] ~]$ 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). Dung lượng hiện tại 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.

[[email protected] ~]$ 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 đã loại bỏ bớt, tránh người đọc bị loãng thông tin

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

[[email protected] ~]$ sqlplus huytq/[email protected]

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
  • Ta có thể 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!

3. Liên hệ với tôi

Trần Quốc Huy

Leave a Reply

avatar
  Subscribe  
Notify of