Скрипты на SQL для автоматизации архивации и сжатия баз данных

12.02.26

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

Скриптовый продукт для Microsoft SQL Server, который полностью автоматизирует создание бэкапов и их обслуживание: делает резервные копии по расписанию, сам удаляет старые файлы по политике хранения, раскладывает копии по папкам Daily / Weekly / Monthly / Yearly, работает с локальными путями и UNC-шарами, и уведомляет об ошибках по Email (Database Mail) и Telegram. WinRAR и внешняя архивация исключены — используется штатное BACKUP DATABASE … WITH COMPRESSION, что упрощает поддержку и повышает надёжность.

Файлы

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

Наименование Скачано Купить файл
Скрипты на SQL для автоматизации архивации и сжатия баз данных. :
.sql 28,52Kb ver:2.0.1
37 2 500 руб. Купить

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

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

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

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

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

Проблема, с которой всё начинается

Долгое время я делал бэкапы вручную: создавал backup, потом чистил старые файлы, переносил копии по папкам “день/неделя/месяц/год”.
Поначалу это кажется “пять минут”, но когда баз много, они большие (десятки гигабайт), плюс часть хранится на сетевых ресурсах, начинается типичный набор проблем:

  • забыли почистить — диск/шара забилась

  • разные сервера — разные подходы, бардак в структуре хранения

  • бэкап “прошёл”, а файла нет (права/сеть/переименование/сбой)

  • восстановление в тест — надо быстро, а файлы лежат далеко и долго копируются

  • ночью случилась ошибка, утром узнаёшь слишком поздно

Я решил это автоматизировать и собрать единый, повторяемый механизм, который можно поставить на любой SQL Server и забыть про рутину.


Что делает продукт

Продукт состоит из набора хранимых процедур в master и работает как “движок” бэкапирования:

  1. Создаёт бэкап (.bak) с использованием встроенного SQL Server Compression
    Никаких WinRAR/7zip, никаких внешних архиваторов.

  2. Хранит бэкапы по политике
    Ты задаёшь, сколько хранить:

  • ежедневных (Daily)

  • недельных (Week)

  • месячных (Month)

  • годовых (Year)

По умолчанию стоят разумные значения (например 4/4/4/4), которые можно менять параметрами при вызове.

  1. Автоматически раскладывает копии
    Готовый бэкап организуется в структуру вида:

  • \\Storage\Backups\<DB>\DayBKP\

  • \\Storage\Backups\<DB>\Week\

  • \\Storage\Backups\<DB>\Month\

  • \\Storage\Backups\<DB>\Year\

  1. Ротация (очистка) файлов
    Старые файлы удаляются автоматически и аккуратно: “не трогать только что созданный файл”, чтобы политика хранения не снесла свежий backup при очередном запуске.

  2. Уведомления об ошибках
    Если на любом этапе (создание бэкапа, перенос, копирование в Week/Month/Year, создание каталогов, отсутствие файла) возникает ошибка — выполняется единая процедура уведомлений:

  • Email через Database Mail (профиль по умолчанию)

  • Telegram через Bot API

Уведомление содержит: сервер, базу, шаг, номер ошибки, severity/state, строку, текст.


Гибкость для “реальной жизни”

Бэкап одной базы или всех сразу

Если параметр @BazaName не указан — продукт делает бэкап всех баз, кроме системных, offline, snapshot и прочего. Плюс можно задать фильтры на уровне процедуры (например исключать test). Это удобно: добавил новую базу на сервер — она автоматически попадёт в бэкапирование.

Работа с локальным диском и переносом на шару

Параметр @PathBkp может указывать на локальный диск SQL Server: тогда backup создаётся локально (быстрее), а затем переносится в сетевое хранилище (@PathAllBkp).
Это особенно важно на больших базах: меньше гоняем гигабайты по сети во время самой операции BACKUP.

Отдельные “папки-потоки” для разных расписаний

Параметр @PathFile позволяет направлять бэкапы в другой подкаталог.
Например: \HourBKP для бэкапов каждые 2 часа и \DayBKP для ежедневных.


Как внедряется

Обычно внедрение выглядит так:

  1. Разворачиваем процедуры в master

  2. Настраиваем один SQL Agent Job:

  • шаг: EXEC dbo.sp_AddBkpDay ...

  • расписание: 1 раз в день / 1 раз в 2 часа / как требуется

  1. Заполняем настройки уведомлений в dbo.sp_BackupNotifyError:

  • @MailRecipients

  • @TelegramBotToken

  • @TelegramChatId

  1. Запускаем тест:

  • EXEC dbo.sp_BackupNotifyError_Test;


Примеры запуска (адаптированы под текущую версию)

1) Раз в день: все базы, политика по умолчанию


 

EXEC dbo.sp_AddBkpDay @PathAllBkp = N'\\fserv\1C-Backup\';

2) Раз в 2 часа: “часовые” бэкапы отдельно


 

EXEC dbo.sp_AddBkpDay @PathAllBkp = N'\\fserv\1C-Backup\', @PathFile = N'\HourBKP', @CountDayBKP = 20;

3) Только одна база


 

EXEC dbo.sp_AddBkpDay @BazaName = N'GYTNikaC', @PathAllBkp = N'\\Serv\MS_BACKUP\Buh\', @CountDayBKP = 2;

Вступайте в нашу телеграмм-группу Инфостарт

backup Sql Server WINRAR политика хранения бекапов

См. также

Архивирование (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.3 от 16.04.2026

7320 руб.

06.11.2012    79237    634    45    

93

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

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

1 стартмани

21.01.2026    4568    46    war41k    0    

16

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

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

15.12.2025    9054    nasonkin    18    

29

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

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

12200 руб.

19.02.2025    2257    3    0    

3

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

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

20.01.2025    4122    Prelude    5    

12

Архивирование (backup) 1С:Предприятие 8 1С:Управление нашей фирмой 3.0 Платные (руб)

Расширение поможет настроить резервное копирование баз SQL в стандартный файл выгрузки баз 1С (*.dt).

2400 руб.

27.08.2024    3497    1    6    

2

HighLoad оптимизация Администрирование СУБД Архивирование (backup) Системный администратор Программист 1С:Предприятие 8 Бесплатно (free)

Бэкап в Postgres состоит из набора граблей, которые нужно обойти для успешного восстановления. Они заложены в самых неожиданных местах от предмета резервного копирования (база или кластер) до структуры каталогов. Один неверный шаг и восстановление будет невозможным. Почему нельзя было сделать проще, как в MS SQL или Oracle? Почему бэкап в Postgres оставляет впечатление чьей-то лабораторной работы? Статья адресована прежде всего специалистам 1С, избалованным комфортом в MS SQL, в суровых буднях импортозамещения на Postgres.

13.08.2024    8902    1CUnlimited    9    

6

Инструменты администратора БД Архивирование (backup) Системный администратор Программист 1С:Предприятие 8 Абонемент ($m)

Обработка для "обновления" своей тестовой базы из резервной копии рабочей базы без помощи админов.

1 стартмани

21.05.2024    4266    15    DenDev1C    4    

9
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. ADirks 187 23.05.17 10:55 Сейчас в теме
Начиная с SQL 2008 бэкапы можно сжимать на лету. Это намного эффективнее внешних архиваторов.
И рекомендую почитать http://infostart.ru/public/173494/ там много полезного.
SergeiGer; +1 Ответить
2. v3rter 23.05.17 13:27 Сейчас в теме
Для старых версий SQL сгодится. Правда разрешать SQL-серверу запуск командной строки не самая лучшая практика, считаю, особенно когда SQL работает под системной учёткой Administartor, пароль sa - 12345, а на серваке сэкономили на антивирусе )
Запуск хранимой процедуры через sqlcmd из батника или скрипта перспективнее.
3. SergeiGer 14 24.05.17 16:19 Сейчас в теме
Для меня суть обработки в том, что она отслеживает кол-во бекапов, по разным политиками ( дневные, недельные, месячные, годовые. ), сама отслеживает и удаляет лишнее. Дальше, многие средства не работают с расшаренными ресурсами ( UNC-пути ), или как стандартные средства Sql работают только с определенными расширениями.
На форуме Миста сравнение встроенного архиватора SQL Server и rar - "ПО жизни всегда жал rar`ом, но вчера что-то решил сравнить...
Фулл бэкап базы 38 гиг rar`ом жмется в 1.8 гиг, SQL серваком жмется в 4.3 гиг. Так что какой-то алгоритм не очень у сервера, а rar по прежнему на высоте. Жмите rar`ом."
Но для не желающих сжимать RAR добавлю параметр в процедуре.
И на днях сравню сам сжатие SQL и RAR.
Еще, я для быстрого восстановления в тест храню не заархивированный последний бекап локально. Это тоже очень удобно.
Все обслуживание баз данных осуществляется при помощи джоб. Создание архивов только часть регулярного обслуживания.
5. Fox-trot 166 24.05.17 20:29 Сейчас в теме
(3) кстати о птичках раз уж речь пошла про винду, винда сама умеет сжимать содержимое папок.
и таки да, малость запоздалая инфа, современные сервера позволяют все вышеперечисленное настраивать мышкой
такие дела
7. SergeiGer 14 25.05.17 11:49 Сейчас в теме
(3)Вы правы. Но у меня есть ресурс выделенный мне под архивы, на сервере возможно даже в другой стране. И я подозреваю что он не под виндой Наверное настройка винды для хранения архивов это другая тема.
4. v3rter 24.05.17 17:00 Сейчас в теме
6. SergeiGer 14 25.05.17 11:43 Сейчас в теме
Итак попробовал. Внимание следите за руками.
Размер бекапа 49.2 гб без сжатия.
Sql сжатие стал - 19.1
Сжатие бекапа RAR ом 49.2 стал 14.9
Сжатие сжатого SQL из 19.1 стал 18.
Вывод
1) После сжатия RAR на 21 % меньше чем SQL ( 14.9 против 19.1) (Посмотрел другие базы, там выигрыш у RAR еще больше до 50%, в этой 10% занимают сканы документов)
2) Сжимать RAR после SQL бесполезно. ( из 19.1 стал 18.)

