Oracle故障處理之ORA-00600錯誤處理思路分析
項目場景
在某項目數(shù)據(jù)庫運維群,有現(xiàn)場同事發(fā)了張報錯截圖如下。
報錯復現(xiàn)很簡單:
現(xiàn)場有一張重要性很高的業(yè)務表,因為隱私,我在這里給它賦名為A表?,F(xiàn)場對A表做INSERT、UPDATE、DELETE等操作時,全部報錯,報錯提示就是上面的ORA-00600。
也就是說現(xiàn)在在A表上發(fā)生任何事務,都會報錯ORA-00600。
問題分析
ORA-00600是Oracle數(shù)據(jù)庫內(nèi)部錯誤。這個錯誤通常會伴隨一個錯誤代碼(例如:ORA-00600: internal error code, arguments: [1234], [a], [b], [c], ...)。上圖即是例子。它沒有一個具體的解決方案??梢缘顷?my oracle support 查詢比對。
但對于實際生產(chǎn)來講,等不及問題分析查清解決了。所以采取了如下思路:
Ⅰ:將A表重命名為 A_BAK_0422
alter table A rename to A_BAK_0422;
Ⅱ:建一張空表,表名為 A
考慮到 A 表本身數(shù)據(jù)量龐大,有125G,所以不適合使用如下代碼,效率太低。
CREATE TABLE A AS SELECT * FROM A_BAK_0422
所以只能建空表 A, 獲取原來的建表語句,直接建表。
Ⅲ:創(chuàng)建新A表索引
獲取舊A表的索引信息,給新A表也創(chuàng)建對應的索引。
此時新的A表上發(fā)生事務是沒有問題的,業(yè)務此時其實已經(jīng)可以恢復正常了。
Ⅳ:與舊表進行數(shù)據(jù)整合
現(xiàn)在新A表雖然已正常,業(yè)務也可以正常展開。但是A表畢竟還是缺失原有的數(shù)據(jù),需要將舊A表的數(shù)據(jù)進行整合。此時整合的方式就有很多選擇,可以寫PLSQL,也可以使用kettle這種ETL工具都可以快速的進行整合。
Ⅴ:數(shù)據(jù)驗證
整合完數(shù)據(jù)后,還是需要應用系統(tǒng)的工程人員進行數(shù)據(jù)驗證,看是否正常。
優(yōu)化建議
其實當時我有想過立即切換到容災庫,但是被領(lǐng)導否決了。因為該錯誤屬于是邏輯錯誤,而項目上的RPO接近0,數(shù)據(jù)在實時進行同步,在發(fā)現(xiàn)報錯時,邏輯錯誤數(shù)據(jù)已經(jīng)同步到容災備庫中,即使切換到容災備庫,錯誤記錄依然存在,數(shù)據(jù)庫依然無法正常對外提供服務。需要手動處理掉數(shù)據(jù)庫中的邏輯錯誤,才能修復數(shù)據(jù)庫。
后來和處理該問題的前輩請教溝通,前輩講的優(yōu)化建議非常有用:
對容災數(shù)據(jù)庫定時做快照,在發(fā)生邏輯錯誤時,可以將容災數(shù)據(jù)庫回退到邏輯錯誤發(fā)生前,然后切換容災數(shù)據(jù)庫。
總結(jié)
到此這篇關(guān)于Oracle故障處理之ORA-00600錯誤處理思路分析的文章就介紹到這了,更多相關(guān)Oracle ORA-00600錯誤處理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
oracle中利用關(guān)鍵字rownum查詢前20名員工信息及rownum用法
這篇文章主要介紹了oracle中利用關(guān)鍵字rownum查詢前20名員工信息,本文通過代碼給大家簡單介紹了ORACLE 中ROWNUM用法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2019-04-04oracle 創(chuàng)建字段自增長實現(xiàn)方式
這篇文章主要介紹了oracle 創(chuàng)建字段自增長實現(xiàn)方式的相關(guān)資料,需要的朋友可以參考下2016-10-10Orcle的package中訪問其它Schema的表報錯ORA-00942解決方法
package要訪問其它Schema的表,但編譯報錯ORA-00942,經(jīng)過搜索了一下找到了解決方法下面與大家分享下2013-05-05Oracle數(shù)據(jù)庫中TRUNC()函數(shù)示例詳解
在Oracle數(shù)據(jù)庫中TRUNC函數(shù)主要用于截斷日期、時間或數(shù)值,通過指定不同的格式參數(shù),可以截取日期或時間的特定部分,如年份、月份、小時等,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2024-10-10