ORA-44787: Service cannot be switched into on Oracle 12c PDB
If you encounter ORA-44787 when switching to PDB using alter session set container,
main reason for same can be the unavailability of default PDB service.
When a PDB is enabled it does starts its own default PDB service with service name set to the PDB name.
Although it is possible to create new service for PDB using DBMS_SERVICE.create_service, it is required to keep the default service up and running as it is used by internal operations.
If you have stopped the default service it is the main reason for this particular error.
Below is a simple example where stopping of default PDB service leads to ORA-44787
Now this new service can be used to connect to the database. Also untile you have the default services running alter session set container should work without any issue.
A quick fix would be to restart the PDB using below steps.
Below is a simple example where stopping of default PDB service leads to ORA-44787
Creating the new service
SQL> alter session set container=ORCLPDB;
Session altered.
SQL> BEGIN
DBMS_SERVICE.create_service(
service_name => 'new_service',
network_name => 'NEW_SERVICE'
);
END; 2 3 4 5 6
7 /
PL/SQL procedure successfully completed.
SQL> exec dbms_service.start_service('new_service');
PL/SQL procedure successfully completed.
SQL>
Now this new service can be used to connect to the database. Also untile you have the default services running alter session set container should work without any issue.
Stopping the default service
Although the switch to PDB fails external connections using the new service name will working. But this can cause manageability issues.SQL> alter session set container=ORCLPDB; Session altered. SQL> SELECT NAME FROM V$ACTIVE_SERVICES; NAME ---------------------------------------------------------------- new_service orclpdb SQL> exec DBMS_SERVICE.STOP_SERVICE('orclpdb'); PL/SQL procedure successfully completed. SQL> </code> Now if you try to switch to the PDB it will faile with ORA-44787. SQL> show pdbs; CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED MOUNTED 3 ORCLPDB READ WRITE NO SQL> alter session set container=ORCLPDB; ERROR: ORA-44787: Service cannot be switched into. SQL> exit
A quick fix would be to restart the PDB using below steps.
SQL> show pdbs;
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED MOUNTED
3 ORCLPDB READ WRITE NO
SQL> alter pluggable database "ORCLPDB" close;
Pluggable database altered.
SQL> show pdbs;
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED MOUNTED
3 ORCLPDB MOUNTED
SQL> alter session set container=ORCLPDB;
Session altered.
SQL> startup;
Pluggable Database opened.
SQL> exit
Disconnected from Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
ora12c@racbprdb1:~$ sqlplus sys as sysdba
SQL*Plus: Release 12.2.0.1.0 Production on Mon Aug 10 13:51:37 2020
Copyright (c) 1982, 2016, Oracle. All rights reserved.
Enter password:
Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
SQL> show pdbs;
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED MOUNTED
3 ORCLPDB READ WRITE NO
SQL> alter session set container=ORCLPDB;
Session altered.
SQL> show pdbs;
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
3 ORCLPDB READ WRITE NO
SQL>
Comments
Post a Comment