Oracle故障處理之ORA-00600錯誤處理思路分析
項目場景
在某項目數(shù)據(jù)庫運(yùn)維群,有現(xiàn)場同事發(fā)了張報錯截圖如下。
報錯復(fù)現(xiàn)很簡單:
現(xiàn)場有一張重要性很高的業(yè)務(wù)表,因為隱私,我在這里給它賦名為A表。現(xiàn)場對A表做INSERT、UPDATE、DELETE等操作時,全部報錯,報錯提示就是上面的ORA-00600。
也就是說現(xiàn)在在A表上發(fā)生任何事務(wù),都會報錯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)建對應(yīng)的索引。
此時新的A表上發(fā)生事務(wù)是沒有問題的,業(yè)務(wù)此時其實已經(jīng)可以恢復(fù)正常了。
Ⅳ:與舊表進(jìn)行數(shù)據(jù)整合
現(xiàn)在新A表雖然已正常,業(yè)務(wù)也可以正常展開。但是A表畢竟還是缺失原有的數(shù)據(jù),需要將舊A表的數(shù)據(jù)進(jìn)行整合。此時整合的方式就有很多選擇,可以寫PLSQL,也可以使用kettle這種ETL工具都可以快速的進(jìn)行整合。
Ⅴ:數(shù)據(jù)驗證
整合完數(shù)據(jù)后,還是需要應(yīng)用系統(tǒng)的工程人員進(jìn)行數(shù)據(jù)驗證,看是否正常。
優(yōu)化建議
其實當(dāng)時我有想過立即切換到容災(zāi)庫,但是被領(lǐng)導(dǎo)否決了。因為該錯誤屬于是邏輯錯誤,而項目上的RPO接近0,數(shù)據(jù)在實時進(jìn)行同步,在發(fā)現(xiàn)報錯時,邏輯錯誤數(shù)據(jù)已經(jīng)同步到容災(zāi)備庫中,即使切換到容災(zāi)備庫,錯誤記錄依然存在,數(shù)據(jù)庫依然無法正常對外提供服務(wù)。需要手動處理掉數(shù)據(jù)庫中的邏輯錯誤,才能修復(fù)數(shù)據(jù)庫。
后來和處理該問題的前輩請教溝通,前輩講的優(yōu)化建議非常有用:
對容災(zāi)數(shù)據(jù)庫定時做快照,在發(fā)生邏輯錯誤時,可以將容災(zāi)數(shù)據(jù)庫回退到邏輯錯誤發(fā)生前,然后切換容災(zāi)數(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一個用戶如何訪問其它用戶的表應(yīng)用指南
本文將詳細(xì)介紹Oracle一個用戶如何訪問其它用戶的表,需要的朋友可以參考下2012-11-11oracle 創(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ù),可以截取日期或時間的特定部分,如年份、月份、小時等,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-10-10