Google Compute Engine 中的 Oracle 数据库

Oracle Database in Google Compute Engine

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

当我使用来自本地主机的 SQL 开发人员连接到我的数据库时,一切正常。但是,如果我尝试从远程主机(也使用 SQL Developer)连接到数据库,我会得到一个错误:

Status: Failure - Test failed: IO Error: The Network Adapter could not establish the connection.

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

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

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

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

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

首先,为了排除故障,关闭 Windows 虚拟机的防火墙:

netsh firewall set opmode mode=Disable

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

netsh firewall set opmode mode=Enable

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

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

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

1.配置 Windows 服务器防火墙: 转到 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(或您部署虚拟机的网络。从 VM 实例仪表板验证它)

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

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

最后,点击创建。


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

lsnrctl STOP

现在,转到Oracle安装路径ORACLE_PATH(通常:ORACLE_PATH = C:\app\<user_name>)。然后导航至:ORACLE_PATH\product.2.0\dbhome_1\NETWORK\ADMIN。您会在那里找到两个重要文件:listener.oratnsnames.ora。打开 listener.ora 并通过您的服务器主机名更改所有出现的 LOCALHOST(警告:没有 IP 地址,而是服务器主机名)。

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