解决在docker中运行oracle,远程使用PL/SQL 连接不成功,报错--监听程序当前无法识别连接描述符中请求的服务

问题描述:我使用的是阿里云的轻量级应用服务器,在服务器上安装了一个docker容器,在docker中启动了oracle-xe-11g,运行oracle-xe容器成功以后,然后启动容器,进入到oracle-xe-11g中:

[root@izwz91m0zmp2dlo94i0ptoz ~]# docker exec -it c637d5581b3a bash
root@c637d5581b3a:/# sqlplus   

SQL*Plus: Release 11.2.0.2.0 Production on Tue Dec 18 07:46:24 2018

Copyright (c) 1982, 2011, Oracle.  All rights reserved.

Enter user-name: system
Enter password: 

Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production

SQL> 

也看到能够成功的进入到oracle的控制台中,在C:\app\wangle\product\11.2.0\client_1\network\admintnsnames.ora中添加了

ORACLE_DOCKER =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 47.107.226.177)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = ORACLE_DOCKER)
    )
  )

使用PL/SQL登录时一直报错:监听程序当前无法识别连接描述符中请求的服务

折腾了好久,把上面的配置改成了

XE =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 47.107.226.177)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = XE)
    )
  )

也就是改了SID和服务名
终于连接成功了
初步认为,DOCKER中运行的oracle默认已经配置了XE的监听(Listener),如果把服务名改成其他的(例如上面的ORACLE_DOCKER)就会找不到监听,从而就会报错.
上面也只是我的猜测,欢迎大家指正.

你可能感兴趣的:(解决在docker中运行oracle,远程使用PL/SQL 连接不成功,报错--监听程序当前无法识别连接描述符中请求的服务)