20GB Oracle 資料庫(原 30GB 已清理),傳統備份極慢,需每週甚至每日備份。備份檔大小約等於資料大小(未壓縮時),壓縮後約 4GB。
利用 Unix 命名管道實現導出與壓縮並行,避免落地未壓縮檔案:
$ mknod ./exp_pipe p
$ ls -l exp_pipe
prw-rw-r-- 1 report group 0 Mar 17 05:20 exp_pipe
compress < ./exp_pipe > ./tmp_now.dmp.Z &
exp user/passwd@連接串 file=./exp_pipe direct=y compress=no log=./exp.log
direct=y:直接路徑導出,繞過 SQL 層,速度大幅提升compress=no:關閉 EXP 內建壓縮,改用外部 compress 並行處理compress 讀管道並寫入 .Z 檔案不建議大型庫用 EXP,因速度慢、無增量、恢復慢。RMAN 官方備份恢復工具支援:
| 日期 | 備份類型 | Level | 說明 |
|---|---|---|---|
| 週日 | 完整備份 | Level 0 | 基礎全量備份 |
| 週一、二 | 增量備份 | Level 1 | 僅備份變更塊 |
| 週三 | 完整備份 | Level 0 | 新基礎點 |
| 週四、五、六 | 增量備份 | Level 1 | 累積變更 |
此策略平衡備份速度與恢復時間(RTO)。具體頻率依業務 RPO/RTO 定義調整。
SQL> ARCHIVE LOG LIST;
Database log mode: No Archive Mode
-- 修改為歸檔模式
$ mkdir /oracle/bakram/log_archive
$ vi /oracle/OracleHome/dbs/firstSpfile.ora
SPFILE="/oracle/OracleHome/dbs/spfileorcyehoo.ora"
log_archive_start=true
log_archive_format=ARC%T%S.arc
log_archive_dest=/oracle/bakram/log_archive
$ ./dbstartmount.sh # 啟動至 MOUNT 狀態
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE OPEN;
SQL> CREATE TABLESPACE back DATAFILE 'back_CSS.dbf' SIZE 50M;
SQL> CREATE USER rman IDENTIFIED BY rman DEFAULT TABLESPACE back TEMPORARY TABLESPACE temp;
SQL> GRANT CONNECT, RESOURCE, RECOVERY_CATALOG_OWNER TO rman;
$ rman
RMAN> CONNECT CATALOG rman/rman;
RMAN> CREATE CATALOG TABLESPACE back;
$ rman target sys/password catalog rman/rman@yehoo
RMAN> REGISTER DATABASE;
-- 備份表空間
BACKUP TAG 'tsuser' FORMAT '/oracle/css_%Y%m%d_%u_%s_%p' TABLESPACE CSS;
-- 完整資料庫備份(Level 0)
BACKUP INCREMENTAL LEVEL 0 DATABASE;
-- 增量備份(Level 1)
BACKUP INCREMENTAL LEVEL 1 DATABASE;
RMAN> LIST BACKUP; -- 查看備份集
RMAN> REPORT OBSOLETE; -- 列出過期備份
RMAN> CROSSCHECK BACKUP; -- 驗證備份介質可用性
RMAN> VALIDATE BACKUPSET; -- 驗證備份可恢復性
VALIDATE / CROSSCHECK 確保可恢復隨著資料量增長,儘早遷移至 RMAN 架構才是長久之計。