Sự Cố Datafile trong Oracle RAC

Một phân tích trực quan về lỗi "kinh điển" khi đặt datafile sai chỗ và cách xử lý chuyên nghiệp.

Mô Phỏng Kiến Trúc RAC

RAC Node 1Instance 1 RAC Node 2Instance 2 Shared Storage (ASM)+DATA Diskgroup data.dbf Local File System/u01/datafile/new.dbf

Trạng thái: Hệ thống hoạt động bình thường.

Hệ Quả Nghiêm Trọng (Click để xem chi tiết)

Không đồng bộ I/O

Chỉ instance trên nút vừa tạo “nhìn thấy” file; các instance khác báo lỗi ORA‑01157 (cannot identify/lock data file) và ORA‑01110 (data file xxx) trong alert log. ([oraclenext.com][1])

Triệu chứng: Các node khác không thể truy cập, dẫn đến inconsistency. Tham khảo thêm từ Oracle Forums về case thực tế.

Khoá/treo giao dịch

Những phiên giao dịch truy cập tablespace chứa datafile bị kẹt; có thể kèm ORA‑00376: file xxx cannot be read at this time.

Chi tiết: Session hang, cần kill manual nếu không fix kịp. Ảnh hưởng performance toàn hệ thống.

Mất khả năng Recovery

Nếu datafile tiếp tục nhận ghi, quá trình recovery hay standby apply trên các nút/standby DB sẽ thất bại vì không tìm thấy file được chia sẻ.

Thêm: Có thể dẫn đến data corruption nếu force recovery. Best practice: Luôn backup trước khi fix.

Nguy cơ Outage

Một số hãng vận hành đã ghi nhận “typo” này gây gián đoạn SX vài giờ do phải shutdown để sửa. ([Oracle Forums][2])

Case thực tế: Downtime lên đến nửa ngày nếu không detect sớm. Tác động kinh doanh lớn.

Phân Bổ Mức Độ Nghiêm Trọng Của Hệ Quả

Di chuột vào để xem chi tiết. Biểu đồ chỉ mang tính minh họa.

Trải Nghiệm Tương Tác: Phát Hiện Lỗi

1. Truy Vấn Control File/gv$datafile

Chạy câu lệnh để lọc file không nằm trên ASM. Kết quả sẽ hiển thị path local như /u01/datafile.

SELECT inst_id, file#, name, status
FROM   gv$datafile
WHERE  name NOT LIKE '+%';  -- lọc file không nằm trên ASM

2. Xem Alert Log & CRS Alert

Tìm chuỗi `ORA-01157`, `ORA-01110`. ([oraclenext.com][1]) Log sẽ hiển thị lỗi không tìm thấy file trên node khác.

-- Waiting for events --

3. OS Check

Trên các nút khác, chạy `ls /u01/datafile/xxx.dbf` – file sẽ “không tồn tại”. Điều này xác nhận vấn đề local FS.

Biểu Đồ So Sánh Giải Pháp

Thời gian gián đoạn (Downtime) ước tính

Di chuột vào để xem chi tiết. Biểu đồ chỉ mang tính minh họa. ([DBACLASS][3])

Quy Trình Xử Lý An Toàn (Không cần downtime dài)

Kể từ 12c bạn có thể “online move”; bản cũ hơn cần offline datafile hoặc dùng RMAN/ASMCMD. ([DBACLASS][3])

Oracle tự copy, update controlfile và vẫn cho phép DML hầu như không gián đoạn. ([Ron Ekins' Tech Blog][5])

ALTER DATABASE MOVE DATAFILE
  '/u01/datafile/foo01.dbf'
  TO '+DATA';

Phòng Ngừa Để Không “Vấp” Lần Nữa

Thiết lập OMF + ASM mặc định

`db_create_file_dest='+DATA'` giúp mọi lệnh `ADD DATAFILE` không cần chỉ rõ đường dẫn, tránh sai lầm.

Profile SQL*Plus / scripts

Ép biến `$ORACLE_SID`, prompt cảnh báo khi đường dẫn không bắt đầu bằng `+`. Sử dụng script template để standardize.

Quy trình 4‑mắt

Bám tiêu chuẩn DevOps: PR/Code‑review cho script DDL, đảm bảo không typo trong production.

Giám sát Alert/Trace

Đặt rule bắt ORA‑01157, gửi page trong 1‑2 phút để phát hiện sớm.

Kiểm Tra Kiến Thức: Bạn Sẽ Làm Gì Đầu Tiên?

Chọn câu trả lời đúng để nhận "phần thưởng" bất ngờ!