Автоматизируем "перезаливку" баз (Скрипты для SQL-Server — Часть 1)

Предлагаю вашему вниманию несколько SQL-скриптов (для MS SQL-Server) для автоматизации процесса резервного копирования и восстановления баз данных. Скрипты для восстановления позволяют «перезаливать» базы данных, т. е. восстанавливать одну базу из копий другой базы данных. Все скрипты формируют лог для вывода и при необходимости могут отправлять результат работы по электронной почте.

 

Видео в формате вебинара с подробным разбором всех скриптов:

 

 

Ну и, непосредственно, сами разобранные в вебинаре скрипты под спойлерами ниже. Все переменные собраны в соответствующем блоке в начале скриптов. Для отправки электронной почты используется предварительно настроенный профиль электронной почты компоненты DataBase Mail. О настройке компоненты можно прочитать, например, здесь. Все скрипты много раз опробованы в бою и протестированы на версиях MS SQL 2008, 2012, 2024.

 

Скрипт для создания резервной копии указанной базы данных:

 

 

Скрипт для создания резервных копий нескольких баз данных (по определенному условию):

 

 

Скрипт для восстановления указанной базы данных из созданной резервной копии другой базы данных:

 

 

Скрипт для восстановления указанной базы данных из имеющихся (созданных ранее) копий другой базы данных:

 

 

Эти и другие скрипты доступны также в репозитории: https://github.com/Tavalik/SQL_TScripts

Надеюсь, что данные скрипты помогут вам автоматизировать процесс создания резервных копий и "перезаливки" баз данных.

Все вебинары по скриптам для SQL:

  1. Автоматизируем перезаливку баз (Часть 1): //infostart.ru/public/799857/
  2. Регламентные операции с индексами в MS SQL Server (Часть 2): //infostart.ru/public/803209/
  3. Еще немного полезных SQL-скриптов (Часть 3): //infostart.ru/public/807843/

 

11 Comments

  1. Armando

    Еще частый сценарий это создание резервной копии БД на одном сервере и восстановление в БД на другом сервере.

    Например, рабочие базы на своих серверах, а тестовые на отдельном. И надо загрузить копию рабочей базы в тестовую базу.

    Reply
  2. JohnyDeath
  3. Armando

    (2) Жесть какая. Почему-то я скептически отношусь к oscript.

    В принципе у нас все тоже самое, но на bat файлах.

    Reply
  4. nvv1970

    Блин, ну это вообще детский сад какой-то…

    Где например определение имени последнего бэкапа, если бэкапы идут с разными именами?

    SEL ECT  @@Servername AS ServerName ,
    d.Name AS DBName ,
    b.Backup_finish_date ,  b.[type],
    bmf.Physical_Device_name
    FR OM    sys.databases d
    INNER JOIN msdb..backupset b ON b.database_name = d.name AND b.[type] = ‘D’
    INNER JOIN msdb.dbo.backupmediafamily bmf ON b.media_set_id = bmf.media_set_id
    ORDER BY d.NAME , b.Backup_finish_date DESC;
    Reply
  5. webester

    (3) Действительно жесть.

    — Это все авно!

    — Почему?

    — Ну я так решил…

    Reply
  6. German

    Лучше этого еще ничего не встречал

    https://www.red-gate.com/products/dba/sql-backup/ дорого, но оно того стоит

    Reply
  7. Mi11er

    (6) спс за ссылку. Глянем

    Reply
  8. ershz

    В секции, где восстановление базы — неплохо бы отключить существующие подключения

    DECLARE @SQLString1 NVARCHAR(4000)
    ——————————————-
    
    BEGIN TRY
    set @SQLstring1= ‘alt er   database [‘ +@DBName_To+ ‘]  SET SINGLE_USER WITH ROLLBACK IMMEDIATE’
    exec @SQLstring1
    EXEC sp_executesql @SQLString
    
    set @SQLstring1= ‘alt er   database [‘ +@DBName_To+ ‘]  SET MULTI_USER ‘
    exec @SQLstring1
    
    END TRY

    Показать

    Reply
  9. bforce

    Хорошо, когда разработчик делает что-то своими руками. Это повышает компетентность и это здорово!

    Но, как обычно, все уже придумано до нас. Ну и на github есть https://github.com/olahallengren/sql-server-maintenance-solution.

    Reply
  10. blackhole321

    Ну вот же нормальный подход, и без всяких там консольных утилит с параметрами 😉

    Reply
  11. Tavalik

    (11)

    Спасибо, конечно. Только там эти же скрипты, с той лишь разницей, что запуск из командной строки.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *