【发布时间】:2021-07-24 16:28:26
【问题描述】:
我想让朋友通过 DBlink 访问我的 oracle 数据库。我是数据库新手,所以我无法完成这项工作。
我想我必须用我的公共 IP 左右创建一个侦听器。所以我使用 NET 配置向导来创建一个服务名称。我使用了公共 IP,但在尝试连接时向导会引发超时。我尝试在 1522 端口的 listener.ora 中使用我的公共 IP 创建一个监听器,但它也不起作用
我做了什么:
- 我检查了 listener.ora,它有一个带有我本地 ip (192.168.1.134) 的 LISTENER,端口是 1521
- 我查看了 tnsnames.ora,它与监听器的 IP 和端口相同。
- 我在路由器中进行了端口转发。
- 我使用向导创建了一个具有公共 IP 的侦听器。
- 我使用向导创建了一个具有公共 IP 地址的服务名称,但它无法连接
TNSNAMES.ORA:
# tnsnames.ora Network Configuration File: D:\Programas\Oracle\NETWORK\ADMIN\tnsnames.ora
# Generated by Oracle configuration tools.
ORACLR_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
(CONNECT_DATA =
(SID = CLRExtProc)
(PRESENTATION = RO)
)
)
LISTENER_ORCL =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.134)(PORT = 1521))
JORGE_ORA_DB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 190.153.1.32)(PORT = 1522))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.134)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
LISTENER.ORA:
# listener.ora Network Configuration File: D:\Programas\Oracle\NETWORK\ADMIN\listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = D:\Programas\Oracle)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:D:\Programas\Oracle\bin\oraclr19.dll")
)
)
REMOTE =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = croquer.ddns.net)(PORT = 1522))
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.134)(PORT = 1521))
)
)
【问题讨论】:
-
"could not make it work" 不是已知的错误代码。您的 listener.ora 定义了两个独立的侦听器:REMOTE 和 LISTENER。这将意味着两个单独的侦听器进程——两个单独的“lsnrctl start”命令,其中一个引用非默认名称。将数据库暴露在互联网上是一个巨大的安全错误。并且 192.168 地址是私有的、不可路由的地址。在这里阅读更多:superuser.com/questions/146194/…
-
如果您的路由器正确地通过端口进行连接,那么您不必在数据库服务器上执行任何操作。客户端使用路由器的公共 IP:端口。路由器将根据您定义的规则自动将连接从公共 IP:端口(属于路由器)传递到私有服务器 IP:端口。就 DB 服务器而言,连接来自专用网络上的 路由器。也就是说,我同意@EdStevens:将任何类型的数据库服务器直接暴露在互联网上是一个巨大的安全错误。
标签: oracle oracle-sqldeveloper ip-address remote-access dblink