myorama
11/14/2018 - 1:14 PM

Dataguard Primary service name trigger

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;
/
var service_name VARCHAR2(9);
EXECUTE SELECT name INTO :service_name FROM gv$database;

EXECUTE dbms_service.create_service (service_name => :service_name, network_name => :service_name);
EXECUTE dbms_service.start_service (service_name => :service_name)
EXECUTE dbms_service.stop_service (service_name => :service_name)