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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle Redo丟失恢復方案Oracle
- Oracle recover current redo ORA-00600:[4193] (oracle 故障恢復current redo日誌ORA-00600:[4193]報錯)Oracle
- Oracle 目錄許可權丟失故障恢復Oracle
- 基於Redo Log和Undo Log的MySQL崩潰恢復流程MySql
- redo log file 最佳化
- chkdsk 後資料丟失的恢復方法
- How to Dump Redo Log File Information --metalinkORM
- 伺服器資料丟失了怎麼恢復/分割槽丟失恢復教程伺服器
- 丟失的隨身碟檔案如何恢復?
- 硬碟資料丟失如何恢復?硬碟
- 分割槽丟失資料恢復資料恢復
- 剪下的檔案還能恢復嗎,恢復剪貼丟失的檔案
- 【BBED】丟失歸檔檔案情況下的恢復
- u盤資料丟失怎麼恢復?有效的恢復方法在這裡
- Sql Server資料庫檔案丟失的恢復方法SQLServer資料庫
- Oracle閃回功能恢復偶然丟失的資料(轉)Oracle
- Omni Recover for Mac如何恢復所有丟失的iPhone資料MaciPhone
- oracle丟失的是所有的redo日誌組Oracle
- NetApp資料恢復—NetApp儲存池中劃分的卷丟失的資料恢復案例APP資料恢復
- 【raid資料恢復案例】raid擴容導致的資料丟失的資料恢復AI資料恢復
- 檔案丟失不用怕:超實用的Mac資料恢復軟體!Mac資料恢復
- 伺服器RAID資料丟失恢復伺服器AI
- OMV資料恢復NAS陣列丟失資料恢復陣列
- 電腦檔案丟失資料恢復資料恢復
- 如何恢復伺服器資料丟失伺服器
- Oracle RAC+DG 調整redo/standby log fileOracle
- MySQL的Redo log 以及Bin logMySql
- 【伺服器資料恢復】哪些故障會導致伺服器資料丟失?多塊硬碟離線的資料恢復案例伺服器資料恢復硬碟
- 虛擬機器未知原因丟失的資料恢復案例虛擬機資料恢復
- DATA GUARD主庫丟失資料檔案的恢復(3)
- 如何使用Disk Drill 3為macOS恢復丟失的資料?Mac
- DATA GUARD主庫丟失資料檔案的恢復(1)
- DATA GUARD主庫丟失資料檔案的恢復(2)
- 【ASK_ORACLE】Oracle表決磁碟丟失後的恢復方法Oracle
- 北亞伺服器資料恢復-機房斷電導致伺服器出現故障,資料丟失的資料恢復案例伺服器資料恢復
- oracle控制檔案的損壞或完全丟失的恢復辦法Oracle
- 儲存互斥失敗導致資料丟失的資料恢復成功案例資料恢復
- MySQL中的redo log和undo logMySql