Général:FAQ JobsOnDemand

De WikiFr_dbSQWare
Aller à : navigation, rechercher

Généralités


Information.png
Information:
Les JobsOnDemand sont arrivés avec la version 2024.06 de dbSQWare les versions antérieures n'en disposent pas. pensez à mettre à jour votre dbSQWare Général:PatchUpgrade .

Limites de cette section

Nous proposons ici des exemples courants d'utilisation de la fonctionnalité JobsOnDemand observés et demandés par nos utilisateurs.
Tous les scripts dbSQware peuvent être utilisés par cette fonctionnalité, mais cela n'aura parfois que peu d'intérêt.

Ce que nous allons vous présenter dans ce MODOP sur les JobsOnDemand :

  • Des exemples de création,
  • Des exemples de planification,
  • Le suivi des jobs planifiés,
  • La possibilité de les déléguer à des utilisateurs,

Introduction

Les JobsOnDemand permettent de créer des ensembles composés de scripts et de leurs paramètres existants, ensembles dont l'exécution est demandée directement dans SQWareAdmin.
Vous pouvez imaginer toutes sortes de cas d'usages par exemple :

  • Un ensemble script/paramètres spécifique et récurant mais non planifiable,
  • Un ensemble script/paramètres qui sera exécuter 1 fois à un moment bien précis et donc planifiable,
  • etc ...

Cela permet également d'avoir des JobsOnDemand qui peuvent être exécutés par des utilisateurs qui n'ont pas accès aux scripts dbSQWare en particulier et, ou à la machine dbSQWare en général.

Vous trouverez le menu dédié aux JobsOnDemand (Menu 2) dans chaque moteur et bien sûr dans la vue TOUS SGBD.

Accueil menu JobsOnDemand


Lors de la création d'un JobsOnDemand utilisant un script dbSQWare cela ne fonctionnera que si les paramètres spécifiés sont disponibles pour ce script.
Vous pouvez vérfier cela en ligne de commande dans l'aide en ligne et, ou sur ce wiki sur la page dédié à ce script.
Par exemple pour le script sqwora_Expdp.ksh :

  • avec l'aide en ligne, option -h
oracle@srvORAexample:~/SQWareProduction/oracle/bin (ORAEXAMPLE) $ ./sqwora_Expdp.ksh -h
Sourcing sqwora_Global.lib v2025.02 SQWareProduction for Oracle (dbSQWare) ...

Usage: sqwora_Expdp.ksh [-h] -I <instance> -T <ExpType> [+ options]

DESCRIPTION
   sqwora_Expdp.ksh expdp script
SUPPORT
   Oracle supported versions: 10gR2 <= v <= 21c

PARAMETERS
     -I  instance       : Target instance to expdp.
     -T  type_exp       : Type of expdp (full,schema,structure,parfile,tables).
OPTIONS
     -h                 : Display the full usage.
     -s                 : Display samples of usage.
     -HI nb_gen         : Number of generations to keep (by default: 1).
     -P  Nb threads     : Number of threads in parallel (by default 2).
     -FU  owner         : Schema to expdp.
     -Pdb pdb_name      : pdb_name for multitenant.
     -PAR parfile       : Parfile to use.
     -OPT option        : Option to add to the expdp command.
     -ZIP extension     : Compressor extension gz,bz2,Z,none (by default: none).
     -FRT return_code   : Force return code value on error.
     -AddMail   email   : Email address to add at 'dba@domaine.com'.
     -SendReport        : Send execution log report.
     -NoConsistent      : Remove 'flashback_time=systimestamp' option.
     -RD      directory : Expdp directory (par defaut /orabackup/${ORACLE_SID}/expdp).
     -PutInf  u@h:path  : user@host:path to push dump to distant host.
     -Dist              : For distant connection to database (change $gvsqw_DbaUser to $gvsqw_DistDbaUser@$ORACLE_SID ).
     -Sysdba            : '/ as sysdba' connection instead of $gvsqw_DbaUser.
     -NoMail            : Deactivate sendmail on error to dba@domaine.com (by default, send on error).
     -Locale    locale  : Force Locale for help display (fr,en).
     -Exec              : Execute expdp (by default, display generated commands).


Dépendance

Les JobsOnDemand nécessitent que le service sqwScheduler de SQWareCentral soit actif.

Vous pouvez vérifier son exécution :

dbsqware@srvdbsqware:~ (SQWareCentral) $ sqwScheduler status


status of sqwScheduler
no process 'sqwScheduler' started !

Et le démarrer si nécessaire :

dbsqware@srvdbsqware:~ (SQWareCentral) $ sqwScheduler start


startup of sqwScheduler
dbsqware 3792005 3791870  8 11:21 pts/2    00:00:00 /bin/bash ./sqwScheduler
process 'sqwScheduler' started !

dbsqware@srvdbsqware:~ (SQWareCentral) $ sqwScheduler status


status of sqwScheduler
dbsqware 3792005       1  0 11:21 pts/2    00:00:00 /bin/bash ./sqwScheduler
Load new parameters 2025-04-02 11:21:50

2025-04-02 11:21:50
Actual parameters for sqwScheduler 2025-04-02 11:21:50
gvsqw_SchedulerCheckInterval=2m
gvsqw_SchedulerAdvanceTimeTreshold=4m

2025-04-02 11:21:50
Actual parameters for sqwScheduler 2025-04-02 11:21:50
gvsqw_SchedulerCheckInterval=120
gvsqw_SchedulerAdvanceTimeTreshold=240

2025-04-02 11:22:18
Actual parameters for sqwScheduler 2025-04-02 11:22:18
gvsqw_SchedulerCheckInterval=120
gvsqw_SchedulerAdvanceTimeTreshold=240

Création de JobsOnDemand

Dans tous les cas

Pour Ajouter un nouveau JobsOnDemand il faut aller sur l'interface web de dbSQWare soit dans ALL RDBMS, soit le moteur concerné par le job que vous voulez créer (menu 1) OnDemandJobs (menu 2) JobsParam (menu 3).

En haut à droite vous cliquez sur le bouton "Add".

Depuis All RDBMS :

all RDBMS


Depuis un moteur par exemple Oracle :

add Oracle


Le formulaire suivant s'ouvre :

add empty

Les paramètres obligatoires sont :

  • DbAlias, l'instance sur laquelle le script va être exécuté,
    • Si vous l'avez lancé depuis ALL RDBMS vous verrez toutes les instances de SQWareRepository,
    • Si vous l'avez lancé depuis un moteur (par exemple Oracle) vous ne verrez que les instances de ce moteur présentes dans SQWareRepository,
  • Job Name, seulement le nom du job pour les différencier,
  • User name, utilisateur qui va lancer le script
  • Host Name, l'hôte sur lequel le script sera exécuté,
  • Script, quel est le script que le JobsOnDemand devra utiliser, il faut inclure le path.

Les paramètres optionnels sont :

  • Parameters, tous les scripts n'ont pas forcément de paramètres cela dépend du script,
  • Description, une brève description du pourquoi du Job.

Cas de Job avec des paramètres "durcis"


Lorsque vous créez un job vous devez au moins saisir ses paramètres obligatoires, dans le cas d'un job "durcis" tous les paramètres que le script va prendre en compte sont explicites.

Si on reprend le script sqwora_Expdp.ksh on a vu précédemment que les paramètres obligatoires sont -I pour l'instance et -T pour le type d'export (selon le type d'export d'autres paramètres peuvent s'ajouter, par exemple si c'est un export basé sur un parfile, il faudra spécifier le -PAR avec comme valeur le chemin pour trouver le parfile).

Par exemple : si l'on veut créer un Job sur l'instance ORAEXAMPLE présente sur l'hôte srvORAexample pour faire un expdp de type full alors on va remplir le formulaire de cette façon :

add expdp

