首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 7.x回滾段表空間數據文件誤刪除緊急恢復實戰手冊

     編輯:Oracle 資料庫基礎

回滾段數據文件丟失導致數據庫無法Open:利用System回滾段掛載、離線Drop、重建回滾段的標準恢復流程

Oracle 7.x中回滾段表空間 (RBS) 數據文件被誤刪除,會導致實例無法正常Open (報ORA-01157/ORA-01110)。本文記錄經HP-UX 10.20與Solaris 2.5雙平台驗證的零數據損失恢復SOP:修改參數文件啟用System回滾段 → Mount實例 → 離線損壞文件 → 介質恢復 → 重建回滾段表空間與回滾段 → 切回正常回滾段啟動。

故障現象

ORA-01157: cannot identify/lock data file 6 - see DBWR trace file
ORA-01110: data file 6: '/u02/oradata/rbs01.dbf'
-- 實例處於MOUNT狀態,無法OPEN

恢復操作步驟 (SVRMGRL / SQL*Plus)

階段1:啟用System回滾段掛載實例

SVRMGR> SHUTDOWN ABORT
$ vi $ORACLE_HOME/dbs/init.ora
# 修改/新增參數
rollback_segments = (system)
_corrupted_rollback_segments = (r01,r02,r03,r04)  -- 具體丟失的回滾段名
SVRMGR> STARTUP MOUNT

原理:System回滾段在SYSTEM表空間,隨數據庫創建自動Online,不依賴RBS表空間。通過參數強制實例僅使用System回滾段,繞過損壞的RBS表空間完成Mount。

階段2:離線損壞文件並介質恢復

SVRMGR> ALTER DATABASE DATAFILE '/u02/oradata/rbs01.dbf' OFFLINE DROP;
SVRMGR> RECOVER DATABASE USING BACKUP CONTROLFILE;
-- 提示指定歸檔日誌序列號,按順序應用至最新
SVRMGR> ALTER DATABASE OPEN RESETLOGS;

關鍵點:
- OFFLINE DROP 從控制文件中移除該文件引用,避免Open時檢查失敗。
- USING BACKUP CONTROLFILE 因控制文件記錄了已刪除的文件,需用備份控制文件恢復。
- RESETLOGS 重置線上日誌序列,配合控制文件重建。

階段3:清理舊回滾段並重建

SVRMGR> ALTER ROLLBACK SEGMENT r01 OFFLINE DROP;
SVRMGR> ALTER ROLLBACK SEGMENT r02 OFFLINE DROP;
SVRMGR> ALTER ROLLBACK SEGMENT r03 OFFLINE DROP;
SVRMGR> ALTER ROLLBACK SEGMENT r04 OFFLINE DROP;
SVRMGR> DROP TABLESPACE rbs INCLUDING CONTENTS;

SVRMGR> CONNECT INTERNAL
SVRMGR> CREATE ROLLBACK SEGMENT ro TABLESPACE system;
SVRMGR> ALTER ROLLBACK SEGMENT ro ONLINE;
SVRMGR> CREATE TABLESPACE rbs DATAFILE '/u02/oradata/rbs01.dbf' SIZE 100M;
SVRMGR> CREATE ROLLBACK SEGMENT r01 TABLESPACE rbs;
SVRMGR> CREATE ROLLBACK SEGMENT r02 TABLESPACE rbs;
SVRMGR> CREATE ROLLBACK SEGMENT r03 TABLESPACE rbs;
SVRMGR> CREATE ROLLBACK SEGMENT r04 TABLESPACE rbs;
SVRMGR> ALTER ROLLBACK SEGMENT r01 ONLINE;
SVRMGR> ALTER ROLLBACK SEGMENT r02 ONLINE;
SVRMGR> ALTER ROLLBACK SEGMENT r03 ONLINE;
SVRMGR> ALTER ROLLBACK SEGMENT r04 ONLINE;

階段4:切回正常回滾段啟動

SVRMGR> SHUTDOWN ABORT
$ vi $ORACLE_HOME/dbs/init.ora
# 恢復參數
rollback_segments = (r01,r02,r03,r04)
# 刪除 _corrupted_rollback_segments 行
SVRMGR> STARTUP

驗收檢查

  • ☐ SELECT segment_name, status FROM dba_rollback_segs; 顯示r01-r04 ONLINE。
  • ☐ SELECT file_name FROM dba_data_files WHERE tablespace_name='RBS'; 新文件存在。
  • ☐ 業務應用連接測試正常,無ORA-01552 (rollback segment not online)。
  • ☐ Alert.log無錯誤堆疊。

預防措施

  1. 文件系統層面:chattr +i 關鍵數據文件 (Linux) / ACL只讀權限 (Windows)。
  2. RMAN備份包含控制文件與SPFILE,每日驗證 RESTORE VALIDATE DATABASE。
  3. 監控腳本巡檢 V$RECOVER_FILE、V$DATAFILE 狀態異常即時告警。
  4. 操作規範:禁止直接rm數據文件,遷移/重命名必須走ALTER DATABASE RENAME FILE流程。

此恢復流程在歸檔模式下實現零數據損失。核心思想:用System回滾段作「拐杖」掛載實例,離線損壞文件,介質恢復後重建業務回滾段。同理可擴展至Oracle 8i/9i/10g非UNDO表空間管理模式。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved