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