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

Oracle RMAN 自動備份腳本實戰:三大常見錯誤排查與標準化部署方案

     編輯:Oracle 資料庫基礎

自動化備份的三大「攔路虎」與根因分析

錯誤一:找不到 RMAN 訊息檔

message file rman.msb not found
verify that Oracle_home is set properly

根因:cron 守護程序不載入使用者環境變數,導致 RMAN 無法定位 $ORACLE_HOME。

解法:在 Shell 腳本中顯式匯出 ORACLE_HOME、ORACLE_SID、LANG 等關鍵環境變數。

錯誤二:標準輸入非 TTY

standard in must be a tty

根因:cron 中直接使用 su - oracle -c "..." 或管道導致標準輸入重導向異常。

解法:將 su 切換操作移入 Shell 腳本內部,cron 僅呼叫腳本絕對路徑。

錯誤三:命令檔路徑解析失敗

rman-00556: could not open cmdfile "backup_ar.rcv"

根因:RMAN 不支援相對路徑(含 ./),必須在 cmdfile 參數中指定絕對路徑。

標準化自動備份三層腳本架構

第 1 層:cron 排程表

# 每日 12:00、18:00 執行歸檔日誌全量備份
0 12,18 * * * /home/oracle/bak_sh/backup_ar.sh

第 2 層:入口 Shell 腳本 (backup_ar.sh)

#!/bin/bash
export ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1
export ORACLE_SID=test
export LANG=en_US.UTF-8
$ORACLE_HOME/bin/rman cmdfile=/home/oracle/bak_sh/backup_ar.rcv

第 3 層:RMAN 命令檔 (backup_ar.rcv)

CONNECT TARGET /
CONNECT CATALOG rman/rman@catalog_db
RUN {
  ALLOCATE CHANNEL d1 DEVICE TYPE DISK;
  SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT';
  BACKUP ARCHIVELOG ALL DELETE INPUT FORMAT '/backup/arch_%d_%s_%p_%t';
  RELEASE CHANNEL d1;
}

關鍵最佳實踐總結

  • 所有路徑(腳本、備份目錄、日誌檔)統一使用絕對路徑
  • 環境變數在入口腳本顯式匯出,不依賴登入 Shell 配置
  • 使用 DELETE INPUT 自動清理已備份歸檔,防止磁碟爆滿
  • 建議搭配 CATALOG 連線,集中管理多資料庫備份元數據
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved