Oracle-真實環境的丟失current redo log file的故障恢復
背景:客戶找到我們,反饋有一套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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 恢復REDO Log丟失的Oracle資料庫Oracle資料庫
- 【恢復】Redo日誌檔案丟失的恢復
- Oracle Redo丟失恢復方案Oracle
- REDO檔案丟失或者損壞的恢復
- 【故障處理】DG環境主庫丟失歸檔情況下資料檔案的恢復
- oracle丟失active或current日誌檔案的恢復操作過程Oracle
- REDO檔案丟失的恢復__沒有任何備份的情況
- Oracle 目錄許可權丟失故障恢復Oracle
- Oracle資料庫Redo故障的恢復Oracle資料庫
- Oracle recover current redo ORA-00600:[4193] (oracle 故障恢復current redo日誌ORA-00600:[4193]報錯)Oracle
- 恢復丟失的控制檔案
- undo表空間檔案丟失恢復(2)--無備份有redo的情況下恢復
- undo表空間檔案丟失恢復(3)--無備份無redo的情況下恢復
- 備份恢復之redo日誌組member成員丟失
- ASM管理環境----資料檔案丟失介質恢復(MEDIA RECOVERY)ASM
- redo log檔案丟失處理措施
- 丟失當前current重做日誌檔案下恢復資料庫資料庫
- rman恢復--丟失聯機重做日誌的恢復
- Redo Log File(inactive、active)損壞,處理恢復對策
- 資料檔案丟失的恢復
- 控制檔案全部丟失的恢復
- 控制檔案部分丟失的恢復
- Oracle Password檔案丟失的恢復Oracle
- 控制檔案丟失的RMAN恢復
- dbms_backup_restore恢復測試!nocatalog,丟失controlfile的恢復辦法!REST
- 恢復archivelog模式下丟失的系統資料檔案Hive模式
- 控制檔案丟失恢復
- 【控制檔案丟失恢復】
- chkdsk 後資料丟失的恢復方法
- 聯機重做日誌丟失的恢復
- 丟失非活動日誌組的恢復
- Oracle 各種檔案丟失的恢復Oracle
- 記一次oracle資料庫redolog全部丟失的恢復Oracle資料庫
- redo的等待log file sync和log file parallel write和redo size設定Parallel
- oracle_redo*log,被移動後的恢復Oracle
- Oracle備份與恢復【丟失資料檔案的恢復】Oracle
- 伺服器資料丟失了怎麼恢復/分割槽丟失恢復教程伺服器
- RAC環境的恢復策略