解决Linux下Oracle客户端无法连接Windows下Oracle Server端问题的方法
查看SERVICE_NAME
# 在windows Oracle服务端启动SQLPLUS
# 执行以下命令
SQL> select value from v$parameter where name='service_names';
# 以下为执行结果
VALUE
----------------------------------------------------------------------------
orcl.microdone.cn
修改Linux下 tnsnames.ora
# 将SERVICE_NAME 修改为上面查询的结果
sudo vim /usr/lib/oracle/12.2/client64/network/admin/tnsnames.ora
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.137.1)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl.microdone.cn)
)
)
# 将SERVICE_NAME 修改为上面查询的结果
查看Oracle数据库实例名称
- 找到Windows下Oracle安装目录
E:\app\TZZ\virtual\product\12.2.0\dbhome_1\
-
进入
bin文件夹中 -
找到
lsnrctl.exe可执行文件,右键使用管理员身份打开 -
执行
status命令LSNRCTL> status 正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=windows10.microdone.cn)(PORT=1521))) LISTENER 的 STATUS ------------------------ 别名 LISTENER 版本 TNSLSNR for 64-bit Windows: Version 12.2.0.1.0 - Production 启动日期 13-8月 -2019 01:11:12 正常运行时间 0 天 0 小时 19 分 35 秒 跟踪级别 off 安全性 ON: Local OS Authentication SNMP OFF 监听程序参数文件 E:\app\TZZ\virtual\product\12.2.0\dbhome_1\network\admin\listener.ora 监听程序日志文件 E:\app\TZZ\virtual\diag\tnslsnr\DESKTOP-8P2KP7P\listener\alert\log.xml 监听端点概要... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=DESKTOP-8P2KP7P)(PORT=1521))) (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc))) 服务摘要.. 服务 "157cdf77ee1347ef9cb52c8ccc569098.microdone.cn" 包含 1 个实例。 实例 "orcl", 状态 READY, 包含此服务的 1 个处理程序... 服务 "CLRExtProc" 包含 1 个实例。 实例 "CLRExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序... 服务 "ORCL" 包含 1 个实例。 实例 "ORCL", 状态 UNKNOWN, 包含此服务的 2 个处理程序... 服务 "db.microdone.cn" 包含 1 个实例。 实例 "orcl", 状态 READY, 包含此服务的 1 个处理程序... 服务 "orcl.microdone.cn" 包含 1 个实例。 实例 "orcl", 状态 READY, 包含此服务的 1 个处理程序... 服务 "orclXDB.microdone.cn" 包含 1 个实例。 实例 "orcl", 状态 READY, 包含此服务的 1 个处理程序... 命令执行成功最后的服务摘要内,实例后面跟的即为实例名称,即 orcl 和 ORCL 。
修改Windows下 Oracle Server端监听配置文件
- 找到Windows下Oracle安装目录
E:\app\TZZ\virtual\product\12.2.0\dbhome_1\
- 移动到 network/admin下
E:\app\TZZ\virtual\product\12.2.0\dbhome_1\network\admin
-
编辑
listener.ora文件,此为服务端监听的配置文件# listener.ora Network Configuration File: E:\app\TZZ\virtual\product\12.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\TZZ\virtual\product\12.2.0\dbhome_1) (PROGRAM = extproc) (ENVS = "EXTPROC_DLLS=ONLY:E:\app\TZZ\virtual\product\12.2.0\dbhome_1\bin\oraclr12.dll") ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = windows10.microdone.cn)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) )在文件中添加以下内容,其中可根据自己需要进行添加,将其添加
SID_LIST =后面即可,每个(SID_DESC = )都为一个单独的实例配置,Linux下想要连接哪个实例,就添加哪个即可。其中SID_NAME 与 GLOBAL_DBNAME 修改为连接的实例名称,添加到后面。(SID_DESC = (SID_NAME = ORCL) (ORACLE_HOME = E:\app\TZZ\virtual\product\12.2.0\dbhome_1) (GLOBAL_DBNAME = ORCL) )(SID_DESC = (SID_NAME = orcl) (ORACLE_HOME = E:\app\TZZ\virtual\product\12.2.0\dbhome_1) (GLOBAL_DBNAME = orcl) )最终文件为
# listener.ora Network Configuration File: E:\app\TZZ\virtual\product\12.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\TZZ\virtual\product\12.2.0\dbhome_1) (PROGRAM = extproc) (ENVS = "EXTPROC_DLLS=ONLY:E:\app\TZZ\virtual\product\12.2.0\dbhome_1\bin\oraclr12.dll") )(SID_DESC = (SID_NAME = ORCL) (ORACLE_HOME = E:\app\TZZ\virtual\product\12.2.0\dbhome_1) (GLOBAL_DBNAME = ORCL) )(SID_DESC = (SID_NAME = orcl) (ORACLE_HOME = E:\app\TZZ\virtual\product\12.2.0\dbhome_1) (GLOBAL_DBNAME = orcl) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = windows10.microdone.cn)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) )
重新启动监听服务
- 找到Windows下Oracle安装目录
E:\app\TZZ\virtual\product\12.2.0\dbhome_1\
-
进入
bin文件夹中 -
找到
lsnrctl.exe可执行文件,右键使用管理员身份打开执行以下命令
LSNRCTL> stop LSNRCTL> start等待命令执行完…
-
WIN+R 输入
services.msc打开服务管理器 -
启动 Oracle 所有相关服务
Linux下连接测试
在Linux下执行以下命令
sqlplus c##oracle/oracle@192.168.137.1:1521/orcl
将其中内容替换为自己的内容:
- c##oracle 用户名
- oracle 密码
- 192.168.137.1:1521 Oracle服务端IP:Port
- orcl 实例名称