Часто в работе администраторов и разработчиков 1С возникает ситуация, когда рабочая база данных разрастается до внушительных размеров (например, 3 Тб и более), а свободного дискового пространства для развертывания полноценной копии для разработки или тестирования не хватает. Рассмотрим, как можно решить эту проблему, используя различные подходы: от организационных до глубоко технических.
Прежде чем приступать к техническим манипуляциям, необходимо проанализировать состав базы данных. Часто львиную долю объема занимают второстепенные объекты: журналы регистрации, логи обмена, исторические таблицы, которые уже не требуются для повседневной разработки. Проведите аудит размеров таблиц с помощью стандартных отчетов SQL Server Management Studio. Если вы обнаружите таблицы с историей или логами, занимающие сотни гигабайт, рассмотрите возможность их очистки или архивирования.
Одним из проверенных способов является свертка базы данных. Это процесс удаления старых документов и движений по ним, при котором в базе остаются только остатки на определенную дату и документы за «свежий» период. Разберем этот процесс по шагам:
T-SQL, который будет переносить только необходимые справочники и документы за последний месяц (или иной период).Этот подход позволяет получить рабочую тестовую среду с актуальными данными, занимающую в десятки раз меньше места, чем оригинал.
Если сервер физически не позволяет расширить дисковое пространство, рассмотрите вариант использования внешнего хранилища или даже обычных жестких дисков, подключенных к системе. Для обхода ограничений при развертывании bak-файла, можно воспользоваться приемом с символическими ссылками:
Разберем это по шагам:
MS SQL Server использует для временных файлов или куда планируется развернуть файлы MDF и LDF.mklink /j в операционной системе создайте символическую ссылку, перенаправляющую запросы к этой папке на внешнее устройство.Это позволит «обмануть» СУБД, перенеся нагрузку по хранению данных на менее дорогостоящие носители в процессе восстановления базы.
Не обязательно иметь 3 Тб «мусорных» данных для проведения качественного тестирования. Проанализируйте, какой минимум информации необходим для работы функционала. Мы рекомендуем разработать специализированную обработку 1С, которая будет выборочно выгружать данные из рабочей базы и загружать их в тестовую. Это избавит вас от необходимости копировать дублирующуюся информацию, файлы BLOB и неиспользуемые регистры.
Пример логики такой обработки может выглядеть следующим образом:
// Пример псевдокода для переноса актуальных документов
Выборка = Документы.РеализацияТоваровУслуг.ВыбратьЗаПериод(ДатаНачала, ТекущаяДата());
Пока Выборка.Следующий() Цикл
Объект = Выборка.ПолучитьОбъект();
Объект.Записать(РежимЗаписиДокумента.Проведение);
КонецЦикла;
Если же необходимость разворачивать полную копию остается, обратите внимание на возможности сжатия данных (Data Compression). В MS SQL Server существуют настройки сжатия на уровне страниц или строк, которые могут значительно уменьшить физический объем файлов БД. После сжатия данных в рабочей базе размер бэкапа также сократится, что позволит поместить его на доступные дисковые ресурсы.
Также важно пересмотреть подход к хранению файлов внутри базы. Если вы храните сканы документов или прайс-листы прямо в SQL-таблицах, они быстро «раздувают» базу. Рассмотрите перенос таких данных во внешнюю файловую систему, оставляя в базе только ХранилищеЗначений со ссылками на файлы.
Развертывание копии большой базы — это комплексная задача. Мы разобрали, что физическое отсутствие места можно компенсировать либо сверткой данных, либо использованием внешних хранилищ, либо оптимизацией самой рабочей БД. Главное — перестать хранить в основной базе «мертвые» данные, которые не несут бизнес-ценности, и перейти к осознанному управлению объемом информации.