第19章 归档模式下的数据库恢复
1. Restore(修復(fù))將數(shù)據(jù)文件帶回到過去(備份的時間點(diǎn))+Recover(恢復(fù))恢復(fù)從備份到數(shù)據(jù)文件崩潰這段時間內(nèi)所有提交的數(shù)據(jù)=>數(shù)據(jù)庫的完全恢復(fù)(所有提交的數(shù)據(jù)都恢復(fù));
?1)修復(fù)損壞的或丟失的操作系統(tǒng)文件就是使用操作系統(tǒng)命令或其他工具將備份的數(shù)據(jù)文件復(fù)制回來以替換已經(jīng)損壞或丟失的操作系統(tǒng)的文件;
?2)恢復(fù)就是使用SQL*Plus的recover命令將備份開始到數(shù)據(jù)文件崩潰這段時間內(nèi)所有提交的數(shù)據(jù)從歸檔日志文件或重做日志文件寫回到修復(fù)的數(shù)據(jù)文件。
2. 在歸檔模式下進(jìn)行數(shù)據(jù)庫全恢復(fù)時數(shù)據(jù)庫所經(jīng)過的狀態(tài)如下:
?1)利用備份修復(fù)(Restores)損壞或丟失的數(shù)據(jù)文件,即將備份的操作系統(tǒng)文件復(fù)制回數(shù)據(jù)庫中原來的位置;
?2)將從 備份到系統(tǒng)崩潰這段時間內(nèi)的所有提交數(shù)據(jù)由歸檔日志文件和聯(lián)機(jī)重做日志文件中還原成數(shù)據(jù)文件所需的數(shù)據(jù)塊;
?3)此時數(shù)據(jù)庫中包含了所有的提交數(shù)據(jù),也可能包含沒有提交的數(shù)據(jù);
?4)系統(tǒng)使用還原(回滾)數(shù)據(jù)塊回滾未提交的數(shù)據(jù);
?5)最后,數(shù)據(jù)庫到達(dá)了已恢復(fù)的狀態(tài)。
3. 數(shù)據(jù)庫的完全恢復(fù)就是所有提交數(shù)據(jù)都得以恢復(fù),而數(shù)據(jù)庫的 不完全恢復(fù)是將數(shù)據(jù)庫恢復(fù)到系統(tǒng)崩潰之前的某個時間點(diǎn)。
4. 進(jìn)行數(shù)據(jù)庫的完全恢復(fù)時要進(jìn)行如下的操作:
?1)將要恢復(fù)的文件或表空間設(shè)為脫機(jī)(offline),但是不包括系統(tǒng)表空間或活動的還原表空間;
?2)僅修復(fù)損壞的或丟失的操作系統(tǒng)文件,不修復(fù)(Restore)其他的任何文件;
?3)恢復(fù)數(shù)據(jù)文件。
5. 歸檔模式下的數(shù)據(jù)庫全恢復(fù)優(yōu)點(diǎn):
?1)在恢復(fù)時不必關(guān)閉數(shù)據(jù)庫;
?2)所有的提交數(shù)據(jù)都可以恢復(fù);
?3)僅需要修復(fù)損壞的或丟失的數(shù)據(jù)文件;
?4)恢復(fù)的全部時間=將損壞的或丟失的數(shù)據(jù)文件的備份復(fù)制回數(shù)據(jù)庫的時間+使用歸檔日志文件或重做日志文件恢復(fù)提交的數(shù)據(jù)所用的時間;
6. 歸檔模式下的數(shù)據(jù)庫全恢復(fù)缺點(diǎn):
?1)數(shù)據(jù)庫必須運(yùn)行在歸檔模式下,增大系統(tǒng)的內(nèi)存和CPU的開銷;
?2)必須保證所有的歸檔日志文件完好無損;
?3)對DBA只是和技能的要求明顯提高
7. recover命令使用:
?1)recover [automatic] database:該命令只能在數(shù)據(jù)庫加載狀態(tài)時使用;
?2)recover [automatic] tablespace "表空間號" | "表空間名":該命令只能在數(shù)據(jù)庫打開狀態(tài)時使用;
?3)recover [automatic] datafile "數(shù)據(jù)文件名" | "數(shù)據(jù)文件號"
注意:automatic表示自動搜尋和恢復(fù)歸檔日志文件及聯(lián)機(jī)重做日志文件中提交的數(shù)據(jù);
?4)相關(guān)的數(shù)據(jù)字典
a)查看所有數(shù)據(jù)文件的文件號,文件名和對應(yīng)的表空間;
select file_id,file_name,tablespace_name from dba_data_files;
b)查看所以表空間當(dāng)前狀態(tài)
select tablespace_name,status from dba_tablespaces;
c)查看所有數(shù)據(jù)文件的當(dāng)前狀態(tài)
select file#,status from v$datafile;
d)查看標(biāo)識需要恢復(fù)的數(shù)據(jù)文件以及恢復(fù)從何處開始
select * from v$recover_file;
e)查看定位在恢復(fù)期間所需的歸檔日志文件
select * from v$recovery_log;
8. 演示表空間脫機(jī)與表空間所對應(yīng)的數(shù)據(jù)文件脫機(jī)區(qū)別
?1)演示表空間脫機(jī)
表空間脫機(jī):alter tablespace xiaoming_index offline;?
查看表空間是否脫機(jī):select tablespace_name,status from dba_tablespaces;
查看數(shù)據(jù)文件是否脫機(jī):select file#,status frin v$datafile;數(shù)據(jù)文件的狀態(tài)變?yōu)閛ffline
查看所有數(shù)據(jù)文件當(dāng)前的與備份相關(guān)信息:select * from v$recover_file;
注意:第4列ERROR顯示的結(jié)果有兩種可能:offline normal表示該數(shù)據(jù)文件在設(shè)置在聯(lián)機(jī)之前不需要進(jìn)行恢復(fù);null表示該數(shù)據(jù)文件脫機(jī)的原因不清楚;
?2)演示數(shù)據(jù)文件脫機(jī)
數(shù)據(jù)文件脫機(jī):alter database datafile 7 offline;
查看數(shù)據(jù)文件當(dāng)前狀態(tài):select file#,status from v$datafile;數(shù)據(jù)文件的狀態(tài)變?yōu)閞ecover
9. 數(shù)據(jù)庫完全恢復(fù)方法
?1)在數(shù)據(jù)庫最初處于打開的狀態(tài)下,進(jìn)行開啟數(shù)據(jù)庫的恢復(fù);
?2)在數(shù)據(jù)庫最初處于關(guān)閉的狀態(tài)下,進(jìn)行開啟數(shù)據(jù)庫的恢復(fù);
?3)恢復(fù)沒有備份的數(shù)據(jù)文件;
?4)在關(guān)閉的狀態(tài)下進(jìn)行數(shù)據(jù)庫的恢復(fù)
10. 最初處于打開狀態(tài)下進(jìn)行的開啟數(shù)據(jù)庫恢復(fù)
?a)適用如下情況:
1)所需恢復(fù)的數(shù)據(jù)文件不屬于系統(tǒng)表空間或還原/回滾段表空間;
2)磁介質(zhì)的損壞,數(shù)據(jù)文件的崩潰,或數(shù)據(jù)文件的丟失并未造成數(shù)據(jù)庫的關(guān)閉;
3)數(shù)據(jù)庫是以每天24小時每周7天運(yùn)營的方式操作的,數(shù)據(jù)庫的當(dāng)機(jī)時間必須保持最小
?b)操作步驟:
1)使用數(shù)據(jù)字典dba_data_files獲取要恢復(fù)的數(shù)據(jù)文件與所對應(yīng)的表空間及它們的相關(guān)信息;
2)dba_tablespaces獲取要恢復(fù)的表空間是處在脫機(jī)還是聯(lián)機(jī)狀態(tài),可以使用v$datafile確認(rèn)要恢復(fù)的數(shù)據(jù)文件是處在脫機(jī)還是聯(lián)機(jī)狀態(tài);
3)如果表空間處在聯(lián)機(jī)狀態(tài),將表空間設(shè)為脫機(jī)狀態(tài),也可以將數(shù)據(jù)文件設(shè)為脫機(jī);
4)使用操作系統(tǒng)復(fù)制命令將備份的數(shù)據(jù)文件復(fù)制回數(shù)據(jù)庫中原來的位置,如果硬盤損壞,將備份的數(shù)據(jù)文件復(fù)制到其他硬盤上,之后使用alter命令修改數(shù)據(jù)文件名;
5)使用recover命令將所有提交的數(shù)據(jù)從歸檔日志文件和重做日志文件重新寫入已經(jīng)修復(fù)的數(shù)據(jù)文件
6)當(dāng)恢復(fù)完成后將表空間或數(shù)據(jù)文件重新設(shè)置為聯(lián)機(jī)狀態(tài);
7)檢查是否正常;
11. 最初處于關(guān)閉狀態(tài)下進(jìn)行的開啟數(shù)據(jù)庫恢復(fù)
?a)適用如下情況:
1)所需恢復(fù)的數(shù)據(jù)文件不屬于系統(tǒng)表空間或還原/回滾段表空間;
2)磁介質(zhì)的損壞,硬盤的損毀,或數(shù)據(jù)文件的丟失已經(jīng)造成數(shù)據(jù)庫的關(guān)閉;
3)數(shù)據(jù)庫是以每天24小時每周7天運(yùn)營的方式操作的,數(shù)據(jù)庫的當(dāng)機(jī)時間必須保持最小;
?b)步驟:
1)使用startup mount加載數(shù)據(jù)庫。因?yàn)閾p壞的數(shù)據(jù)文件不能打開
2)使用v$datafile確認(rèn)要恢復(fù)的數(shù)據(jù)文件的文件名。這時不能使用數(shù)據(jù)字典dba_tablespaces,因?yàn)樵摂?shù)據(jù)字典只能在數(shù)據(jù)庫開啟狀態(tài)下使用;
3)使用 alter database datafile "數(shù)據(jù)文件名" offline:將出問題的數(shù)據(jù)文件設(shè)為脫機(jī),這時不能使用alter tablespace命令將出文件的表空間設(shè)為脫機(jī),因?yàn)樵撁钪荒茉跀?shù)據(jù)庫開啟狀態(tài)下使用;
4)使用alter database open 將數(shù)據(jù)庫打開。因?yàn)槌鰡栴}的數(shù)據(jù)文件已經(jīng)脫機(jī),所有其他的數(shù)據(jù)文件都是同步的;
5)使用操作系統(tǒng)復(fù)制命令將備份的數(shù)據(jù)文件復(fù)制回數(shù)據(jù)庫中原來的位置,如果硬盤損壞,將備份的數(shù)據(jù)文件復(fù)制到其他硬盤上,之后使用alter命令修改數(shù)據(jù)文件名;
6)使用recover命令將所有提交的數(shù)據(jù)從歸檔日志文件和重做日志文件重新寫入已經(jīng)修復(fù)的數(shù)據(jù)文件;
7)當(dāng)恢復(fù)完成后將表空間或數(shù)據(jù)文件重新設(shè)置為聯(lián)機(jī)狀態(tài);
12. 恢復(fù)沒有備份的數(shù)據(jù)文件
?a)適用如下情況:
1)所需恢復(fù)的數(shù)據(jù)文件不屬于系統(tǒng)表空間或還原/回滾段表空間;
2)由于介質(zhì)損壞或用戶錯誤導(dǎo)致數(shù)據(jù)文件的丟失,但是這個數(shù)據(jù)文件從來沒有備份過;
3)從這個數(shù)據(jù)文件創(chuàng)建以來所有的歸檔日志文件都完好無損;
?b)oracle提供兩個重新建立數(shù)據(jù)文件的結(jié)構(gòu)的命令
alter database create datafile "原始文件名":該命令重建與原來數(shù)據(jù)文件同名的數(shù)據(jù)文件
alter database create datafile "原文件名" as "新文件名"?
?c)步驟:
1)使用數(shù)據(jù)字典dba_data_file獲取要恢復(fù)的數(shù)據(jù)文件與所對應(yīng)的表空間及它們的相關(guān)信息;
2)dba_tablespaces獲取要恢復(fù)的表空間是處在脫機(jī)還是聯(lián)機(jī)狀態(tài),可以使用v$datafile確認(rèn)要恢復(fù)的數(shù)據(jù)文件是處在脫機(jī)還是聯(lián)機(jī)狀態(tài);
3)如果表空間處在聯(lián)機(jī)狀態(tài),將表空間設(shè)為脫機(jī)狀態(tài),也可以將數(shù)據(jù)文件設(shè)為脫機(jī);
4)使用數(shù)據(jù)字典v$recover_file查看數(shù)據(jù)文件的恢復(fù)狀態(tài)此時error列的顯示應(yīng)該為file not found,change#列的顯示應(yīng)該為0,而time列應(yīng)該沒有顯示輸出;
5)使用alter database create datafile命令重建數(shù)據(jù)文件的結(jié)構(gòu);
6)使用數(shù)據(jù)字典v$recover_file確認(rèn)數(shù)據(jù)文件的恢復(fù)狀態(tài),此時ERROR列應(yīng)該沒有顯示輸出,change#列和time列的顯示都有了新值;
7)使用recover命令將所有提交的數(shù)據(jù)從歸檔日志文件和重做日志文件重新寫入已經(jīng)修復(fù)的數(shù)據(jù)文件;
8)當(dāng)恢復(fù)完成后將表空間或數(shù)據(jù)文件重新設(shè)置為聯(lián)機(jī)狀態(tài);
12. 在關(guān)閉的狀態(tài)下進(jìn)行數(shù)據(jù)庫的恢復(fù)
?a)適用如下情況:
1)所需恢復(fù)的數(shù)據(jù)文件屬于系統(tǒng)表空間或還原/回滾段表空間;
2)整個數(shù)據(jù)庫或大多數(shù)數(shù)據(jù)文件都需要恢復(fù);
3)數(shù)據(jù)庫不是以每天24小時每周7天運(yùn)營的方式操作的,數(shù)據(jù)庫在工作期間可以關(guān)閉;
?b)步驟:
1)使用數(shù)據(jù)字典dba_data_file獲取要恢復(fù)的數(shù)據(jù)文件與所對應(yīng)的表空間及它們的相關(guān)信息;
2)如果數(shù)據(jù)庫是打開狀態(tài),使用shutdown關(guān)閉數(shù)據(jù)庫shutdown abort;
3)以加載方式啟動數(shù)據(jù)庫startup mount
4)使用操作系統(tǒng)復(fù)制命令將備份的數(shù)據(jù)文件復(fù)制回數(shù)據(jù)庫中原來的位置,如果硬盤損壞,將備份的數(shù)據(jù)文件復(fù)制到其他硬盤上,之后使用alter命令修改數(shù)據(jù)文件名;
5)使用recover命令將所有提交的數(shù)據(jù)從歸檔日志文件和重做日志文件重新寫入已經(jīng)修復(fù)的數(shù)據(jù)文件;
6)使用alter database open命令將數(shù)據(jù)庫打開;
13.最初在關(guān)閉狀態(tài)下進(jìn)行開啟數(shù)據(jù)庫恢復(fù)的實(shí)例
1)準(zhǔn)備工作,備份數(shù)據(jù)庫
alter tablespace system begin backup;
host copy?E:\app\kxbin\oradata\orcl\system01.dbf?D:\orcl\Backup\
alter tablespace system end backup;
2)關(guān)閉數(shù)據(jù)庫
shutdown immediate;
3)模擬xiaoming_index.dbf文件丟失,刪除xiaoming_index.dbf文件
4)試著啟動數(shù)據(jù)庫
shtartup
5)第6號數(shù)據(jù)文件出現(xiàn)問題,將該文件設(shè)為脫機(jī)
alter database datafile 6 offline;
6)打開數(shù)據(jù)庫
alter database open;
7)查看數(shù)據(jù)文件的狀態(tài)
select file#,status from v$datafile;
8)查看與數(shù)據(jù)文件相關(guān)的恢復(fù)信息
select * from v$recover_file; (提示第6號數(shù)據(jù)文件已經(jīng)丟失)
9)使用操作系統(tǒng)的復(fù)制命令將備份文件復(fù)制回第6號數(shù)據(jù)文件原來的目錄下
host copy D:\orcl\Backup\xiaoming_index.dbf??E:\app\kxbin\oradata\orcl\
10)對第6號數(shù)據(jù)文件進(jìn)行恢復(fù)
recover datafile 6;
11)將xiaoming_index表空間重新設(shè)置為聯(lián)機(jī)
alter tablespace xiaoming_index online;
12)查看數(shù)據(jù)文件的當(dāng)前狀態(tài)
select file#,status from v$datafile;
14. 在關(guān)閉的狀態(tài)下進(jìn)行數(shù)據(jù)庫恢復(fù)的實(shí)例
1)準(zhǔn)備工作,備份數(shù)據(jù)庫
alter tablespace xiaoming_index begin backup;
host copy?E:\app\kxbin\oradata\orcl\system01.dbf?D:\orcl\Backup\
alter tablespace xiaoming_index end backup;
2)關(guān)閉數(shù)據(jù)庫
shutdown immediate;
3)模擬由于系統(tǒng)表空間所對應(yīng)的數(shù)據(jù)文件的損壞造成數(shù)據(jù)庫關(guān)閉的情況,刪除system01.dbf文件
4)以加載的方式啟動數(shù)據(jù)庫
startup mount?
5)使用操作系統(tǒng)的復(fù)制命令將備份文件復(fù)制到新的硬盤上
host copy?D:\orcl\Backup\system01.dbf??E:\app\kxbin\oradata\orcl\
alter database rename file 'D:\orcl\Backup\system01.dbf' to 'E:\app\kxbin\oradata\orcl\';
6)恢復(fù)數(shù)據(jù)庫
recover database;
7)打開數(shù)據(jù)庫
alter database open;
轉(zhuǎn)載于:https://www.cnblogs.com/kangxuebin/archive/2013/01/23/2873062.html
總結(jié)
以上是生活随笔為你收集整理的第19章 归档模式下的数据库恢复的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C# webbrowser控件点击页面按
- 下一篇: Hibernate的Session介绍[