大阪市中央区 システムソフトウェア開発会社

営業時間:平日09:15〜18:15
MENU

ORA-12514の原因は、ORA-19815だったのねの巻

著者:杉山貴規
公開日:2018/08/27
最終更新日:2018/08/26
カテゴリー:技術情報
タグ:

クローバーフィールドの杉山です。

Oracleのデータベースにトラブルが発生していて担当者が困っている。
対応に数日掛かっているので助っ人して欲しい旨の依頼を受けました。

問題が発生していたのは、Oracle 11gで構築された開発用のデータベースでした。

なんかGUI的な感じでデータベースを操作できるアプリケーションでデータベースに接続しようとするORA-12514になりますとのこと。

ORA-12514: TNS: リスナーは接続記述子で要求されたサービスを現在認識していません

出典:Oracle® Databaseエラー・メッセージ 11gリリース2 (11.2)

状況を確認してみると別の担当者から引き継いだ開発環境を使用してみようとしたら、この状態だっととのこと。
特別環境を変更していないそうなので、そもそもリスナー上がってんのか、Windowsのサービスを確認しますと、サービスか開始状態です。

tnspingユーティリティを使用して接続のテストをしてみます。

接続をテストするには、次のコマンドを使用します。

tnsping net_service_name count

前述のコマンドでは、次の引数が使用されます。

net_service_name: NISなど、tnsnames.oraファイルまたは使用中のネーム・サービスに存在する名前にする必要があります。

count: プログラムがサーバーへの到達を試行する回数を指定します。この引数はオプションです。

出典:Oracle® Database Net Services管理者ガイド 11gリリース2 (11.2)

tnspingユーティリティの実行結果をみると名前の解決できているので、ネットワークの設定が原因ではないようです。
では、データベース自体に問題があるのかも知れません。

alert.logをを確認してみます。

するとORA-19815とか、ORA-19804とかエラーがキッチリ出力されています。

ORA-19815: 警告: string(stringバイト)はstringバイトが使用され、残りstringバイトが使用可能です。
原因: DB_RECOVERY_FILE_DESTはディスク領域が不足しています。
処置: 次のいずれかの処置を行ってください。
1. ディスク領域を追加して、DB_RECOVERY_FILE_DEST_SIZEを増やします。

2. RMANを使用してファイルを3次デバイスにバックアップします。

3. RMAN保存ポリシーの変更を検討します。

4. RMANアーカイブ・ログ削除ポリシーの変更を検討します。

5. RMANを使用してファイルをリカバリ領域から削除します。

出典:Oracle® Databaseエラー・メッセージ 11gリリース2 (11.2)

エラーメッセージの内容を確認してみると、フラッシュリカバリ領域が不足しているため、テータベースのインスタンスが起動できないようです。
エラーの対処方法としては、容量を増やすか不要なバックアップを別のデバイスに移動して容量を確保してやるかで対応できそうです。

手っ取り早く容量を増やして、後の対処は担当者に引き継ぐことにしました。

正しく運用している状態であれば、データベースのインスタンスは起動している状態なのですが、開発環境のデータベースであるためかインスタンスをシャットダウンがされています。

DB_RECOVERY_FILE_DEST_SIZEの値を変更するのは、インスタンスがMOUNT状態になっていれば良いので、下記のようにデータベースをコマンドで起動します。


CMD> sqlplus / as sysdba
SQL> startup mount

これで初期化パラメータファイルを読み込んだ状態になりました。

DB_RECOVERY_FILE_DEST_SIZEの値を変更します。

SQL> alter system set DB_RECOVERY_FILE_DEST_SIZE=8G;

※今回は4Gから8Gへ増量しました。

リカバリマネージャでアーカイブログの整合性を取ります。


CMD> rman taget /
RMN> crosscheck archivelog all;
RMD> delete expired archivelog all;

ここまで済んだら、データベースをシャットダウンして再起動するか、alter database openでOPEN状態に変更します。

無事にデータベースが起動しました。
今回は、データベースをアーカイブログモードで稼働させているのに、アーカイブログの退避などがなされていなかったようです。
ってか、アーカイブログモードって何?とか言うようなレベルでなかったと思いたい。

今後はアーカイブログの運用として、開発環境のデータベースであればアーカイブログを取得しないモードに変更して運用することも検討してくださいとお伝えして、一件落着としました。

    上に戻る