発生頻度の高い ORA エラー

*以下は、サポート契約締結中のお客様に2015年8月号として配信しているサポートレターより一部抜粋して掲載しています。

システムにおいて、障害がまったく発生しないことが理想的ですが、現実的な問題として システムに障害はつきものです。このため、システムにおいて障害への対応・対策は欠かせません。特に、障害の被害や対応期間を最小限に抑えるためには、障害が発生してからの対応だけでなく、事前の対策が重要となります。

一方で、障害には多種多様なパターンが考えられるため、どのような障害が発生するか、事前に予測して対策を取っておくことは困難なように思われます。しかし、実際には障害の発生パターンには偏りがあり、「よく発生する障害」と「稀にしか発生しない障害」が存在することが一般的です。「よく発生する障害」について事前に把握しておくだけでも、比較的多くの障害に対してよりスムーズに対応できるでしょう。それは Oracle Databaseにおいても同様です。

Oracle Database には多種多様なエラーコードが存在しており、そのすべてを把握することは事実上不可能です。しかし、お客様よりいただいた当社へのお問い合わせについて、内容から統計を取ると、お問い合わせ頂いている事象のうち、ORA エラーに関するものの半分近くは、先月対処をご紹介いたしました ORA-01555 を含め、頻度ベースで上位 20 位程度に入るエラーに該当することが判明しています。

今号では、お客様のデータベース環境においてどのような問題が発生しやすいかを予測し、事前に対策を取るための一つの方策として、過去 3 年の当社オラクルプロダクトサポートへのお問い合わせにおける、発生頻度の高いエラーコードおよび、その概要について紹介いたします。ご興味のある方は是非ご一読ください。

ORA エラーの区分

発生頻度の高い ORA エラーは、エラーの性質によって大別すると、以下のとおり分類できます。


  1. 内部エラー
  2. プロシージャやスクリプトに関するエラー
  3. データベースへの接続に関するエラー
  4. 設定の不備やオペレーションミスにより発生するエラー
  5. サイジングの問題やリソースの不足に関するエラー
  6. データ破損・一貫性に関するエラー
  7. 副次的なエラー

以下の章では、それぞれの分類について、発生頻度の高いエラーの具体例および、内容の紹介を行います。なお、今号で紹介するのはあくまで概要レベルですので、詳細なエラー内容や対処方法については、オラクル社より公開されている各種技術資料をご参照ください。

※同一のエラーコードであっても原因は様々であるため、上記区分けに当てはまらない場合もあります。お問い合わせ実績をもとにした、目安程度のものとしてご理解ください。

なお、以下では各エラーに対するアクションを一言コメント程度でご紹介させて頂いておりますが、全てのエラーに共通のファーストアクションとして、オラクル社サポートサイト(My Oracle Support)での事例検索が有効です。こちらで得られた情報から問題を解決できるケースも多々存在しますので、My Oracle Support をご使用になれるお客様は、まだお使いでないようでしたら是非ご利用ください。

内部エラー

データベースインスタンス内部で予期しない異常を検知したことを示すエラー群です。具体的には以下が発生頻度の高いエラーとして挙げられます。


  • ORA-00600: 内部エラー・コード [引数]
  • ORA-07445: 例外が検出されました [引数]

ORA-00600 と ORA-07445 は、いずれもプログラムの実行中にメモリ情報の不整合などが検知され、プログラムが正常に実行できない場合に出力されるエラーです。逆にいえば、このような種類のエラーはすべて上記 2 種のエラーコードとなるため、原因は極めて多岐にわたり、エラーコード後に出力される引数が重要な情報となります。

これらのエラーは製品不具合により発生するケースが多く、オラクル社から公開されているナレッジから一致する事例が見つからない場合、自己解決は困難です。このため、診断や事例情報からの問題の解決ができない場合は、当社オラクルプロダクトサポートまでお問い合わせ頂いたうえで、原因・対処策の調査が必要となることが多いといえます。しかしながら、一致事例の存在しない内部エラーのすべてが製品不具合により発生するものではなく、設定ミスや外部要因に起因する場合もあります。まずはお問い合わせ前に以下の点をご確認いただくことをお勧めいたします。


  • 同一環境・設定の元で正常に稼働した実績はあるか
  • エラーの発生前に何らかの設定変更やオペレーションを行っていないか
  • OS レベルで何らかの問題が発生していないか

発生しているエラーの内容を診断するにあたっては、オラクル社から公開されております、以下のナレッジもあわせてご参照ください。


  • Doc#1930129.1
    [マスターノート] ORA-600 の診断
  • Doc#1930662.1
    [マスターノート] ORA-7445 および関連するコア・ダンプの診断
  • Doc#1751567.1
    [マスターノート] 内部エラー(ORA-600/ORA-7445/ORA-700)のトラブルシューティング ・ガイド(KROWN:145899)

また、当社オラクルプロダクトサポートにお問い合わせ頂く際には、以下の情報をお送り頂けますとよりスムーズな解決に繋がりますので、ご協力頂けますと幸いです。


  1. アラート・ログ(エラー発生前のデータベース再起動~エラー発生時出力を含むもの)
  2. トレース・ファイル(ファイルの場所はアラート・ログに記載されております)
  3. (出力されている場合)コアダンプ・ファイル
  4. エラーが発生したできるだけ正確な時間帯
  5. エラー発生前に行った設定変更やオペレーションの内容および実績の有無
  6. お客様環境のパッチ適用状況
  7. エラーの再現性、(エラーが再現可能な場合)エラーの再現ケースおよび再現方法
  8. インシデント・パッケージファイル(Exadata 環境のみ出力されます)
  9. RDAレポート(RDA 導入済みの環境において取得できます)
  10. OSログ上の異常出力、リソース逼迫等、データベース外部での特記事項

※各種情報の取得方法については、上記 Doc#1751567.1 に記載がございます。

ORA-00600 と ORA-007445 に関するお問い合わせの比率は ORA エラー全体の約 14% です。

プロシージャやスクリプトに関するエラー

プロシージャやスクリプトを実行、コンパイルする際に発生するエラー群です。具体的には以下が発生頻度の高いエラーとして挙げられます。


  • ORA-06512: [エラー発生個所]
  • ORA-06550: 行xxx、列yyy
  • ORA-06553: PLS-xxx

これらはセットで発生することの多いエラーで、PL/SQL の実行時・コンパイル時に問題が生じたことを示します。通常は構文ミスなどにより発生するもののため、メッセージ内容を参考にスクリプトが正しく記述されているかをご確認ください。

多くは開発・実装段階で発生するエラーのため、緊急度は低い、もしくは無視できることが一般的です。ただし、過去に正常に実行できていたプロシージャやスクリプトにおいて、急にエラーが発生するようになった場合などでは、何らかの不具合に該当している可能性があります。

ORA-06512, 06550, 06553 に関するお問い合わせの比率は ORA エラー全体の約 8%です。

データベースへの接続に関するエラー

データベースへの接続時に何らかの問題が起こって発生するエラー群です。具体的には以下が発生頻度の高いエラーとして挙げられます。


  • ORA-00609: 着信接続要求に連結できませんでした
  • ORA-03135: 接続が失われました
  • ORA-03137: TTCプロトコル内部エラー [引数]
  • ORA-03113: 通信チャネルでend-of-fileが検出されました

これらのエラーの特徴として、原因の範囲が広く影響度も一定しないことが挙げられます。データベースへの接続では、ネットワーク / Oracle Net / データベースインスタンスなどが関与していますので、これらのどこに問題があったかを切り分けることが対処の第一歩となります。

また、データベースに一切接続できない場合や、インスタンスダウン・ハングなどで接続が切断されている場合には重大な問題となりますので、発生時にはデータベースがどのような状況にあるかをすぐに確認することをお薦めします。

ORA-00609, 03135, 03137, 03113 に関するお問い合わせの比率は ORA エラー全体の約 7%です。

設定の不備やオペレーションミスにより発生するエラー

不適切なパラメータの設定や誤ったオペレーションにより発生するエラー群です。具体的には以下が発生頻度の高いエラーとして挙げられます。


  • ORA-01034: Oracleは使用できません。
  • ORA-01031: 権限が不足しています。
  • ORA-01017: ユーザー名/パスワードが無効です。ログオンは拒否されました。
  • ORA-01078: システム・パラメータの処理に失敗しました

