Avatar of Larry Brister
Larry Brister
Flag for United States of America asked on

Amazon RDS SQL Server Select Job Schedules

I am trying to do a select on our Amazon RDS Sql Jobs to get ob name, scheduled day and time and recurring information

As in...
job123 8am daily every 4 hours

But Amazon RDS is not letting me select on sysschedules

This code is rejected
SELECT S.name AS JobName,
       SS.name AS ScheduleName,
       CASE (SS.freq_type)
           WHEN 1 THEN
               'Once'
           WHEN 4 THEN
               'Daily'
           WHEN 8 THEN
       (CASE
            WHEN (SS.freq_recurrence_factor > 1) THEN
                'Every ' + CONVERT(VARCHAR(3), SS.freq_recurrence_factor) + ' Weeks'
            ELSE
                'Weekly'
        END)
           WHEN 16 THEN
       (CASE
            WHEN (SS.freq_recurrence_factor > 1) THEN
                'Every ' + CONVERT(VARCHAR(3), SS.freq_recurrence_factor) + ' Months'
            ELSE
                'Monthly'
        END)
           WHEN 32 THEN
               'Every ' + CONVERT(VARCHAR(3), SS.freq_recurrence_factor) + ' Months' -- RELATIVE
           WHEN 64 THEN
               'SQL Startup'
           WHEN 128 THEN
               'SQL Idle'
           ELSE
               '??'
       END AS Frequency,
       CASE
           WHEN (freq_type = 1) THEN
               'One time only'
           WHEN (   freq_type = 4
                    AND freq_interval = 1) THEN
               'Every Day'
           WHEN (   freq_type = 4
                    AND freq_interval > 1) THEN
               'Every ' + CONVERT(VARCHAR(10), freq_interval) + ' Days'
           WHEN (freq_type = 8) THEN
           (   SELECT 'Weekly Schedule' = MIN(D1 + D2 + D3 + D4 + D5 + D6 + D7)
               FROM (   SELECT ss.schedule_id,
                               freq_interval,
                               'D1' = CASE
                                          WHEN (freq_interval & 1 <> 0) THEN
                                              'Sun '
                                          ELSE
                                              ''
                                      END,
                               'D2' = CASE
                                          WHEN (freq_interval & 2 <> 0) THEN
                                              'Mon '
                                          ELSE
                                              ''
                                      END,
                               'D3' = CASE
                                          WHEN (freq_interval & 4 <> 0) THEN
                                              'Tue '
                                          ELSE
                                              ''
                                      END,
                               'D4' = CASE
                                          WHEN (freq_interval & 8 <> 0) THEN
                                              'Wed '
                                          ELSE
                                              ''
                                      END,
                               'D5' = CASE
                                          WHEN (freq_interval & 16 <> 0) THEN
                                              'Thu '
                                          ELSE
                                              ''
                                      END,
                               'D6' = CASE
                                          WHEN (freq_interval & 32 <> 0) THEN
                                              'Fri '
                                          ELSE
                                              ''
                                      END,
                               'D7' = CASE
                                          WHEN (freq_interval & 64 <> 0) THEN
                                              'Sat '
                                          ELSE
                                              ''
                                      END
                        FROM msdb..sysschedules ss
                        WHERE freq_type = 8) AS F
               WHERE schedule_id = SJ.schedule_id)
           WHEN (freq_type = 16) THEN
               'Day ' + CONVERT(VARCHAR(2), freq_interval)
           WHEN (freq_type = 32) THEN
           (   SELECT freq_rel + WDAY
               FROM (   SELECT SS.schedule_id,
                               'freq_rel' = CASE (freq_relative_interval)
                                                WHEN 1 THEN
                                                    'First'
                                                WHEN 2 THEN
                                                    'Second'
                                                WHEN 4 THEN
                                                    'Third'
                                                WHEN 8 THEN
                                                    'Fourth'
                                                WHEN 16 THEN
                                                    'Last'
                                                ELSE
                                                    '??'
                                            END,
                               'WDAY' = CASE (freq_interval)
                                            WHEN 1 THEN
                                                ' Sun'
                                            WHEN 2 THEN
                                                ' Mon'
                                            WHEN 3 THEN
                                                ' Tue'
                                            WHEN 4 THEN
                                                ' Wed'
                                            WHEN 5 THEN
                                                ' Thu'
                                            WHEN 6 THEN
                                                ' Fri'
                                            WHEN 7 THEN
                                                ' Sat'
                                            WHEN 8 THEN
                                                ' Day'
                                            WHEN 9 THEN
                                                ' Weekday'
                                            WHEN 10 THEN
                                                ' Weekend'
                                            ELSE
                                                '??'
                                        END
                        FROM msdb..sysschedules SS
                        WHERE SS.freq_type = 32) AS WS
               WHERE WS.schedule_id = SS.schedule_id)
       END AS Interval,
       CASE (freq_subday_type)
           WHEN 1 THEN
               LEFT(STUFF((STUFF((REPLICATE('0', 6 - LEN(active_start_time))) + CONVERT(VARCHAR(6), active_start_time), 3, 0, ':')), 6, 0, ':'), 8)
           WHEN 2 THEN
               'Every ' + CONVERT(VARCHAR(10), freq_subday_interval) + ' seconds'
           WHEN 4 THEN
               'Every ' + CONVERT(VARCHAR(10), freq_subday_interval) + ' minutes'
           WHEN 8 THEN
               'Every ' + CONVERT(VARCHAR(10), freq_subday_interval) + ' hours'
           ELSE
               '??'
       END AS [Time],
       CASE SJ.next_run_date
           WHEN 0 THEN
               CAST('n/a' AS CHAR(10))
           ELSE
               CONVERT(CHAR(10), CONVERT(DATETIME, CONVERT(CHAR(8), SJ.next_run_date)), 120) + ' '
               + LEFT(STUFF((STUFF((REPLICATE('0', 6 - LEN(next_run_time))) + CONVERT(VARCHAR(6), next_run_time), 3, 0, ':')), 6, 0, ':'), 8)
       END AS NextRunTime
