解决Linux下Oracle客户端无法连接Windows下Oracle Server端问题的方法

·作者:TZZLinuxOracle

查看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数据库实例名称

  1. 找到Windows下Oracle安装目录
E:\app\TZZ\virtual\product\12.2.0\dbhome_1\
  1. 进入 bin 文件夹中

  2. 找到 lsnrctl.exe 可执行文件,右键使用管理员身份打开

  3. 执行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端监听配置文件

  1. 找到Windows下Oracle安装目录

E:\app\TZZ\virtual\product\12.2.0\dbhome_1\

  1. 移动到 network/admin下

E:\app\TZZ\virtual\product\12.2.0\dbhome_1\network\admin

  1. 编辑 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))
        )
      )

重新启动监听服务

  1. 找到Windows下Oracle安装目录
   E:\app\TZZ\virtual\product\12.2.0\dbhome_1\
  1. 进入 bin 文件夹中

  2. 找到 lsnrctl.exe 可执行文件,右键使用管理员身份打开

    执行以下命令

    LSNRCTL> stop
    LSNRCTL> start

    等待命令执行完…

  3. WIN+R 输入 services.msc 打开服务管理器

  4. 启动 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 实例名称