ORACLEが悪いわけじゃないけど
ORACLEが悪いわけじゃないと思いますが、ORACLE7のころから、まともにセットアップできたことがない。私があほなだけなのか、相性がわるいのか、SQLServerやDB2、または、MYSQL、PostgreSQLなどに比べて、ハマルことが多いのはなぜ?一番付き合いが多いからかな?でも一番嫌いなDBですな。
MyNotePCへスタンドアロンの開発環境を構築作業をしていて、今回はまったのがWindowsXPのWindowsファイヤーウォールです。そもそも、スタンドアロンでORACLEをインストール&言語開発環境と同じOS上に構築すれば良かったのですが、言語開発環境をVMWare上に構築してあったので、HostOS上のORACLEサーバと接続できずに困りました。しかも、単純にWindowsファイヤーウォール上に「1521」の穴を開けただけではNGです。以前、ファイヤーウォール越えのORACLEアクセス設定を調査したときにそれだけでではNGであることは、分かってはいたのですが、忘れてました。そのため、以下備忘録
- ファイアウォール越えの Oracle 接続
リスナーに接続するときは、ポート番号1521番に対して接続しますが、
その後のデータ通信は、ディスパッチャと呼ばれるサーバプロセスから
「XXのポート番号に接続しなおして、このポート番号でデータ取得してください。」
と指定され、ポート番号1521番とは違うポート番号でデータ通信を実施します。
以下に、「共有(MTS)サーバ」とデータ通信する際のイメージ図を記します。
<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からこの辺の考え方が変わったようですね。