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

Откуда: Москва
Сообщений: 243
Добрый день!
Новая база создается средствами 1С разными людьми, которые не всегда уведомляют о создании новой базы.
В связи с этим не выполняется бэкап лога транзакций так как нету полного бэкапа.
Решил написать триггер, который отлавливает создание новой базы на сервере и происходит автоматический бэкап.

CREATE TRIGGER ddl_backup 
ON ALL SERVER 
FOR CREATE_DATABASE 
AS 
DECLARE @DB varchar(50)
DECLARE @pathbackup VARCHAR(255)
SET @DB=(select top 1 name from sys.databases order by create_date desc)
SET @pathbackup='C:\test\'+@DB+ '_' +convert(varchar,getdate(),102) + '.bak' 
    
  BACKUP DATABASE @db TO  DISK = @pathbackup
  WITH NOFORMAT, NOINIT,  NAME = @db, SKIP,  STATS = 10
    GO


Триггер создается без ошибок.
При создании новой базы ошибка:

Msg 3021, Level 16, State 0, Procedure ddl_backup, Line 15
Cannot perform a backup or restore operation within a transaction.
Msg 3013, Level 16, State 1, Procedure ddl_backup, Line 15
BACKUP DATABASE is terminating abnormally.
The statement has been terminated.
25 ноя 14, 11:36    [16900733]     Ответить | Цитировать Сообщить модератору
 Re: Создание триггера  [new]
Glory
Member

Откуда:
Сообщений: 104760
BKV88
При создании новой базы ошибка:

Ну так а что непонятного ?
Триггер выполняется в транзакции. By design.
А некоторые команды, включая BACKUP, запрещено выполнять в транзакциях. By design
25 ноя 14, 12:19    [16901047]     Ответить | Цитировать Сообщить модератору
 Re: Создание триггера  [new]
Bone serpent
Member

Откуда:
Сообщений: 168
А зачем так срочно нужно знать, что база создалась? Неужели нельзя ночью проверить список баз и, при необходимости, внести изменения в регламент бэкапа?
25 ноя 14, 12:21    [16901068]     Ответить | Цитировать Сообщить модератору
 Re: Создание триггера  [new]
BKV88
Member

Откуда: Москва
Сообщений: 243
Bone serpent,

Журнал лога транзакции выполняется каждые 2 часа всех пользовательских баз.
Если нету полного бэкапа не создается бэкап лога для новой базы.
Полный бэкап создается ночью раз в сутки.
Соответственно бэкап лога транзакции для новой базы будет завершаться с ошибкой до создания полного бэкапа.
25 ноя 14, 12:32    [16901156]     Ответить | Цитировать Сообщить модератору
 Re: Создание триггера  [new]
BKV88
Member

Откуда: Москва
Сообщений: 243
Glory,

Спасибо. Буду знать.
Надо более детально будет изучить триггеры.
Тогда остается вариант отправки письма по электронной почте при создании новой базы.
25 ноя 14, 12:34    [16901172]     Ответить | Цитировать Сообщить модератору
 Re: Создание триггера  [new]
BKV88
Member

Откуда: Москва
Сообщений: 243
Возможно есть другие варианты?
В голову только приходит создать задания, которое проверяло бы наличие полного бэкап за день по созданным базам и если нету полного бэкапа делало бы его.
Тут только вопрос с расписанием этого задания, как часто его запускать.
25 ноя 14, 12:41    [16901228]     Ответить | Цитировать Сообщить модератору
 Re: Создание триггера  [new]
Glory
Member

Откуда:
Сообщений: 104760
BKV88
Возможно есть другие варианты?
В голову только приходит создать задания, которое проверяло бы наличие полного бэкап за день по созданным базам и если нету полного бэкапа делало бы его.
Тут только вопрос с расписанием этого задания, как часто его запускать.

А не делать бэкапы журнала пока не сделан полный бэкап ?
25 ноя 14, 12:43    [16901240]     Ответить | Цитировать Сообщить модератору
 Re: Создание триггера  [new]
BKV88
Member

Откуда: Москва
Сообщений: 243
Glory,

Бэкап журнала транзакции настроен с помощью планового задания, которое в свою очередь при выполнении не выполняет проверку о наличии полного бэкапа.
Можно конечно от этого отказаться и написать скрипт отдельный для бэкапа логов, который делал бы определенные проверки.
25 ноя 14, 12:47    [16901278]     Ответить | Цитировать Сообщить модератору
 Re: Создание триггера  [new]
Glory
Member

Откуда:
Сообщений: 104760
BKV88
Бэкап журнала транзакции настроен с помощью планового задания, которое в свою очередь при выполнении не выполняет проверку о наличии полного бэкапа.
Можно конечно от этого отказаться и написать скрипт отдельный для бэкапа логов, который делал бы определенные проверки.

Я не понимаю, вы публикуете оправдания, чтобы ничего не менять что ли ?
25 ноя 14, 12:51    [16901303]     Ответить | Цитировать Сообщить модератору
 Re: Создание триггера  [new]
BKV88
Member

Откуда: Москва
Сообщений: 243
Glory,

Да нет никаких оправданий. Я в этом деле новичок.
Плановые обслуживания как я понимаю - это для особо ленивых и для тех у кого мало знаний.
Есть какие-нибудь статьи по поводу какие есть стратегии существуют при создание бэкапов и какими средствами их выполнять.
Было бы интересно почитать и применить в своей работе.
25 ноя 14, 12:56    [16901350]     Ответить | Цитировать Сообщить модератору
 Re: Создание триггера  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
BKV88
Glory,

Да нет никаких оправданий. Я в этом деле новичок.
Плановые обслуживания как я понимаю - это для особо ленивых и для тех у кого мало знаний.
Есть какие-нибудь статьи по поводу какие есть стратегии существуют при создание бэкапов и какими средствами их выполнять.
Было бы интересно почитать и применить в своей работе.

SQL Server Maintenance Solution

автор
F. Back up the transaction log of all user databases, using the option to change the backup type if a log backup cannot be performed

EXECUTE dbo.DatabaseBackup
@Databases = 'USER_DATABASES',
@Directory = 'C:\Backup',
@BackupType = 'LOG',
@ChangeBackupType = 'Y'


ChangeBackupType
Change the backup type if a differential or transaction-log backup cannot be performed.

DatabaseBackup checks last_log_backup_lsn in sys.database_recovery_status to determine whether a transaction log backup in full or bulk-logged recovery model can be performed. If a transaction log backup is not possible, then the database is skipped by default. Alternatively, you can set ChangeBackupType to Y to have a differential or full backup performed instead.
25 ноя 14, 23:15    [16905367]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить