こんにちは、わたあめです。先日、Oracleのインポート中にエラー(「IMP-00058: Oracleエラー1089が発生しました。」)が発生しました。
原因にすぐにたどり着いたわけではなく、色々な原因を疑って調査していました。Oracleのデータベースでトラブルが起きた時)、わたあめがどのような確認を行ったかをまとめます。
というような、私と同じ思いを持たれている方のお役に少しでも立てれば幸いです!それでは、行ってみましょう!
ログを追う
ログ確認
まず、最初に行うべき!Oracleアラートログの確認を行いました。アラートログは以下のような感じです。
Mon May 11 06:09:23 2020
Shutting down instance (immediate)
5/11の6:09分頃にいきなりシャットダウンしたんだ…!という事が読み取れます。なぜインポート中に急にシャットダウンしたんだろう?と前後のログを確認しました。
アラートログは、Oracleのバージョンによって格納場所が違うし、サーバによってもインストールした場所が違うと思うので、一概には言えませんが、「Oracle アラートログ 11g」といったキーワードで調べていくと情報が出てきます。
ログを調べる
とにかく、ログをそのまま検索ボックスに入れて、検索します。実行時に出ていた「IMP-XXXX」のエラー番号を検索したり、先ほど例にあげたログが出ていたとしたのなら、「Shutting down instance (immediate)」という感じです。とにかく、記事を読みまくりました。
パフォーマンスを確認する
インポート中に負荷がかかり過ぎて、サーバの性能が頭打ちになっていないか?!という事も確認しました。(今回エラーが出たPCは古いものだったので。最近のPCだと性能が良いから、その可能性は低いのだろうか。)
手順は、以下です。
- タスクバー(パソコン画面の下のバー)を右クリックします。
- [タスクマネージャ]をクリックします。
- [パフォーマンス]タブをクリックします。
すると、CPUやメモリ等のパフォーマンス情報が出てくるので、そこをウォッチします。使用率が90%らへんだと「ムムム…怪しい」という事になります。今回のトラブルでは、全く問題なさそうでしたが。
何かがおかしいかも?!と思ったら、Windows機能の「Windowsパフォーマンスモニター」というのがあるので、そちらで深く調べていきます。
Windowsパフォーマンスモニターは、パフォーマンスを記録(保存)することができるので、証跡として残すことも出来て便利ですよ。
進捗率を確認する
インポート処理に通常より長い時間がかかっていたので、そもそもインポート処理進んでるの?という事を確認しました。一度、レコード数を確認するSQL分を発行し、しばらくしてもう一度同じ文を発行。件数が増えていれば、インポートが進んでいる、処理が動いているということになりますね。SQL分は以下です。
select count(*) from テーブル名
SELECT文ならば、インポート中には影響ないかと思ってます。
SELECT文なので、すんなり結果が出るはず。今回のトラブルでは、インポート処理でいっぱいいっぱいだったのか、インポート中のテーブルの問い合わせにものすごく時間がかかりました。SELECT文1行なのに、20分程かかりました。
インポートしていないテーブルに問い合わせしてみると、レコードが180万で12秒ほどでしたので、20分も問い合わせにかかるのはおかしいし、件数も0だなんておかしい。進捗状況を確認するのが目的でしたが、SQL文の処理が追い付いていないというヒントが得られました。
さいごに
インポート中にトラブルが起こった時、わたあめが実際にどういう風に調査したか?!を書かせていただきました。ピンポイントなエラーに対しての解決策記事ではなく、「トラブルった時、こういうことやったよ~」という記事でした。
最後までお読みいただき、ありがとうございました。