1 现象说明
在19c 中修改了service_names参数:
SQL> alter system set service_names='cdb19c,dave' sid='*';
System altered.
SQL> show parameter service_names
NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
service_names string cdb19c,dave
SQL> alter system set service_names='cdb19c' sid='*';
System altered.
SQL> show pdbs;
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 DAVE READ WRITE NO
在切换PDB就会报如下错误:
SQL> alter session set container=dave;
ERROR:
ORA-44787: Service cannot be switched into.
SQL> !oerr ora 44787
44787, 0000, "Service cannot be switched into."
// *Document: Yes
// *Cause: The service did not exist in the new pluggable database or the service was not started in the pluggable database.
// *Action: Use a valid service name for the pluggable database or start the service in the pluggable database first.
2 解决方法
在19c 中service_names 参数已经废弃,不建议使用。 在CDB和PDB的service_names都是默认值的情况下,初次修改CDB的服务名,会导致PDB的服务和监听注册异常,无法正常连接。
正常的服务名:
SQL> select con_name,name,network_name from v$active_services;
CON_NAME NAME NETWORK_NAME
------------------------- -------------------- -------------------------
CDB$ROOT cdb19cXDB cdb19cXDB
DAVE dave dave
CDB$ROOT SYS$BACKGROUND
CDB$ROOT SYS$USERS
CDB$ROOT cdb19c cdb19c
异常的服务名:
SQL> show parameter service_names
NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
service_names string cdb19c
SQL> select name,con_name from v$active_services;
NAME CON_NAME
-------------------- -------------------------
cdb19cXDB CDB$ROOT
SYS$BACKGROUND CDB$ROOT
SYS$USERS CDB$ROOT
cdb19c CDB$ROOT
如果创建了PDB service,可以通过加service 来连接:
SQL> alter session set container=dave service=dave;
如果没有创建PDB SERVICE,可以重新打开一下PDB,也可以恢复正常:
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 DAVE READ WRITE NO
SQL> alter pluggable database dave close;
Pluggable database altered.
SQL> alter pluggable database dave open;
Pluggable database altered.
SQL> select name,con_name from v$active_services;
NAME CON_NAME
-------------------- -------------------------
cdb19cXDB CDB$ROOT
SYS$BACKGROUND CDB$ROOT
SYS$USERS CDB$ROOT
cdb19c CDB$ROOT
SQL> alter session set container=dave;
Session altered.
SQL>
参考:
Connecting to PDB fails with ORA-44787 or ORA-600 [kpopappe: Service Is Null!] error (Doc ID 2630826.1)
版权声明:本文为博主原创文章,未经博主允许不得转载。