During development, I encountered the following problems and consulted Oracle to solve them. I would like to share with you
Environment
2 Web/Application servers (Windows2003 server) + 1 Database server (oracle9.2 ),
The business application system is based on. Net technology. The database Server uses the Windows Server operating system.
One Web/Application server is deployed on the Internet, and the other Web/Application server and database server are deployed on the Intranet. The Internet and Intranet are separated by firewalls.
Problem
After the OracleClient is installed on the application server on the internet, port 1551 (Oracle listening port) is opened on the firewall, and the application server on the Internet still cannot access the database.
Cause
For windows platform, the listener spawns a thread when accept an incoming SQL * Net connection and it will listen to a random free port other than the listener port. the connection is redirected to different port, so if the firewall just opens a single port it will not work.
Solution
To workaround this, we can set a Windows registry value USE_SHARED_SOCKET, put this registry key under your ORACLE registry: // HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/HOME <#>
Create the key USE_SHARED_SOCKET and assign the value TRUE.
After that you need to restart the Oracle service and also the Oracle listener, then it shoshould work.
One problem of this setting is if your listener is down, all the connections will be cut. This is different than oracle on UNIX platform works.
Supplement: If Oracle is installed under the UNIX platform, the firewall only needs to open a port (same as the Oracle listening port)