7 x 24 在线支持!
Oracle ORA-600 [4000] が発生し、DATABASE起動不可
ORACLEデータベース によくあるエラ の解決策
プロのOracle Databaseの復旧サービスを提供
携帯番号: +86 13764045638 メール:service@parnassusdata.com
[起こりうる現象] 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$;