Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 18c XE:使用SID连接到PDB(用于旧版应用程序)_Oracle_Pdb_Sid - Fatal编程技术网

Oracle 18c XE:使用SID连接到PDB(用于旧版应用程序)

Oracle 18c XE:使用SID连接到PDB(用于旧版应用程序),oracle,pdb,sid,Oracle,Pdb,Sid,我刚刚安装了Oracle18cXeDattabase,并在CDB中创建了一个PDB(XEPDB1)。然后,我在PDF中创建了一个新模式,我可以使用服务名称(SQL Developer)成功地连接到该模式 但是我的遗留应用程序需要一个SID连接,这似乎是允许使用listener.ora中的行上的USE\u SID\u AS\u SERVICE\u XE=on来实现的。我还将SID_DESC添加到SID_列表中,但仍然出现错误: TNS:侦听器当前不知道连接描述符中给定的SID 这是我的听众。奥拉:

我刚刚安装了Oracle18cXeDattabase,并在CDB中创建了一个PDB(XEPDB1)。然后,我在PDF中创建了一个新模式,我可以使用服务名称(SQL Developer)成功地连接到该模式

但是我的遗留应用程序需要一个SID连接,这似乎是允许使用listener.ora中的
行上的
USE\u SID\u AS\u SERVICE\u XE=on来实现的。我还将SID_DESC添加到SID_列表中,但仍然出现错误:

TNS:侦听器当前不知道连接描述符中给定的SID

这是我的听众。奥拉:

DEFAULT_SERVICE_LISTENER = XE
USE_SID_AS_SERVICE_XE = on

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = C:\app\michael\product\18.0.0\dbhomeXE)
      (PROGRAM = extproc)
      (ENVS = "EXTPROC_DLLS=ONLY:C:\app\michael\product\18.0.0\dbhomeXE\bin\oraclr18.dll")
    )
    (SID_DESC =
      (GLOBAL_DBNAME = XE
      (ORACLE_HOME = C:\app\michael\product\18.0.0\dbhomeXE)
      (SID_NAME = XEPDB1
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = persik.ddns.vmware.com)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )
这是tnsnames.ora:

XE =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = XE)
    )
  )

XEPDB1 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = XEPDB1)
    )
  )

LISTENER_XE =
  (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))


ORACLR_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
    (CONNECT_DATA =
      (SID = CLRExtProc)
      (PRESENTATION = RO)
    )
  )

它应该是
使用SID\u作为\u服务\u侦听器\u名称
第7.4.19节,在您的情况下,侦听器名称是
侦听器
i、 e
使用SID作为服务侦听器

带有Java代码和18xe docker容器的测试用例

注释掉listener.ora中的行并运行java代码

[oracle@240946cde855 admin]$ cat listener.ora  | grep on
# listener.ora Network Configuration File:
#USE_SID_AS_SERVICE_LISTENER=on

 $grep "1521" Conn.java
  Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.99.128:1521:xepdb1", "hr", "hr");

$ java -cp "ojdbc8.jar" Conn
Exception in thread "main" java.sql.SQLException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
取消注释和跳转侦听器

[oracle@240946cde855 admin]$ sed -i 's|#USE|USE|g' listener.ora
[oracle@240946cde855 admin]$ cat listener.ora  | grep on
# listener.ora Network Configuration File:
USE_SID_AS_SERVICE_LISTENER=on
[oracle@240946cde855 admin]$ lsnrctl reload

LSNRCTL for Linux: Version 18.0.0.0.0 - Production on 22-JUL-2020 10:39:52

Copyright (c) 1991, 2018, Oracle.  All rights reserved.

Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
The command completed successfully

$ java -cp "ojdbc8.jar" Conn
Oracle Database 18c Express Edition Release 18.0.0.0.0 - Production