【问题标题】:Oracle Database in Google Compute EngineGoogle Compute Engine 中的 Oracle 数据库
【发布时间】:2015-11-28 14:46:06
【问题描述】:

我已在 Google Compute Engine (GCE) 虚拟机(Windows Server 2012 Datacenter)中安装了 Oracle 11g 标准版。我在 Windows 防火墙中为 tcp:1521 创建了入站和出站规则。同时,我为 GCE 网络创建了一个 tcp:1521 防火墙规则。

当我使用来自本地主机的 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。

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

【问题讨论】:

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


    【解决方案1】:

    考虑到您的回答,我进行了更多研究,这是我们应该考虑的:

    1.配置 Windows Server 防火墙: 转到Control Panel -> System and Security -> Windows Firewall -> Advanced settings。然后创建具有以下功能的新入站规则:

    规则类型: Port

    协议: TCP

    端口号: 1521(除非您在 Oracle 数据库中指定了不同的端口号)

    行动: Allow the connection

    简介: Domain + Private + Public(或适用于您的情况的那个)

    姓名: Oracle DB(或任何你想要的名字)

    完成后,使用为入站规则指定的相同功能创建出站规则。


    2。配置 Google Compute Engine 网络防火墙: 在 Google Compute Engine (GCE) 控制台上转到 Networking -> Firewall rules。然后点击New firewall rule,进行配置:

    姓名: oracle-db(或任何你想要的名字)

    网络:default(或您部署虚拟机的地方。通过虚拟机实例仪表板验证它)

    源过滤器: Allow from any source (0.0.0.0/0)(警告:如果您只想启用一个主机或一组主机,则应选择 IP 范围。然后指定您的域或 IP 地址)

    允许的协议和端口: tcp:1521(或适用于您的情况 - 与您为 Windows 防火墙规则定义的相同)

    最后,点击创建。


    3.配置 Oracle Net Listener: 默认情况下,Oracle 数据库不接受远程连接。它只接受本地主机请求。因此,在您的 Oracle 数据库服务器上以管理员身份打开 CMD。我们将在执行时停止数据库网络监听器:

    lsnrctl STOP
    

    现在,转到 Oracle 安装路径 ORACLE_PATH(通常为:ORACLE_PATH = C:\app\&lt;user_name&gt;)。然后导航到:ORACLE_PATH\product\11.2.0\dbhome_1\NETWORK\ADMIN。在那里您会找到两个重要文件:listener.oratnsnames.ora。打开 listener.ora 并通过您的服务器主机名更改所有 LOCALHOST 出现(警告:不是 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

    【讨论】:

    • 很好的研究。我只想补充一点,建议在 GCE 防火墙上使用Target tags,否则防火墙规则适用于所有 VM 实例。
    【解决方案2】:

    您可以采取以下步骤来排查和解决此问题:

    首先,出于故障排除的目的,关闭 Windows VM 的防火墙:

    netsh firewall set opmode mode=Disable
    

    您可以稍后使用此命令将其打开:

    netsh firewall set opmode mode=Enable
    

    确保您的远程 IP 地址列在您的 GCE 防火墙规则 tcp:1521Source filter 中。如果 GCE 防火墙规则有 Target tag,则您的 Windows VM 实例也必须使用相同的标签进行标记,因此此防火墙规则适用。

    如果防火墙规则配置正确,您要检查的另一点是Oracle Net Listener Configuration。由于您的 VM 的内部 IP 地址不是静态 IP 地址并且可能会更改,因此请配置 TCP/IP 或 TCP/IP with SSL,并在“侦听协议地址”的“主机”字段中输入计算机的主机名。

    【讨论】:

      猜你喜欢
      • 2016-03-13
      • 1970-01-01
      • 2018-02-14
      • 2018-04-28
      • 2014-01-23
      • 2016-05-06
      • 2015-08-09
      • 2017-11-17
      • 1970-01-01
      相关资源
      最近更新 更多