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 |