一、測(cè)試環(huán)境
成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),新源企業(yè)網(wǎng)站建設(shè),新源品牌網(wǎng)站建設(shè),網(wǎng)站定制,新源網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷(xiāo),網(wǎng)絡(luò)優(yōu)化,新源網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M(mǎn)足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專(zhuān)業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶(hù)成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
數(shù)據(jù)庫(kù)版本是11GR2,在做完一份完全備份之后,關(guān)機(jī),做一份快照,每一次開(kāi)機(jī)之后都執(zhí)行數(shù)次alter system switch logfile以產(chǎn)生歸檔日志。
之后的測(cè)試都是基于這么一個(gè)完全備份來(lái)恢復(fù)。
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/backup/%F';
backup incremental level 0 format '/backup/%T_%f' database;
二、數(shù)據(jù)文件丟失的測(cè)試
2.1丟失所有數(shù)據(jù)文件的測(cè)試
1.啟動(dòng)數(shù)據(jù)庫(kù)至mount狀態(tài)
startupmount;
2.啟動(dòng)RMAN
[oracle@mycentos orcl]$ rman target /
3.還原數(shù)據(jù)庫(kù)
RMAN>restore database;
4.恢復(fù)數(shù)據(jù)庫(kù)
RMAN>recover database;
恢復(fù)完成之后,查看各個(gè)文件的狀態(tài)是否正常。
select file_name,file_id,statusfrom dba_data_files;
--查看臨時(shí)表空間文件
select status,enabled,name, bytes/1024/1024 file_size
from v$tempfile;
select file_namefrom dba_temp_files;
2.2丟失單個(gè)數(shù)據(jù)文件的測(cè)試
2.2.1非關(guān)鍵數(shù)據(jù)文件丟失
以丟失數(shù)據(jù)文件’/u01/app/oracle/oradata/orcl/users01.dbf’為例,當(dāng)數(shù)據(jù)庫(kù)處于未崩潰狀態(tài)時(shí):
1)alter database datafile'/u01/app/oracle/oradata/orcl/users01.dbf' offline;
2)RMAN 模式下restore/recover數(shù)據(jù)文件
restore datafile '/u01/app/oracle/oradata/orcl/users01.dbf';
recover datafile '/u01/app/oracle/oradata/orcl/users01.dbf'
3)數(shù)據(jù)文件上線
alter database datafile'/u01/app/oracle/oradata/orcl/users01.dbf' online;
當(dāng)數(shù)據(jù)庫(kù)因意外而崩潰時(shí):
[oracle@mycentos ~]$ sqlplus /nolog
SQL> conn /as sysdba
SQL> startup;
ORA-01157: cannot identify/lock data file 4 - see DBWR trace file
ORA-01110: data file 4: '/u01/app/oracle/oradata/orcl/users01.dbf'
--可以直接先啟動(dòng)至mount狀態(tài)
啟動(dòng)RMAN:
restore datafile '/u01/app/oracle/oradata/orcl/users01.dbf';
recover datafile '/u01/app/oracle/oradata/orcl/users01.dbf'
alter database datafile'/u01/app/oracle/oradata/orcl/users01.dbf' online;
alter database open;
非關(guān)鍵數(shù)據(jù)文件丟失后,先使數(shù)據(jù)文件處于offline狀態(tài),在恢復(fù)數(shù)據(jù)文件之后,再將其轉(zhuǎn)成online狀態(tài)。
2.2.2關(guān)鍵數(shù)據(jù)文件丟失
[oracle@mycentos orcl]$ rm system01.dbf;
關(guān)閉數(shù)據(jù)庫(kù)后,過(guò)程與崩潰后恢復(fù)數(shù)據(jù)非關(guān)鍵數(shù)據(jù)文件的過(guò)程一樣。
三、日志文件丟失的測(cè)試
當(dāng)前的配置是所有的group都只有一個(gè)成員,在group1中新增一個(gè)成員,使其變成2個(gè)成員,其他group仍然只有一個(gè)成員。
3.1丟失inactive日志文件的恢復(fù)測(cè)試
刪除第二個(gè)日志組,并且模擬數(shù)據(jù)庫(kù)崩潰
在未關(guān)機(jī)狀態(tài)下,數(shù)據(jù)庫(kù)能繼續(xù)運(yùn)行,但是日志文件中會(huì)有告警信息。
shutdown abort;
startup mount;
alter database clear unarchived logfile group 2; #此命令會(huì)重建第二組日志文件
alter database open;
刪除第一組日志的一個(gè)成員:
rm redo01.log
shutdown abort;
startup;
數(shù)據(jù)庫(kù)可以正常打開(kāi)。redo01.log的狀態(tài)變成了INVALID.
使用alter database clear unarchived logfile group 1;重建日志文件
3.2丟失CURRENT日志文件的恢復(fù)測(cè)試
當(dāng)?shù)谝唤M為CURRENT或actives時(shí),刪除第一組日志的一個(gè)成員,數(shù)據(jù)庫(kù)可以正常打開(kāi)。
第三組為CURRENT,并且只有一個(gè)成員時(shí),刪除第三組的日志。
startup 命令報(bào)錯(cuò),并且在執(zhí)行clear unarchived logfile時(shí)會(huì)報(bào)
ORA-01624: log 3 needed for crash recovery of instance orcl (thread 1)的錯(cuò)誤。
alter database open;#會(huì)報(bào)ORA-00313的錯(cuò)誤
因此需要用其他方式來(lái)打開(kāi)數(shù)據(jù)庫(kù):
方法一:使用不完全恢復(fù):
RMAN>RESTORE DATABASE;
RMAN>RECOVER DATABASE UNTIL TIME 'SYSDATE-5/1440';#具體的時(shí)間可以看歸檔日志的生成時(shí)間
SQL>alter database open resetlogs;
方法二:直接使用不完全恢復(fù),不用RMAN。
SQL>alter system set "_allow_resetlogs_corruption"=true scope=spfile;
SQL>shutdown abort;
SQL>startup mount;
SQL> recover database until cancel;
SQL> alter database open resetlogs;
3.3丟失歸檔日志文件,并且需要恢復(fù)數(shù)據(jù)庫(kù)。
使用RMAN不完全恢復(fù)至某一個(gè)時(shí)間點(diǎn)。
3.4丟失所有聯(lián)機(jī)重做日志文件的測(cè)試
參照丟3.2失CURRENT日志文件的恢復(fù)測(cè)試
四、丟失控制文件的測(cè)試
4.1當(dāng)控制文件有多個(gè)副本時(shí),刪除其中一個(gè)控制文件,模擬數(shù)據(jù)庫(kù)崩潰的情況。
在數(shù)據(jù)庫(kù)關(guān)閉的情況下,將副本復(fù)制成已刪除的控制文件的名字,能正常打開(kāi)數(shù)據(jù)庫(kù)。
4.2 控制文件所有成員丟失,模擬數(shù)據(jù)庫(kù)崩潰
4.2.1 有備份控制文件的情況下,使用備份的控制文件恢復(fù)數(shù)據(jù)庫(kù)。
SQL>startup nomount;
RMAN>set dbid 1443678834#可以查看備份的控制文件獲得DBID
RMAN>restore controlfile from '/backup/c-1443678834-20160723-00';
SQL>alter system set "_allow_resetlogs_corruption"=true scope=spfile;
SQL>shutdown abort;
SQL>startup mount;
SQL> recover database using backup controlfile until cancel;
#輸入AUTO,應(yīng)用歸檔日志后,再輸入一遍recover database .......,輸入online redo的路徑+名稱(chēng)
SQL> alter database open resetlogs;#數(shù)據(jù)不會(huì)丟失
#有需要的話要重建臨時(shí)表空間
#ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/orcl/temp01.dbf' SIZE 1G;
4.2.2 沒(méi)有備份的控制文件,則需要重建控制文件。
在刪除控制文件之前,獲取控制文件的創(chuàng)建語(yǔ)句:
1)alter database backup controlfile to trace as '/home/oracle/crontol_trace.trc';
2)從/home/oracle/crontol_trace.trc文件中獲得如下語(yǔ)句:
CREATE CONTROLFILE REUSE DATABASE "ORCL" RESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 '/u01/app/oracle/oradata/orcl/redo01.log' SIZE 50M BLOCKSIZE 512,
GROUP 2 '/u01/app/oracle/oradata/orcl/redo02.log' SIZE 50M BLOCKSIZE 512,
GROUP 3 '/u01/app/oracle/oradata/orcl/redo03.log' SIZE 50M BLOCKSIZE 512,
GROUP 4 '/u01/app/oracle/oradata/orcl/redo_04.log' SIZE 50M BLOCKSIZE 512
DATAFILE
'/u01/app/oracle/oradata/orcl/system01.dbf',
'/u01/app/oracle/oradata/orcl/sysaux01.dbf',
'/u01/app/oracle/oradata/orcl/undotbs01.dbf',
'/u01/app/oracle/oradata/orcl/users01.dbf',
'/u01/app/oracle/oradata/orcl/test_01.dbf',
'/u01/app/oracle/oradata/orcl/test_02.dbf'
CHARACTER SET ZHS16GBK;
如果沒(méi)有使用1)中的語(yǔ)句獲取創(chuàng)建語(yǔ)句,也可以根據(jù)實(shí)際情況重建控制文件。
刪除所有的控制文件,并且模擬數(shù)據(jù)庫(kù)崩潰。
恢復(fù)的過(guò)程如下:
1)startup nomount;
2)執(zhí)行創(chuàng)建控制文件的語(yǔ)句,直接復(fù)制語(yǔ)句或放在腳本里均可。
3)之后執(zhí)行:
SQL>alter system set "_allow_resetlogs_corruption"=true scope=spfile;
SQL>shutdown abort;
SQL>startup mount;
SQL> recover database using backup controlfile until cancel;
#輸入AUTO,應(yīng)用歸檔日志后,再輸入一遍recover database .......,輸入online redo的路徑+名稱(chēng)
SQL> alter database open resetlogs;#數(shù)據(jù)不會(huì)丟失
重建臨時(shí)表空間
ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/orcl/temp01.dbf' SIZE 1G;
五、在只有一份備份的情況下,其余文件均丟失后,打開(kāi)數(shù)據(jù)庫(kù)
在數(shù)據(jù)庫(kù)崩潰之后:
1)啟動(dòng)數(shù)據(jù)庫(kù)至nomount,開(kāi)啟RMAN并設(shè)置dbid
SQL>startup nomount;
RMAN>set dbid 1443678834
2)還原控制文件
RMAN>restore controlfile from '/backup/c-1443678834-20160723-00';
SQL>alter database mount;
3)還原數(shù)據(jù)文件
RMAN>restore database;
4)執(zhí)行不完全恢復(fù):
SQL>alter system set "_allow_resetlogs_corruption"=true scope=spfile;
SQL>shutdown abort;
SQL>startup mount;
SQL> recover database using backup controlfile until cancel;
因?yàn)槿罩疚募?、歸檔日志文件都已經(jīng)被刪除,所以選擇cancel不執(zhí)行恢復(fù)。
SQL> alter database open resetlogs;
之后檢查各文件是否正常。
六、總結(jié)
從模擬在線日志文件、控制文件丟失的過(guò)程中可以發(fā)現(xiàn),當(dāng)這些文件有副本時(shí),可以很快地打開(kāi)數(shù)據(jù)庫(kù),從而降低恢復(fù)數(shù)據(jù)庫(kù)的難度。