暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle Net 12c: How to enable Clients using SID to connect to PDB? (文档 ID 1644355.1)

163

Applies to:

Oracle Net Services - Version 12.1.0.1 and later

Information in this document applies to any platform.

Symptoms

As an example, Client connection string uses the "SID" value to connect to a <TEST> database instance.

So:

<my_alias> =

  (DESCRIPTION =

    (ADDRESS=(protocol = tcp)(HOST=<hostname.domain>)(port = 1521))

    (CONNECT_DATA=(SERVER=DEDICATED)(SID = <TEST>))

  )

 

However, the <TEST> database is changed to a pluggable database (PDB so Multi-Tenant functionality) and the client connection now fails with ORA-12505.

 

C:\Users\test>sqlplus <username>/<password>@<my_alias>


SQL*Plus: Release 12.1.0.1.0 Production on Wed Apr 16 18:15:25 2014

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

ERROR:

ORA-12505: TNS:listener does not currently know of SID given in connect

descriptor

Changes

 The TEST database is now a PDB. Connections to a pluggable database use SERVICE_NAME and not SID.

 

Cause

A PDB is not an instance.

So using a SID parameter in the connection string will not work unless the following listener.ora file setting is put in place:

USE_SID_AS_SERVICE_listener name=ON

When the database is an Oracle Database 12c container database, the client must specify a service name in order to connect to it. 

Listener status shows <TEST> as only a Service and not an Instance, with the Instance being the CDB (Container Database):

Listening Endpoints Summary...

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=<hostname.domain>)(PORT=1521)))

(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))

Services Summary...

...

Service "<TEST>" has 1 instance(s).

Instance "<cdb1>", status READY, has 1 handler(s) for this service...

The command completed successfully 

 

Solution

Set the following control parameter in the listener.ora file and restart the listener:

USE_SID_AS_SERVICE_<listener_name> = ON


This will enable the system identifier (SID) in the connect descriptor to be interpreted as a service name when a user attempts a database connection.

Database clients with earlier releases of Oracle Database that have hard-coded connect descriptors can use this parameter to connect to a container or pluggable database.

Example of usage in listener.ora:

LISTENER =

   (DESCRIPTION =

    (ADDRESS_LIST = (ADDRESS=(PROTOCOL=tcp)(HOST=<hostname.domain>)(PORT=1521))

   )

USE_SID_AS_SERVICE_LISTENER = ON

 


The connection will work after this change or you will progress to the next logical issue:

 

C:\Users\test>sqlplus <username>/<password>@<my _alias>


SQL*Plus: Release 12.1.0.1.0 Production on Wed Apr 16 18:28:40 2014


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

Connected to:

Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production

With the Partitioning, OLAP, Advanced Analytics and Real Application Testing opt

ions

SQL>


The listener will interpret the value for SID=TEST as SERVICE_NAME=TEST and allow the connection.



2. Otherwise, modify the client connection string to use the a SERVICE_NAME field to match the actual PDB service name instead of the SID field :

<my_alias> =

  (DESCRIPTION =

    (ADDRESS=(protocol = tcp)(HOST=<hostname.domain>)(port = 1521))

    (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME = <TEST>))

  )

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论