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

08.06.18

База данных - Архивирование (backup)

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование SM По подписке [?] Купить один файл
Все скрипты в архиве (часть 1)
.zip 10,23Kb
46
46
1 SM
Скачать Купить за 1 850 руб.

 

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

 

 

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

 

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

 

 

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

 

 

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

 

 

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

 

 

Эти и другие скрипты доступны также в репозитории: 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/

 

См. также

Архивирование (backup) Журнал регистрации Поиск данных Системный администратор Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 1С:Управление торговлей 11 Платные (руб)

База данных «сама» меняет данные в документах/справочниках? Тогда данный журнал регистрации изменений документов в 1С для Вас! Практически не влияет на скорость записи объектов за счет быстрого алгоритма! Скорость работы почти в 2 раза выше типового механизма «История изменений». Позволяет следить за изменениями и удалением в любых ссылочных объектах конфигурации, с возможностью архивации по HTTP(!) или COM, и сверткой данных. А так же, может восстановить состояние реквизитов (значения) до момента изменения или удаления объекта из базы. Есть ДЕМО-база где можно самостоятельно протестировать часть функционала! Работает на любых платформах выше 8.3.14+ и любых конфигурациях! Версия 3.1 от 24.08.2023!

21600 руб.

15.05.2017    43137    12    24    

40

Архивирование (backup) Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Данная разработка позволит решить вопрос с резервным копированием Ваших баз в автоматическом режиме, расположенных на сервере 1С. Система умеет ставить блокировки на вход, блокировать фоновые задания, принудительно отключать сеансы пользователей. И все это система делает в автоматически при создании бэкапа (или через команду). Выгрузка происходит в родной формат 1С - .dt. Так же система умеет архивировать данные выгрузки с установкой пароля. Умеет менять расширение файла zip или dt на любое указанное вами, что позволит сохранить выгрузки от шифровальщика. Может удалять старые копии выгрузок, оставляя указанное количество резервных копий, начиная с самой поздней.

6000 руб.

06.11.2012    71370    623    45    

83

Архивирование (backup) Системный администратор Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Программа позволяет выполнять автоматическое создание копий файловых и серверных информационных баз 1С Предприятие 8 и размещение копий в облаке Яндекс.Диск, локальном или сетевом ресурсе.

1200 руб.

03.09.2014    15188    15    6    

21

Архивирование (backup) Администрирование СУБД Системный администратор Россия Бесплатно (free)

Постараюсь объяснить, зачем нужно резервное копирование именно журнала транзакций, а не только базы данных, и почему я словно сбросил груз, настроив его - как, покажу, естественно. Кстати, будут скрипты T-SQL (с подробными комментариями) - отличный способ сделать администрирование базы более уютным.

04.12.2023    7799    n_mezentsev    15    

27

Архивирование (backup) Системный администратор Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В данной инструкции будет описано, как с помощью pgAdmin, bat-файлов и планировщика заданий Windows организовать резервное копирование, восстановление и хранение копий баз данных.

07.10.2022    23808    sapervodichka    37    

144

Архивирование (backup) Системный администратор Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Захотелось клиентам выгрузку архива баз, и выгрузку в дт, готовые скрипты с сети не заработали. Может, кому-то поможет. Релиз 8.3.18.1741.

1 стартмани

25.08.2022    5218    3    Gnom-Gluck    6    

7
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Armando 1400 16.03.18 23:14 Сейчас в теме
Еще частый сценарий это создание резервной копии БД на одном сервере и восстановление в БД на другом сервере.
Например, рабочие базы на своих серверах, а тестовые на отдельном. И надо загрузить копию рабочей базы в тестовую базу.
romankoav; Andy_NTG; +2 Ответить
3. Armando 1400 17.03.18 23:25 Сейчас в теме
(2) Жесть какая. Почему-то я скептически отношусь к oscript.
В принципе у нас все тоже самое, но на bat файлах.
5. webester 26 18.03.18 06:45 Сейчас в теме
(3) Действительно жесть.
- Это все авно!
- Почему?
- Ну я так решил...
rrustam11983; +1 Ответить
13. пользователь 15.05.18 05:47
Сообщение было скрыто модератором.
...
21. romankoav 4 09.03.23 17:11 Сейчас в теме
(1) А это можно сделать в рамках одного скрипта?
22. Armando 1400 09.03.23 19:37 Сейчас в теме
(21) у нас это был один скрипт + хранимая процедура. В скрипте было создание резервной копии и копирование ее на тестовый сервер, а там вызывалась хранимая процедура, в которой были шаги по восстановлению, очистка объемных таблиц и что-то ещё. Но в принципе можно было и одним сделать, просто это не за один присест рождалось.
4. nvv1970 18.03.18 01:59 Сейчас в теме
Блин, ну это вообще детский сад какой-то...
Где например определение имени последнего бэкапа, если бэкапы идут с разными именами?

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;
6. German 413 20.03.18 06:50 Сейчас в теме
Лучше этого еще ничего не встречал
https://www.red-gate.com/products/dba/sql-backup/ дорого, но оно того стоит
7. Mi11er 98 20.03.18 12:20 Сейчас в теме
(6) спс за ссылку. Глянем
8. ershz 21.03.18 16:57 Сейчас в теме
В секции, где восстановление базы - неплохо бы отключить существующие подключения

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
Показать
18. user1406861 23.12.21 09:28 Сейчас в теме
(8) Ваш вариант нерабочий, но спасибо за наводку. Я его немного исправил и теперь действительно можно перезаливать базу, если в ней есть активные сеансы (они будут завершены)

P.S. форма кода почему-то автоматически разделяет команду "ALTER" на "ALT ER" - нужно удалить пробел при копировании кода!

	-- tweak: ЗАВЕРШЕНИЕ АКТИВНЫХ СЕАНСОВ В БАЗЕ путем перевода в однопользовательский режим и обратно
	BEGIN TRY
		SET @SQLstring= 'ALT ER     DATABASE ' +@DBName_To+ ' SET SINGLE_USER WITH ROLLBACK IMMEDIATE;'
		EXEC sp_executesql @SQLString
		SET @SQLstring= 'ALT ER     DATABASE ' +@DBName_To+ ' SET MULTI_USER;' 
		EXEC sp_executesql @SQLString
	END TRY
	BEGIN CATCH  
		-- Ошбика выполнения операции
		SET @subject = 'ОШИБКА ВОССТАНОВЛЕНИЯ базы данных ' + @DBName_To
		SET @finalmassage = 'Ошибка перевода базы в одно- или многопользовательский режим ' + @DBName_To + CHAR(13) + CHAR(13)
			+ 'Код ошибки: ' + CAST(ERROR_NUMBER() as nvarchar(10)) + CHAR(13) + CHAR(13)
			+ 'Текст ошибки: ' + ERROR_MESSAGE()  + CHAR(13) + CHAR(13)
			+ 'Текст T-SQL:' + CHAR(13) + @SQLString  
	END CATCH;
Показать
9. bforce 482 02.05.18 17:21 Сейчас в теме
Хорошо, когда разработчик делает что-то своими руками. Это повышает компетентность и это здорово!
Но, как обычно, все уже придумано до нас. Ну и на github есть https://github.com/olahallengren/sql-server-maintenance-solution.
Silenser; ershz; +2 Ответить
10. пользователь 02.05.18 20:04
Сообщение было скрыто модератором.
...
11. blackhole321 1310 09.05.18 16:45 Сейчас в теме
Ну вот же нормальный подход, и без всяких там консольных утилит с параметрами ;)
12. Tavalik 3392 11.05.18 06:55 Сейчас в теме
(11)
Спасибо, конечно. Только там эти же скрипты, с той лишь разницей, что запуск из командной строки.
14. isaev2016 04.02.20 10:47 Сейчас в теме
15. user1308398 21.05.20 00:04 Сейчас в теме
Если в имени базы есть "-" то выдает ошибку
Сообщение 102, уровень 15, состояние 1, строка 1
Incorrect syntax near '-'.
Сообщение 319, уровень 15, состояние 1, строка 2
Incorrect syntax near the keyword 'with'. If this statement is a common table expression, an xmlnamespaces clause or a change tracking context clause, the previous statement must be terminated with a semicolon.

Как лечить?
А так скрипт, очень выручит.
16. jem 83 24.08.20 09:04 Сейчас в теме
Мне помогло. Спасибо! Даже если это велосипед, то дает скил для дальнейшего развития. Таким образом мы учимся. Комменты тоже полезны.
user1406861; +1 Ответить
17. finist7490 08.10.20 23:06 Сейчас в теме
Спасибо, полезные скрипты! А как такую же перезаливку на PostgreSQL сделать?
19. user1406861 23.12.21 10:16 Сейчас в теме
Кстати, автор, почему у тебя в условиях стоит какая-то двойка ?
IF @subject = '2'

Эти блоки кода ведь просто игнорируются, нигде не нашел, чтобы в переменной subject присваивалась цифра 2
Для успешного выполнения условия нужно указывать:
IF @subject = ''
20. rrustam11983 17.01.22 11:48 Сейчас в теме
Сам писал скрипты по восстановлению. Сейчас жалею что не нашел тогда вашу статью. Всё четко, лаконично и именно так как надо. Хочу сказать спасибо большое автору за проделанную работу.
23. AleksSay 06.02.24 08:35 Сейчас в теме
Вот бы ещё подсказали как в тестовой базе принудительно проставить скриптом признак "Копия"!
Оставьте свое сообщение