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

Posted Lucifer三思而后行

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle Net 12c: How to enable Clients using SID to connect to PDB? (Doc ID 1644355.1)相关的知识,希望对你有一定的参考价值。

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  database instance.
So:

<my_alias> =  
  (DESCRIPTION =  
    (ADDRESS=(protocol = tcp)(HOST=<hostname.domain>)(port = 1521))  
    (CONNECT_DATA=(SERVER=DEDICATED)(SID = <TEST>))  
  )

However, the 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 = 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 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.

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

以上是关于Oracle Net 12c: How to enable Clients using SID to connect to PDB? (Doc ID 1644355.1)的主要内容,如果未能解决你的问题,请参考以下文章

Oracle12c: How to create PDB in manually

Oracle12c: How to create PDB in manually

Oracle12c: How to create CDB in manually

Oracle12c: How to create CDB in manually

Oracle 12c how to purge the FGA audit records before a certain date

Oracle 12c agent install for linux