スポンサーリンク

2016年5月10日火曜日

Oracle のデータベース作成時にリスナーを介したデータベースの接続に失敗した場合の対処

 とある開発検証環境を構築しようと Windows 7 に Oracle 11gR2 をインストールしたときのこと。
 Oracle 自体のインストールは正常に完了して、いざデータベースを作成してみると以下のようなエラーが発生。

リスナーを介したデータベースの接続に失敗しました。エラーを修正し、EM Configuration Assistant を再度実行してください。

 それに続いて考えられる原因が 6 つほど続く。
 リスナーのポートが正しくないよ、とか。リスナーが起動してないよ、とか。
 今回はその中でも 3 番目の項目。

3) データベース・サービス AWDS がリスナーに登録されていません。データベース・サービスを登録してください。

に該当した場合の対処をメモ。
 これに該当するかどうかは lsnrctl status コマンドを実行して、その中に作成したデータベースのインスタンス名があるかどうかで確認可能。


ちゃんとリスナーに登録されていれば、オレンジで囲んだ場所に作成したデータベースのインスタンス名が表示されるはず。
 その他の理由で失敗した場合に関しては、今回は省略。調べてません。
 今回は例として ORCL という名前のデータベースを作成したとします。

 Windows のサービス一覧を見てみると OracleServiceORCL というサービスは登録もされているし起動もしている。なのにリスナーに登録されていないから SQL*Plus とかで接続できない。



 というわけで、ORCL データベースのインスタンスをリスナーに登録する。
 ORACLE_HOME\NETWORK\ADMIN に listener.ora というファイルがあるのでこれを編集する。
 一部を抜粋して必要なところだけ抜き出すと以下のような記述があるはず。

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = C:\app\USER\product\11.2.0\dbhome_1)
      (PROGRAM = extproc)
      (ENVS = "EXTPROC_DLLS=ONLY:C:\app\USER\product\11.2.0\dbhome_1\bin\oraclr11.dll")
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.40.129)(PORT = 1521))
    )
  )

 この SID_LIST_LISTENER の SID_LIST に ORCL データベースの設定を追記する。

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = C:\app\USER\product\11.2.0\dbhome_1)
      (PROGRAM = extproc)
      (ENVS = "EXTPROC_DLLS=ONLY:C:\app\USER\product\11.2.0\dbhome_1\bin\oraclr11.dll")
    )
    (SID_DESC =
      (GLOBAL_DBNAME = ORCL)
      (SID_NAME = ORCL)
      (ORACLE_HOME = C:\app\USER\product\11.2.0\dbhome_1)
    )
  )

 リスナーを再起動してもう一度 lsnrctl status を実行してみる。


 無事、リスナーのスタータスに ORCL データベースのインスタンスが表示されました。
 SQL*Plus でも無事に接続完了。

2 件のコメント:

  1. defectiveはちみつ2016年5月29日 16:23

    この記事のおかげで大変救われました。
    ありがとうございます。
    なぜ動的に追加されなかったのか不明ですが、助かりました。
    この記事に出会ってなかったらもう諦めてました。
    あなたは素晴らしいです。ありがとうございます。
    これからもブログを続けて下さい。

    返信削除
    返信
    1. お役に立てたようで何よりです。
      そもそもの原因が分かったら追記として残したいと思います。

      コメントありがとうございました。

      削除