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

Oracle 僅存完好資料檔案的災難恢復實戰:手工重建控制檔與參數檔完整流程

     編輯:Oracle 資料庫基礎

適用場景

  • 控制檔、重做日誌、參數檔、密碼檔全遺失
  • 僅資料檔 (.dbf) 完好保留
  • 無 RMAN 備份、無 Data Guard、無 Export 轉儲

恢復核心邏輯

  1. 重建參數檔 (PFILE/SPFILE)
  2. 重建密碼檔
  3. 啟動執行個體至 NOMOUNT
  4. 手工建立控制檔 (CREATE CONTROLFILE)
  5. 以 RESETLOGS 開啟資料庫
  6. 手工新增暫存檔案

詳細操作步驟

1. 重建參數檔 (PFILE)

關鍵參數(必須與原資料庫一致):


control_files, db_name, instance_name,
background_dump_dest, core_dump_dest, user_dump_dest,
db_block_size=8192, db_cache_size, db_domain,
large_pool_size, pga_aggregate_target, shared_pool_size,
sort_area_size, undo_management, undo_retention, undo_tablespace

來源途徑:

  • 備份的參數檔
  • 其他同版本正常實例:CREATE PFILE='path' FROM SPFILE;

⚠️ 必須檢查 background_dump_dest 等目錄是否存在,不存在需建立

2. 修改監聽器配置 (listener.ora)

確認 SID_LIST_LISTENER 中 GLOBAL_DBNAME、SID_NAME、ORACLE_HOME 正確

3. 設定環境變數


export ORACLE_SID=your_sid
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1

4. 建立 Windows 服務 (Windows 環境)


oradim -NEW -SID your_sid -STARTMODE M

5. 建立密碼檔


orapwd FILE=$ORACLE_HOME/dbs/orapwyour_sid PASSWORD=strong_password

⚠️ 路徑必須正確,否後續步驟會報錯

6. 啟動至 NOMOUNT


sqlplus "/ as sysdba"
-- 參數檔在預設位置
SQL> STARTUP NOMOUNT;
-- 或指定參數檔
SQL> STARTUP NOMOUNT PFILE='/path/to/init.ora';

7. 建立控制檔 (關鍵步驟)


CREATE CONTROLFILE SET DATABASE "db_name" RESETLOGS NOARCHIVELOG
  MAXLOGFILES 50
  MAXLOGMEMBERS 5
  MAXDATAFILES 100
  MAXINSTANCES 1
  MAXLOGHISTORY 453
  LOGFILE
    GROUP 1 '/path/to/redo01.log' SIZE 100M,
    GROUP 2 '/path/to/redo02.log' SIZE 100M,
    GROUP 3 '/path/to/redo03.log' SIZE 100M
  DATAFILE
    '/path/to/system01.dbf',
    '/path/to/sysaux01.dbf',
    '/path/to/undotbs01.dbf',
    '/path/to/users01.dbf',
    -- 所有資料檔完整路徑,不可遺漏
  CHARACTER SET ZHS16GBK;

關鍵點:

  • RESETLOGS:重置日誌序列,必須指定
  • CHARACTER SET:必須與原資料庫一致
  • 所有資料檔路徑完整列出,順序不重要但不可遺漏

8. 開啟資料庫


ALTER DATABASE OPEN RESETLOGS;

9. 新增暫存檔案 (必要步驟)


ALTER TABLESPACE "TEMP" ADD TEMPFILE 
  '/path/to/temp01.dbf' REUSE SIZE 200M;

控制檔不包含暫存檔案定義,必須手工添加,否則排序/雜湊操作會報錯

驗證恢復結果


SELECT NAME, OPEN_MODE FROM V$DATABASE;
SELECT TABLESPACE_NAME, FILE_NAME FROM DBA_DATA_FILES;
SELECT * FROM V$TEMPFILE;
-- 執行業務核心查詢驗證資料完整性

風險與限制

  • ❌ 無歸檔日誌 → 無法時間點恢復 (PITR),只能恢復至控制檔建立時刻
  • ❌ 所有交易日誌歷史遺失,SCN 重置
  • ❌ 密碼檔重建後,原 SYS/SYSTEM 密碼失效
  • ✅ 資料檔完整 → 業務資料零遺失(前提是資料檔確實完好)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved