前言
在進行 Oracle 數(shù)據(jù)庫備份恢復、遷移或搭建 DataGuard 等運維操作時,經(jīng)常需要傳輸歸檔日志以確保數(shù)據(jù)一致性。然而,歸檔目錄通常包含大量文件,而我們往往只需
要傳輸其中的一部分,如何高效地批量傳輸指定的歸檔文件,是每個 DBA 都會遇到的實際問題。
以本文的實際場景為例,歸檔目錄下共有 1082 個文件,但只需要傳輸其中的 136 個:
[oracle@lucifer:/oradata/archivelog]$ ll | wc -l
1082
[oracle@lucifer:/oradata/archivelog]$ find . -name "1_42291[7-9]_943615335.dbf" -o -name "1_4229[2-9]*_943615335.dbf" -o -name "1_42[3-9]*_943615335.dbf" | wc -l
136
本文總結了幾種快速、高效的歸檔日志傳輸方法,幫助 DBA 在實際工作中選擇最適合的方案。
| 場景 | 推薦方案 | 理由 |
|---|---|---|
| 生產(chǎn)環(huán)境遷移 | RMAN backup archivelog | 專業(yè)、穩(wěn)定、支持壓縮 |
| 一次性大批量傳輸 | tar 打包 | 簡單快捷,壓縮效果好 |
| 頻繁的增量傳輸 | rsync | 支持增量傳輸和斷點續(xù)傳 |
| 復雜文件名匹配 | SSH免密 + find | 靈活的正則表達式支持 |
RMAN 備份歸檔
對于 Oracle 歸檔文件,最專業(yè)的方式是使用 RMAN 的 backup archivelog 命令:
RMAN> backup archivelog from sequence 422917 until sequence 423053 thread 1 format '/backup/arch_%d_%T_%t_%s_%p';
然后使用 scp 傳輸備份文件:
scp /backup/arch_* 192.168.31.166:/backup
tar 打包傳輸
使用 tar 命令將指定的歸檔文件打包后傳輸:
[oracle@lucifer:/oradata/archivelog]$ tar czf archivelog.tar.gz 1_42291[7-9]_943615335.dbf 1_4229[2-9]*_943615335.dbf 1_42[3-9]*_943615335.dbf [oracle@lucifer:/oradata/archivelog]$ du -sh archivelog.tar.gz 2.6G archivelog.tar.gz
傳輸打包文件:
scp /backup/archivelog.tar.gz 192.168.31.166:/backup
目標端解壓:
cd /backup
tar -xf archivelog.tar.gz
SSH 免密 + find 批量傳輸
配置 SSH 免密登錄
首先配置 SSH 密鑰認證,避免每個文件都要輸入密碼:
# 傳輸公鑰文件
scp -P 11122 ~/.ssh/id_rsa.pub oracle@192.168.31.166:~/
# 在目標服務器上執(zhí)行
mkdir -p ~/.ssh
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
rm ~/id_rsa.pub
find 傳輸
使用 find 批量傳輸:
[oracle@lucifer:/oradata/archivelog]$ find . -name "1_42291[7-9]_943615335.dbf" -o -name "1_4229[2-9]*_943615335.dbf" -o -name "1_42[3-9]*_943615335.dbf" | xargs -I {} scp -P 11122 {} 192.168.31.166:/backup
傳輸完成后,記得取消 SSH 免密互信。
rsync 同步傳輸
確保源端和目標端都安裝了 rsync,否則會報錯:
bash: rsync: command not found
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: remote command not found (code 127) at io.c(600) [sender=3.0.6]
使用 rsync 進行高效的文件同步傳輸:
[oracle@lucifer:/oradata/archivelog]$ rsync -avz -e "ssh -p 11122" 1_42291[7-9]_943615335.dbf 1_4229[2-9]*_943615335.dbf 1_42[3-9]*_943615335.dbf oracle@10.182.32.83:/oradata/archivelog/
增量方式,目標端已存在的歸檔直接跳過,所以可以重復執(zhí)行。
寫在最后
通過合理選擇傳輸方案,可以顯著提升 Oracle 數(shù)據(jù)庫運維工作的效率,減少人工操作失誤的風險。
「喜歡這篇文章,您的關注和贊賞是給作者最好的鼓勵」
關注作者
【版權聲明】本文為墨天輪用戶原創(chuàng)內(nèi)容,轉(zhuǎn)載時必須標注文章的來源(墨天輪),文章鏈接,文章作者等基本信息,否則作者和墨天輪有權追究責任。如果您發(fā)現(xiàn)墨天輪中有涉嫌抄襲或者侵權的內(nèi)容,歡迎發(fā)送郵件至:contact@modb.pro進行舉報,并提供相關證據(jù),一經(jīng)查實,墨天輪將立刻刪除相關內(nèi)容。




