biti出的恢復題小記
原文連結:http://www.itpub.net/326938.html
起個題目:關於資料檔案恢復
這是一個假設的例子(給出的條件並不一定都須用上):
週二晚,有一個 聯機複製os檔案的指令碼,依次執行下面虛擬碼
set feedback,head,echo,term... off
spool filename;
select 'alter tablespace '||tablespace_name || 'begin backup;' from dba_tablespaces;
select 'cp ' ||name || '......' from v$datafile;
select 'alter tablespace '||tablespace_name || 'end backup;' from dba_tablespaces;
spool off
then run the script;
但是不幸,在備份過程中失敗,只有部分檔案備份成功,但是dba並不知道。
週三,dba新加了一個資料檔案
週四,控制檔案損壞,dba手工建立了控制檔案
週五,磁碟損壞,恰好丟失了所有控制檔案和新加的這個資料檔案(該資料檔案中有非常重要的期望恢復的資料)其他資料檔案都。檢查備份,結果發現原來的備份只有部分資料檔案複製成功然後備份意外終止不再繼續執行下面任何程式碼。 很不幸,備份出來的檔案也在這個磁碟上壞了。
在這種情況下,請問,該資料檔案是否能恢復,如能,請描述過程,如不能,請闡述理由。
測試過程:
一、週二:DBA備份了控制檔案,對錶空間users和test進行備份,但是備份失敗,沒有繼續執行接下的指令碼。BITI在這裡備份沒有正常結束的意思是給以後的恢復增加難, 事實上這一步的用處不大,在後面的恢復過程中也沒增加難度,只要把置於備份狀態的資料檔案進行恢復就可將其變至非備份狀態。
SQL> alter database backup controlfile to 'e:ctl.bak';
Database altered.
SQL> alter tablespace users begin backup;
Tablespace altered.
SQL> alter tablespace test begin backup;
Tablespace altered.
二、週三:DBA為表空間TEST新加了一個資料檔案:
SQL> alter tablespace test add datafile 'd:oracleoradatademotest02.dbf' size 5M;
Tablespace altered.
三、週四:使用者插入資料並提交,此時發生了INSTANCE CRASH,丟失了全部控制檔案。
SQL> create table t (a int) tablespace test;
Table created.
SQL> insert into t values(1);
1 row created.
SQL> commit;
Commit complete.
SQL> shutdown abort
ORACLE instance shut down.
SQL> host del d:oracleoradatademo*.ctl
在CRASH後,DBA啟動資料庫發現控制檔案全部丟失後,手工建立了控制檔案並進行相應恢復:
SQL> startup
ORACLE instance started.
Total System Global Area 55646712 bytes
Fixed Size 453112 bytes
Variable Size 37748736 bytes
Database Buffers 16777216 bytes
Redo Buffers 667648 bytes
ORA-00205: error in identifying controlfile, check alert log for more info
SQL> create controlfile reuse database DEMO noresetlogs archivelog
2 logfile
3 'd:oracleoradatademoredo01.log' size 5M,
4 'd:oracleoradatademoredo02.log' size 5M
5 datafile
6 'd:oracleoradatademosystem01.dbf' ,
8 'd:oracleoradatademoundotbs01.dbf',
9 'd:oracleoradatademousers01.dbf',
10 'd:oracleoradatademousers02.dbf',
11 'd:oracleoradatademousers03.dbf',
12 'd:oracleoradatademotest01.dbf',
13 'd:oracleoradatademotest02.dbf'
14 character set zhs16gbk;
Control file created.
SQL> recover database;
Media recovery complete.
SQL> alter database open;
Database altered.
這時候我們可以發現使用者提交的資料已恢復成功,且原來置於備份狀態的資料檔案狀態已經改變了。
SQL> select * from t;
A
----------
1
SQL> select * from v$backup;
FILE# STATUS CHANGE# TIME
---------- ------------------ ---------- ----------
1 NOT ACTIVE 0
2 NOT ACTIVE 0
3 NOT ACTIVE 217167 12-3? -05
4 NOT ACTIVE 217167 12-3? -05
5 NOT ACTIVE 217167 12-3? -05
6 NOT ACTIVE 217171 12-3? -05
7 NOT ACTIVE 0
7 rows selected.
四、週五:再次發生CRASH,丟失了全部控制檔案和新增加的資料檔案:
SQL> insert into t values(2);
1 row created.
SQL> commit;
Commit complete.
SQL> shutdown abort
ORACLE instance shut down.
SQL> host del d:oracleoradatademo*.ctl
SQL> host del d:oracleoradatademotest02.dbf
SQL> startup
ORACLE instance started.
Total System Global Area 55646712 bytes
Fixed Size 453112 bytes
Variable Size 37748736 bytes
Database Buffers 16777216 bytes
Redo Buffers 667648 bytes
ORA-00205: error in identifying controlfile, check alert log for more info
將備份的控制檔案進行復原:
SQL> host copy e:ctl.bak d:oracleoradatademocontrol01.ctl
已複製 1 個檔案。
SQL> host copy e:ctl.bak d:oracleoradatademocontrol02.ctl
已複製 1 個檔案。
SQL> host copy e:ctl.bak d:oracleoradatademocontrol03.ctl
已複製 1 個檔案。
SQL> alter database mount;
alter database mount
*
ERROR at line 1:
ORA-01991: invalid password file 'D:oracleora92DATABASEPWDdemo.ORA'
SQL> host del D:oracleora92DATABASEPWDdemo.ORA
SQL> host orapwd file=D:oracleora92DATABASEPWDdemo.ORA password=admin entries=5
開始對資料庫進行恢復,並指定一個當前聯機日誌進行恢復:
SQL> recover database using backup controlfile;
ORA-00279: change 216889 generated at 03/12/2005 17:25:13 needed for thread 1
Specify log: {
d:oracleoradatademoredo01.log
ORA-00283: recovery session canceled due to errors
ORA-01244: unnamed datafile(s) added to controlfile by media recovery
ORA-01110: data file 7: 'D:ORACLEORADATADEMOTEST02.DBF'
ORA-01112: media recovery not started
恢復過程中控制檔案已經認到新新增了的資料檔案,我們進行重新建立:
SQL> alter database create datafile 'D:ORACLEORADATADEMOTEST02.DBF' as 'D:O
RACLEORADATADEMOTEST02.DBF';
alter database create datafile 'D:ORACLEORADATADEMOTEST02.DBF' as 'D:ORACLE
ORADATADEMOTEST02.DBF'
*
ERROR at line 1:
ORA-01516: nonexistent log file, datafile, or tempfile
"D:ORACLEORADATADEMOTEST02.DBF"
SQL> select name,status from v$datafile;
NAME STATUS
---------------------------------------- -------
D:ORACLEORADATADEMOSYSTEM01.DBF SYSTEM
D:ORACLEORADATADEMOUNDOTBS01.DBF ONLINE
D:ORACLEORADATADEMOUSERS01.DBF ONLINE
D:ORACLEORADATADEMOUSERS02.DBF ONLINE
D:ORACLEORADATADEMOUSERS03.DBF ONLINE
D:ORACLEORADATADEMOTEST01.DBF ONLINE
D:ORACLEORA92DATABASEUNNAMED00007 RECOVER
7 rows selected.
SQL> alter database create datafile 'D:ORACLEORA92DATABASEUNNAMED00007' as '
D:ORACLEORADATADEMOTEST02.DBF';
Database altered.
新新增的資料檔案已經建立完畢,這時候開始對資料庫進行恢復:
SQL> recover database using backup controlfile;
ORA-00279: change 217203 generated at 03/12/2005 17:30:02 needed for thread 1
ORA-00289: suggestion : D:ORACLEORADATADEMOARCHIVE1.ARC
ORA-00280: change 217203 for thread 1 is in sequence #1
Specify log: {
d:oracleoradatademoredo01.log
ORA-00279: change 237249 generated at 03/12/2005 17:34:21 needed for thread 1
ORA-00289: suggestion : D:ORACLEORADATADEMOARCHIVE2.ARC
ORA-00280: change 237249 for thread 1 is in sequence #2
ORA-00278: log file 'd:oracleoradatademoredo01.log' no longer needed for
this recovery
Specify log: {
d:oracleoradatademoredo02.log
Log applied.
Media recovery complete.
SQL> select name,status from v$datafile;
NAME STATUS
---------------------------------------- -------
D:ORACLEORADATADEMOSYSTEM01.DBF SYSTEM
D:ORACLEORADATADEMOUNDOTBS01.DBF ONLINE
D:ORACLEORADATADEMOUSERS01.DBF ONLINE
D:ORACLEORADATADEMOUSERS02.DBF ONLINE
D:ORACLEORADATADEMOUSERS03.DBF ONLINE
D:ORACLEORADATADEMOTEST01.DBF ONLINE
D:ORACLEORADATADEMOTEST02.DBF ONLINE
7 rows selected.
SQL> select * from v$backup;
FILE# STATUS CHANGE# TIME
---------- ------------------ ---------- ----------
1 NOT ACTIVE 0
2 NOT ACTIVE 0
3 NOT ACTIVE 217167 12-3? -05
4 NOT ACTIVE 217167 12-3? -05
5 NOT ACTIVE 217167 12-3? -05
6 NOT ACTIVE 217171 12-3? -05
7 NOT ACTIVE 0
7 rows selected.
五、開啟資料庫,驗證恢復成功(如果是生產資料庫的話此時需馬上進行一次全備份):
SQL> alter database open resetlogs;
Database altered.
SQL> select * from t;
A
----------
1
2
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/60857/viewspace-792678/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle使用小記、刪除恢復Oracle
- PWN出題小記
- win10恢復出廠設定在哪 筆記本win10怎麼恢復出廠設定Win10筆記
- 【vsan資料恢復】vsan下虛擬機器磁碟元件出現問題的資料恢復案例資料恢復虛擬機元件
- [20220909]bbed關於刪除記錄恢復的問題.txt
- 微信聊天記錄的恢復
- 如何恢復出廠設定的Mac?Mac
- windows10恢復出廠設定的方法_win10出廠設定如何恢復WindowsWin10
- ret2csu出題小記
- MySQL:Innodb恢復的學習筆記MySql筆記
- w10如何恢復出廠設定_w10恢復出廠設定的步驟
- [20190130]刪除tab$記錄的恢復.txt
- win10如何一鍵恢復出廠設定 win10恢復出廠設定的步驟Win10
- rman恢復控制檔案的一個小錯誤
- Mongodb的備份恢復與匯出匯入MongoDB
- win10怎麼恢復出廠設定找不到恢復環境Win10
- 筆記本硬碟資料恢復筆記硬碟資料恢復
- 伺服器資料恢復案例:FreeNAS資料恢復過程記錄伺服器資料恢復
- 【伺服器資料恢復】EqualLogic儲存磁碟出現壞道的資料恢復案例伺服器資料恢復
- 記一次Kafka叢集的故障恢復Kafka
- 記一次自動恢復的支付故障
- win10電腦如何恢復出廠設定 win10系統恢復出廠設定的步驟Win10
- jz2440恢復出廠設定
- acer筆記本win10強制恢復出廠設定的操作步驟筆記Win10
- 怎麼把c盤恢復出廠設定 電腦c盤怎麼恢復出廠設定
- RedHatEnterpriseLinux6癱瘓恢復手記RedhatLinux
- [20190225]刪除tab$記錄的恢復5.txt
- [20190130]刪除tab$記錄的恢復2.txt
- [20190212]刪除tab$記錄的恢復3.txt
- 記一次驚魂的Win10啟動卡死問題恢復過程Win10
- 「分散式技術專題」故障恢復分散式
- window10恢復出廠設定如何操作 win10電腦怎麼恢復出廠設定Win10
- 如何恢復SSD NVME固態硬碟的資料恢復硬碟資料恢復
- bitlocker如何恢復金鑰 bitlocker恢復金鑰的方法
- 膝上型電腦怎麼回覆出廠設定 筆記本恢復出廠設定的步驟筆記
- 微恢復軟體,一款專業且免費的微信聊天記錄恢復軟體
- windows10恢復出廠設定找不到恢復環境最佳解決方法Windows
- 小心!手機恢復出廠設定資料仍可“復活”
- OPPO K1怎麼恢復出廠設定?OPPO K1恢復出廠設定詳細教程