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.ora
和 tnsnames.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
我已经在 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.ora
和 tnsnames.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