window oracle 只有bak文件怎么恢复_一起来学习Oracle的备份恢复基础吧-4
基于backup controlfile的恢復
使用備份的控制文件在實際工作中的兩種情況:
當前控制文件全部損壞,而數據文件備份、控制文件備份及當前的日志處在不同的SCN版本,它們之間又增加過表空間(數據文件)。
當前控制文件沒有損壞,但是想恢復被刪除的表空間。
使用備份的控制文件恢復數據庫的語法
recover database until [time|change] using backup controlfile
注意:[time|change]是可選的,如果條件滿足,仍然可以做到完全恢復,然后會出現如下選項:
Specify log: {=suggest | filename | AUTO | CANCEL }
此語法的出現是由于控制文件和當前日志中的SCN不一致,當前日志中的SCN總是最新的,而控制文件可能是老的或尚未更新的(shutdown abort過)。
AUTO:自動使用archivelog前滾恢復,但是一般不包括前滾current log;
filename:輸入當前文件的路徑和文件名,是指current log的恢復;
CANCEL:退出
注意:
1. 控制文件丟失進行恢復將會出現停機時間,不能聯機進行控制文件的恢復。
1. 使用backup controlfile子句恢復數據庫之后,一般用alter database open resetlogs打開數據庫。
例子
例1 當前控制文件損壞,數據文件損壞,有全備但之后增加了表空間,并備份了控制文件(控制文件次新,包含了新建的表空間)。
分析:新建表空間數據文件損壞,全備里沒有該數據文件的備份及控制文件描述,當前控制文件又丟失,只能用備份的控制文件恢復。
模式:所有數據文件備份---新建表空間----備份控制文件(次新)---日志文件(新)
1. 備份數據文件并新創建表空間,表
c. 備份控制文件
alter database backup controlfile to '/opt/oracle/app/oradata/test.bak/con.bak1';
d. 模擬數據文件故障
rm abcd01.dbf
e. 恢復所有數據文件備份,準備做不完全恢復
f. 啟動庫
g. 查看scn信息
可以看出:
1) file5在控制文件記錄的是abcd01,而與之對應的數據文件5是不存在的
2) 備份的數據文件scn比控制文件scn還老
h. 使用備份的控制文件恢復
recover database using backup controlfile;
報錯信息:ORA-00283ORA-01110ORA-01157ORA-01110
此報錯是因為老備份里沒有abcd表空間,但是控制文件里記錄了abcd,方法是建一個新的datafile空文件,而其中的內容可由日志文件recover(前滾)時填補出來;
alter database create datafile '/opt/oracle/app/oradata/test/abcd01.dbf';
再次使用recover database using backup controlfile;
查看redo3里包含9
i. resetlogs打開數據庫
alter database open resetlogs;
例2當前控制文件損壞,新建表空間在備份控制文件之后
模式:全備(老)--備份控制文件(次新)--新建表空間----日志文件(新)
分析:整個恢復過程中datafile結構發生了變化,變化發生在備份控制文件之后,新增了表空間,而控制文件中沒有此表空間記錄,但日志里有。
1. 備份數據文件
cp *.dbf
1. 備份控制文件
alter database backup controlfile to '/opt/oracle/app/oradata/test.bak/con.bak';
1. 新建表空間、表
m. 模擬新建數據文件損壞,將備份的數據文件、控制文件還原
n. 查看scn版本
可以看出控制文件scn要比數據文件scn新
o. 開啟庫并使用備份控制文件恢復數據庫
SQL> recover database using backup controlfile;
出現報錯信息:ora-00283ora-01244ora-01110
恢復后控制文件出現UNNAMED00005,老控制文件不知道之后的timran01.dbf
p. 重命名數據文件
alter database create datafile '/opt/oracle/app/product/11.2.0/db_1/dbs/UNNAMED00005' as '/opt/oracle/app/oradata/test/timran01.dbf'; --這條命令自動完成兩天動作:加了個數據文件timran01.dbf;重命名控制文件UNNAMED00005為timran01.dbf
q. 再次恢復database
r. resetlogs打開庫
例3恢復被刪除的表空間
環境;用戶使用正常的操作命令刪除了表空間及數據文件,但之后又希望恢復刪除的表空間,全備里有這個表空間的數據文件。
模式:全備(老)----控制文件備份(次新)------刪除表空間----所需日志(新)
分析:當用戶使用drop tablespace xxx including contents and datafiles 這條DDL語句后,數據結構發生了變更,涉及到了3個地方:控制文件、該表空間下的數據文件、系統表空間(數據字典)
注意:當前控制文件里已經沒有該表空間的信息了,所以不能使用當前的控制文件做恢復。恢復表空間要滿足三個條件:
1. 要有該表空間的數據文件備份
1. 要使用不完全恢復(基于時間點或SCN)
1. 使用備份的控制文件,而這個控制文件是刪除該表空間前的控制文件,不是當前的控制文件。這個非常重要,該控制文件中記錄了需要恢復的數據庫結構,重要的這個控制文件必須包括有你要恢復的那個表空間的信息。
1. 記錄當前scn
select current_scn from v$database;
w. 備份控制文件
x. 刪除表空間及數據文件
y. 刪除所有的數據文件和當前控制文件,還原所有數據文件及備份的控制文件
z. 啟動數據庫做基于時間點(或scn)的不完全恢復
recover database until change SCN using backup controlfile;
aa. alter database open resetlogs;
32
總結
以上是生活随笔為你收集整理的window oracle 只有bak文件怎么恢复_一起来学习Oracle的备份恢复基础吧-4的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 理想 MEGA 纯电 MPV 车型入网工
- 下一篇: java的hr样式,spring+spr