ぴゅーもんブログ

カナダ生まれの日本育ち白イルカ(ベルーガ)のぬいぐるみぴゅーもんのブログです、ハワイにもいったよ〜(不定期のんびり更新)

ORACLEが悪いわけじゃないけど

ORACLEが悪いわけじゃないと思いますが、ORACLE7のころから、まともにセットアップできたことがない。私があほなだけなのか、相性がわるいのか、SQLServerDB2、または、MYSQLPostgreSQLなどに比べて、ハマルことが多いのはなぜ?一番付き合いが多いからかな?でも一番嫌いなDBですな。
MyNotePCへスタンドアロンの開発環境を構築作業をしていて、今回はまったのがWindowsXPのWindowsファイヤーウォールです。そもそも、スタンドアロンORACLEをインストール&言語開発環境と同じOS上に構築すれば良かったのですが、言語開発環境をVMWare上に構築してあったので、HostOS上のORACLEサーバと接続できずに困りました。しかも、単純にWindowsファイヤーウォール上に「1521」の穴を開けただけではNGです。以前、ファイヤーウォール越えのORACLEアクセス設定を調査したときにそれだけでではNGであることは、分かってはいたのですが、忘れてました。そのため、以下備忘録

  • ファイアウォール越えの Oracle 接続

リスナーに接続するときは、ポート番号1521番に対して接続しますが、
その後のデータ通信は、ディスパッチャと呼ばれるサーバプロセスから
「XXのポート番号に接続しなおして、このポート番号でデータ取得してください。」
と指定され、ポート番号1521番とは違うポート番号でデータ通信を実施します。
以下に、「共有(MTS)サーバ」とデータ通信する際のイメージ図を記します。
http://www.milu.jp/tips/network/03.mts_connection.png

Oracle サーバー側>

* USE_SHARED_SOCKET 環境変数を設定

USE_SHARED_SOCKET = TRUE

8i の場合*1は、複数の ORACLE_HOME が作成できる関係で、レジストリ設定になります。
REGEDIT4
[HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME0]
"USE_SHARED_SOCKET"="TRUE"
HOME0 の部分は、使用するデータベースに合わせて変更してください。

<Web サーバー側>

* TNSNAMES.ora に、専用サーバー接続を利用することを指定します。

(例)

ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = xxx.xxx.xxx.xxx)(PORT = 1521))
)
(CONNECT_DATA =
(SID = ORCL)
(SRVR = DEDICATED) .... 追加します。
)
)

  • 共有サーバ(MTS)と専用サーバ

Oracle8iのころの「事前生成済み専用サーバ」の設定との混乱がちょっと問題をややこしくしたかも
Oracle9iからこの辺の考え方が変わったようですね。

*1:10gの場合もレジストリ設定しないとNGでした