ControlM

De Mon Wiki
Aller à la navigation Aller à la recherche

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)