Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Простой вопрос по организации расписания в планах обслуживания ms sql  [new]
stavgreengo
Member

Откуда:
Сообщений: 710
День добрый !!!
В SSMS из под 2008R2 ms sql. Как в расписании установить "первый рабочий день после 25 числа каждого месяца" ? На скриншоте(аттач) я так понял что можно сделать только в первый рабочий день месяца. Если в GUI SSMS этого сделать нельзя, то как мне это осуществить в T-SQL ?

Цель: организовать срез бэкапов бухгалтерских баз 1С в первый рабочий день после 25 числа каждого месяца на долгосрочное хранение.

К сообщению приложен файл. Размер - 94Kb
25 янв 16, 12:06    [18724973]     Ответить | Цитировать Сообщить модератору
 Re: Простой вопрос по организации расписания в планах обслуживания ms sql  [new]
Glory
Member

Откуда:
Сообщений: 104751
stavgreengo
Если в GUI SSMS этого сделать нельзя, то как мне это осуществить в T-SQL ?

А откуда, по-вашему, МSSQL должен знать все рабочие и нерабочие дни каждого года в вашей стране, регионе, городе, фирме ?
25 янв 16, 12:09    [18725001]     Ответить | Цитировать Сообщить модератору
 Re: Простой вопрос по организации расписания в планах обслуживания ms sql  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4813
stavgreengo
День добрый !!!
В SSMS из под 2008R2 ms sql. Как в расписании установить "первый рабочий день после 25 числа каждого месяца" ?


Вам нужно завести в БД таблицу с календарем, где указаны рабочие дни или нужные вам дни. (Если под рабочими днями понимается трудовой календарь.)

Затем пускаете джоб каждый день -- проверяете по таблице -- нужный сегодня день или нет. Если нужный, то уходите на выполнение, не нужный останавливаете джоб.
25 янв 16, 12:18    [18725047]     Ответить | Цитировать Сообщить модератору
 Re: Простой вопрос по организации расписания в планах обслуживания ms sql  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4422
stavgreengo
День добрый !!!
В SSMS из под 2008R2 ms sql. Как в расписании установить "первый рабочий день после 25 числа каждого месяца" ? На скриншоте(аттач) я так понял что можно сделать только в первый рабочий день месяца. Если в GUI SSMS этого сделать нельзя, то как мне это осуществить в T-SQL ?

Цель: организовать срез бэкапов бухгалтерских баз 1С в первый рабочий день после 25 числа каждого месяца на долгосрочное хранение.

Еще вариант - программно сдвигать начало расписания на 25 число каждый месяц, оставив параметр "первый рабочий день".
Но лучше конечно использовать небольшую таблицу, в которой перечислены даты запуска, так как не все праздничные дни может предугадывать сервер.
Думаю 12 записей несложно сделать руками.
Задача запускается каждый день.
Если запись есть, то бекап делается.
25 янв 16, 12:27    [18725100]     Ответить | Цитировать Сообщить модератору
 Re: Простой вопрос по организации расписания в планах обслуживания ms sql  [new]
stavgreengo
Member

Откуда:
Сообщений: 710
Задача немного упрощается тем что изучив тщательно производственный календарь пришёл к выводу что государственных праздников 26го числа быть не может. Помогите написать T-SQL всего из двух циклов if на проверку является ли текущий день субботой или воскресеньем.
25 янв 16, 12:52    [18725239]     Ответить | Цитировать Сообщить модератору
 Re: Простой вопрос по организации расписания в планах обслуживания ms sql  [new]
Glory
Member

Откуда:
Сообщений: 104751
stavgreengo
Помогите написать T-SQL всего из двух циклов if на проверку является ли текущий день субботой или воскресеньем.


while 1=1
begin
    while 2=2
    begin
        IF DATENAME(weekday,GETDATE()) = 'Sunday' OR DATENAME(weekday,GETDATE()) = 'Saturday'
            RETURN
    end
end
25 янв 16, 12:56    [18725262]     Ответить | Цитировать Сообщить модератору
 Re: Простой вопрос по организации расписания в планах обслуживания ms sql  [new]
guuuest
Guest
Glory
stavgreengo
Помогите написать T-SQL всего из двух циклов if на проверку является ли текущий день субботой или воскресеньем.


