Follow Us on Twitter

Workload automation met de Oracle Database

Februari 2013 - Er dient elke dag om 8 uur een datawarehouse-job uitgevoerd te worden of er dient elk uur een rapportage gegenereerd te worden. En als de dagafsluiting is geaccordeerd, wordt in meerdere systemen een reeks aan jobs en batches gestart. Vaak wordt er een veelheid aan oplossingen toegepast om de jobs en hun onderlinge afhankelijkheden te plannen. Met de release van Oracle database 11g Release 2 is de scheduler functionaliteit zodanig uitgebreid, dat het een serieuze kandidaat lijkt om de genoemde problematiek op te pakken. In dit Whitebook bespreken we de mogelijkheden van de job scheduler van de Oracle database en hoe daar een goede start mee te maken.

Wat is workload automation?

Workload automation is een algemene term voor het gecontroleerd op de achtergrond uitvoeren van batchverwerkingen. Dit wordt uitgevoerd door een applicatie zoals een job scheduler. Het principe van job scheduling bestaat al sinds het ontstaan van IT- systemen en is in de basis niet veel veranderd. Met de komst van gedistribueerde systemen en event-driven architecturen is er een extra dimensie aan workload automation toegevoegd. Moderne systemen interacteren (bijna) real-time met elkaar door middel van bijvoorbeeld events, om daarmee accurater en efficiënter werkprocessen te faciliteren.

Praktijk

Elke applicatie brengt enige vorm van batchverwrking met zich mee en de database is bijna altijd het uiteindelijke platform waar de jobs worden uitgevoerd. Vanuit leveranciers wordt meestal verwezen naar de standaard scheduler van het onderliggende OS zoals Linux en Windows. Soms wordt een eigen module bijgeleverd. Daarnaast wordt ook vaak gebruik gemaakt van de aanwezige monitoring tooling, daar deze impliciet al een gedistribueerde architectuur heeft. Meestal zijn de gekozen oplossingen goed genoeg op het moment dat de inrichting voor een (deel)systeem plaats vindt. Maar door de gefragmenteerde implementaties en de beperkte mogelijkheden wordt het snel onoverzichtelijk en moeilijk te beheersen.

Architectuur

De architectuur van de Oracle job scheduler is een framework dat op basis van de behoefte van de organisatie kan worden ingevuld. Het is daarbij wel zaak van tevoren een set van basisvoorwaarden vast te leggen, waaraan het bouwen en opleveren van de scheduler objecten dient te voldoen, zoals naamgevingsconventies, hoe objecten te gebruiken en opleverscripts.

Goed gebruik van het framework staat of valt met een juiste invulling. Bijgaand een overzicht hoe de scheduler-architectuur zou kunnen worden opgezet om meerdere applicaties te kunnen besturen. Daarbij is onder andere uit gegaan van een centrale opslag van de scheduler-objecten. De objecten worden uitgelicht in de volgende paragraaf.

dbms_scheduler architectuur

Componenten bouwen met SQL Developer

Natuurlijk kunnen de scheduler-objecten middels de dbms_scheduler package worden aangemaakt en beheerd. Maar Oracle levert ook de gratis grafische tool SQL Developer, om onder andere scheduler-objecten te maken. Door de visuele presentatie van de objecten geeft dit een veel beter inzicht in de afhankelijkheden en stappen. Het is daarbij wel belangrijk om altijd de laatste versie op te halen van de website.

Navigeren

Er is een aparte scheduler-node in de object tree van SQL Developer, waar alle mogelijke object typen genoemd staan. Het voert te ver om deze allemaal te behandelen. We zullen ons beperken tot de basis.

Scheduler object tree

Naast deze scheduler-objecten zijn er nog een aantal globale scheduler-objecten en attributen, welke altijd onder het meest geprivilegieerde account SYS vallen. Deze zijn terug te vinden in de dba-view in SQL Developer.

SQL Developer DBA view SQL Developer Job class

Job classes en database services

Allereerst wordt een database service aangemaakt. Dit is een logische kapstok, die wordt gekoppeld aan een job class. Het aanmaken van een database service dient met PL/SQL te worden gedaan:

begin
  dbms_service.create_service('WHITEHORSES$BATCH','WHITEHORSES$BATCH');
  dbms_service.start_service('WHITEHORSES$BATCH');
end;

Een job class is een groepering van een aantal jobs die functioneel bij elkaar horen. Belangrijk is dat je het niveau van logging kan controleren op job class niveau.

De database service heeft dezelfde scope als de job class. Door elke job class ook aan een eigen database service te koppelen, krijgen we de mogelijkheid om op een hoger niveau de uitvoering van jobs te controleren. Als de service wordt gestopt, zullen er geen jobs meer worden gescheduled die aan de betreffende job class hangen. De job class kan met een wizard worden aangemaakt in SQL Developer.

Schedules

De scheduler heeft zeer uitgebreide syntax om de meest complexe schedules te kunnen bouwen. Deze schedules kun je als apart object bewaren en koppelen aan de jobs of direct in de job invoeren. Het maken van deze schedules is eenvoudig grafisch uit te voeren met SQL Developer.

SQL Developer Schedule
Voorbeeld: Laatste dag van de maand om 19:30.

Programs

Interfaces naar applicatie-specifieke activiteiten worden afgehandeld middels programs. Programs zijn geschikt om applicatie specifieke activiteiten als stored procedures, external programs en PL/SQL blocks te abstraheren en encapsuleren. Deze objecten kunnen bijvoorbeeld gedeactiveerd worden om aanpassingen te doen, zonder dat de job of de chain wordt geraakt.

SQL Developer Program

Chains

Een chain beschrijft een job flow middels stappen en regels. Elke stap is de uitvoering van een program en elke regel beschrijft wat de condities zijn wanneer een stap mag worden uitgevoerd. Meerdere activiteiten kunnen parallel worden opgestart en later weer gesynchroniseerd (vb: converge1 stap). Middels SQL Developer kan een chain eenvoudig grafisch geconfigureerd worden. Let op: Gebruik geen spaties in de naamgeving van de stappen, want dat levert vreemde fouten op bij het maken van een chain.

SQL Developer Chain

Jobs

Om daadwerkelijk activiteiten te starten, worden jobs gedefinieerd en geactiveerd. Een job is het centrale punt waar alle andere scheduler-objecten samen komen: schedule (wanneer), chain of program (wat), Job class (logging niveau) en de job (uitvoering).

SQL Developer job

Deployment

De scheduler-objecten zijn geen objecten in de traditionele vorm zoals een tabel of view. Om de gebouwde objecten over te zetten naar een volgende fase in het ontwikkelproces, kan de DDL worden gegenereerd vanuit de database. Het package DBMS_METADATA biedt de mogelijkheid om scripts te genereren. Deze scripts kunnen worden opgenomen in versie beheer en uitgerold naar andere omgevingen.

SELECT 'SCHEDULE' schedule_object_type, ls.schedule_name schedule_object_name, replace(DBMS_METADATA.GET_DDL

('PROCOBJ',ls.schedule_name),'"') ddl
FROM user_SCHEDULER_schedules ls
union all
SELECT 'PROGRAM', ls.program_name, replace(DBMS_METADATA.GET_DDL('PROCOBJ',ls.program_name) ,'"')
FROM USER_SCHEDULER_programs ls
union all
SELECT 'CHAIN',ls.chain_name, replace(DBMS_METADATA.GET_DDL('PROCOBJ',ls.chain_name) ,'"')
FROM USER_SCHEDULER_chains ls
union all
SELECT 'JOBS',ls.job_name, replace(DBMS_METADATA.GET_DDL('PROCOBJ',ls.job_name) ,'"')
FROM USER_SCHEDULER_jobs ls;

Voor het genereren van de DDL van een job class moet aangelogd worden met het SYS account

SELECT 'JOB_CLASS' scheduler_object_type,job_class_name scheduler_object_name, DBMS_METADATA.GET_DDL('PROCOBJ',job_class_name) DDL
FROM DBA_SCHEDULER_JOB_CLASSES
where job_class_name like 'JC_%';

Beheer

Naast het bouwen van de scheduler-objecten, is het van belang dat de scheduler gemonitord en beheerd kan worden. Daarbij kan gebruik gemaakt worden van Oracle Enterprise Manager. De scheduler-objecten kunnen ook vanuit Oracle Enterprise Manager worden aangepast.

Enterpirse Manager chain detail

De topologie van een chain kan net als in SQL Developer visueel worden weergegeven.

Enterprise Manager chain topology

Ook SQL Developer biedt een aantal goede mogelijkheden voor het beheer van de scheduler. Omdat alles in de database aanwezig is, kan de informatie met SQL en PL/SQL worden opgevraagd. Met de report-functionaliteit van SQL Developer is het eenvoudig om een aantal standaard-rapportages beschikbaar te stellen.

Daarnaast kan het schedulen van jobs op meerdere niveaus gecontroleerd worden middels database services, jobs,chains en programs.Tevens is een notificatie mechanisme aanwezig, waarbij op basis van events en filters e-mails kunnen worden verstuurd.

Naast de standaard scheduler views beginnend met USER_SCHEDULER_*, is het ook mogelijk om de executie van de jobs te volgen in de verschillende v$ views. De scheduler is geïnstrumenteerd waardoor active sessies als module DBMS_SCHEDULER krijgen en de jobnaam zelf als action wordt gevuld. Een omissie is wel, dat de database service die aan de job class is gekoppeld, niet terug komt in de sessie-informatie.

dbms_scheduler session

Conclusie

Dit is nog maar het topje van de ijsberg. Zaken als event-based scheduling en remote scheduling zijn nog niet aan bod gekomen. Met de release van Oracle database 11g Release 2 zijn de mogelijkheden van de job scheduler op een niveau gekomen waarmee het producten van commerciële partijen kan evenaren, zonder de bijbehorende kosten. Wel dient aangetekend te worden dat voor enterprise scheduling op machines waar geen Oracle database aanwezig is, de 'System Monitoring Plug-in for Hosts' gelicenseerd moet worden.

Reserveer tijd om een goed ontwerp neer te zetten, zodat de waarde van een gecentraliseerde scheduler ook daadwerkelijk tot uitdrukking komt. De creatieve geest zal met de mogelijkheden van de scheduler in combinatie met SQL Developer een goede basis kunnen neerzetten.

Referenties

Waardering:
 

Reacties

Nieuwe reactie inzenden

De inhoud van dit veld is privé en zal niet openbaar worden gemaakt.

Meer informatie over formaatmogelijkheden

CAPTCHA
Deze vraag is om te testen of u een persoon bent en om spam te voorkomen
Image CAPTCHA
Enter the characters shown in the image.