FROM msdb.dbo.sysjobs S
    LEFT JOIN msdb.dbo.sysjobschedules SJ ON S.job_id = SJ.job_id
    LEFT JOIN msdb.dbo.sysschedules SS ON SS.schedule_id = SJ.schedule_id
ORDER BY S.name;

Open in new window

Microsoft SQL ServerAWS* rds 2016

Avatar of undefined
Last Comment
HainKurt

8/22/2022 - Mon
HainKurt

This code is rejected

meaning, what's the error code?
probably the login you use does not have enough grants

have a look at this

GRANT System Object Permissions (Transact-SQL)

https://docs.microsoft.com/en-us/sql/t-sql/statements/grant-system-object-permissions-transact-sql?view=sql-server-ver15
Larry Brister

ASKER
I have the highest level access
HainKurt

I have the highest level access
but we do not have the exact error message :)
This is the best money I have ever spent. I cannot not tell you how many times these folks have saved my bacon. I learn so much from the contributors.
rwheeler23
Larry Brister

ASKER
HainKurt

Msg 229, Level 14, State 5, Line 1
The SELECT permission was denied on the object 'sysschedules', database 'msdb', schema 'dbo'.


HainKurt

so, you need select permission
and you are not dbo I guess...
GRANT SELECT
ON msdb.dbo.sysjobschedules
TO public -- or login you use

Open in new window

you can try sysjobs_view instead of sysjobschedules
Larry Brister

ASKER
HainKurt
Cannot grant, deny, or revoke permissions to sa, dbo, entity owner, information_schema, sys, or yourself.


Get an unlimited membership to EE for less than $4 a week.
Unlimited question asking, solutions, articles and more.
ASKER CERTIFIED SOLUTION
HainKurt

Log in or sign up to see answer
Become an EE member today7-DAY FREE TRIAL
Members can start a 7-Day Free trial then enjoy unlimited access to the platform
Sign up - Free for 7 days
or
Learn why we charge membership fees
We get it - no one likes a content blocker. Take one extra minute and find out why we block content.
Not exactly the question you had in mind?
Sign up for an EE membership and get your own personalized solution. With an EE membership, you can ask unlimited troubleshooting, research, or opinion questions.
ask a question