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