while 1=1
begin
    while 2=2
    begin
        IF DATENAME(weekday,GETDATE()) = 'Sunday' OR DATENAME(weekday,GETDATE()) = 'Saturday'
            RETURN
    end
end


Glory, повеселил.

stavgreengo, бывает такая вещь, как перенос выходного дня. Например в РФ в 22 февраля 2016 года - выходной день, хоть и не праздник и не суббота и не понедельник. Чисто теоретически на 26-е число, когда-нибудь что-нибудь могут перенести. Так что лучше воспользуйтесь советами выше. Сделайте календарь рабочих/праздничных/выходных дней - полезная вещь.
25 янв 16, 13:17    [18725358]     Ответить | Цитировать Сообщить модератору
 Re: Простой вопрос по организации расписания в планах обслуживания ms sql  [new]
stavgreengo
Member

Откуда:
Сообщений: 710
guuuest
Glory
пропущено...


while 1=1
begin
    while 2=2
    begin
        IF DATENAME(weekday,GETDATE()) = 'Sunday' OR DATENAME(weekday,GETDATE()) = 'Saturday'
            RETURN
    end
end


Glory, повеселил.

stavgreengo, бывает такая вещь, как перенос выходного дня. Например в РФ в 22 февраля 2016 года - выходной день, хоть и не праздник и не суббота и не понедельник. Чисто теоретически на 26-е число, когда-нибудь что-нибудь могут перенести. Так что лучше воспользуйтесь советами выше. Сделайте календарь рабочих/праздничных/выходных дней - полезная вещь.

я уже предусмотрел что 23 февраля переносят с субботы или воскресенья на понедельник, всё равно 26 число когда надо будет снимать бэкап окажется рабочим днём и это удовлетворит циклам из двух if
25 янв 16, 13:24    [18725387]     Ответить | Цитировать Сообщить модератору
 Re: Простой вопрос по организации расписания в планах обслуживания ms sql  [new]
Glory
Member

Откуда:
Сообщений: 104751
stavgreengo
это удовлетворит циклам из двух if

А что такое это ваше "цикл if" ?
25 янв 16, 13:25    [18725392]     Ответить | Цитировать Сообщить модератору
 Re: Простой вопрос по организации расписания в планах обслуживания ms sql  [new]
guuuest
Guest
stavgreengo
guuuest
пропущено...


Glory, повеселил.

stavgreengo, бывает такая вещь, как перенос выходного дня. Например в РФ в 22 февраля 2016 года - выходной день, хоть и не праздник и не суббота и не понедельник. Чисто теоретически на 26-е число, когда-нибудь что-нибудь могут перенести. Так что лучше воспользуйтесь советами выше. Сделайте календарь рабочих/праздничных/выходных дней - полезная вещь.

я уже предусмотрел что 23 февраля переносят с субботы или воскресенья на понедельник, всё равно 26 число когда надо будет снимать бэкап окажется рабочим днём и это удовлетворит циклам из двух if


А 26 марта 2016 года у Вас рабочий день? Ваша идея с проверкой субботы/воскресенья непонятна. Как минимум этого недостаточно, полагаю вам нужен еще третий "цикл if".
И да, поясните, что же все-таки это за загадочный "цикл из двух if". Сначала думал у Вас опечатка, но после повтора сильно засомневался.

P.S. Я в своем предыдущем сообщении опечатался. Имел ввиду, что 22-е и не суббота и не воскресенье.
25 янв 16, 13:54    [18725626]     Ответить | Цитировать Сообщить модератору
 Re: Простой вопрос по организации расписания в планах обслуживания ms sql  [new]
Glory
Member

Откуда:
Сообщений: 104751
stavgreengo
я уже предусмотрел что 23 февраля переносят с субботы или воскресенья на понедельник, всё равно 26 число когда надо будет снимать бэкап окажется рабочим днём и это удовлетворит циклам из двух if

Создайте 52/53 шедула, каждый на разовое исполнение и забудьте об этом до следующего года.
25 янв 16, 13:56    [18725656]     Ответить | Цитировать Сообщить модератору
 Re: Простой вопрос по организации расписания в планах обслуживания ms sql  [new]
s_ustinov
Member

