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

Linux 下 Oracle 自動冷備份腳本實戰:從零構建生產可用的物理備份流程

     編輯:Oracle 資料庫基礎

前言

邏輯備份 (EXP) 靈活但大庫慢;物理冷備份 (離線拷貝文件) 最快、最安全、恢復最簡單,卻因流程繁瑣常被忽視。本文提供一套在 Linux (RedHat 7.3 / Oracle 8.1.7) 經測試的全自動 Shell 腳本體系,實現:參數記錄 → 關庫 → 拷貝數據/控制/日誌文件 → 開庫 → 壓縮打包帶時間戳 → 清理臨時文件,單命令執行,支援 crontab 定時調度。

腳本架構總覽

腳本文件職責調用關係
database.scriptSQL*Plus 腳本:導出實例參數、字符集、數據文件/控制文件/日誌文件路徑 → database.parm;生成拷貝命令 → backup.sh主流程首調
alterbackup.sh清洗 backup.sh 保留 cp /... 行 → c.sh → 重命名 backup.sh → 賦權執行關庫後執行
startup.scriptSQL*Plus 腳本:STARTUP 開庫,記錄狀態 → StartStatus.readme拷貝完成後
gzip.sh打包 backup/ 目錄 → backup_YYYY.MM.DD.HH.MM.tar.gz → 刪除原目錄開庫後執行
begin.sh總控腳本:建目錄 → 串聯上述 4 步 → 輸出完成提示用戶入口 / crontab

核心腳本內容

1. database.script (SQL*Plus)

SPOOL database.parm
SELECT * FROM V$PARAMETER;
SELECT * FROM PROPS$;
SELECT * FROM V$DATAFILE;
SELECT * FROM V$CONTROLFILE;
SELECT * FROM V$LOGFILE;
-- 可在此追加其他關鍵信息
SPOOL OFF

SPOOL backup.sh
SELECT 'cp ' || NAME || ' backup/' FROM V$DATAFILE;
SELECT 'cp ' || NAME || ' backup/' FROM V$CONTROLFILE;
SELECT 'cp ' || MEMBER || ' backup/' FROM V$LOGFILE;
SPOOL OFF

SHUTDOWN IMMEDIATE
EXIT

2. alterbackup.sh (Shell)

#!/bin/bash
echo "提取 cp 命令並生成可執行備份腳本"
cat backup.sh | grep '^cp /' > c.sh
rm backup.sh
mv c.sh backup.sh
chmod +x backup.sh
. ./backup.sh   # 注意:點號與腳本名間有空格,當前 Shell 執行

3. startup.script (SQL*Plus)

SPOOL StartStatus.readme
STARTUP
SPOOL OFF
EXIT

4. gzip.sh (Shell)

#!/bin/bash
echo "開始壓縮備份文件"
THEDATE=`date +%Y.%m.%d.%H.%M`   # 反引號,非單引號
OUTFILE=$THEDATE
tar -cvf backup${OUTFILE}.tar backup/*
gzip backup${OUTFILE}.tar
rm -rf backup

5. begin.sh (總控入口)

#!/bin/bash
echo "=== Oracle 自動物理冷備份啟動 ==="
mkdir -p backup
sqlplus internal/oracle @database.script
. ./alterbackup.sh
sqlplus internal/oracle @startup.script
. ./gzip.sh
echo "備份完成,請檢查當前目錄下的 backup_*.tar.gz"

關鍵補充:參數文件 (SPFILE/PFILE) 備份

參數文件通常在 $ORACLE_HOME/dbs/init.ora 或 $ORACLE_BASE/admin//pfile/ (可能為軟連結)。

# 查找真實路徑
find $ORACLE_HOME -name 'init*.ora'
ls -l /u01/app/oracle/product/8.1.7/dbs/initorcl.ora
# 若為軟連結,追踪真實文件

修改 alterbackup.sh 在執行 backup.sh 前手工拷貝:

cp /u01/app/oracle/admin/orcl/pfile/initorcl.ora backup/initorcl.ora
. ./backup.sh

部署與驗證清單

  1. 以 oracle 用戶登入 Linux。
  2. 將 5 個腳本放入同一目錄 (如 /home/oracle/autobackup)。
  3. chmod +x alterbackup.sh gzip.sh begin.sh
  4. 確認文件齊全:ls -l 應見 alterbackup.sh begin.sh database.script gzip.sh startup.script
  5. 測試執行:. ./begin.sh (點號+空間+腳本,當前 Shell 環境)。
  6. 驗證產出:backup_YYYY.MM.DD.HH.MM.tar.gz 存在且可解壓;database.parm 含關鍵元數據;StartStatus.readme 顯示正常啟動。
  7. 加入 crontab:0 2 * * * /home/oracle/autobackup/begin.sh >> /home/oracle/autobackup/backup.log 2>&1 (每日 02:00 自動執行)。

避坑指南與限制說明

  • 磁碟空間:臨時 backup/ 目錄需容納全庫文件體積,壓縮後釋放;大庫建議掛載獨立備份卷。
  • SHUTDOWN IMMEDIATE:會滾回未提交事務、斷開所有會話,確保備份一致性;業務需接受停機窗口。
  • 版本相容:腳本在 Oracle 8i/9i/10g Linux/Unix 通用;Windows 需改用 .bat / PowerShell。
  • SPFILE:9i+ 採用 SPFILE 時,database.script 可加 CREATE PFILE FROM SPFILE 導出文本備份。
  • RMAN 熱備份:7×24 業務無停機窗口時,請改用 RMAN 增量備份 + 閃回恢復區,本腳本不適用。

結語

這套腳本將「繁瑣手工冷備份」轉化為「單命令/定時自動」的標準化流程,同時保留 database.parm 關鍵元數據,為災難恢復爭取寶貴時間。實踐證明,在中小型 Oracle 8i/9i Linux 環境中極其可靠。隨著版本演進,建議逐步遷移至 RMAN + FRA + Data Guard 體系,但理解冷備份原理與腳本化思想,始終是 DBA 內功的根基。

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