A noter :

  • On utilise la variable d'environnement $gvsqw_OraBin/ on aurait pu saisir le chemin complet : /home/oracle/SQWareProduction/oracle/bin/
  • Dans Parameters on a ajouté le -Exec pour que le script s'exécute, sinon il se lance en DryRun.

Cas de Job avec des paramètres "souples"


Lorsque vous créez un job vous devez au moins saisir ses paramètres obligatoires, dans le cas d'un job "souples" tout ou partie des paramètres que le script va prendre en compte sont saisis au moment du lancement du job.

On remplacera la valeur des paramètres par une variable locale encadrée par < et >, par convention le premier sera <Arg1>, le second <Arg2>, etc... .

N'hésitez pas à nommer vos variables de façon explicite, par exemple -I <InstanceCible>...

Example avec sqwora_Expdp.ksh

Si on reprend le script sqwora_Expdp.ksh on a vu précédemment que les paramétrées obligatoires sont -I pour l'instance et -T pour le type d'export (selon le type d'export d'autres paramètres peuvent s'ajouter, par exemple si c'est un export basé sur un parfile, il faudra spécifier le -PAR avec le chemin pour trouver le parfile).

Par exemple : on peut créer un Job sur l'instance ORAEXAMPLE présente sur l'hôte srvORAexample pour faire un expdp de type schema en laissant le paramétrage du schema être saisi lors du lancement, alors on va remplir le formulaire de cette façon :

add expdp soft


A noter :

  • Ici on propose 1 seul argument "souple", mais ce n'est limité qu'au nombre de paramètres proposés par le Job


Example avec sqwora_SchemaRefreshExpdp.ksh

Si on prend maintenant un script qui a plus de paramètres obligatoires par exemple sqwora_SchemaRefreshExpdp.ksh. On vérifie son fonctionnement :

oracle@srvORAexample:~/SQWareProduction/oracle/bin (ORAEXAMPLE) $ ./sqwora_SchemaRefreshExpdp.ksh -h
Sourcing sqwora_Global.lib v2025.02 SQWareProduction for Oracle (dbSQWare) ...

Usage: sqwora_SchemaRefreshExpdp.ksh [-h] -I <instance> -IS <instance> -US <hostname> -O <owner> [+ options]

DESCRIPTION
   sqwora_SchemaRefreshExpdp.ksh refresh schema(s) by expdp/impdp
SUPPORT
   Oracle supported versions: 10gR2 <= v <= 21c

PARAMETERS
     -I  instance       : Target instance to reload schema(s).
     -IS instance       : Instance source of the export.
     -US hostname       : Source hostname.
     -O  owner(s)       : Owner(s) of schema(s) to reload.
OPTIONS
     -h                 : Display the full usage.
     -s                 : Display samples of usage.
     -P  Nb threads     : Number of threads in parallel (by default 2).
     -F  filename       : File with list of tables to keep (save/restore).
     -TU   owner(s)     : To user, target schema(s) to reload.
     -RD  directory     : Directory to copy dump file on local host (by default /orabackup/${ORACLE_SID}/expdp).
     -RDS directory     : Directory to write dump file on distant host (by default /orabackup/${lvsqw_InstanceSource}/expdp).
     -Pdb    pdb_name   : pdb_name for multitenant (target instance).
     -PdbS   pdb_name   : pdb_name for multitenant (source instance).
     -OptExp option     : Option to add to the expdp command.
     -OptImp option     : Option to add to the impdp command.
     -FRT       code    : Force return code value on error.
     -UUS  username     : Source unix user(by default, same as target).
     -NoConsistent      : Remove 'flashback_time=systimestamp' option.
     -LockKill          : Lock users accounts and kill sessions (target schema(s) to reload).
     -Before scriptname : Script to execute before reload and before drop of objects.
     -After  scriptname : Script to execute after reload.
     -AddMail   email   : Email address to add at 'dba@domaine.com'.
     -SendReport        : Send execution log report.
     -NoMail            : Deactivate sendmail on error to dba@domaine.com (by default, send on error).
     -Locale    locale  : Force Locale for help display (fr,en).
     -Exec              : Execute the reload (by default, display generated commands).


Cette fois on veut créer un Job sur l'instance ORAEXAMPLE présente sur l'hôte srvORAexample pour faire un Schemarefresh mais sans préciser à l'avance ni l'instance de destination (-I <Arg1>), ni l'instance source (-IS <Arg2>), ni le serveur avec l'instance source (-US <Arg3>), ni le schema (-O <Arg4>), alors on va remplir le formulaire de cette façon :

add schemarefresh


A noter :

  • On a ajouter le paramètre -LockKill de façon explicite pour que le schéma à recharger soit lock et que les sessions soient fermées,
  • Lorsque vous avez de nombreux paramètres et, ou que le job est utilisé par d'autres utilisateurs il est préférable de nommer vos valeurs de paramètres par exemple -I <Arg1> -IS <Arg2> -US <Arg3> -O <Arg4> -LockKill -Exec peut être écrit : -I <InstanceCible> -IS <InstanceSource> -US <HoteSource> -O <Schema> -LockKill -Exec,
  • On a sélectionné l'instance cible dès le début du formulaire, notez que le -I <Arg1> ou -I <InstanceCible> n'a d'intérêt que pour la démonstration en production on aurait saisi cela en paramètre durci : -I ORAEXAMPLE -IS <InstanceSource> -US <HoteSource> -O <Schema> -LockKill -Exec.

Lancement de JobsOnDemand


Une fois que le job est créé, vous pouvez cliquer sur le bouton "run" pour le lancer, dans l'onglet JobsParam (Menu 3) de OnDemandJobs (Menu 2) : run
Cela vous ouvre le formulaire de lancement :

run empty

Lancer un script avec des paramètres "souples"

On reprend l'exemple précédent si on veut lancer ce job il faut maintenant préciser la valeur des paramètres suivant :

  • l'instance de destination (-I <Arg1>),
  • l'instance source (-IS <Arg2>),
  • le serveur avec l'instance source (-US <Arg3>),
  • et le schema (-O <Arg4>).

Cette fois l'instance de destination sera ORAEXAMPLE, l'instance source ORAPROD, l'hôte source srvORAproduction et le schéma à refresh sera MYSCHEMA, alors on doit remplir le champ option de cette façon :

options soft
Information.png
Information:
Les différentes options sont séparées par des pipes car certains paramètres peuvent contenir des virgules notamment ceux sous forme de liste. Ici on aurait pu saisir comme Arg4 : MYSCHEMA,YOURSCHEMA .


Lancement immédiat

Si vous voulez exécuter le script tout de suite vous pouvez sélectionner le bouton radio "immediate" (valeur par défaut), puis cliquer sur "Validate" :

run immediate

A noter :

  • Si votre JobsOnDemand a des paramètres souples, il faut penser à remplir le champ option, sinon son contenu est inutilisé,
  • Seul le champ description est obligatoire et permet de différencier chaque exécution d'un même JobsOnDemand .

Lancement différé

Si vous voulez planifier l'exécution du script vous devez sélectionner le bouton radio "scheduled" , puis vous devez remplir le le champ "Execution Date" (existe et est obligatoire si et seulement si le bouton "scheduled" est actif) :

run scheduled


Pour remplir le le champ "Execution Date" vous pouvez :

  • saisir votre date et heure directement dans le champ,
  • cliquer sur le petit bouton en forme de calendrier dans la partie droite du champ.


Cette seconde option ouvre un outil de sélection de date et heure :

un scheduled wip


Une fois la date et l'heure précisées vous pouvez enregistrer le job avec "Validate"

run scheduled done


Suivi de la planification et de l'exécution des JobsOnDemand

Affichage du suivi des JobsOnDemand

Après avoir validé la planification d'un job vous êtes automatiquement redirigé vers l'onglet JobsSchedule (Menu 3) :

running immediate status


Vous pouvez voir l'ensemble des jobs lancés, en cours, et, ou planifiés (par défaut seulement les 5 derniers jours), ainsi que le code retour de chaque exécution dans la colonne status.

