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

08.06.18

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

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

Файлы

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

Наименование Скачано Купить файл
Все скрипты в архиве (часть 1)
.zip 10,23Kb
58 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

 

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

 

 

Ну и, непосредственно, сами разобранные в вебинаре скрипты под спойлерами ниже. Все переменные собраны в соответствующем блоке в начале скриптов. Для отправки электронной почты используется предварительно настроенный профиль электронной почты компоненты 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С:Предприятие 8 1C:Бухгалтерия 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

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

7320 руб.

06.11.2012    80428    635    45    

94

Информационная безопасность Архивирование (backup) Системный администратор Разработчик 1С 8.3 Бесплатно (free)

Утром базы не открылись: ночью хакеры зашифровали серверы, базы 1С, почту, кассы, мобильные приложения и бэкапы в сети. Критичные базы подняли из копий на отключённых дисках и потеряли около 10 часов данных. Рассказываю, как прошли первые сутки, что увидел только человек, что мы закрыли после атаки и какие двери в самой базе 1С программист может проверить у себя уже сегодня.

вчера в 10:50    9084    nedomolkov.ivan    53    

19

Архивирование (backup) Обновление 1С Системный администратор Разработчик 1С 8.3 Бесплатно (free)

Платформа 8.3.17, MS SQL Server: обновление конфигурации падает через 15 секунд на этапе обновления предопределённых данных, и конфигуратор при каждом входе предлагает только повторить. Проверьте у себя, когда сделана последняя полная копия базы: у нас её не было почти месяц. Разбор по минутам: что не помогло (перезапуск агента сервера 1С, перезагрузка, пакетный /UpdateDBCfg, три совета со стороны) и почему. Как ibcmd достал .dt из базы, которая не открывается, и как новую базу подставили под старым именем в кластере 1С через rac, не трогая пользователей. Простой 57 минут, потерь данных нет. Отдельно ошибки ИИ-агента Claude, который работал на сервере, и порядок действий на случай, если это случилось у вас.

03.11.2026    584    nedomolkov.ivan    12    

5

Архивирование (backup) Инструменты администратора БД Системный администратор Разработчик 1С 8.3 1С:Управление торговлей 11 1С:Библиотека стандартных подсистем Абонемент ($m)

Полностью автоматизированная внешняя обработка для администрирования 1С: блокировка/разблокировка ИБ, массовое завершение сеансов, резервное копирование и восстановление из .dt, выгрузка/загрузка конфигурации (.cf), пакетная работа с расширениями (.cfe) и дополнительными обработками – всё через удобную форму без ручных запусков конфигуратора и консоли кластера

1 стартмани

21.01.2026    6522    66    war41k    0    

18

Архивирование (backup) Групповая разработка (Git, хранилище) Системный администратор Разработчик Бесплатно (free)

Как дать возможность каждому разработчику 1С вести разработку, тестирование и оптимизацию на собственной полноразмерной копии базы и при этом не тратить миллиарды рублей и тысячи часов на развертывание тестового окружения, а так же экономить дисковое пространство? Расскажем о том, как с помощью инструмента Database Lab получать полноразмерные копии базы 1C на СУБД PostgreSQL за считанные секунды (даже в случае использования многотерабайтных баз).

15.12.2025    14221    nasonkin    19    

31

Архивирование (backup) Учет документов Бухгалтер 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

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

12200 руб.

19.02.2025    2955    3    0    

3

Архивирование (backup) Системный администратор 1С 8.3 Бесплатно (free)

Предлагаю Вашему вниманию 3 скрипта на bash (sh) для архивирования (backup) типовых конфигураций на Linux средствами 1С и Postgres. Перед запуском корректно заполните раздел "Параметры" в соответствии с Вашими настройками.

20.01.2025    5990    Prelude    5    

12

Архивирование (backup) 1С 8.3 1С:Библиотека стандартных подсистем Абонемент ($m)

Резервные копии базы 1С без завершения сеансов: .dt, файл базы, PostgreSQL, MS SQL, своя команда. Расписание, профили, ротация, ZIP, FTP, журнал и письмо об ошибке. Платформа 8.3+ (кроме 8.2), любая конфигурация с БСП. Подключение за 5 минут.

5000 руб.

27.08.2024    4148    1    6    

2
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Armando 1403 16.03.18 23:14 Сейчас в теме
Еще частый сценарий это создание резервной копии БД на одном сервере и восстановление в БД на другом сервере.
Например, рабочие базы на своих серверах, а тестовые на отдельном. И надо загрузить копию рабочей базы в тестовую базу.
romankoav; Andy_NTG; +2 – Ответить
3. Armando 1403 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 1403 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 416 20.03.18 06:50 Сейчас в теме
Лучше этого еще ничего не встречал
https://www.red-gate.com/products/dba/sql-backup/ дорого, но оно того стоит
7. Mi11er 101 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 484 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 1307 09.05.18 16:45 Сейчас в теме
Ну вот же нормальный подход, и без всяких там консольных утилит с параметрами ;)
12. Tavalik 3465 11.05.18 06:55 Сейчас в теме
(11)
Спасибо, конечно. Только там эти же скрипты, с той лишь разницей, что запуск из командной строки.
14. isaev2016 04.02.20 10:47 Сейчас в теме
finalmassage понравилось
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 Сейчас в теме
Вот бы ещё подсказали как в тестовой базе принудительно проставить скриптом признак "Копия"!
Для отправки сообщения требуется регистрация/авторизация