Oracle故障處理之ORA-00600錯(cuò)誤處理思路分析
項(xiàng)目場(chǎng)景
在某項(xiàng)目數(shù)據(jù)庫(kù)運(yùn)維群,有現(xiàn)場(chǎng)同事發(fā)了張報(bào)錯(cuò)截圖如下。
報(bào)錯(cuò)復(fù)現(xiàn)很簡(jiǎn)單:
現(xiàn)場(chǎng)有一張重要性很高的業(yè)務(wù)表,因?yàn)殡[私,我在這里給它賦名為A表?,F(xiàn)場(chǎng)對(duì)A表做INSERT、UPDATE、DELETE等操作時(shí),全部報(bào)錯(cuò),報(bào)錯(cuò)提示就是上面的ORA-00600。
也就是說(shuō)現(xiàn)在在A表上發(fā)生任何事務(wù),都會(huì)報(bào)錯(cuò)ORA-00600。
問(wèn)題分析
ORA-00600是Oracle數(shù)據(jù)庫(kù)內(nèi)部錯(cuò)誤。這個(gè)錯(cuò)誤通常會(huì)伴隨一個(gè)錯(cuò)誤代碼(例如:ORA-00600: internal error code, arguments: [1234], [a], [b], [c], ...)。上圖即是例子。它沒(méi)有一個(gè)具體的解決方案??梢缘顷?my oracle support 查詢比對(duì)。
但對(duì)于實(shí)際生產(chǎn)來(lái)講,等不及問(wè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, 獲取原來(lái)的建表語(yǔ)句,直接建表。
Ⅲ:創(chuàng)建新A表索引
獲取舊A表的索引信息,給新A表也創(chuàng)建對(duì)應(yīng)的索引。
此時(shí)新的A表上發(fā)生事務(wù)是沒(méi)有問(wèn)題的,業(yè)務(wù)此時(shí)其實(shí)已經(jīng)可以恢復(fù)正常了。
Ⅳ:與舊表進(jìn)行數(shù)據(jù)整合
現(xiàn)在新A表雖然已正常,業(yè)務(wù)也可以正常展開(kāi)。但是A表畢竟還是缺失原有的數(shù)據(jù),需要將舊A表的數(shù)據(jù)進(jìn)行整合。此時(shí)整合的方式就有很多選擇,可以寫(xiě)PLSQL,也可以使用kettle這種ETL工具都可以快速的進(jìn)行整合。
Ⅴ:數(shù)據(jù)驗(yàn)證
整合完數(shù)據(jù)后,還是需要應(yīng)用系統(tǒng)的工程人員進(jìn)行數(shù)據(jù)驗(yàn)證,看是否正常。
優(yōu)化建議
其實(shí)當(dāng)時(shí)我有想過(guò)立即切換到容災(zāi)庫(kù),但是被領(lǐng)導(dǎo)否決了。因?yàn)樵撳e(cuò)誤屬于是邏輯錯(cuò)誤,而項(xiàng)目上的RPO接近0,數(shù)據(jù)在實(shí)時(shí)進(jìn)行同步,在發(fā)現(xiàn)報(bào)錯(cuò)時(shí),邏輯錯(cuò)誤數(shù)據(jù)已經(jīng)同步到容災(zāi)備庫(kù)中,即使切換到容災(zāi)備庫(kù),錯(cuò)誤記錄依然存在,數(shù)據(jù)庫(kù)依然無(wú)法正常對(duì)外提供服務(wù)。需要手動(dòng)處理掉數(shù)據(jù)庫(kù)中的邏輯錯(cuò)誤,才能修復(fù)數(shù)據(jù)庫(kù)。
后來(lái)和處理該問(wèn)題的前輩請(qǐng)教溝通,前輩講的優(yōu)化建議非常有用:
對(duì)容災(zāi)數(shù)據(jù)庫(kù)定時(shí)做快照,在發(fā)生邏輯錯(cuò)誤時(shí),可以將容災(zāi)數(shù)據(jù)庫(kù)回退到邏輯錯(cuò)誤發(fā)生前,然后切換容災(zāi)數(shù)據(jù)庫(kù)。
總結(jié)
到此這篇關(guān)于Oracle故障處理之ORA-00600錯(cuò)誤處理思路分析的文章就介紹到這了,更多相關(guān)Oracle ORA-00600錯(cuò)誤處理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
oracle10g全文索引自動(dòng)同步語(yǔ)句使用方法
這篇文章主要介紹了oracle10g全文索引自動(dòng)同步語(yǔ)句使用方法,需要的朋友可以參考下2014-03-03oracle中利用關(guān)鍵字rownum查詢前20名員工信息及rownum用法
這篇文章主要介紹了oracle中利用關(guān)鍵字rownum查詢前20名員工信息,本文通過(guò)代碼給大家簡(jiǎn)單介紹了ORACLE 中ROWNUM用法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-04-04Oracle中PL/SQL中if語(yǔ)句的寫(xiě)法介紹
以下是對(duì)Oracle中PL/SQL中if語(yǔ)句的寫(xiě)法進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過(guò)來(lái)參考下2013-08-08Oracle一個(gè)用戶如何訪問(wèn)其它用戶的表應(yīng)用指南
本文將詳細(xì)介紹Oracle一個(gè)用戶如何訪問(wèn)其它用戶的表,需要的朋友可以參考下2012-11-11oracle 創(chuàng)建字段自增長(zhǎng)實(shí)現(xiàn)方式
這篇文章主要介紹了oracle 創(chuàng)建字段自增長(zhǎng)實(shí)現(xiàn)方式的相關(guān)資料,需要的朋友可以參考下2016-10-10Oracle監(jiān)聽(tīng)注冊(cè)的實(shí)現(xiàn)
Oracle數(shù)據(jù)庫(kù)的注冊(cè)監(jiān)聽(tīng)功能是Oracle數(shù)據(jù)庫(kù)管理的一個(gè)重要組成部分,它允許數(shù)據(jù)庫(kù)實(shí)例接收來(lái)自客戶端請(qǐng)求,并且可以自動(dòng)恢復(fù)數(shù)據(jù)庫(kù)服務(wù),感興趣的可以了解一下2023-12-12Orcle的package中訪問(wèn)其它Schema的表報(bào)錯(cuò)ORA-00942解決方法
package要訪問(wèn)其它Schema的表,但編譯報(bào)錯(cuò)ORA-00942,經(jīng)過(guò)搜索了一下找到了解決方法下面與大家分享下2013-05-05Oracle數(shù)據(jù)庫(kù)中TRUNC()函數(shù)示例詳解
在Oracle數(shù)據(jù)庫(kù)中TRUNC函數(shù)主要用于截?cái)嗳掌?、時(shí)間或數(shù)值,通過(guò)指定不同的格式參數(shù),可以截取日期或時(shí)間的特定部分,如年份、月份、小時(shí)等,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-10-10