En complément des journaux générés par l'exécution du script lancé par le job , l'exécution du job génère une log dans ~/admin/SQWareCentral/logs/ExecOnDemandJob. Vous pouvez accéder directement à cette log directement dans le tableau AllOnDemandJobs (Menu 3)

Bein sûr si vous voulez cela est accessible pour

dbsqware@srvdbsqware:~ (SQWareCentral) $ log
total 7424
[.résultats ommis.] 
drwxrws---  2 dbsqware dba    4096 Apr  2 11:47 ExecOnDemandJob
[.résultats ommis.] 

dbsqware@srvdbsqware:~ (SQWareCentral) $ cd ExecOnDemandJob

dbsqware@srvdbsqware04:~/admin/SQWareCentral/logs/ExecOnDemandJob (SQWareCentral) $ ll
total 24
drwxrws---  2 dbsqware dba  4096 Apr  2 11:47 .
drwxr-xr-x 33 dbsqware dba  4096 Mar 31 17:04 ..
-rw-r--r--  1 dbsqware dba  2975 Apr  2 11:41 ExecOnDemandJob_20250402_114145_3792922.log
-rw-r--r--  1 dbsqware dba  2889 Apr  2 11:41 ExecOnDemandJob_20250402_114145_3792922.mail.log
-rw-r--r--  1 dbsqware dba  2975 Apr  2 11:47 ExecOnDemandJob_20250402_114702_3817644.log
-rw-r--r--  1 dbsqware dba  2889 Apr  2 11:47 ExecOnDemandJob_20250402_114702_3817644.mail.log
-rwxrwxr-x  1 dbsqware dba     0 Apr  2 11:47 .sqw

Codes retours possibles

  • -1 Job prêt mais non démarré
  • -5 Job mis en file d'attente par le service sqwScheduler
  • -10 Connexion SSH réussie, en attente de l'échéance planifié
  • -20 Job en cours
  • -30 Job terminé mais sans code retour ! (par exemple un script de provenant pas de dbSQWare)
  • 0 Job terminé sans aucune erreur
  • 12 Job terminé mais avec erreur(s)
  • 31 Erreur pendant la connexion SSH
  • 51 Connexion SSH échouée.

Délégation d'exécution

Nous partirons du principe que le groupe concerné existe et que des utilisateurs sont dedans.
Si besoin vous avez une FAQ pour la gestion et la création des utilisateurs Général:FAQ_GestionUtilisateurs.

Activer l'accès au menu 2

Par défaut les nouveaux groupes n'ont pas accès au menu des JobsOnDemand.

Pour ajouter cet accès à un groupe : il faut aller sur l'interface web de dbsqware dans Administration (menu 1) MenuManagement (menu 2) Menu2Privileges (menu 3).

  • Dans la colonne Groupe Name tapez le nom du groupe auquel vous voulez donner des droits, dans notre exemple ce sera TEST_JOB.
  • Dans la colonne Menu2 Name tapez OnDemandJobs.
  • Vous pouvez cliquer sur le symbole de crayon pour éditer le ou les Menu2 OnDemandJobs de votre choix :
    • pour ALL RDBMS,
    • pour un seul moteur, par exemple Oracle,
    • pour plusieurs moteurs,
    • etc... .

Cela vous ouvre une fenêtre avec des cases à cocher, cocher les cases OnDemandJobs.

La fenêtre Administration (menu 1) MenuManagement (menu 2) Menu2Privileges (menu 3) avec les filtres de l'exemple :

menu mngt


La fenêtre avec les cases à cocher :

menu edition


Donner les droits à un groupe


Vous pouvez cliquer directement sur l'icône en forme de portrait (Grant) :

rights mngt

Dans le formulaire ajouter le groupe voulu, dans notre exemple c'est toujours TEST_JOB :

rights new


Maintenant cet utilisateur pourra lancer ce job et pas l'éditer, voilà ce qu'il voit dans ce menu :

users