Oracle Database のリスナーと Windowsのサービスの関係に気付かずハマる

f:id:ts0818:20200509002437j:plain

ポッドキャストPodcast)とは、インターネット上で音声や動画のデータファイルを公開する方法の1つであり、オーディオビデオでのウェブログ(ブログ)として位置付けられている。インターネットラジオインターネットテレビの一種である。

ポッドキャスト - Wikipedia

⇧ 「ポッドキャストマイク」って何だろう、その前に「ポッドキャスト」って何?って思ったら、そういうことか~、どうもボクです。

ラジオと言えば、

中二病伊集院光さん)

1999年、タレントの伊集院光さんが自身のラジオ番組「深夜の馬鹿力」で使用したのが初出です。伊集院さんは、「中学2年生の頃に見られる、背伸びしがちな言動」という比較的広い意味でこの言葉を使いましたが、次第に「自分にはマンガやアニメのキャラクターのような不思議な力があると思い込む」という、中二病の中の特定のタイプ(邪気眼系)を指す言葉として定着しはじめました。

https://www.homemate-research-radio-station.com/useful/16657_facil_098/

⇧ 「中二病」って言葉の生みの親が「伊集院光」さんだったとは、知らなんだ。

そんなこんなで、今回は、Oracle Database のリスナーとWindowsのサービスで泥沼にハマった話です。

レッツトライ~。
 

 

デフォルトのリスナー名とWindowsのサービス名が結びつかんから...

Windows 10 Homeの64bit版を使ってるんですが、

  • Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
    • ORACLE_HOME → C:\app\product\12.2.0\dbhome_1
  • Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version 19.3.0.0.0

ってな感じで、2つのバージョンのOracle Database をインストールしてまして、何か、12c のほうのリスナーが動かんな~、って思ってたら、リスナーのWindowsのサービスがバッティングしてたらしい。

ORACLE_HOMEは、インストールした時の指定で変わってくると思います。)

なので、 

f:id:ts0818:20200508231052p:plain

⇧ 上記のように、「OracleOraDB19Home1TNSListener」を停止したら、「OracleOraDB12Home1TNSListener」が動きました。
「OracleOraDB12Home1TNSListener」を停止すると、「OracleOraDB19Home1TNSListener」が動きました。

 

で、Oracleさんの説明だと、

構成パラメータにはデフォルト値が設定されているため、構成前のリスナーを起動して使用できます。デフォルトのリスナーはLISTENERとネーミングされ、起動時はサービスがサポートされていないため次のTCP/IPプロトコル・アドレスのリスニングを行います。

(ADDRESS=(PROTOCOL=tcp)(HOST=host_name)(PORT=1521))

リスナーはクライアント要求をサポートされているサービスに転送します。これらのサービスは、リスナーに動的に登録されます。この動的登録機能は、サービス登録と呼ばれます。登録は、リスナー登録(LREG)プロセスによって実行されます。動的サービス登録では、listener.oraファイルでの手動による構成は不要です。

Oracle Net Listenerの構成と管理

⇧ デフォルトのリスナーは、「LISTENER」って言ってますと。

まぁ、デフォルトのリスナーって言ってるのに、デフォルトで用意してくれないんだけどね、Windowsの場合は。(「Oracle Net Configuration Assistant 」ってツールでリスナーを作成しなきゃいけなかった気がする。)

 

で、「リスナー」と「リスナーのWindowsのサービス」についての関係の説明が無いので、推測になるんだけど、Windowsのサービスでは、「OracleOraDB[Oracle Databaseのバージョン]Home1TNSListener」 が「デフォルトのリスナー」ってことになるのではないかと。

 

さらに、

docs.oracle.com

Oracle usually recommends that you only have a single net listener service running on a Windows computer at any one time. This single listener can support multiple databases. If you must have two different net listener services running on a Windows computer at the same time, ensure that they are configured to listen on different TCP/IP port numbers.

https://docs.oracle.com/en/database/oracle/oracle-database/12.2/ntqrf/about-listener-requirements.html#GUID-E3263603-974D-41A1-807B-420048C6C130

⇧ そもそも、「リスナーのWindowsのサービス」は1つにしたほうが良いらしいですと。でも、「デフォルトのリスナー」って自動的に作成されるって言ってたんですけどね...

If the same IP address and port are used for different listeners, then you expect that the second and subsequent listeners fail to bind, instead, Windows allows them all to listen on the same IP address and port, resulting in an unexpected behavior of the listeners. This is a suspected Windows operating system problem with TCP/IP and has been reported to Microsoft.

https://docs.oracle.com/en/database/oracle/oracle-database/12.2/ntqrf/about-listener-requirements.html#GUID-E3263603-974D-41A1-807B-420048C6C130

⇧ で、ポートが被ってると、どっちか片方しか「リスナーのWindowsのサービス」は起動しないと。

 

実際、

f:id:ts0818:20200508233129p:plain

f:id:ts0818:20200508233759p:plain

f:id:ts0818:20200508233511p:plain

起動してくれないですと。

つまり、

Windowsのサービス名(デフォルトのリスナー) ポート
 OracleOraDB12Home1TNSListener 1521
 OracleOraDB19Home1TNSListener 1521

ってな感じで、「デフォルトのリスナー」のポートでバッティングしちゃってたんですな。 

って言うか、Oracle Database 19c のほうは、「ポート:1519」でリスナー作ってたんだけど(「OracleOraDB19Home1TNSListenerLISTENER_19c」ってリスナーを作ってました)、何故か、Oracle Database 19c でも「デフォルトのリスナー」のほうが使われてたっぽい...謎過ぎる。

 

なので、Windowsに複数のバージョンのOracle Database をインストールしている場合、「デフォルトのリスナー」に関する「リスナーのWindowsのサービス」には気を付けましょうという話です。

 

 ちなみに、「Windowsのサービス」ってタスクマネージャーからも確認できたんね...。

f:id:ts0818:20200508230527p:plain

 

あと、SQL Developer で無事、両方のデータベース(PDB作成とPDBにユーザ作成と作成したユーザにアクセス権を設定してます。PDBに接続してます。)に接続できました。

f:id:ts0818:20200508235320p:plain

 

何て言うか、Oracleさん、もうちょいドキュメントを探しやすくして欲しいですかね。

今日もモヤモヤしたままですかね...

 

今回はこのへんで。