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
- Tặng bạn Voucher giảm giá 60% dịch vụ kiểm tra sức khỏe cơ sở dữ liệu trọng yếu cho doanh nghiệp Đăng ký tại đây.
- Nếu bạn muốn tham gia các khóa học DBA thực chiến của tôi, hãy tham khảo: Trở thành DBA chuyên nghiệp
- Nếu bạn muốn xem các video demo xử lý sự cố của tôi, hãy theo dõi kênh youtube: Học Cơ sở dữ liệu cùng Trần Quốc Huy
- Với các bạn mới học Oracle, nếu muốn tự mình xây dựng môi trường lab, các bạn có thể tham khảo một bài viết khác của tôi: Nắm rõ quy trình triển khai Oracle 19c trong 5 phút
Leave a Reply