冷備份是將關(guān)鍵性文件拷貝到另外位置的一種做法。對于備份Oracle信息而言,冷備份是最快和最安全的方法。值得注意的是冷備份必須是數(shù)據(jù)庫關(guān)閉的情況下完成,當數(shù)據(jù)庫開著的時候,執(zhí)行數(shù)據(jù)庫文件系統(tǒng)備份無效。
最近在進行Oracle數(shù)據(jù)庫的恢復工作,使用的方法有:
① 邏輯備份 expdp/impdp或者exp/imp
② 物理備份 RMAN
③ 冷備份
接下來說一說冷備份,一些細節(jié)沒掌握到位,導致花了很多時間找原因。真不應該啊,學知識要知道其原理,很重要。
注意:冷備份要求兩臺數(shù)據(jù)庫所在的操作系統(tǒng)一定要相同,也就是說,要么都是AIX,要么都是HP-UX,不能一端是AIX,另一端是HP-UX。進行冷備份之前要進行檢查。
一、冷備份:
源端數(shù)據(jù)庫在關(guān)閉狀態(tài)下,完成所有物理數(shù)據(jù)文件、控制文件、redo日志問拷貝的過程,也稱脫機備份;適合于非歸檔模式下,數(shù)據(jù)庫處于一致性狀態(tài)。
冷備份
冷備份發(fā)生在數(shù)據(jù)庫已經(jīng)正常關(guān)閉的情況下,當正常關(guān)閉時會提供給我們一個完整的數(shù)據(jù)庫。
數(shù)據(jù)庫使用的每個文件都被備份下來,這些文件包括:
☆所有數(shù)據(jù)文件
☆所有控制文件
☆所有聯(lián)機REDO LOG 文件
☆I(lǐng)NIT.ORA文件(可選)
值得注意的是冷備份必須是數(shù)據(jù)庫關(guān)閉的情況下完成,當數(shù)據(jù)庫開著的時候,執(zhí)行數(shù)據(jù)庫文件系統(tǒng)備份無效。
作冷備份一般步驟是:
1:正常關(guān)閉要備份的實例(instance);
2: 備份整個數(shù)據(jù)庫到一個目錄
3:啟動數(shù)據(jù)庫
1: SQLDBA>connect internal
SQLDBA>shutdown normal
2: SQLDBA>! cp <file> <backup directory>
或
SQLDBA>!tar cvf /dev/rmt/0 /wwwdg/oracle
3: SQLDBA>startup
冷備份的主要步驟:
① 查看源庫的數(shù)據(jù)文件、控制文件、redo日志文件的所在的位置
SELECT file_name FROM dba_data_files; --數(shù)據(jù)文件 SELECT NAME FROM v$tempfile; --臨時表空間數(shù)據(jù)文件 SELECT NAME FROM v$controlfile; --控制文件 SELECT MEMBER FROM v$logfile; --redo日志文件
② 關(guān)閉數(shù)據(jù)庫
SQL>shutdown immeidate
③ 復制數(shù)據(jù)文件、控制文件和redo日志文件到指定位置
cp /home/oracle/app/oradata/USERS01.DBF /u01/app/testdb/oradata #兩個數(shù)據(jù)都在同一臺機器上 scp /home/oracle/app/oradata/USERS01.DBF root@192.168.10.1:/u01/app/testdb/oradata #將數(shù)據(jù)文件復制到遠程的另外一臺機器上 eg: scp -r local_folder remote_username@remote_ip:remote_folder #復制整個文件夾 eg: scp local_file remote_username@remote_ip:remote_folder #復制文件
scp的使用方法參考:
http://hahaxiao.techweb.com.cn/archives/191.html
注意:如果目標端的用戶是root進行復雜的,主要要修改權(quán)限,否則后邊對數(shù)據(jù)文件進行rename操作的時候會報錯。
④ rename 數(shù)據(jù)文件
rename操作需要數(shù)據(jù)庫狀態(tài)在mount下進行。
原因:在源系統(tǒng)的control文件里,記得的數(shù)據(jù)文件未知還是源系統(tǒng)記錄的數(shù)據(jù)文件位置,需要將數(shù)據(jù)文件進行rename操作:
alter database rename file '/home/oracle/app/oradata/USERS01.DBF' to '/u01/app/testdb/oradata/USERS01.DBF';
⑤ 重建控制文件
重建控制文件操作需要在nomount狀態(tài)下進行。
如果不知道控制文件長啥樣,你可以通過如下辦法查看控制文件的內(nèi)容:
alter database backup controlfile to trace as '/home/oracle/app/ctl_bak.sql'; #將控制文件中的內(nèi)容寫入到ctl_bak.sql中,這個需要數(shù)據(jù)庫開啟狀態(tài),建議先備份源端的控制文件
把ctl_bak.sql的腳本拿出來稍微做一下改動,就可以了,然后執(zhí)行這個sql文件即可。
SQL>shutdown immediate; SQL>startup nomount; SQL>@ctl_bak.sql
⑥ 啟動數(shù)據(jù)庫
SQL>alter database open resetlogs;
二、注意事項:
① 源端數(shù)據(jù)庫一定要處于關(guān)閉狀態(tài)
、 復制的數(shù)據(jù)文件、控制文件一定要全,不能缺失,否則,在啟動數(shù)據(jù)庫是會報錯;redo日志文件可以不復制,因為在重建control文件時可以指定,但是最好也一起復制過來。
、 復制完成后,要記得修改數(shù)據(jù)文件和控制文件的權(quán)限,否則,在rename操作時會報錯。
、 要掌握冷備份的原理,要不然,會在某個環(huán)節(jié)上浪費很多時間。
三、用冷備份進行數(shù)據(jù)庫恢復
如果數(shù)據(jù)庫是運行在非歸檔日志模式下,將備份文件拷貝回原來的目錄即可。非歸檔日志模式下數(shù)據(jù)庫只能恢復到備份時刻的狀態(tài)。
如果數(shù)據(jù)庫是運行在歸檔日志模式下,將數(shù)據(jù)文件拷回原來的目錄(不包括聯(lián)機redolog文件),然后依次選擇相應的重做日志文件進行恢復,即可恢復冷備份后的所有操作,即是說可以恢復到系統(tǒng)崩潰前的狀態(tài)。