我已在Google Compute Engine(GCE)虚拟机(Windows Server 2012 Datacenter)中安装了Oracle 11g标准版。我在Windows防火墙中为tcp:1521创建了入站和出站规则。与此同时,我为GCE网络创建了一个tcp:1521防火墙规则。
当我从localhost使用SQL Developer连接到我的数据库时,一切正常。但是,如果我尝试从远程主机(也使用SQL Developer)连接到数据库,我获得了一个错误:
Status: Failure - Test failed: IO Error: The Network Adapter could not establish the connection.
我成功地从远程主机ping了托管数据库的虚拟机,但是当我telnet它时连接失败:
Connecting To <host-ip>... Could not open connection to the host, on port 1521: Connect failed
此外,nmap指出在虚拟机中过滤了端口1521。
我错过了什么?谢谢你的帮助。
答案 0 :(得分:3)
您可以采取以下步骤来排查和解决此问题:
首先,为了排除故障,请关闭Windows VM的防火墙:
netsh firewall set opmode mode=Disable
您可以稍后使用此命令启用它:
netsh firewall set opmode mode=Enable
确保您的远程IP地址列在Source filter
的GCE防火墙规则的tcp:1521
中。如果GCE防火墙规则具有Target tag
,则您的Windows VM实例也必须使用相同的标签进行标记,因此该防火墙规则适用于此。
如果正确配置了防火墙规则,则要检查的另一个点是Oracle Net Listener Configuration。由于您的VM的内部IP地址不是静态IP地址并且可能更改,请使用SSL配置TCP / IP或TCP / IP,并在侦听协议地址的主机字段中输入计算机的主机名。
答案 1 :(得分:1)
我在考虑你的答案后再研究一下,这是我们应该考虑的:
<强> 1。配置Windows Server防火墙:
转到Control Panel
- &gt; System and Security
- &gt; Windows Firewall
- &gt; Advanced settings
。然后使用以下功能创建新的入站规则:
规则类型: Port
协议: TCP
端口号: 1521
(除非您在Oracle数据库中指定了另一个)
行动: Allow the connection
个人资料: Domain + Private + Public
(或适用于您案件的那个)
姓名: Oracle DB
(或您想要的任何名称)
完成后,创建一个具有为入站规则指定的相同功能的出站规则。
<强> 2。配置Google Compute Engine网络防火墙:在Google Compute Engine(GCE)控制台上转到Networking
- &gt; Firewall rules
。然后单击New firewall rule
,并对其进行配置:
姓名: oracle-db
(或您想要的任何名称)
网络: default
(或您部署虚拟机的那个。从VM实例仪表板验证它)
源过滤器: Allow from any source (0.0.0.0/0)
(警告:如果您只想启用主机或一组主机,则应选择IP范围。然后指定您的域或IP地址)
允许的协议和端口: tcp:1521
(或适用于您的案例的协议和端口 - 与您为Windows防火墙规则定义的相同)
最后,点击“创建”。
第3。配置Oracle Net Listener:默认情况下,Oracle数据库不接受远程连接。它只接受localhost请求。因此,在Oracle数据库服务器上以管理员身份打开CMD。我们将在执行时停止数据库网络侦听器:
lsnrctl STOP
现在,转到Oracle安装路径ORACLE_PATH(通常是:ORACLE_PATH
= C:\app\<user_name>
)。然后导航至:ORACLE_PATH\product\11.2.0\dbhome_1\NETWORK\ADMIN
。在那里,您会找到两个重要文件:listener.ora
和tnsnames.ora
。打开listener.ora
并按服务器主机名更改所有LOCALHOST事件(WARN:没有IP地址,而是服务器HOSTNAME)。
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = <server_hostname>)(PORT = 1521))
)
)
保存更改。然后,打开tnsnames.ora
文件。并为您的服务做同样的事情:
YOUR_SERVICE =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = <server_hostname>)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = your_service_name)
)
)
LISTENER_YOUR_SERVICE =
(ADDRESS = (PROTOCOL = TCP)(HOST = <server_hostname>)(PORT = 1521))
保存更改。最后,我们应该重新启动网络监听器。因此,请以管理员身份转到CMD并执行以下命令:
lsnrctl START
打开浏览器并输入:http://localhost:1158/em。您的数据库和侦听器应该正在运行。现在您可以从远程主机进行连接。
有关详细信息,请参阅:http://docs.oracle.com/cd/B28359_01/network.111/b28316/listenercfg.htm