PLSQLで作られるプロシージャをデバッグすることができる便利なツールなのだけど、仮想マシンで作られたサーバーのDBでリスナーが見つからないというメッセージが表示された。
ググッてみてもリスナーが起動していないとかそんなことばかりが出てくる。
オラクルは詳しく無いが、リスナーとはネットワーク経由でアクセスするクライアントからのSQLを処理するためにTCP接続を受け付けるためのものだと認識している。
つまり、接続を待ち受けているのはオラクルサーバーの方に存在するので、リスナーが動いていなければ、クライアントからはSQLの実行すらできないはずだ。
だが、クライアントである仮想マシンのポストからはSQLの実行ができる。
原因は、DBサーバーからクライアントへのpingが届かない状況だったことによるものだった。
どうやらsqldeveloperでのデバッグは、sqldeveloperからTCP接続して、クライアントのIPアドレスと、その時に使ったSocketをbindしたポート番号をサーバーに通知したら、接続を切断してサーバーからの接続を待つようだ。
なので、pingがサーバーからクライアントに届かない状況だとTCP接続が確立しないのでデバッグできないというわけだ。
TCP接続はセッションさえ確立すれば双方からデータの送信ができる。
なので、SQLの実行結果をクライアントは受け取ることができる。
なんの意味があるのかわからない仕様だ。
サーバー側でクライアントのホワイトリストを定義しないと、かなり危険だなと思われる。