7 x 24 在线支持!
Oracle ORA-600 [4000] が発生し、DATABASE起動不可
ORACLEデータベース によくあるエラ の解決策
プロのOracle Databaseの復旧サービスを提供
携帯番号: +86 13764045638 メール:[email protected]
[起こりうる現象]
ORA-600 [4000] によりDBの起動不可。
以下のような bootstrap$ に対して alter文 を実行すると、ORA-701が発生します。
alter table bootstrap$ storage (freelists 10);
% oerr ora 701
00701, 00000, "object necessary for warmstarting database cannot be altered"
// *Cause: Attempt to alter or drop a database object (table, cluster, or index)
// which are needed for warmstarting the database.
// *Action: None.
実際に alter文 は上記エラーにより実行できませんが、その後DBを再起動すると、
ORA-600[4000]、ORA-704 が発生し、起動ができなくなります。
トレースファイルは以下のような出力になります。
ksedmp: internal or fatal error
ORA-00600: ?????????,??:[4000],[1],[],[],[],[],[],[]
Current SQL statement for this session:
select line#, sql_text from bootstrap$ where obj# != :1
----- Call Stack Trace -----
calling call entry argument values in hex
location type point (? means dubious value)
-------------------- -------- -------------------- ----------------------------
ksedmp()+168 CALL ksedst()+0 540 ? 0 ? FFBE90B0 ?
FFBE8B54 ? FFBE8B38 ? 0 ?
kgeriv()+196 PTR_CALL 00000000 3 ? 0 ? 0 ? 258 ? 1 ? FA0 ?
kgeasi()+164 CALL kgeriv()+0 18600FC ? 18CDFF0 ? 14ABF20 ?
1 ? FFBE9878 ? 1850398 ?
ktudba()+440 CALL kgeasi()+0 18600FC ? 18CDFF0 ? FA0 ? 2 ?
1 ? 0 ?
ktugusc()+776 CALL ktudba()+0 1 ? FFBE990C ? 0 ? FFBE9914 ?
FFBE990C ? 0 ?
ktugti()+196 CALL ktugusc()+0 FFBE99A0 ? 1 ? 1 ? 0 ? 0 ?
0 ?
ktuxcm()+28 CALL ktugti()+0 FFBE9C00 ? 0 ? 0 ? 0 ?
800F6AAC ? 0 ?
ktecgetsh()+372 CALL ktuxcm()+0 FFBE9C00 ? 1000000 ? 1 ?
80044658 ? 800C82DC ?
800C82D8 ?
ktecgsh()+252 CALL ktecgetsh()+0 FFBE9D6C ? 1 ? FFBE9AE8 ? 4 ?
1 ? FFBE9D6C ?
kteinicnt()+216 CALL ktecgsh()+0 FFBE9D6C ? 1 ? 4 ? 2 ? 0 ?
FFBE9D6D ?
qertbFetch()+472 CALL kteinicnt()+0 FFBE9F70 ? 0 ? 0 ? FFBE9F6C ?
0 ? 0 ?
opifch()+4664 PTR_CALL 00000000 17 ? 0 ? 10000 ? 18D9C24 ?
0 ? 18D9C14 ?
[対象リリース]
問題が発生するリリース :8.1.6, 8.1.7, 9.0.1, 9.2.0
問題を修正したリリース :Oracle Database 10g (10.1.0)
問題を修正予定のリリース:なし
問題を修正したPSR :なし
問題を修正予定のPSR :なし
[対象プラットフォーム]
すべてのプラットフォーム
[起こりうる条件]
次の条件を満たす場合に発生します。
- bootstrap$ に対して alter文 を実行後に、DBを再起動
[原因]
製品の不具合です。
ORA-600[4000]は、undo segemnt番号を獲得するのに失敗した場合に発生するエラーです。
ORA-701が返されるまでに、内部的に bootstrap$表のsegment header情報の更新を行うための
DISK LOCKが獲得されるのですが、そのDISK LOCKに対するundoが生成されないために、
ORA-701により処理がROLLBACKされても、DISK LOCKが開放されない状態になります。
その後、DBが起動されると、bootstrap$表がlockされているため そのlockを開放(cleanup)しよう
とするのですが、undo segmentがonlineになっていないため、ORA-600[4000] が発生します。
(今回の場合、たとえ undo segmentがonlineであったとしても、DISK LOCKに対するundoが
存在しないため、cleanupはできません。)
[回避策]
bootstrap$ に対して alter文 を実行しないでください。
alter文を実行してしまった場合、alter文を実行する前までの状態に、BACKUPからリカバリ
する必要があります。
もし、ORA-701 が発生した時点のままデータベースが起動している場合には、以下のコマンド
を実行する事で、現象の発生を回避する事が可能です。
SQL> select * from sys.bootstrap$;
沪公网安备 31010802001377号