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

08.06.18

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

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

Скачать файл

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

Наименование По подписке [?] Купить один файл
Все скрипты в архиве (часть 1)
.zip 10,23Kb
47
47 Скачать (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С. Система умеет ставить блокировки на вход, блокировать фоновые задания, принудительно отключать сеансы пользователей. И все это система делает в автоматически при создании бэкапа (или через команду). Выгрузка происходит в родной формат 1С - .dt. Так же система умеет архивировать данные выгрузки с установкой пароля. Умеет менять расширение файла zip или dt на любое указанное вами, что позволит сохранить выгрузки от шифровальщика. Может удалять старые копии выгрузок, оставляя указанное количество резервных копий, начиная с самой поздней. Только для WINDOWS!

6000 руб.

06.11.2012    72786    625    45    

84

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

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

1200 руб.

03.09.2014    15702    21    6    

27

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

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

04.12.2023    9419    n_mezentsev    15    

27

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

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

07.10.2022    28579    sapervodichka    37    

147

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

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

1 стартмани

25.08.2022    5730    3    Gnom-Gluck    6    

7

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

Небольшая утилита для копирования файловых баз данных 1С.

1 стартмани

02.06.2022    4688    3    Giblarium    12    

5
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Armando 1401 16.03.18 23:14 Сейчас в теме
Еще частый сценарий это создание резервной копии БД на одном сервере и восстановление в БД на другом сервере.
Например, рабочие базы на своих серверах, а тестовые на отдельном. И надо загрузить копию рабочей базы в тестовую базу.
romankoav; Andy_NTG; +2 Ответить
3. Armando 1401 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 1401 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 99 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 1314 09.05.18 16:45 Сейчас в теме
Ну вот же нормальный подход, и без всяких там консольных утилит с параметрами ;)
12. Tavalik 3409 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 Сейчас в теме
Вот бы ещё подсказали как в тестовой базе принудительно проставить скриптом признак "Копия"!
Оставьте свое сообщение