日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

oracle redo删除,意外删除redo的恢复

發布時間:2024/9/19 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle redo删除,意外删除redo的恢复 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天做了點刪除redo log的測試,查閱資料和實際動手整理了一下的一些東西。

A非當前聯機日志被刪除損壞

正常關閉數據庫

shutdown immediate

我們在os上刪除logfile redo01.log,此redo log屬于group 1

startup mount;

startup;

select * from v$log

v$log視圖中有columnstatus和archived log,其中status有current當前日志組,inactive非活動日志組,active活動日志組,unused未使用日志組,archived表示是否已經歸檔。當然如果是當前日志組,oracle是不會對其歸檔的。

如果此時我們刪除的是非當前日志redo01.log,redo01.log已經歸檔了,此時啟動數據庫到open狀態時oracle會提示缺少redo01.log,只需要重新一個redo01.log即可open數據庫。

Alter database clear logfile group 1或者

Alter database clear unarchived logfile group 1

如果此時是redo01.log是當前日志組了,我們就無法clear重建了,因為此redo log還沒有歸檔,所以無法重建。

B丟失當前日志組。

利用recover database然后resetlogs

Startup mount

刪除當前日志文件

recover database until cancel

恢復數據庫到cancel。

Alter database open resetlogs

由于丟失了當前日志,需要以resetlogs打開數據庫。

然后數據庫可以正常啟動了。

或者利用重建控制文件來完成數據庫的啟動

Startup nomount

刪除當前日志文件

Alter database backup controlfile to trace

把create controlfile的腳本存儲用戶跟蹤日志中

內容如下:

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',

。。。。。。

執行上述腳本,由于用resetlogs重建數據庫需要resetlogs打開數據庫

Alter database open resetlogs

上述兩種方法中都可以在關閉數據庫前做個測試

關閉數據庫前

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

關閉數據庫意外刪除redo log后

Select count(*)from test_user_objects

310 rows

如果當前日志組有成員redo01_a.log和redo01_b.log,即使其中一個成員刪除了也不會影響數據庫的正常的運行,因為兩個都是同鏡像的文件。

不過在Select * from v$logfile中,status狀態顯示invaild

此時我們只需要

alter system swith logfile

alter database drop logfile member ‘’;

alter databse add logfilemember ‘’ to group 1

就可以完成日志成員的刪除和重建了,因為當前日志組成員是不允許刪除的,所以要做個swith!

資料上提到可以利用oracle的隱含參數_allow_resetlogs_currpotion

不過個人嘗試了一下,后果很嚴重,直接讓我的測試數據庫hang了,隱含參數最好不要用,不然oracle也不會隱藏.

對上面的一些操作有點需要理解的:

但是當時根據eygle的記載;

Resetlogs打開數據庫:

1執行不完全恢復來打開數據庫

2使用了備份的控制文件啟動數據庫

3使用帶有resetlogs啟動數據庫

是否應該這么理解,不完全恢復并不是用戶的數據不變,而是應該只要丟失了當前的redo log,因為當前的redo log并沒有備份,里面有記載的oracle數據的操作信息。

由于是在正常關閉數據庫,sga中的buffer_cache已經全部寫入到磁盤中去了,所以當前的普通user的數據信息是沒有丟失的了,但是由于打開數據庫后,日志又開始記錄了,但是此時并沒有open狀態,普通user無法操作數據庫,但是丟失了當前的redo log,數據庫也失去了日志的重組性。也就是不完全恢復數據庫了。

Resetlogs啟動數據庫代表了數據庫的一個新的記錄開始,日志會重建排序生成,其中rman之前的備份信息都好像不能使用了,有網友說到10G后resetlogs啟動數據庫后rman之前的備份集依然能使用,但是俺試了幾次暫時沒有取得成功,所有不管怎樣resetlogs啟動數據庫后最應該做的就是來一個rman全庫備份,熱備份就是利用的備份集和redo log和archive log來恢復數據庫。

前些天又好好看了點eygle的循序漸進書的后面的后記,eygle又一次強調了勤奮,想想以前的俺還是很是勤奮的,現在畢業了漫漫地忘記了這個習慣!加油!

[@more@]

總結

以上是生活随笔為你收集整理的oracle redo删除,意外删除redo的恢复的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。