Oracle-真實環境的丟失current redo log file的故障恢復

abstractcyj發表於2020-01-27

背景:客戶找到我們,反饋有一套10.2.0.4版本的Oracle資料庫,執行在Solaris Sparc 10的HA架構上, 因為共享儲存被寫滿與不恰當的操作(這是後來的Sun工程師確認),

導致資料庫異常。檢視環境時,共享儲存不能被叢集軟體掛載,同時,資料庫告警日誌中除了歸檔日誌寫滿的告警之外,未發現有其他錯誤。同時,儲存工程師確認儲存正常。

後續Sun主機工程師修復了掛載故障後發現,資料庫的當前重做日誌檔案損壞,無法讀取。於是,我們只有做了一次強制開庫。

     共享儲存使用的是ZFS檔案系統。

      

首先說明一下SMON的作用。初次恢復時,因為SMON的原因,資料庫OPEN之後,還是會例項崩潰。後續增加了10061事件引數,_smon_internal_errlimit引數,導致

例項崩潰的錯誤就少了不少

實施local instance recovery

實施OPS/RAC instance recovery

服務於排序段sort segment申請

實施transaction recovery(rollback)

清理不再使用的臨時段temporary segments

清理已經被aged out的遊標所使用的臨時表temporary tables

清理dead instance的臨時表temporary tables

 刪除OBJ$基表上不再存在的物件記錄

 若index online rebuild失敗,則負責清理ind$和indpart$

合併extents

在適當的時機收縮 rollback segment

在適當的實際offline rollback segment

恢復crash/instance recovery因datafile不可用(eg. offline)而跳過的dead transaction

恢復前臺程式因為crash而造成的dead transaction

  SMON的控制事件event列表:

event='10061 trace name context forever, level 10'禁用SMON清理臨時段(disable SMON from cleaning temp segments)

event='10269 trace name context forever, level 10'來禁用SMON合併空閒區間(Don't do coalesces of free space in SMON)

event='10052 trace name context forever'來禁止SMON清理obj$基表

設定隱藏引數_column_tracking_level(column usage tracking),該引數預設為1即啟用column使用情況跟蹤。設定該引數為0,將禁用column tracking

events '10513 trace name context forever, level 2';設定10513事件來臨時禁止SMON恢復死事務,這在我們做某些異常恢復的時候顯得異常有效,當然不建議在一個正常的生產環境中設定這個事件

event='8105 trace name context forever'來禁止SMON清理IND$(Oracle event to turn off smon cleanup for online index build)

events '12500 trace name context forever, level 10';可以在設定了12500事件後手動刪除SMON_SCN_TIME上的記錄,重啟例項後SMON會繼續正常更新SMON_SCN_TIME。

event='10511 trace name context forever, level 1'來禁用SMON OFFLINE UNDO SEGS; 但是10511事件不會跳過”Fast Ramp Up”,而僅會限制SMON對UNDO SEGS產生的工作負載。 一旦設定了10511 event, 則所有已生成的 UNDO SEGS會始終保持ONLINE狀態。

 event='10512 trace name context forever,level 1' 禁用SMON shrink rollback segment

event='10510 trace name context forever,level 1' 禁用檢測以便offline rollback

參考:https://www.cnblogs.com/macleanoracle/archive/2013/03/19/2968335.html


使用的引數檔案:

*._allow_resetlogs_corruption=TRUE

*.audit_file_dest='/opt/oracle/app/admin/orcl/adump'

*.background_dump_dest='/opt/oracle/app/admin/orcl/bdump'

*.compatible='10.2.0.3.0'

*.control_files='/dataora/orcl/control01.ctl','/dataora/orcl/control02.ctl','/dataora/orcl/control03.ctl'

*.core_dump_dest='/opt/oracle/app/admin/orcl/cdump'

*.db_block_size=8192

*.db_domain=''

*.db_file_multiblock_read_count=16

*.db_name='orcl'

*.db_recovery_file_dest='/orapool/dataora/flash_recovery_area'

*.db_recovery_file_dest_size=2147483648

*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'

*.job_queue_processes=0

*.log_archive_dest_1='location=/orapool/dataora/arch'

*.open_cursors=30000

*.pga_aggregate_target=3424649216

*.processes=1500

*.remote_login_passwordfile='EXCLUSIVE'

*.sessions=1655

*.sga_target=1610612736

*.sort_area_size=5242880

*.undo_management='AUTO'

*.undo_tablespace='UNDOTBS1'

*.fast_start_parallel_rollback=FALSE

*.user_dump_dest='/opt/oracle/app/admin/orcl/udump'

event='10061 trace name context forever, level 10'

_smon_internal_errlimit=1000000



1. 恢復資料庫

recover database until cancel;

alter database open resetlogs;


2. 匯出後遇到錯誤

ORACLE Instance orcl (pid = 11) - Error 600 encountered while recovering transaction (3, 20) on object 658092.

Sat Jan 25 11:09:23 2020

Errors in file /opt/oracle/app/admin/orcl/bdump/orcl_smon_15656.trc:

ORA-00600: internal error code, arguments: [6006], [1], [], [], [], [], [], []

重建了索引:

Database mounted.

Database opened.

SQL> select owner, object_name, object_type from dba_objects where object_id = 658092;


OWNER

------------------------------

OBJECT_NAME

--------------------------------------------------------------------------------

OBJECT_TYPE

-------------------

SCOTT

IND_TEST

INDEX



SQL> 

SQL> alter index scott.IND_TEST rebuild;        


Index altered.


參考:https://www.eygle.com/archives/2011/07/ora-600_6006_recovery.html


3.匯出資料,重建資料庫



4.匯出資料

nohup exp \'/ as sysdba\' file=/new2-orapool/orcl_20200125_test.dmp owner=test &

5. 重建資料庫,校驗資料,業務恢復



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8520577/viewspace-2674302/,如需轉載,請註明出處,否則將追究法律責任。

相關文章