Oracle でクライアントからリスナー経由でデータベースに接続する手続きを調べてみた。
以下は専用サーバー構成の場合の手続き。
- リスナーがクライアント接続要求(CONNECTパケット)を受け取る。
- リスナーは専用サーバー・プロセスを開始する。
- 専用サーバー・プロセスはリスナーから接続要求を継承する。
- リスナーと専用サーバー・プロセス間にソケットを継承するためのBequeath接続が確立され、プロセスの初期化情報が渡される。
- Bequeath接続がクローズされ、専用サーバー・プロセスにTCPソケットが継承される。
- クライアントが専用サーバー・プロセスに直接接続する。
- 専用サーバー・プロセスからクライアントにRESENDパケットが送信される。
- クライアントは専用サーバー・プロセスに新しいCONNECTパケットを送信する。
- 専用サーバー・プロセスが着信要求を受け入れたら、クライアントにACCEPTパケットを送信する。
※Windowsプラットフォームの場合、デフォルトではBequeath接続が行えず、専用サーバー・プロセスの起動は行われるが、TCPソケットの継承ではなくリダイレクト接続される。