これらのエラーのほとんどは設定・オペレーション内容を見直すことで解消することが可能です。まずはお客様側でエラー発生前に行った操作を見直していただき、どこかに設定誤りや記述ミスなどがないかをご確認ください。

ORA-01034, 01031, 01017, 01078 に関するお問い合わせの比率は ORA エラー全体の約 7%です。

サイジングの問題やリソースの不足に関するエラー

メモリや表領域内の空き容量の不足、不適切な初期化パラメータなどにより発生するエラー群です。具体的には以下が発生頻度の高いエラーとして挙げられます。


  • ORA-04030: xxxバイトを割り当てようとしてプロセス・メモリーが不足しました。
  • ORA-04031: 共有メモリーのxxxバイトを割当てできません
  • ORA-01652: 一時セグメントを拡張できません
  • ORA-00020: 最大プロセス数を超えました

これらのエラーはいずれもデータベース全体のパフォーマンスに影響を及ぼす可能性があり、緊急性の高いエラーといえますが、直接の原因がはっきりしており、エラーメッセージが示す箇所の設定値を見直すことで多くの場合は解決が可能です。まずはパラメータの設定が適切かどうかをシステムの使用状況などからご確認いただき、必要に応じてリソースの追加などもご検討ください。

ORA-04030, 04031, 01652 に関するお問い合わせの比率は ORA エラー全体の約 5%です。

データ破損・一貫性に関するエラー

データブロックの内容やデータ一貫性の保持に問題が生じたときに発生するエラー群です。具体的には以下が発生頻度の高いエラーとして挙げられます。


  • ORA-01157: データファイルxxxを識別/ロックできません
  • ORA-01578: Oracleデータ・ブロックに障害が発生しました
  • ORA-01555: スナップショットが古すぎます

ORA-01157 と ORA-01578 はいずれもデータファイルに関するエラーです。ORA-01157 はデータファイルを Oracle インスタンスがロックできないとき、ORA-01578 はブロック破損を検知したときに発生します。ORA-01157 はゾンビプロセスがデータファイルをロックしているときなどにも発生しうるため、必ずしもデータ破損を意味しているわけではありません。ファイルの破損が原因の場合、DBMS_REPAIR パッケージを使用して表の復旧を行う以外に、ディスクのリビルドなどによって対処できる場合もあります。まずはディスクの状況をお調べいただき、ハードウェア・ソフトウェアのどちらに問題が生じているのか、切り分けを行っていただくことをお薦めいたします。

ORA-01555 は一貫性を保持するための UNDO データが残っていないときに発生するエラーで、対処の要否は発生頻度やシステム要件に依存します。無視してもデータベースの動作に影響を与えることはありませんが、一貫性を保ったデータアクセスが常に要求されるようなシステムである場合や、事象の発生頻度が高いケースでは、UNDO 表領域のサイズ拡張が必要です。

ORA-01157, 01578, 01555 に関するお問い合わせの比率は ORA エラー全体の約 4%です。

※ORA-01555 については、前回、 詳しく取り上げておりますので、併せてご参照ください。

副次的なエラー

他のエラーに付随して発生するエラー群です。具体的には以下が発生頻度の高いエラーとして挙げられます。


  • ORA-00604: 再帰SQLレベルxxxでエラーが発生しました。

ORA-00604 は内部的に生成した再帰 SQL の実行中に発生するエラーで、他のエラーに付随 して発生するため、同時に発生したエラーに注目する必要があります。

上記の通り本エラーは付随的なエラーのため、ORA-00604 に関する直接のお問い合わせはほとんどありませんが、ORA-00604 が発生しているお問い合わせの比率は ORA エラー全体の約 2% 存在しています。

まとめ

Oracle Database には膨大な数のエラーコードが存在しているため、そのすべてを把握し、プロアクティブな対策を講じることは困難です。しかし、発生頻度の高い ORA エラーに絞れば、事前に情報を収集し、対策を練っておくことも可能です。本項でご紹介させて頂いた情報を活用し、エラー発生傾向の予測や事前対策にお役立てください。

(オラクル事業部 サポートセンター 平林)

発生頻度の高い ORA エラー