【发布时间】:2011-11-12 23:21:01
【问题描述】:
我在计算机 A 上安装了 Oracle 11g XE。我可以使用命令 connect username/password 通过 sql 命令行进行连接。我也可以向Demo数据库发送SQL指令:Select * from demo_customers;
数据库在计算机 A 的 localhost 上运行。
我希望计算机 B 在本地主机上连接到计算机 A 的数据库。我该怎么做?
【问题讨论】:
我在计算机 A 上安装了 Oracle 11g XE。我可以使用命令 connect username/password 通过 sql 命令行进行连接。我也可以向Demo数据库发送SQL指令:Select * from demo_customers;
数据库在计算机 A 的 localhost 上运行。
我希望计算机 B 在本地主机上连接到计算机 A 的数据库。我该怎么做?
【问题讨论】:
您需要在服务器 A 上运行 lsnrctl 实用程序来启动侦听器。然后,您将使用以下语法从计算机 B 进行连接:
sqlplus username/password@hostA:1521 /XE
如果使用默认值 1521,则端口信息是可选的。
Listener configuration documentation here. Remote connection documentation here.
【讨论】:
我安装了 Oracle 服务器,它允许从本地计算机连接没有问题。但是从我家庭网络上的另一台 Maclaptop,它无法使用 Sql Developer 或 Sql Plus 进行连接。在做了一些研究之后,我发现你必须做这个额外的步骤:
使用 Oracle 网络管理器。选择监听器。在 127.0.0.1 或 localhost 之外添加 IP 地址(在我的情况下为 192.168.1.12)。
这最终会在 [OracleHome]\product\11.2.0\dbhome_1\network\admin\listener.ora 中添加一个条目
重启监听服务。 (注意:对我来说,我重启机器一次以使其工作)
使用 lsnrctl status 进行验证
注意额外的 HOST=192.168.1.12 出现了,这就是使远程连接正常工作的原因。
C:\Windows\System32>lsnrctl 状态
适用于 64 位 Windows 的 LSNRCTL:版本 11.2.0.1.0 - 2015 年 9 月 5 日 13:51:43 生产
版权所有 (c) 1991、2010,甲骨文。保留所有权利。
连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
监听器的状态
别名 LISTENER
适用于 64 位 Windows 的版本 TNSLSNR:版本 11.2.0.1.0 - 生产
开始日期 05-SEP-2015 13:45:18
正常运行时间 0 天 0 小时。 6分钟。 24 秒
跟踪级别关闭
安全开启:本地操作系统身份验证
SNMP 关闭
监听器参数文件
D:\oracle11gr2\product\11.2.0\dbhome_1\network\admin\listener.ora
侦听器日志文件 d:\oracle11gr2\diag\tnslsnr\eagleii\listener\alert\log.xml
监听端点总结...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\.\pipe\EXTPROC1521ipc)))
(描述=(地址=(协议=tcp)(主机=127.0.0.1)(端口=1521)))
(描述=(地址=(协议=tcp)(主机=192.168.1.12)(端口=1521)))
服务总结...
服务“CLRExtProc”有 1 个实例。
实例“CLRExtProc”,状态 UNKNOWN,有 1 个用于此服务的处理程序...
服务“xe”有 1 个实例。
实例“xe”,状态 READY,有 1 个用于此服务的处理程序... 服务“xeXDB”有 1 个实例。
实例“xe”,状态 READY,有 1 个用于此服务的处理程序... 命令成功完成
使用 tnsping 测试连接
ping IPv4 地址,而不是 localhost 或 127.0.0.1
C:\Windows\System32>tnsping 192.168.1.12
适用于 64 位 Windows 的 TNS Ping 实用程序:版本 11.2.0.1.0 - 2015 年 9 月 5 日 14:09:11 生产
版权所有 (c) 1997、2010,甲骨文。保留所有权利。
使用的参数文件:
D:\oracle11gr2\product\11.2.0\dbhome_1\network\admin\sqlnet.ora使用 EZCONNECT 适配器解析别名
正在尝试联系 (DESCRIPTION=(CONNECT_DATA=(SERVICE_NAME=))(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.12)(PORT=1521)))
好的(0 毫秒)
【讨论】:
首先,确保接收客户端连接请求的数据库服务器(计算机 A)上的监听器正在运行。为此,请运行lsnrctl status 命令。
如果您收到TNS:no listener 消息(见下图),则表示侦听器服务未运行。要启动它,请运行lsnrctl start 命令。
其次,对于远程客户端的数据库操作和连接,必须将以下可执行文件添加到 Windows 防火墙例外列表中:(见图)
Oracle_home\bin\oracle.exe - Oracle 数据库可执行文件
Oracle_home\bin\tnslsnr.exe - Oracle 监听器
最后,在客户端机器(计算机B)上安装oracle Instant Client并运行:
sqlplus user/password@computerA:port/XE
【讨论】:
它在计算机上非常简单,您不需要做任何事情,只要确保两个系统都在同一个网络上,如果它不能访问互联网(为此,您需要静态 IP)。好的,现在在计算机b上进入开始菜单在oracle文件夹下找到配置点击该文件夹下的网络配置助手,当窗口弹出时点击本地网络配置选项它必须是第三个选项。
现在单击添加并在下一个屏幕中单击下一步它会在此处询问服务名称您需要添加计算机 A 的 oracle 全局数据库名称(通常我使用 oracle86 进行安装)现在单击下一个屏幕通常选择协议其 tcp 单击下一步在主机名中输入计算机A的名称你可以在我的计算机属性中找到。单击下一步不要更改端口,直到您在计算机 A 中更改端口单击下一步并现在选择测试连接,如果错误是用户名和密码不正确,您可以检查您的连接是否正常,然后单击登录凭据按钮并填写正确的用户名和密码。如果它说无法到达未找到目标计算机,则必须在防火墙中为 1521 端口添加例外,或者只是禁用计算机 A 上的防火墙。
【讨论】:
首先。 需要为计算机 A 和 B 添加静态 IP 地址。 例如,在我的情况下,计算机 A (172.20.14.13) 和 B (172.20.14.78)。
第二。 在带有网络管理器的计算机 A 中为 Listener 添加新地址(172.20.14.13)或在 listener.ora 中手动添加新记录
# listener.ora Network Configuration File: E:\app\user\product\11.2.0\dbhome_1\NETWORK\ADMIN\listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = E:\app\user\product\11.2.0\dbhome_1)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:E:\app\user\product\11.2.0\dbhome_1\bin\oraclr11.dll")
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.20.14.13)(PORT = 1521))
)
)
ADR_BASE_LISTENER = E:\app\user
第三。 使用 Net Manager 使用 IP 地址计算机 B (172.20.14.78) 创建服务命名或在 tnsnames.ora 中手动添加新记录
# tnsnames.ora Network Configuration File: E:\app\user\product\11.2.0\dbhome_1\NETWORK\ADMIN\tnsnames.ora
# Generated by Oracle configuration tools.
ALINADB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = alinadb)
)
)
LISTENER_ALINADB =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
LOCAL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.20.14.13)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = alinadb)
)
)
ORACLR_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
(CONNECT_DATA =
(SID = CLRExtProc)
(PRESENTATION = RO)
)
)
ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.20.14.78)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
第四。 在计算机 B (172.20.14.78) 上安装 win64_11gR2_client (例如它适用于 Windows 10 Pro 64 位)
五个。 使用 Net Configuration Assistant 监听器(localhost)创建或在 listener.ora 中手动添加记录
# listener.ora Network Configuration File: F:\app\alinasoft\product\11.2.0\client_1\network\admin\listener.ora
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = myserver)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
ADR_BASE_LISTENER = F:\app\alinasoft
六个。 使用 Net Manager 使用 IP 地址计算机创建服务命名 A (172.20.14.13) 或者在 tnsnames.ora 中手动添加新记录。
SERVER-DB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.20.14.13)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = alinadb)
)
)
七 (计算机 A - (172.20.14.13))对于远程客户端的数据库操作和连接,必须将以下可执行文件添加到 Windows 防火墙例外列表中:(见图) Oracle_home\bin\oracle.exe - Oracle 数据库可执行文件 Oracle_home\bin\tnslsnr.exe - Oracle 监听器
八 允许 Oracle Enterprise Manager (https://172.20.14.13:1158/em/console/logon/logon) 的端口 1158(计算机 A - (172.20.14.13))的连接
第九名 允许连接端口 1521(进出)(计算机 A - (172.20.14.17))
第十名 在计算机 B 172.20.14.78 sqlplus /NOLOG 连接系统/oracle@//172.20.14.13:1521/alinadb
【讨论】:
# . /u01/app/oracle/product/11.2.0/xe/bin/oracle_env.sh
# sqlplus /nolog
SQL> connect sys/password as sysdba
SQL> EXEC DBMS_XDB.SETLISTENERLOCALACCESS(FALSE);
SQL> CONNECT sys/password@hostname:1521 as sysdba
【讨论】: