Hi Christine,
Here is my SQL Query (with Oracle content store) to get infos about schedules :
with
base_query as
(select classid, cmobjects.cmid, cmobjects.pcmid, cmobjnames.name as groupname
from cmobjects , cmobjnames
where cmobjects.cmid = cmobjnames.cmid
and classid in (1,10,19,50,52,55,80,85,117,234)
and cmobjnames.mapdlocaleid=184
union
select classid, cmobjects.cmid as cmid, cmobjects.pcmid, cmobjnames.name as groupname
from cmobjects , cmobjnames
where cmobjects.cmid = cmobjnames.cmid
and cmobjects.cmid in (select distinct cmobjects.pcmid
from cmobjects where classid in (1,10,19,50,52,55,80,85,117,234))
and classid in (1,10,19,50,52,55,80,85,117,234)
and cmobjnames.mapdlocaleid=184
)
,
ctebuildpath (cmid,pcmid,groupname,Hlevel,classid,directory_path) as
(
select base_query.cmid,
base_query.pcmid,
base_query.groupname,
1 as Hlevel,classid,
cast(base_query.groupname as varchar(500)) as directory_path
from base_query
union all
select recur.cmid,
recur.pcmid,
recur.groupname,
cte.Hlevel+1 as Hlevel,recur.classid,
cast(cte.directory_path || ' > ' || recur.groupname as varchar(500)) as directory_path
from base_query recur,
ctebuildpath cte
where cte.cmid = recur.pcmid),
email (cmid,addresses) as
(
SELECT t.cmid,
LISTAGG( x.address, ',' ) WITHIN GROUP ( ORDER BY ROWNUM ) AS addresses
FROM CMOBJPROPS26 t
CROSS JOIN
XMLTABLE(
'/SOAP-ENC/value/item[@xsi:type="bus:addressSMTP"]'
PASSING XMLType(
'<?xml version="1.0" encoding="utf-8"?>
<SOAP-ENC xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">'
|| t.delivoptions
|| '</SOAP-ENC>'
)
COLUMNS address VARCHAR2(200) PATH 'text()'
) x
GROUP BY t.cmid
)
select v_group.directory,cmn.name,
class.NAME CLASS_NAME,
p0.type,
case
when p0.type=4 then 'WEEKLY '
when p0.type=0 then 'DAILY '
when p0.type=1 then 'MONTHLY '
when p0.type=2 then 'MONTHLY '
when p0.type=5 then 'YEARLY '
when p0.type=6 then 'YEARLY '
when p0.type=7 then 'TRIGGER'
else 'OTHER'
end REPORT_FREQ
,p0.STARTDATE
,p0.ENDDATE
,case
when p0.type=0 then
'EVERY '||cast ( p0.EVERYNPERIODS as char(2))||
case when p0.DAILYPERIOD=1 then ' HOURS'
when p0.DAILYPERIOD=2 then ' MINUTES'
when p0.DAILYPERIOD=0 then ' DAYS'
end
WHEN p0.type=4 THEN
'EVERY '||cast ( p0.EVERYNPERIODS as char(2))||' WEEK(S) ON '||
CASE when p0.WEEKLYMONDAY = 1 then 'MONDAY ' ELSE '' end
|| CASE WHEN p0.WEEKLYTUESDAY = 1 then 'TUESDAY ' ELSE '' end
|| CASE WHEN p0.WEEKLYWEDNESDAY = 1 then 'WEDNESDAY ' ELSE '' end
|| CASE WHEN p0.WEEKLYTHURSDAY = 1 then 'THURSDAY ' ELSE '' end
|| CASE WHEN p0.WEEKLYFRIDAY = 1 then 'FRIDAY ' ELSE '' end
|| CASE WHEN p0.WEEKLYSATURDAY = 1 then 'SATURDAY ' ELSE '' end
|| CASE WHEN p0.WEEKLYSUNDAY = 1 then 'SUNDAY' ELSE '' end
WHEN p0.type =2 THEN
CASE WHEN p0.MONTHLYRELWEEK = 0 then 'FIRST ' ELSE '' end
|| CASE WHEN p0.MONTHLYRELWEEK = 3 then 'SECOND ' ELSE '' end
|| CASE WHEN p0.MONTHLYRELWEEK = 2 then 'LAST ' ELSE '' end
|| CASE WHEN p0.MONTHLYRELWEEK = 1 then 'FOURTH ' ELSE '' end
|| CASE WHEN p0.MONTHLYRELWEEK = 4 then 'THIRD ' ELSE '' end
|| CASE WHEN p0.MONTHLYRELDAY = 1 THEN 'MONDAY' ELSE '' end
|| CASE WHEN p0.MONTHLYRELDAY = 2 THEN 'SATURDAY' ELSE '' end
|| CASE WHEN p0.MONTHLYRELDAY = 3 THEN 'SUNDAY' ELSE '' end
|| CASE WHEN p0.MONTHLYRELDAY = 4 THEN 'THURSDAY' ELSE '' end
|| CASE WHEN p0.MONTHLYRELDAY = 5 THEN 'TUESDAY' ELSE '' end
|| CASE WHEN p0.MONTHLYRELDAY = 6 THEN 'WEDNESDAY' ELSE '' end
|| CASE WHEN p0.MONTHLYRELDAY = 0 THEN 'FRIDAY' ELSE '' end
|| ' OF EVERY '||cast( p0.EVERYNPERIODS as char(1) ) || ' MONTH '
WHEN p0.type =1 THEN
'DAY '|| cast( p0.MONTHLYABSDAY as char(2)) ||' OF EVERY '|| cast( p0.EVERYNPERIODS as char(2) ) || ' MONTH(S) '
WHEN p0.type =6 THEN
' EVERY '|| ' YEAR AT THE '
|| CASE WHEN p0.YEARLYRELWEEK = 0 then 'FIRST ' ELSE ' ' end
|| CASE WHEN p0.YEARLYRELWEEK = 1 then 'SECOND ' ELSE '' end
|| CASE WHEN p0.YEARLYRELWEEK = 2 then 'THIRD ' ELSE '' end
|| CASE WHEN p0.YEARLYRELWEEK = 3 then 'FOURTH ' ELSE '' end
|| CASE WHEN p0.YEARLYRELWEEK = 4 then 'LAST ' ELSE '' end
|| CASE WHEN p0.YEARLYRELDAY = 1 THEN 'MONDAY' ELSE '' end
|| CASE WHEN p0.YEARLYRELDAY = 2 THEN 'SATURDAY' ELSE '' end
|| CASE WHEN p0.YEARLYRELDAY = 3 THEN 'SUNDAY' ELSE '' end
|| CASE WHEN p0.YEARLYRELDAY = 4 THEN 'THURSDAY' ELSE '' end
|| CASE WHEN p0.YEARLYRELDAY = 5 THEN 'TUESDAY' ELSE '' end
|| CASE WHEN p0.YEARLYRELDAY = 6 THEN 'WED' ELSE '' end
|| CASE WHEN p0.YEARLYRELDAY = 0 THEN 'FRIDAY' ELSE '' end
|| ' OF EVERY '
|| CASE WHEN p0.YEARLYRELMONTH = 0 THEN 'JAN' ELSE '' end
|| CASE WHEN p0.YEARLYRELMONTH = 1 THEN 'FEB' ELSE '' end
|| CASE WHEN p0.YEARLYRELMONTH = 2 THEN 'MAR' ELSE '' end
|| CASE WHEN p0.YEARLYRELMONTH = 3 THEN 'APR' ELSE '' end
|| CASE WHEN p0.YEARLYRELMONTH = 4 THEN 'MAY' ELSE '' end
|| CASE WHEN p0.YEARLYRELMONTH = 5 THEN 'JUN' ELSE '' end
|| CASE WHEN p0.YEARLYRELMONTH = 6 THEN 'JUL' ELSE '' end
|| CASE WHEN p0.YEARLYRELMONTH = 7 THEN 'AUG' ELSE '' end
|| CASE WHEN p0.YEARLYRELMONTH = 8 THEN 'SEP' ELSE '' end
|| CASE WHEN p0.YEARLYRELMONTH = 9 THEN 'OCT' ELSE '' end
|| CASE WHEN p0.YEARLYRELMONTH = 10 THEN 'NOV' ELSE '' end
|| CASE WHEN p0.YEARLYRELMONTH = 11 THEN 'DEC' ELSE '' end
WHEN p0.type =5 THEN
'DAY '
|| CAST ( p0.YEARLYABSDAY as char(2)) ||' OF EVERY '
|| CASE WHEN p0.YEARLYABSMONTH = 0 THEN 'JAN' ELSE '' end
|| CASE WHEN p0.YEARLYABSMONTH = 1 THEN 'FEB' ELSE '' end
|| CASE WHEN p0.YEARLYABSMONTH = 2 THEN 'MAR' ELSE '' end
|| CASE WHEN p0.YEARLYABSMONTH = 3 THEN 'APR' ELSE '' end
|| CASE WHEN p0.YEARLYABSMONTH = 4 THEN 'MAY' ELSE '' end
|| CASE WHEN p0.YEARLYABSMONTH = 5 THEN 'JUN' ELSE '' end
|| CASE WHEN p0.YEARLYABSMONTH = 6 THEN 'JUL' ELSE '' end
|| CASE WHEN p0.YEARLYABSMONTH = 7 THEN 'AUG' ELSE '' end
|| CASE WHEN p0.YEARLYABSMONTH = 8 THEN 'SEP' ELSE '' end
|| CASE WHEN p0.YEARLYABSMONTH = 9 THEN 'OCT' ELSE '' end
|| CASE WHEN p0.YEARLYABSMONTH = 10 THEN 'NOV' ELSE '' end
|| CASE WHEN p0.YEARLYABSMONTH = 11 THEN 'DEC' ELSE '' end
WHEN p0.type =7 THEN
'TRIGGER NAME:'||p2.SCHEDTRIGNAME
END SCHEDULE_PLAN,
email.addresses
from
CMOBJECTS o
join CMOBJPROPS2 p0 on o.CMID=p0.CMID
left outer join email on o.CMID=email.CMID
join CMOBJPROPS51 p2 on o.CMID=p2.CMID
join CMOBJPROPS1 p3 on o.CMID=p3.CMID
join cmobjects cmo on o.pcmid = cmo.cmid
join cmobjnames cmn ON cmo.cmid = cmn.cmid
join cmclasses class on class.classid=cmo.classid
inner JOIN (SELECT ctebuildpath.cmid cmid, ctebuildpath.groupname name,ctebuildpath.directory_path as directory, classid
FROM ctebuildpath where hlevel=(select max(hlevel) from ctebuildpath cte where ctebuildpath.cmid=cte.cmid)) v_group
ON v_group.cmid = cmo.cmid
where p0.active=1
order by 1,2
Regards
Pierre-Frank
------------------------------
Pierre-Frank MOUZON
------------------------------
Original Message:
Sent: Thu November 04, 2021 08:33 AM
From: brenda grossnickle
Subject: Create a report from the content store db providing details of schedules
can you share the code for your Fn_Search functions?
------------------------------
brenda grossnickle
BI Programmer Analyst
FIS
Original Message:
Sent: Wed September 01, 2021 09:47 AM
From: Christine Beswick
Subject: Create a report from the content store db providing details of schedules
@Wendi Lewis Thanks for your message. Yes, it should be a very useful report once it is correct.
Here is the code that I've developed (with the help from this forum especially @Matt Thiese) - please comment if you see issues. I still need to convert the jrt.RUNTIME into hours/minutes/seconds, but that is fairly straightforward
select
jobnames.name as job_name
, cognos.Fn_GetSearchPath(job.cmid) as job_location
, objectname.name as job_step_object_name
, objectclass.name as type
, cognos.Fn_GetSearchPath(jobstepobject.cmid) as step_location
, CASE
WHEN scheduleprops.active = 1 THEN 'Active'
WHEN scheduleprops.active = 0 THEN 'Disabled'
END as schedule_status
, accountname.name as schedule_owner
, cognos.Fn_GetNextRunDate(schedule.cmid, getdate()) as next_run_date
, triggername.schedtrigname as trigger_name
, dateadd(millisecond, ncq.RUN_DATE % 1000, dateadd(second, ncq.RUN_DATE / 1000, '19700101')) as next_run
, dateadd(millisecond, tks.LAST_EXECUTION_AT % 1000, dateadd(second, tks.LAST_EXECUTION_AT/ 1000, '19700101')) as last_run
, dateadd(millisecond, ncq.RUN_DATE % 1000, dateadd(second, ncq.RUN_DATE/ 1000, '19700101')) as run_date
, jrt.JOBNAME
, jrt.LOCAL_TIMESTAMP
, jrt.RUNTIME
from
cognos.CMOBJECTS job
inner join cognos.CMOBJNAMES jobnames -- to get the name of the job
on job.cmid = jobnames.cmid and jobnames.isdefault = 1
inner join cognos.CMOBJECTS jobsteps -- to get the steps in the job
on job.cmid = jobsteps.pcmid and jobsteps.classid = 57
inner join cognos.CMREFNOORD1 jobsteprefs -- to get the objects linked to the job steps
on jobsteps.cmid = jobsteprefs.cmid
inner join cognos.CMOBJECTS jobstepobject -- to get the objects linked to the job steps
on jobsteprefs.refcmid = jobstepobject.cmid
inner join cognos.CMOBJNAMES objectname -- to get the name of the objects linked to the job steps
on jobstepobject.cmid = objectname.cmid and objectname.isdefault = 1
inner join cognos.CMCLASSES objectclass -- to get the type of job step
on jobstepobject.classid = objectclass.classid
left outer join cognos.CMOBJECTS schedule -- to get the schedule of the job
on job.cmid = schedule.pcmid and schedule.classid = 39
left outer join cognos.CMOBJPROPS2 scheduleprops -- the properties of the schedule
on schedule.cmid = scheduleprops.cmid
left outer join cognos.CMREFNOORD1 credential -- to get the credential linked to the scedule
on schedule.cmid = credential.cmid
left outer join cognos.CMOBJECTS account -- to get the account owning the credential
on credential.refcmid = account.cmid
left outer join cognos.CMOBJPROPS33 accountname -- name of schedule owner
on account.pcmid = accountname.cmid
left outer join cognos.CMOBJPROPS51 triggername
on schedule.cmid = triggername.cmid
left outer join cognos.R_NEWSITEMS_NCOBJECTS rnews
on scheduleprops.taskid = rnews.nid
left outer join cognos.NC_TASKSCHEDULE tks ---get the last execution date
on rnews.FK_NCID = tks.FK_TASK_ID
left outer join cognos.R_TASKSCHEDULE_SCHEDULE tksched
on tks.PK_TASKSCHEDULE_ID = tksched.FK_TASKSCHEDULE_ID
left outer join cognos.NC_SCHEDULE ncs
on tksched.FK_SCHEDULE_ID = ncs.PK_SCHEDULE_ID
left outer join cognos.NC_SCHEDULE_QUEUE ncq
on ncq.SCHEDULE_ID=tks.PK_TASKSCHEDULE_ID
left outer join (SELECT LEFT(SUBSTRING(COGIPF_JOBPATH, CHARINDEX('/jobDefinition[@name=', COGIPF_JOBPATH, 1) + 22, 128), CHARINDEX(']', SUBSTRING(COGIPF_JOBPATH, CHARINDEX('/jobDefinition[@name=', COGIPF_JOBPATH, 1) + 22, 128)) - 2) AS JOBNAME
,MAX([COGIPF_LOCALTIMESTAMP]) AS LOCAL_TIMESTAMP
,AVG(CAST([COGIPF_RUNTIME] AS FLOAT)) AS RUNTIME
FROM [Cognos_11_Audit].[cognos].[COGIPF_RUNJOB]
GROUP BY LEFT(SUBSTRING(COGIPF_JOBPATH, CHARINDEX('/jobDefinition[@name=', COGIPF_JOBPATH, 1) + 22, 128), CHARINDEX(']', SUBSTRING(COGIPF_JOBPATH, CHARINDEX('/jobDefinition[@name=', COGIPF_JOBPATH, 1) + 22, 128)) - 2)
) jrt
on objectname.name = jrt.JOBNAME
where
job.classid = 55
Regards,
------------------------------
Christine Beswick
Original Message:
Sent: Wed September 01, 2021 09:16 AM
From: Wendi Lewis
Subject: Create a report from the content store db providing details of schedules
@Christine Beswick This looks like a very useful report that you're developing. Please consider sharing the specs with the community (or in the Accelerator Catalog?). I can think of many occasions this would be helpful in our organization.
Thanks,
------------------------------
Wendi Lewis
Original Message:
Sent: Fri August 27, 2021 10:43 AM
From: Christine Beswick
Subject: Create a report from the content store db providing details of schedules
Hi everybody,
I need to create a Cognos report from the content store database which will provide details of the scheduled jobs and reports including:
- Name
- Location
- Type (Job, Report, etc)
- Step Name
- Step Location
- Schedule Status
- Schedule Owner
- Next Run Date/ Time
- Trigger (if exists)
- Last Run Date
- Last Run Duration
I am having trouble finding the Last Run Duration and I am hoping there is someone who can assist. I can't use the Audit database because it doesn't have all the information that I need so I have to source the report from the content store
Thanks very much in advance
Regards,
Christine
------------------------------
Christine Beswick
------------------------------
#CognosAnalyticswithWatson