からくりブログ

株式会社からくり社員のブログです

Oracle Databaseをインストールした時のこと その1

こんにちは。台風が近づいてきて、連日雨ばかりで少し憂鬱になりますね。
さて今日は、先日Windows Server 2012 R2にOracle Database 11g Release2をインストールする機会があったので、そこで四苦八苦した経験を語っていきたいと思います。

「Oracle Database」とは、その名の通りOracle社が提供しているデータベース(正確には関係データベース管理システム(relational database management system)というものらしい)なのですが、私の今までのデータベースに対する経験というと「MySQL」で簡単なSQL文を実行して更新・削除ぐらいしかなく(一応「System i」での経験もありますが、あれは毛色が違いすぎて…)、インストールしてデータベースを作成するというのは中々ハードルが高いものでした。
そこで分からないときはとりあえず教科書通りにやってみるということで、Oracle社が何か提供していないかなと探して「意外と簡単!?」シリーズの「データベース構築編」というものを見ながらやってみたのですが…。

まず、「Oracle Database自体のインストール」、これは手順通りに進めて特に問題なく完了しました。続けて、「リスナーの構成」、これも手順通りで特に問題なく完了しました。
さらに続けて、「DBCAによるデータベースの作成」に進み、DBの設定も入力して、データベースの自動作成が走って、このまま順調だな~、と思っていたらすぐに落とし穴が待っていました。

まず自動作成が進んでいくと、いきなり「リスナーが起動していないか、データベース・サービスがリスナーに登録されていません」というエラーメッセージが出てきました。そこでとりあえずOKボタンを押すと、そのまま自動作成が再開して「データベースの作成が完了しました。次の場所にあるログ・ファイルを参照してください」の画面が出たので、少し不安に思いながらそのまま次に進みました。
そして「Enterprise Managerの起動」に進むと、「emctl status dbconsole」コマンド実行で「Environment variable ORACLE_UNQNAME not defined. …」のエラーが出ました。これは調べると、環境変数で”ORACLE_SID”と”ORACLE_UNQNAME”を上記で自動作成したデータベースのSIDで設定すれば良いということなので、その通りにすると今度は「OC4J Configuration issue. …」のエラーが出ました。これも調べると、「emca -config dbcontrol db -repos recreate」でEnterprise Managerを復旧させれば良いということなので、その通りにするとここで「リスナーが起動していないか、データベース・サービスがリスナーに登録されていません」のエラーが…。

ここから「リスナーが起動していないか、データベース・サービスがリスナーに登録されていません」のエラー対処法について、散々調べたのですが、原因も多岐にわたるみたいで、正しい対処法が見つかるまで半日以上かかりました。で、たどり着いた先がOracle のデータベース作成時にリスナーを介したデータベースの接続に失敗した場合の対処に記載されている対処法。(本当に有難うございます。)
どうやら「リスナーの構成」で作成したリスナーファイルに「DBCAによるデータベースの作成」で作成したデータベースが登録されていないことが原因らしく、以下の対処法で解決しました。


C:\app\【ユーザー名】\product\11.2.0\dbhome_1\NETWORK\ADMINの場所(デフォルトインストールの場合)にあるlistenr.oraファイルをテキストファイルで開き、以下の追記を行う。

【追記前】
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = C:\app\【ユーザー名】\product\11.2.0\dbhome_1)
      (PROGRAM = extproc)
      (ENVS = "EXTPROC_DLLS=ONLY:C:\app\【ユーザー名】\product\11.2.0\dbhome_1\bin\oraclr11.dll")
    )
  )

【追記後】
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = C:\app\【ユーザー名】\product\11.2.0\dbhome_1)
      (PROGRAM = extproc)
      (ENVS = "EXTPROC_DLLS=ONLY:C:\app\【ユーザー名】\product\11.2.0\dbhome_1\bin\oraclr11.dll")
    )
    (SID_DESC =
      (GLOBAL_DBNAME = 【データベースのSID(ドメイン名を含めたフル)】)
      (SID_NAME = 【データベースのSID】)
      (ORACLE_HOME = C:\app\【ユーザー名】\product\11.2.0\dbhome_1)
    )
  )

この後も色々あったのですが、長くなってしまいましたので、また次回に語っていきたいと思います。

Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>