Service created from srvctl
SQL> select count(*) from gv$session where service_name='test';
COUNT(*)
----------
1
SQL> select inst_id,SERVICE_ID,NAME,NAME_HASH,NETWORK_NAME,CREATION_DATE from gv$services where NAME='test';
INST_ID SERVICE_ID NAME NAME_HASH NETWORK_NA CREATION_DATE
---------- ---------- ------ ---------- ---------- --------------------
1 4 test 3237892936 test 19-APR-2024 13:43:50
SQL> exec dbms_service.DELETE_SERVICE('test');
BEGIN dbms_service.DELETE_SERVICE('test'); END;
*
ERROR at line 1:
ORA-44305: service test is running
ORA-06512: at "SYS.DBMS_SERVICE", line 68
ORA-06512: at "SYS.DBMS_SERVICE", line 458
ORA-06512: at line 1
$ srvctl remove service -s test -d testdb
PRCR-1025 : Resource ora.testdb.test.svc is still running
$ srvctl stop service -s test -d testdb
SQL> exec dbms_service.DELETE_SERVICE('test');
PL/SQL procedure successfully completed.
SQL> select count(*) from gv$session where service_name='test';
COUNT(*)
----------
1
So we can delete a service only when the service is down, but the current connections are still kept.
Service created from dbms_service
SQL> exec DBMS_SERVICE.CREATE_SERVICE('test','test');
PL/SQL procedure successfully completed.
SQL> exec DBMS_SERVICE.start_service('test');
PL/SQL procedure successfully completed.
SQL>select inst_id,SERVICE_ID,NAME,CREATION_DATE,CON_NAME from gv$active_services;
INST_ID SERVICE_ID NAME CREATION_DATE CON_NAME
---------- ---------- ---------------------------------------------------------------- -------------------- ----------
...
.
2 4 test 19-APR-2024 14:40:45 pdb1
SQL> exec dbms_service.DELETE_SERVICE('test');
BEGIN dbms_service.DELETE_SERVICE('test'); END;
*
ERROR at line 1:
ORA-44305: service test is running
ORA-06512: at "SYS.DBMS_SERVICE", line 68
ORA-06512: at "SYS.DBMS_SERVICE", line 458
ORA-06512: at line 1
SQL> exec dbms_service.STOP_Service('test');
PL/SQL procedure successfully completed.
SQL> exec dbms_service.DELETE_SERVICE('test');
PL/SQL procedure successfully completed.
SQL> select count(*) from gv$session where service_name='test';
COUNT(*)
----------
2
So we can delete a service only when the service is down, but the current connections are still kept.