Google Compute Engine中的Oracle数据库

时间:2015-09-02 22:34:17

标签: oracle11g port google-compute-engine firewall windows-firewall

我已在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.

enter image description here

我成功地从远程主机ping了托管数据库的虚拟机,但是当我telnet它时连接失败:

Connecting To <host-ip>... Could not open connection to the host, on port 1521: Connect failed

此外,nmap指出在虚拟机中过滤了端口1521。

我错过了什么?谢谢你的帮助。

2 个答案:

答案 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防火墙规则定义的相同)

enter image description here

最后,点击“创建”。

第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.oratnsnames.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