oracle redo删除,意外删除redo的恢复
今天做了點(diǎn)刪除redo log的測(cè)試,查閱資料和實(shí)際動(dòng)手整理了一下的一些東西。
A非當(dāng)前聯(lián)機(jī)日志被刪除損壞
正常關(guān)閉數(shù)據(jù)庫(kù)
shutdown immediate
我們?cè)趏s上刪除logfile redo01.log,此redo log屬于group 1
startup mount;
startup;
select * from v$log
v$log視圖中有columnstatus和archived log,其中status有current當(dāng)前日志組,inactive非活動(dòng)日志組,active活動(dòng)日志組,unused未使用日志組,archived表示是否已經(jīng)歸檔。當(dāng)然如果是當(dāng)前日志組,oracle是不會(huì)對(duì)其歸檔的。
如果此時(shí)我們刪除的是非當(dāng)前日志redo01.log,redo01.log已經(jīng)歸檔了,此時(shí)啟動(dòng)數(shù)據(jù)庫(kù)到open狀態(tài)時(shí)oracle會(huì)提示缺少redo01.log,只需要重新一個(gè)redo01.log即可open數(shù)據(jù)庫(kù)。
Alter database clear logfile group 1或者
Alter database clear unarchived logfile group 1
如果此時(shí)是redo01.log是當(dāng)前日志組了,我們就無(wú)法clear重建了,因?yàn)榇藃edo log還沒(méi)有歸檔,所以無(wú)法重建。
B丟失當(dāng)前日志組。
利用recover database然后resetlogs
Startup mount
刪除當(dāng)前日志文件
recover database until cancel
恢復(fù)數(shù)據(jù)庫(kù)到cancel。
Alter database open resetlogs
由于丟失了當(dāng)前日志,需要以resetlogs打開數(shù)據(jù)庫(kù)。
然后數(shù)據(jù)庫(kù)可以正常啟動(dòng)了。
或者利用重建控制文件來(lái)完成數(shù)據(jù)庫(kù)的啟動(dòng)
Startup nomount
刪除當(dāng)前日志文件
Alter database backup controlfile to trace
把create controlfile的腳本存儲(chǔ)用戶跟蹤日志中
內(nèi)容如下:
CREATE CONTROLFILE REUSE DATABASE "TEST" RESETLOGSARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 'D:ORACLEPRODUCT10.2.0ORADATATESTREDO01.LOG'SIZE 50M,
GROUP 2 'D:ORACLEPRODUCT10.2.0ORADATATESTREDO02.LOG'SIZE 50M,
GROUP 3 'D:ORACLEPRODUCT10.2.0ORADATATESTREDO03.LOG'SIZE 50M,
GROUP 4 'D:ORACLEPRODUCT10.2.0ORADATATESTREDO04.LOG'SIZE 50M,
GROUP 5 'D:ORACLEPRODUCT10.2.0ORADATATESTREDO05.LOG'SIZE 50M,
GROUP 6 (
'D:ORACLEPRODUCT10.2.0ORADATATESTREDO06.LOG',
'D:ORACLEPRODUCT10.2.0ORADATAREDO06_01.LOG'
) SIZE 10M,
GROUP 7 'D:ORACLEPRODUCT10.2.0ORADATATESTTESTONLINELOGO1_MF_7_74W2F7K1_.LOG'SIZE 100M
-- STANDBY LOGFILE
DATAFILE
'D:ORACLEPRODUCT10.2.0ORADATATESTSYSTEM01.DBF',
'D:ORACLEPRODUCT10.2.0ORADATATESTUNDOTBS01.DBF',
'D:ORACLEPRODUCT10.2.0ORADATATESTSYSAUX01.DBF',
'D:ORACLEPRODUCT10.2.0ORADATATESTUSERS01.DBF',
'D:ORACLEPRODUCT10.2.0ORADATATESTYCUP_01.ORA',
'D:ORACLEPRODUCT10.2.0ORADATATESTBJ01.DBF',
'D:ORACLEPRODUCT10.2.0ORADATATESTTESTDATAFILEO1_MF_WEN_74NP5DD4_.DBF',
。。。。。。
執(zhí)行上述腳本,由于用resetlogs重建數(shù)據(jù)庫(kù)需要resetlogs打開數(shù)據(jù)庫(kù)
Alter database open resetlogs
上述兩種方法中都可以在關(guān)閉數(shù)據(jù)庫(kù)前做個(gè)測(cè)試
關(guān)閉數(shù)據(jù)庫(kù)前
Create table test_user_objects as select * from user_objects where 1<>1
Insert into test_user_objects select * from user_objects
Commit;
Select count(*)from test_user_objects
310 rows
關(guān)閉數(shù)據(jù)庫(kù)意外刪除redo log后
Select count(*)from test_user_objects
310 rows
如果當(dāng)前日志組有成員redo01_a.log和redo01_b.log,即使其中一個(gè)成員刪除了也不會(huì)影響數(shù)據(jù)庫(kù)的正常的運(yùn)行,因?yàn)閮蓚€(gè)都是同鏡像的文件。
不過(guò)在Select * from v$logfile中,status狀態(tài)顯示invaild
此時(shí)我們只需要
alter system swith logfile
alter database drop logfile member ‘’;
alter databse add logfilemember ‘’ to group 1
就可以完成日志成員的刪除和重建了,因?yàn)楫?dāng)前日志組成員是不允許刪除的,所以要做個(gè)swith!
資料上提到可以利用oracle的隱含參數(shù)_allow_resetlogs_currpotion
不過(guò)個(gè)人嘗試了一下,后果很嚴(yán)重,直接讓我的測(cè)試數(shù)據(jù)庫(kù)hang了,隱含參數(shù)最好不要用,不然oracle也不會(huì)隱藏.
對(duì)上面的一些操作有點(diǎn)需要理解的:
但是當(dāng)時(shí)根據(jù)eygle的記載;
Resetlogs打開數(shù)據(jù)庫(kù):
1執(zhí)行不完全恢復(fù)來(lái)打開數(shù)據(jù)庫(kù)
2使用了備份的控制文件啟動(dòng)數(shù)據(jù)庫(kù)
3使用帶有resetlogs啟動(dòng)數(shù)據(jù)庫(kù)
是否應(yīng)該這么理解,不完全恢復(fù)并不是用戶的數(shù)據(jù)不變,而是應(yīng)該只要丟失了當(dāng)前的redo log,因?yàn)楫?dāng)前的redo log并沒(méi)有備份,里面有記載的oracle數(shù)據(jù)的操作信息。
由于是在正常關(guān)閉數(shù)據(jù)庫(kù),sga中的buffer_cache已經(jīng)全部寫入到磁盤中去了,所以當(dāng)前的普通user的數(shù)據(jù)信息是沒(méi)有丟失的了,但是由于打開數(shù)據(jù)庫(kù)后,日志又開始記錄了,但是此時(shí)并沒(méi)有open狀態(tài),普通user無(wú)法操作數(shù)據(jù)庫(kù),但是丟失了當(dāng)前的redo log,數(shù)據(jù)庫(kù)也失去了日志的重組性。也就是不完全恢復(fù)數(shù)據(jù)庫(kù)了。
Resetlogs啟動(dòng)數(shù)據(jù)庫(kù)代表了數(shù)據(jù)庫(kù)的一個(gè)新的記錄開始,日志會(huì)重建排序生成,其中rman之前的備份信息都好像不能使用了,有網(wǎng)友說(shuō)到10G后resetlogs啟動(dòng)數(shù)據(jù)庫(kù)后rman之前的備份集依然能使用,但是俺試了幾次暫時(shí)沒(méi)有取得成功,所有不管怎樣resetlogs啟動(dòng)數(shù)據(jù)庫(kù)后最應(yīng)該做的就是來(lái)一個(gè)rman全庫(kù)備份,熱備份就是利用的備份集和redo log和archive log來(lái)恢復(fù)數(shù)據(jù)庫(kù)。
前些天又好好看了點(diǎn)eygle的循序漸進(jìn)書的后面的后記,eygle又一次強(qiáng)調(diào)了勤奮,想想以前的俺還是很是勤奮的,現(xiàn)在畢業(yè)了漫漫地忘記了這個(gè)習(xí)慣!加油!
[@more@]
總結(jié)
以上是生活随笔為你收集整理的oracle redo删除,意外删除redo的恢复的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 我的车是一汽丰田卡罗拉双擎,想问一下也买
- 下一篇: 帕拉梅拉机油盖怎么打开?