Oracle數(shù)據(jù)庫(kù)系統(tǒng)緊急故障處理方法
Oracle物理結(jié)構(gòu)故障是指構(gòu)成數(shù)據(jù)庫(kù)的各個(gè)物理文件損壞而導(dǎo)致的各種數(shù)據(jù)庫(kù)故障。這些故障可能是由于硬件故障造成的,也可能是人為誤操作而引起。所以我們首先要判斷問(wèn)題的起因,如果是硬件故障則首先要解決硬件問(wèn)題。在無(wú)硬件問(wèn)題的前提下我們才能按照下面的處理方發(fā)來(lái)進(jìn)一步處理。
控制文件損壞:
控制文件記錄了關(guān)于oracle的重要配置信息,如數(shù)據(jù)庫(kù)名、字符集名字、各個(gè)數(shù)據(jù)文件、日志文件的位置等等信息??刂莆募膿p壞,會(huì)導(dǎo)致數(shù)據(jù)庫(kù)異常關(guān)閉。一旦缺少控制文件,數(shù)據(jù)庫(kù)也無(wú)法啟動(dòng),這是一種比較嚴(yán)重的錯(cuò)誤。
損壞單個(gè)控制文件:
1. 確保數(shù)據(jù)庫(kù)已經(jīng)關(guān)閉,如果沒(méi)有用下面的命令來(lái)關(guān)閉數(shù)據(jù)庫(kù):
svrmgrl>shutdown immediate;
2. 查看初始化文件$ORACLE_BASE/admin/pfile/initORCL.ora,確定所有控制文件的路徑。
3. 用操作系統(tǒng)命令將其它正確的控制文件覆蓋錯(cuò)誤的控制文件。
4. 用下面的命令重新啟動(dòng)數(shù)據(jù)庫(kù):
svrmgrl>startup;
5. 用適當(dāng)?shù)姆椒ㄟM(jìn)行數(shù)據(jù)庫(kù)全備份。
損壞所有的控制文件:
1. 確保數(shù)據(jù)庫(kù)已經(jīng)關(guān)閉,如果沒(méi)有用下面的命令來(lái)關(guān)閉數(shù)據(jù)庫(kù):
svrmgrl>shutdown immediate;
2. 從相應(yīng)的備份結(jié)果集中恢復(fù)最近的控制文件。對(duì)于沒(méi)有采用帶庫(kù)備份的點(diǎn)可以直接從磁帶上將最近的控制文件備份恢復(fù)到相應(yīng)目錄;對(duì)于采用帶庫(kù)備份的點(diǎn)用相應(yīng)的rman腳本來(lái)恢復(fù)最近的控制文件。
3. 用下面的命令來(lái)創(chuàng)建產(chǎn)生數(shù)據(jù)庫(kù)控制文件的腳本:
svrmgrl>startup mount;
svrmgrl>alter database backup controlfile to trace noresetlogs;
4. 修改第三步產(chǎn)生的trace文件,將其中關(guān)于創(chuàng)建控制文件的一部分語(yǔ)句拷貝出來(lái)并做些修改,使得它能夠體現(xiàn)最新的數(shù)據(jù)庫(kù)結(jié)構(gòu)。假設(shè)產(chǎn)生的sql文件名字為createcontrol.sql.
注意:
Trace文件的具體路徑可以在執(zhí)行完第3)步操作后查看$ORACLE_BASE/admin/bdump/alert_ORCL.ora文件來(lái)確定。
5. 用下面命令重新創(chuàng)建控制文件:
svrmgrl>shutdown abort;
svrmgrl>startup nomount;
svrmgrl>@createcontrol.sql;
6. 用適當(dāng)?shù)姆椒ㄟM(jìn)行數(shù)據(jù)庫(kù)全備份。
重做日志文件損壞:
數(shù)據(jù)庫(kù)的所有增、刪、改都會(huì)記錄入重做日志。如果當(dāng)前激活的重做日志文件損壞,會(huì)導(dǎo)致數(shù)據(jù)庫(kù)異常關(guān)閉。非激活的重做日志最終也會(huì)因?yàn)槿罩厩袚Q變?yōu)榧せ畹闹刈鋈罩?,所以損壞的非激活的重做日志最終也會(huì)導(dǎo)致數(shù)據(jù)庫(kù)的異常終止。在ipas/mSwitch中每組重做日志只有一個(gè)成員,所以在下面的分析中只考慮重做日志組損壞的情況,而不考慮單個(gè)重做日志成員損壞的情況。
確定損壞的重做日志的位置及其狀態(tài):
1. 如果數(shù)據(jù)庫(kù)處于可用狀態(tài):
select * from v$logfile;
svrmgrl>select * from v$log;
2. 如果數(shù)據(jù)庫(kù)處于已經(jīng)異常終止:
svrmlgr>startup mount;
svrmgrl>select * from v$logfile;
svrmgrl>select * from v$log;
其中,logfile的狀態(tài)為INVALID表示這組日志文件出現(xiàn)已經(jīng)損壞;log狀態(tài)為Inactive:表示重做日志文件處于非激活狀態(tài);Active: 表示重做日志文件處于激活狀態(tài);Current:表示是重做日志為當(dāng)前正在使用的日志文件。
損壞的日志文件處于非激活狀態(tài):
1. 刪除相應(yīng)的日志組:
svrmgrl>alter database drop logfile group group_number;
2. 重新創(chuàng)建相應(yīng)的日志組:
svrmgrl>alter database add log file group group_number ('log_file_descritpion',…) size log_file_size;
損壞的日志文件處于激活狀態(tài)且為非當(dāng)前日志:
1. 清除相應(yīng)的日志組:
svrmgrl>alter database clear unarchived logfile group group_number;
損壞的日志文件為當(dāng)前活動(dòng)日志文件:
用命令清除相應(yīng)的日志組:
svrmgrl>alter database clear unarchived logfile group group_number;
如果清除失敗,則只能做基于時(shí)間點(diǎn)的不完全恢復(fù)。
打開(kāi)數(shù)據(jù)庫(kù)并且用適當(dāng)?shù)姆椒ㄟM(jìn)行數(shù)據(jù)庫(kù)全備份:
svrmgrl>alter database open;
[NextPage]
部分?jǐn)?shù)據(jù)文件損壞:
若損壞的數(shù)據(jù)文件屬于非system表空間,則數(shù)據(jù)庫(kù)仍然可以處于打開(kāi)狀態(tài)可以進(jìn)行操作,只是損壞的數(shù)據(jù)文件不能訪問(wèn)。這時(shí)在數(shù)據(jù)庫(kù)打開(kāi)狀態(tài)下可以單獨(dú)對(duì)損壞的數(shù)據(jù)文件進(jìn)行恢復(fù)。若是system表空間的數(shù)據(jù)文件損壞則數(shù)據(jù)庫(kù)系統(tǒng)會(huì)異常終止。這時(shí)數(shù)據(jù)庫(kù)只能以Mount方式打開(kāi),然后再對(duì)數(shù)據(jù)文件進(jìn)行恢復(fù)。可以通過(guò)查看數(shù)據(jù)庫(kù)日志文件來(lái)判斷當(dāng)前損壞的數(shù)據(jù)文件到底是否屬于system表空間。
上一頁(yè)
相關(guān)文章
oracle調(diào)試存儲(chǔ)過(guò)程的過(guò)程詳解
這篇文章主要介紹了oracle調(diào)試存儲(chǔ)過(guò)程過(guò)程詳解,文中通過(guò)圖文展示介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
oracle drop table(表)數(shù)據(jù)恢復(fù)方法
drop table刪除表以后怎樣可以恢復(fù),本文整理了一些操作語(yǔ)句,感興趣的朋友可以研究下,或許可以幫助到你2013-04-04
Oracle中行列轉(zhuǎn)換兩種實(shí)現(xiàn)方法
在Oracle中可以使用多種方法來(lái)實(shí)現(xiàn)行轉(zhuǎn)列和列轉(zhuǎn)行,這篇文章主要給大家介紹了關(guān)于Oracle中行列轉(zhuǎn)換的兩種實(shí)現(xiàn)方法,文中介紹的是用PIVOT和UNPIVOT函數(shù),需要的朋友可以參考下2023-11-11
使用Oracle進(jìn)行數(shù)據(jù)庫(kù)備份與還原
這篇文章詳細(xì)介紹了使用Oracle進(jìn)行數(shù)據(jù)庫(kù)備份與還原,本文通過(guò)示例代碼講解的非常詳細(xì),有一定的參考價(jià)值,感興趣的同學(xué)可以參考閱讀2023-04-04
ORACLE數(shù)據(jù)庫(kù)查看執(zhí)行計(jì)劃的方法
基于ORACLE的應(yīng)用系統(tǒng)很多性能問(wèn)題,是由應(yīng)用系統(tǒng)SQL性能低劣引起的,所以,SQL的性能優(yōu)化很重要,分析與優(yōu)化SQL的性能我們一般通過(guò)查看該SQL的執(zhí)行計(jì)劃,本文就如何看懂執(zhí)行計(jì)劃,以及如何通過(guò)分析執(zhí)行計(jì)劃對(duì)SQL進(jìn)行優(yōu)化做相應(yīng)說(shuō)明2012-05-05
Oracle數(shù)據(jù)庫(kù)技術(shù)(37)
Oracle數(shù)據(jù)庫(kù)技術(shù)(37)...2007-03-03

