您好,登錄后才能下訂單哦!
背景:客戶找到我們,反饋有一套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. 重建數據庫,校驗數據,業務恢復
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。