【恩墨學院】運維經驗:回滾段異常的特殊救急方法
作者簡介:
冷菠,資深DBA,著有《Oracle高效能自動化運維》,有近10年的資料庫運維、團隊管理以及培訓經驗。擅長資料庫備份恢復、資料庫效能診斷最佳化以及資料庫自動化運維等。目前致力於大資料、智慧一體化、開源雲端計算等領域的佳實踐探索。
當Oracle回滾段異常時,將會影響CR重構、事務鎖定、塊清除等與回滾段緊密相關的資料庫功能,甚至可能會導致無法正常啟動。
因此,在回滾段出現異常後,需要對回滾段進行(特殊)恢復,遵循以下原則:
1、介質恢復(Media Recovery)是首要的恢復方式,能保證資料恢復的一致性和完整性;
2、當介質恢復不能解決問題時,可以考慮使用隱藏引數來進行特殊恢復;
3、特殊恢復作為最後的恢復手段,需要對特殊恢復帶來的風險、特殊恢復時間以及恢復失敗回退機制等要點進行綜合評估,儘可能減少資料的丟失。
隱藏引數比較危險,需慎重使用。
隱藏引數
Oracle回滾段特殊恢復相關的隱藏引數主要有:
引數_offline_rollback_segments,如下所示:
引數_corrupted_rollback_segments,如下所示:
其中:
1、隱藏引數_offline_rollback_segments在init.ora初始化引數檔案中的格式如下:
*._offline_rollback_segments=(r01,r02,r03)
回滾段r01、r02及r03為需要離線(offline)的回滾段。
2、隱藏引數_corrupted_rollback_segments在init.ora初始化引數檔案中的格式如下:
*.rollback_segments=(r01,r02,r03)
*._corrupted_rollback_segments=(r04)
回滾段r01、r02及r03為需要線上使用(onffline)的回滾段,r4為強制異常的回滾段。
場景
Oracle 回滾段隱藏引數用於回滾段異常導致資料庫無法正常工作的特殊恢復場景,主要包括:資料庫開啟、一致讀和塊清除、回滾段刪除。
回滾段隱藏引數與資料庫開啟
在資料庫開啟的過程中,處於_offline_rollback_segments/_corrupted_rollback_segments引數列表中的回滾段有以下特點:
1、資料庫不會檢查回滾段頭事務表資訊,同時,回滾段頭的活躍事務也不會被標記為“DEAD”或者“已回滾”狀態;
2、回滾段處於離線(Offline)狀態;
3、回滾段不能分配給新事務使用。
二回滾段隱藏引數與一致性讀和塊清除
對於一致性讀與塊清除而言,隱藏引數_offline_rollback_segments與_corrupted_rollback_segments在特殊恢復中的作用是不同的。
隱藏引數_offline_rollback_segments:當事務槽處於開啟狀態(ITL Open)的Block與_offline_rollback_segments引數列表上的回滾段相關時,資料庫在重新開啟過程中需要檢查_offline_rollback_segments列表上的回滾段頭事務表資訊,獲取事務的狀態:
1、事務提交(Inactive),塊清除;
2、事務未提交(Active),其他Session讀取該Block時,則需要應用Undo Record來重構CR Copy。NOTE
儘管offline_rollback_segments列表上的回滾段被Offline,Oracle仍然會讀取這些回滾段來檢查事務狀態,在回滾段Online後應用Undo Record實現回滾。如果offline_rollback_segments列表中存在與事務相關的回滾段壞塊,那麼Oracle回滾操作就會失敗
隱藏引數_corrupted_rollback_segments:當事務槽處於開啟狀態(ITL Open)的Block與_corrupted_rollback_segments引數列表上的回滾段相關時,資料庫在重新開啟過程中不會讀取_corrupted_rollback_segments列表上的回滾段事務表資訊,這樣就可以利用這個特性越過系統對回滾段的檢查來嘗試啟動資料庫。
1、如果活躍事務沒有提交,將會出現邏輯異常錯誤,可以使用引數_corrupted_rollback_segments來越過系統檢查,嘗試啟動資料庫;
2、當_corrupted_rollback_segments列表中的回滾段被刪除後,系統會將“DEAD”狀態的事務當作已經被提交,進行延遲塊清除。
NOTE
隱藏引數_offline_rollback_segments與_corrupted_rollback_segments的最大區別是:
1、_offline_rollback_segments列表中的回滾段頭事務表在資料庫開啟過程中需要被讀取;
2、_corrupted_rollback_segments列表中的回滾段事務表在資料庫開啟過程中不需要被讀取,Oracle會將_corrupted_rollback_segments列表中的回滾段當作已經“Drop”處理。這樣的好處就是可以在回滾段異常時,將異常回滾段新增到_corrupted_rollback_segments引數列表中,越過系統檢查,從而開啟資料庫。
如果在ITL被清除前,標記為“corrupted”狀態的回滾段被Oracle重用(從_corrupted_rollback_segmens引數列表中移除),這時就需要回滾之前已經提交事務,導致Block邏輯異常。為了避免這些問題,因此建議在使用隱藏引數_corrupted_rollback_segments後,將引數列表中的回滾段刪除。
三回滾段隱藏引數與回滾段刪除
在一般情況下,Oracle 回滾段是不能被刪除(Drop)的,這是因為回滾段中包含了活動事務(Active)資訊,儲存了事務恢復的回滾記錄。為了保護資料的一致性,Oracle不允許刪除有活動事務的回滾段。
在特殊情況下,將存在活動事務的回滾段新增到_corrupted_rollback_segments列表中,就可以忽略回滾段保護機制。也就是說,在資料庫啟動過程中,處於_corrupted_rollback_segments列表中包含有活動事務的回滾段可以被刪除。方法就是將該回滾段新增到_corrupted_rollback_segments列表中。刪除活動事務回滾段示例如下:
NOTE
在使用_corrupted_rollback_segments引數後,資料庫執行可能比較正常,但是出現問題的潛在風險將增大;刪除_corrupted_rollback_segments列表中包含有活動事務的回滾段時,存在邏輯錯誤的風險以及資料字典異常的風險,這可能將是一種災難,因此需要慎用該引數;建議在大多數情況下保持資料庫的正常啟動,儘可能少地使用隱藏引數,規避風險。
實戰
當存在活動事務的回滾段表空間出現異常時,可以透過以下步驟進行特殊恢復。
1、建立新的init.ora初始化引數檔案(pfile),語法格式如下:
create pfile=from spfile;
2、修改新init.ora初始化引數檔案,將異常回滾段表空間的回滾段新增_corrupted_rollback_segments引數列表中,如下所示:
NOTE
一般情況下,只需要將異常回滾段新增到_corrupted_rollback_segments列表中即可,如果回滾段表空間中所有回滾段都異常,則需要將所有異常的回滾段都新增到_corrupted_rollback_segments列表中。
3、使用修改後的init.ora初始化引數檔案啟動資料庫:
startup restrict pfile='';
NOTE
在資料庫啟動過程中,可以根據需要使用open resetlogs的方式開啟資料庫(只有部分資料丟失)。
4、在啟動成功的資料中建立新的回滾段表空間,語法如下:
create undo tablespace undotbs2 datafile '' size 16384mautoextend retention noguarantee;
5、刪除異常的回滾段表空間,使用以下命令:
alter tablespace undotbs1 offline immediate;
drop tablespace undotbs1 including contents and datafiles;
NOTE
當刪除異常的回滾段表空間完成後,_corrupted_rollback_segment列表中只有與活動事務相關的回滾段存在部分資料丟失。這樣就保證了資料庫正常啟動的同時,也儘可能地減少了資料的丟失。
、
6、使用以下命令,關閉資料庫:
shutdown immediate;
7、修改init.ora初始化引數檔案,重新配置新的回滾段表空間,如下所示:
8、正常啟動資料庫,並重建spfile:
startup;
create spfile from pfile=;
至此,基於隱藏引數的回滾段特殊恢復就告一段落。
恩墨學院隸屬於雲和恩墨(北京)資訊科技有限公司,致力於提供專業高水準的與大資料培訓服務,挖掘培養大資料與資料庫人才。恩墨學院提供包括個人實戰技能培訓、個人認證培訓、企業內訓在內的全方位大資料和資料庫技術培訓。ACE級別超強師資,配備專業實驗室,沉浸式學習與訓練,專業實驗室、配備專業助教指導訓練。能迅速融入專家圈子,業內資源豐富,迅速積累職場人脈。課程包括:班、Oracle 、Oracle OCP考試等。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28530558/viewspace-2149881/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【恩墨學院】超實用運維經驗:TEMP表空間不足、熱塊競爭經典案例運維
- 【恩墨學院】恩墨學院獲得Oracle WDP全國授權Oracle
- 【恩墨學院】阿里雲資料庫CloudDBA的自動運維與智慧最佳化探索阿里資料庫Cloud運維
- 回滾操作、回滾段的理解
- 【恩墨學院】深入剖析 Group Replication核心的引擎特性
- 【恩墨學院】5 分鐘帶你看懂 DockerDocker
- 【恩墨學院】深度學習在美團點評推薦平臺排序中的運用深度學習排序
- 【恩墨學院】如何理解並正確使用MySql索引MySql索引
- 運維經理的運維經驗總結運維
- ORACLE回滾段Oracle
- 【恩墨學院】深入剖析:關於cache buffers chains的經典案例處理詳解?AI
- 回顧走上Linux運維路上的那點經驗Linux運維
- 【恩墨學院】Oracle Redo的產生場景及最佳化Oracle Redo
- 【恩墨學院】基於裸資料的異地資料庫效能診斷與最佳化資料庫
- 【恩墨學院】深入剖析 - Oracle SCN機制詳細解讀Oracle
- 【恩墨學院】5分鐘速成Oracle 12.2 RAC 專家Oracle
- ORACLE回滾段(1)Oracle
- ORACLE回滾段(2)Oracle
- ORACLE回滾段(轉)Oracle
- ORACLE回滾段管理Oracle
- 【恩墨學院】空與非空 EMPTY_LOB和NULL的區別Null
- 【恩墨學院】經典故障分析 - ASSM引發的索引爭用與 enq HW -contention 等待事件SSM索引ENQ事件
- Oracle的回滾段介紹Oracle
- 【恩墨學院】原來銀行都在用這些資料庫資料庫
- 【恩墨學院】走在專家的路上,每天一條SQL最佳化SQL
- hadoop運維經驗Hadoop運維
- ORACLE 回滾段詳解Oracle
- 【恩墨學院】一次由查詢轉換引起的效能問題的分析
- SQL code----檢視回滾段名稱及大小 回滾段的管理SQL
- 【恩墨學院】Oracle DG測試failover和後續恢復報告OracleAI
- 【恩墨學院】IT基礎架構變革在路上:青海移動的去“IE”之旅架構
- 【恩墨學院】從商用到開源:DB2遷移至MySQL的最佳實踐DB2MySql
- 回滾段完蛋了的處理
- 【恩墨學院】當Java虛擬機器遇上Linux Arena記憶體池Java虛擬機Linux記憶體
- 【恩墨學院】美團點評資料庫高可用架構的演進與設想資料庫架構
- 【恩墨學院】DBMS_FILE_TRANSFER為ASM的檔案傳輸提供了新的選擇ASM
- oracle回滾段 undo 表空間Oracle
- ORACLE技術專題-- 回滾段Oracle