CREATE OR REPLACE TRIGGER start_primary_service AFTER startup ON DATABASE
DECLARE
db_role gv$database.database_role%TYPE;
service_name gv$database.name%TYPE;
service_exists EXCEPTION;
PRAGMA EXCEPTION_INIT(service_exists,-44303);
BEGIN
SELECT name, database_role
INTO service_name, db_role
FROM gv$database;
BEGIN
dbms_service.create_service (
service_name => service_name,
network_name => service_name
);
EXCEPTION WHEN service_exists THEN null;
END;
IF db_role = 'PRIMARY' THEN
dbms_service.start_service (
service_name => service_name,
instance_name => dbms_service.all_instances
);
END IF;
END;
/