Откуда: Munchen, DE
Сообщений: 2237
Glory
stavgreengo
Помогите написать T-SQL всего из двух циклов if на проверку является ли текущий день субботой или воскресеньем.


while 1=1
begin
    while 2=2
    begin
        IF DATENAME(weekday,GETDATE()) = 'Sunday' OR DATENAME(weekday,GETDATE()) = 'Saturday'
            RETURN
    end
end



100% соответствие ТЗ... )))
25 янв 16, 14:08    [18725765]     Ответить | Цитировать Сообщить модератору
 Re: Простой вопрос по организации расписания в планах обслуживания ms sql  [new]
Glory
Member

Откуда:
Сообщений: 104751
Glory
Создайте 52/53 шедула, каждый на разовое исполнение и забудьте об этом до следующего года.

Ошибся. 12 шедулов - по одному на каждый месяц.
25 янв 16, 14:11    [18725786]     Ответить | Цитировать Сообщить модератору
 Re: Простой вопрос по организации расписания в планах обслуживания ms sql  [new]
stavgreengo
Member

Откуда:
Сообщений: 710
Итак...Господа, поразитесь глубине говнокода)

Создан джоб, первый из шагов которого:
BEGIN
IF DATENAME(weekday,GETDATE()) = 'суббота' OR DATENAME(weekday,GETDATE()) = 'воскресенье'

DBCC CHECKDB(N'Bank_SWIFT2345')  WITH NO_INFOMSGS

END

GO

Где Bank_SWIFT2345 - наименование несуществующей БД чтобы джоб генерировал сообщение об ошибки.

Второй шаг в случае успешного выполнения первого:
DECLARE @path varchar(350)




set @path = '\\s01-fs01\Backup_Buh\Не удалять_Последние копии\копии баз после 25 числа\'+ 'Bank_SWIFT' + '_' +
cast (GETDATE() as varchar(3))  +
cast (year(getdate()) as varchar(4))  + '.bak'

BACKUP DATABASE [Bank_SWIFT] to disk=@path WITH COPY_ONLY, NOFORMAT, INIT, REWIND, UNLOAD, COMPRESSION, NOSKIP, RETAINDAYS = 5, STATS = 10


И расписание запуска 26,27,28 и на всякий 29 числа каждого месяца. Если бэкап с таким именем есть, то он не перезаписывается и возвращается ошибка.

По итогу мы всегда будем иметь бэкап БД Bank_SWIFT на 26 число первого рабочего дня согласно производственный календаря на любой год. Даже на 2019 когда 23 февраля это суббота и если вдруг сделают понедельник 25го рабочим днём.
25 янв 16, 15:02    [18726208]     Ответить | Цитировать Сообщить модератору
 Re: Простой вопрос по организации расписания в планах обслуживания ms sql  [new]
Glory
Member

Откуда:
Сообщений: 104751
stavgreengo
Создан джоб, первый из шагов которого:

И вы уверены, что DATENAME( вернет вам 'суббота' или 'воскресенье' ?

stavgreengo
Второй шаг в случае успешного выполнения первого:

Вы же вроде говорили, что вам бэкап нужно один раз выполнить
25 янв 16, 15:08    [18726259]     Ответить | Цитировать Сообщить модератору
 Re: Простой вопрос по организации расписания в планах обслуживания ms sql  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
stavgreengo
Второй шаг в случае успешного выполнения первого:

Вы думаете, что с понедельника по пятницу такой код первого шага вернет статус неуспешного выполнения?
25 янв 16, 15:20    [18726375]     Ответить | Цитировать Сообщить модератору
 Re: Простой вопрос по организации расписания в планах обслуживания ms sql  [new]
stavgreengo
Member

Откуда:
Сообщений: 710
Glory
stavgreengo
Создан джоб, первый из шагов которого:

И вы уверены, что DATENAME( вернет вам 'суббота' или 'воскресенье' ?

Да, я оттестировал этот момент, у меня RUS локализация ms sql

stavgreengo
Второй шаг в случае успешного выполнения первого:

Вы же вроде говорили, что вам бэкап нужно один раз выполнить[/quot]
так он и выполниться один раз, точнее будет выполняться и далее, но несможет перезаписать существующий в случае его наличия. Т.е. если 26 не суббота и не воскресенье, то сформируется бэкап, а 27 при очередном запуске по шедулеру скажет что бэкап уже есть и не перезатрёт его)
25 янв 16, 15:28    [18726447]     Ответить | Цитировать Сообщить модератору
 Re: Простой вопрос по организации расписания в планах обслуживания ms sql  [new]
stavgreengo
Member

Откуда:
Сообщений: 710
Minamoto
stavgreengo
Второй шаг в случае успешного выполнения первого:

Вы думаете, что с понедельника по пятницу такой код первого шага вернет статус неуспешного выполнения?

вернёт успешное выполнение, в случае субботы и воскресенья будет пытаться чекаться несуществующая БД, что приведёт к ошибке и прерыванию задания.
25 янв 16, 15:30    [18726456]     Ответить | Цитировать Сообщить модератору
 Re: Простой вопрос по организации расписания в планах обслуживания ms sql  [new]
guuuest
Guest
Теперь понятно, почему кругом говорят о банковском кризисе.
25 янв 16, 15:32    [18726472]     Ответить | Цитировать Сообщить модератору
 Re: Простой вопрос по организации расписания в планах обслуживания ms sql  [new]
Glory
Member

Откуда:
Сообщений: 104751
stavgreengo
вернёт успешное выполнение, в случае субботы и воскресенья будет пытаться чекаться несуществующая БД, что приведёт к ошибке и прерыванию задания.

А зачем это делать в отдельном от бэкапа шаге ?
25 янв 16, 15:32    [18726476]     Ответить | Цитировать Сообщить модератору
 Re: Простой вопрос по организации расписания в планах обслуживания ms sql  [new]
stavgreengo
Member

Откуда:
Сообщений: 710
guuuest
Теперь понятно, почему кругом говорят о банковском кризисе.

мне самому смешно со своего поделия, но ТЗ удовлетворено в полном объёме и нарушить установленный алгоритм сможет только добавление нового государственного выходного дня 24, 25 или 26 числа любого месяца. Возможно это будет день когда мы кризис победим)
25 янв 16, 15:34    [18726489]     Ответить | Цитировать Сообщить модератору
 Re: Простой вопрос по организации расписания в планах обслуживания ms sql  [new]
stavgreengo
Member

Откуда:
Сообщений: 710
Glory
stavgreengo
вернёт успешное выполнение, в случае субботы и воскресенья будет пытаться чекаться несуществующая БД, что приведёт к ошибке и прерыванию задания.

А зачем это делать в отдельном от бэкапа шаге ?

просто первое что пришло в голову чтобы удовлетворять мои требования)
25 янв 16, 15:37    [18726513]     Ответить | Цитировать Сообщить модератору
 Re: Простой вопрос по организации расписания в планах обслуживания ms sql  [new]
o-o
Guest
зачем какая-то несуществующая база?
set language  russian;
IF DATENAME(weekday,GETDATE()) not in (N'суббота', N'воскресенье')
raiserror ('error: not weekend', 16, 1)

хотя бы в впечатает, что не выходной, а не черт знает что
25 янв 16, 15:38    [18726520]     Ответить | Цитировать Сообщить модератору
 Re: Простой вопрос по организации расписания в планах обслуживания ms sql  [new]
Glory
Member

Откуда:
Сообщений: 104751
stavgreengo
мне самому смешно со своего поделия, но ТЗ удовлетворено в полном объёме

Сегодня что День говнорешения ?
Один а таблицу миллион записей заносит прозапас, второй джоб останавливает через заранее ошибочную команду
25 янв 16, 15:39    [18726529]     Ответить | Цитировать Сообщить модератору
 Re: Простой вопрос по организации расписания в планах обслуживания ms sql  [new]
stavgreengo
Member

Откуда:
Сообщений: 710
o-o
зачем какая-то несуществующая база?
set language  russian;
IF DATENAME(weekday,GETDATE()) not in (N'суббота', N'воскресенье')
raiserror ('error: not weekend', 16, 1)

хотя бы в впечатает, что не выходной, а не черт знает что

вот, спасибо, я знал что это есть, но не знал как это выглядит, поэтому проявил смекалку)
25 янв 16, 15:39    [18726531]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить