Services in Oracle Database 10g

In Real Application Cluster (RAC) omgevingen is het soms wenselijk om toepassingen op een subset van RAC nodes te draaien of om preferred nodes voor specifieke applicaties te hebben. In Oracle 10g wordt dit mogelijk gemaakt door gebruik te maken van services.

  • Cluster Configuration
  • Service Creation
  • Jobs and Services
  • Connections and Services


Cluster Configuration


Alvorens de services te gebruiken, moet je controleren of de clusterconfiguratie correct is. Het volgende commando en de output tonen de verwachte configuratie voor een drie node database ORCL genaamd:

srvctl config database -d ORCL
server01 ORCL1 /u01/app/oracle/product/10.1.0/db_1
server02 ORCL2 /u01/app/oracle/product/10.1.0/db_1
server03 ORCL3 /u01/app/oracle/product/10.1.0/db_1

De configuratie zou tijdens de database creatie uitgevoerd moeten zijn, maar het kan later uitgevoerd worden met de volgende commando’s:

srvctl add file -d ORCL - o /u01/app/oracle/product/10.1.0/db_1
srvctl add service -d ORCL -i ORCL1 -n server01
srvctl add service -d ORCL -i ORCL2 -n server02
srvctl add service -d ORCL -i ORCL3 -n server03


Service Creation


De srvctl utility, dbca utility en DBMS_SERVICES package kunnen alle worden gebruikt om de services te maken of te wijzigen, maar voor dit artikel zullen wij ons beperken tot het bekijken van de srvctl utility. Veronderstel dat je twee toepassingen hebt die op de volgende manier zouden moeten lopen:

  • OLTP – Zou op nodes 1 en 2 van de RAC moeten lopen, maar kan op node 3 lopen als 1 en 2 niet beschikbaar zijn.
  • BATCH - Zou op nodes 3, maar kan op nodes 1 and 2 als node 3 is niet beschikbaar is.
Om aan deze vereisten te voldoen zou je de volgende services tot stand kunnen brengen:

# Zet environment.
export ORACLE_HOME=/u01/app/oracle/product/10.1.0/db_1
export PATH=$ORACLE_HOME/bin:$PATH

# Maak services.
srvctl add service -d ORCL -s OLTP_SERVICE -r ORCL1,ORCL2 -a ORCL3
srvctl add service -d ORCL -s BATCH_SERVICE -r ORCL3 -a ORCL1,ORCL2

De OLTP_SERVICE kan op RAC nodes lopen omdat ORCL3 in de beschikbare lijst aanwezig is, maar zal bij voorkeur op nodes 1 en 2 lopen (middels de -r optie). BATCH_SERVICE kan op alle RAC nodes lopen omdat ORCL1 en ORCL2 in de beschikbare lijst staan, maar zal bij voorkeur op node 3 lopen (middels de -r optie).

De services kunnen gestart en gestopt worden met de volgende commando’s:

rvctl start service -d ORCL -s OLTP_SERVICE
srvctl start service -d ORCL -s BATCH_SERVICE

srvctl stop service -d ORCL -s OLTP_SERVICE
srvctl stop service -d ORCL -s BATCH_SERVICE


Jobs en Services


De Oracle 10g scheduler laat het toe dat jobs gelinkt kunnen worden aan job classes, die beurtelings met de services kunnen worden gelinkt zodat de jobs kunnen runnen op specifieke nodes in de RAC omgeving. Om dit te kunnen ondersteunen, zou je 2 job classes als volgt aan kunnen maken:

-- Maak OLTP en BATCH job classes.
BEGIN
DBMS_SCHEDULER.create_job_class(
job_class_name => 'OLTP_JOB_CLASS',
service => 'OLTP_SERVICE');

DBMS_SCHEDULER.create_job_class(
job_class_name => 'BATCH_JOB_CLASS',
service => 'BATCH_SERVICE');
END;
/

-- geef de relevante users rechten op de job classes.
GRANT EXECUTE ON sys.oltp_job_class TO my_user;
GRANT EXECUTE ON sys.batch_job_class TO my_user;

Deze job classes kunnen dan weer aan bestaande jobs gehangen worden of tijdens creatie van een job.

--Maak een job geassocieerd met een job class.
BEGIN
DBMS_SCHEDULER.create_job (
job_name => 'my_user.oltp_job_test',
job_type => 'PLSQL_BLOCK',
job_action => 'BEGIN NULL; END;',
start_date => SYSTIMESTAMP,
repeat_interval => 'FREQ=DAILY;',
job_class => 'SYS.OLTP_JOB_CLASS',
end_date => NULL,
enabled => TRUE,
comments => 'Job linked to the OLTP_JOB_CLASS.');
END;
/

-- Assign eenjob class aan een bestaande job.
EXEC DBMS_SCHEDULER.set_attribute('MY_BATCH_JOB', 'JOB_CLASS', 'BATCH_JOB_CLASS');


Connecties en Services


Het gebruik van services is niet beperkt tot geschedulde jobs. Deze services kunnen in de tnsnames.ora- file worden gebruikt om invloed uit te oefenen op welke node welke applicatie zal gebruiken. Een voorbeeld van de tnsnames.ora- files wordt hieronder getoond:

OLTP =
(DESCRIPTION =
(LOAD_BALANCE = ON)
(FAILOVER = ON)
(ADDRESS = (PROTOCOL = TCP)(HOST = server01)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = server02)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = server03)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = OLTP_SERVICE)
(FAILOVER_MODE =
(TYPE = SELECT)
(METHOD = BASIC)
(RETRIES = 20)
(DELAY = 1)
)
)
)

BATCH =
(DESCRIPTION =
(LOAD_BALANCE = ON)
(FAILOVER = ON)
(ADDRESS = (PROTOCOL = TCP)(HOST = server01)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = server02)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = server03)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = BATCH_SERVICE)
(FAILOVER_MODE =
(TYPE = SELECT)
(METHOD = BASIC)
(RETRIES = 20)
(DELAY = 1)
)
)
)

De aangeboden applicaties gebruiken de juiste connect string , ze mogen alleen connecten met de bijbehorende service.

zie ook

Jobs schedulen in Oracle10g met dbms_job_scheduler

 

Advertentie

>

Poll

Voorkeur
 

Wie is er aanwezig

We hebben 176 gasten online