ControlM
Cette page sera dédié au produit ControlM (CTM) de la société BMC
Commande ControlM ctl
Connaître les utilisateurs connectés :
ctl -U %user% -P %password% -M %host_ctm_server% -C GUI_Server -cmdstr PGUI
Liste des statuts ControlM -> Base de données
Wait Scheduling - 0
Wait Confirm - 1
Submitted -2
Not submitted - 3
Executing - 4
Ended - 5
Analyzed - 6
Disappeared - 7
Post processed - 8
Not Found - 9
Wait Rerun - A
Wait Time - B
Wait Cond - C
Wait RSC - D
Wait Submission - E
Not Known - F
Retry Submit - G
Wait Group Sch - H
Fail Submit - I
Unknown - Z
Gestion d'un job en statut inconnu (unknown) dans ControlM
Lorsqu'un job est en statut inconnu dans ControlM plus aucune action n'est possible via l'IHM de Con-trolM. Il est donc nécessaire de réaliser des actions via la base de données pour forcer un nouveau statut.
- Holder le job qui devra être forcé dans ControlM - Récupérer le order id dans ControlM - Convertir le Order ID en numéro via l'utilitaire p_36 :
p_36 orderid
La commande retournera l'orderno utilisé dans la base de données. - Se connecter à la base de données utilisé par le CTM Server (Remplacer MON_ORDERNO par le numéro fournit par la commande p_36) :
- Exécuter la requête suivante pour contrôler que nous allons réaliser les actions sur le job attendu :
select * from CMR_AJF where ORDERNO = MON_ODERNO;
- Contrôler le résultat de la commande pour être sûr qu'elle correspond au job que l'on souhaite modifier
- Si le ORDERNO est confirmé exécuter la requête suivante pour mettre à jour le statut :
update CMR_AJF set STATE = '5', OSCOMPSTAT=1, STATUS='N' where ORDERNO = MON_ODERNO;
- La requête ci-dessous réalise l'action en masse sans nécessité les actions précédente :
update CMR_AJF set STATE = '5', OSCOMPSTAT=1, STATUS='N' where STATE = 'Z';
- Déholder le job, celui-ci se terminera en erreur
Récupérer la dernière date d'exécution des jobs encore present dans ControlM et n'étant pas un dummy
SELECT R.SCHEDTAB, R.JOBNAME, R.MEMLIB, R.MEMNAME, MAX(R.STARTRUN) START_RUN
FROM CMR_RUNINF R
INNER JOIN CMS_JOBDEF J
ON J.JOBNAME = R.JOBNAME and J.MEMNAME = R.MEMNAME and J.SCHEDTAB = R.SCHEDTAB and J.OWNER = R.OWNER
WHERE J.TASKTYPE <> 'U'
GROUP BY R.SCHEDTAB, R.JOBNAME, R.MEMLIB, R.MEMNAME
ORDER BY START_RUN;
Extraction des statisques d'un job
Requête testé sous SQL Server :
select upper(JOBNAME),
dateadd(ss,-ELAPTIME/100,convert(datetime,substring(TIMESTMP,1,8) +' '+substring(TIMESTMP,9,2)+':'+substring(TIMESTMP,11,2)+':'+substring(TIMESTMP,13,2))) as StartTime,
convert(datetime,substring(TIMESTMP,1,8) +' '+substring(TIMESTMP,9,2)+':'+substring(TIMESTMP,11,2)+':'+substring(TIMESTMP,13,2)) as EndTime,
convert(decimal(10,3),ELAPTIME/100) as "ELAPTIME(secondes)"
from CMR_RUNINF
where upper(JOBNAME)='${NOM_JOBNMANE}';
Requête testé sous Postgres :
select jobname,
to_timestamp(timestmp, 'YYYYMMDDHH24MISS')::timestamp - ((elaptime/100) || 's')::interval as starttime,
to_timestamp(timestmp, 'YYYYMMDDHH24MISS')::timestamp as endtime,
to_char(((elaptime/100) || 's')::interval, 'HH24:MI:SS') as elaptime
from cmr_runinf where jobname ='${NOM_JOBNMANE}';
Temps moyen d'execution d'un job, d'une table, d'une application
Requête testé sous SQL Server
select UPPER(CMR_RUNINF.JOBNAME),
round(avg(convert(decimal(10,3),CMR_RUNINF.ELAPTIME/100)),2) as "ELAPTIME(secondes)"
from CMR_RUNINF
inner join CMS_JOBDEF
on CMR_RUNINF.JOBNAME = CMS_JOBDEF.JOBNAME
where CMS_JOBDEF.APPLIC like '%${NOM_APPLICATION}%'
and CMS_JOBDEF.TASKTYPE <> 'G' -- Scheduling Group
and CMS_JOBDEF.TASKTYPE <> 'U' -- Dummy jobs
group by UPPER(CMR_RUNINF.JOBNAME)
order by UPPER(CMR_RUNINF.JOBNAME)