Мне лично необходимо иметь под рукой копию, последнюю, которую я быстро смогу развернуть на тестовом сервере. Если я буду сжимать SQL Server то текущая, не заархивированная копия будет занимать 49 гб, а не 19 ка если бы я сжимал SQL. Но время на восстановление бекапа в базу данных пройдет существенно меньше. Но есть и проигрыш . При сжатии RAR, необходимо вначале разархивировать. Что на 49 гб занимает у меня около часа. Но восcтановление старых бекапов нужно очень редко.
Я храню 16 бекапов каждой базы. Если я буду сжимать SQL, то мне необходимо на каждую базу примерно еще 3* 16 = 48 гб.
Итог.
Для небольших баз размером меньше 5 гб, я бы посоветовал включить SQLархивирование. Для больших размеров RAR ( лучше 5 (в 5 один 2 процента выигрыша по сравнению с 4)).
8. ADirks 187 30.05.17 12:26 Сейчас в теме
(6) Нормальный архиватор (rar, 7zip, и т.д.) конечно сжимает эффективнее по размеру. Но временные затраты при этом разнятся чуть ли на порядок.
У меня к примеру база ~60G (.mdf файл), бэкап делается за 5 мин, восстановление за 15. При этом бэкапы лежат на другом сервере (точнее на NAS'е). Если делать бэкап без сжатия, то это займёт намного больше времени. Точно не вспомню, но помнится бэкап делался около 30 мин, причём на локальный диск. А чтобы бэкап развернуть, так вообще часа полтора: скопировать с NAS'а, распаковать, восстановить. Ну и плюс ковсему надо иметь свободного места на диске минимум в 2 раза больше размера базы.
Сжатый бэкап у меня кстати весит ~8G, уж не знаю почему.
При таких раскладах я решил, что внешние архиваторы не слишком полезны, ограничения по объёму нынче не такие жесткие.

Да, и полный бэкап у меня делается раз в неделю. Плюс каждые 15 мин. делается бэкап лога (модель восстановления естественно full). При этом размер бэкапа с логами редко превышает 500М.
9. SergeiGer 14 22.06.17 14:32 Сейчас в теме
Хочу от себя написать. До написания этой обработки, надо было думать о бекапах. Есть ли место, все ли в порядке, С тех пор как её запустил, забыл по администрирование бекапов. Все само добавляется, а самое главное удаляется во время. Для меня критично место, а не время восстановления. Критично чтобы количество бекапов всегда соответствовало политике хранения. Базы а основном по 70 гб. По этому не пользуюсь встроенным архиватором. В обработке встроен механизм отработки ошибок, конечно не всех. Но так как мы имеем дело с файловой системой и сетью, то надо было по максимуму их предусмотреть. Короче работает. Если есть предложения, что улучшить, давайте. Можно сделать чтобы скрипт сам проверял включена ли сжатие средствами SQL и в этом случае не сжимал RAR. Но надо ли?
10. smaharbA 24.06.17 17:58 Сейчас в теме
11. user600420_yan.vitalii 18.07.17 09:28 Сейчас в теме
Здраствуйте! Приобрели и попытались воспользоваться вашим скриптом, при выполнении ругается на синтаксис
Сообщение 156, уровень 15, состояние 1, процедура sp_CleanOldFiles, строка 50
Неправильный синтаксис около ключевого слова "PROCEDURE".
В других местах где используется слова "PROCEDURE". то же самое
Я в написании скриптов не силен, подскажите в чем проблема
12. SergeiGer 14 18.08.17 13:27 Сейчас в теме
(11)Виталий здравствуйте. С удовольствием вам помогу. Посмотрел скрипт еще раз. Не вставлено разделение пакетов, как как скрипт создан из двух скриптов. Создание процедуры sp_CleanOldFiles - очищающая старые бекапы. И создание процедуры sp_AddBkpDay собственно реализующую все функции, и использующую процедуру sp_CleanOldFiles . Просьба, выделите Часть скрипта от CRE ATE PROCEDURE [dbo].[sp_CleanOldFiles] до конца создания этой процедуры. Запустите. Теперь выделите всю часть от CRE ATE PROCEDURE [dbo].[sp_AddBkpDay] и заново запустите.
Я выложил измененный скрипт. Если можно заново скачайте его и запустите. Там все исправлено.
После запуска скрипта, вам надо сделать джобу,
И запускать скрипт с параметрами по расписанию. Если будут вопросы, пишите.
13. pizhenkov 215 13.04.23 00:31 Сейчас в теме
сообщение: 245, уровень: 16, состояние: 1, процедура: dbo.sp_AddBkpDay, строка: 31 [строка начала пакета: 2]
Ошибка преобразования значения nvarchar "\\Ultraserver\obmen\" в тип данных int.

Не смог разобраться что не так. Прошу помощи.
Прикрепленные файлы:
14. SergeiGer 14 17.04.23 15:56 Сейчас в теме
(13) Не нужно переменной @RC Пишите просто EXEC dbo.sp_AddBkpDay . Вы объявляете переменную @RC int .Потом результат выполнения процедуры присваиваете ей. Процедура возвращает путь для бекапов. Он не число .
pizhenkov; +1 Ответить
15. pizhenkov 215 12.08.23 01:15 Сейчас в теме
Скачал обновленную, открыл нажал выполнить
Выдает такие ошибки.
Что опять не так?
Прикрепленные файлы:
16. pizhenkov 215 30.08.23 00:34 Сейчас в теме
Автор молчит. Справится не смог. Нашел альтернативу к сожалению.(
17. SergeiGer 14 12.02.26 23:54 Сейчас в теме
Да, я сделал современную версию . Добавил рассылку об ошибках через телегу и почту. .
Для отправки сообщения требуется регистрация/авторизация