Статья предназначена, прежде всего, для компаний, обслуживающих значительные по объему базы данных (БД), от 0.5 ТБ и более. Тестовые среды для поддержки и разработки, как правило, ограничены. Потребность развернуть в тестовой среде 15-20 копий рабочей БД – вполне реальна, и вполне может быть, что рабочая БД – не одна. Также для тестов и разработки лучше использовать максимально актуальную копию рабочей БД.
Таким образом, задачу создания тестовой БД можно разделить на 2 этапа. На 1 этапе требуется понять, каким образом из рабочей базы объемом 0.5 ТБ получить тестовую базу объемом 50 ГБ.
В моей практике были в основном задачи подготовки тестовых БД на MS SQL, поэтому в части запросов к СУБД будем рассматривать запросы к СУБД MS SQL (что не мешает адаптировать Вам всё под Oracle)
Сперва следует оценить, какие таблицы в Вашей рабочей БД обладают наибольшим объёмом, и обладают ли эти таблицы ценностью в тестовой среде. Для определения наибольших по объёму таблиц можно использовать отчет в Management Studio MS SQL (Disk Usage by top tables):
Примечание: никто не запрещает Вам использовать многочисленные «базопузомеры» с инфостарта для этого также.
Для понимания ценности данных в таблицах можно использовать встроенные в платформу 1С средства – метод ПолучитьСтруктуруХраненияБазыДанных().
Сопоставив имена таблиц БД с именами таблиц 1С станет понятно, какие таблицы в тестовой базе не нужны. Пример таких таблиц:
- Справочники «Присоединенные файлы»
- Регистр сведений «Версии объектов»
- Регистр сведений «Двоичные данные файлов»
- Таблицы регистрации изменений для обмена
Выбрав наиболее объемные и малоценные для тестовой БД таблицы, можно написать скрипт их очистки: «USE <DBNAME>;
|TRUNCATE TABLE dbo.SomeDBName;»
В обработке, приложенной к статье, текст скрипта по указанным таблицам формируется автоматически.
Вторым шагом для значительного снижения объема тестовой БД является сжатие БД. Сжимаются все таблицы и индексы. Текст скрипта для сжатия БД также приложен к статье.
Теперь остался один вопрос – как транспортировать рабочую БД на тестовый сервер, чтобы каждое утро получать максимально уменьшенную свежую копию рабочей БД. Для этого можно использовать различные механизмы (SQL DTS), мастер Copy DB в Management Studio:
Также можно использовать скрипт, который развернёт бэкап рабочей БД в тестовой среде (на тестовом MS SQL).
Как это работает:
1. На тестовом SQL сервере настроен план обслуживания, в котором последовательно выполняются следующие шаги:
2. Скрипт разворачивает бэкап рабочей БД на тестовом сервере в существующую эталонную тестовую БД.
3. Запускается скрипт очистки таблиц БД.
4. Запускается скрипт сжатия таблиц БД.
5. Профит.
Описанным способом удалось размер одной из рабочих БД снизить в 8 раз, т.е. вместо 1 тестовой БД на тестовом сервере – теперь развернуто 8 тестовых БД.
Описанные в статье действия выполнялись в ознакомительных целях на платформе 1С 8.3. Скрипты, приложенные к статье, являются примером использования языка запросов MS SQL Server. Для тестов использовалась 1С 8.3.12.