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

Oracle RMAN 自動化備份腳本實戰:每日全量+歸檔+保留策略

     編輯:Oracle 資料庫基礎

需求背景

生產環境要求:每日凌晨 1 點自動執行全量備份,包含控制文件與歸檔日志,備份至 F:\Oracle\backup\,歸檔備份後自動刪除,保留 14 天,操作日志留存備查。以 Windows 為例(Linux/Unix 僅需調整路徑與調用命令)。

RMAN 備份腳本 (db_fullbak_JSsbook.rman)

RUN {
  CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 14 DAYS;
  CONFIGURE CONTROLFILE AUTOBACKUP ON;
  CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO 'F:\Oracle\BACKUP\%F';
  ALLOCATE CHANNEL C1 DEVICE TYPE DISK FORMAT 'F:\Oracle\BACKUP\BAK_%U';
  BACKUP DATABASE SKIP INACCESSIBLE
    PLUS ARCHIVELOG FILESPERSET 20
    DELETE ALL INPUT;
  RELEASE CHANNEL C1;
}
ALLOCATE CHANNEL FOR MAINTENANCE DEVICE TYPE DISK;
CROSSCHECK BACKUPSET;
DELETE NOPROMPT OBSOLETE;

關鍵參數解析

命令/參數作用
CONFIGURE RETENTION POLICY ...設定恢復窗口 14 天,過期備份標記為 OBSOLETE
CONFIGURE CONTROLFILE AUTOBACKUP ON開啟控制文件自動備份,每次結構變更自動備份
BACKUP ... PLUS ARCHIVELOG ... DELETE ALL INPUT備份資料庫+歸檔日志,備份成功後刪除已備份的歸檔(釋放 FRA 空間)
FILESPERSET 20每個備份集最多包含 20 個文件,平衡並行度與恢復速度
SKIP INACCESSIBLE跳過不可讀文件(如離線表空間),避免備份失敗
CROSSCHECK BACKUPSET校驗控制文件/目錄記錄與物理文件一致性
DELETE NOPROMPT OBSOLETE自動刪除過期備份(依 RETENTION POLICY),無需交互確認

Windows 排程部署

  1. 將腳本存為 F:\Oracle\script\backup\db_fullbak_JSsbook.rman
  2. 建立批次檔 run_backup.bat:
    @echo off
    rman target / cmdfile=F:\Oracle\script\backup\db_fullbak_JSsbook.rman log=F:\Oracle\script\backup\log\db_fullbak_%date:~-10,4%%date:~-5,2%%date:~-2,2%.log
  3. 使用「任務排程器」設定每日 01:00 執行 run_backup.bat,帳號需具備 SYSDBA 權限(或設定 OS 認證)。

Linux/Unix 移植提示

  • 路徑改為 /u01/app/oracle/backup/ 等。
  • 調用命令:rman target / @/scripts/db_fullbak.rman > /logs/db_fullbak_$(date +%Y%m%d).log 2>&1
  • 加入 crontab:0 1 * * * /scripts/run_backup.sh

維護建議

  • CONFIGURE 命令只需執行一次(持久化在控制文件),腳本中保留無妨。
  • 定期檢查備份日志中的 RMAN-08138 (WARNING: archived log not deleted) 確認歸檔刪除狀態。
  • 每季度執行 RESTORE VALIDATE DATABASE 驗證備份可用性。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved