Сетрак Торосян

Как свертывать большую базу 1C 8 в максимально короткие сроки (1С 8.1, 8.2)

Предыстория
В компании, где я работаю, возникла ситуация, когда настала необходимость урезать базу, т.е.  удалить все документы и движения до определенной даты.   К этому моменту база данных весила почти 350Гб, и очень тяжело было с ним работать. Также страдало быстродействие 1С  и регламентные операции  с БД выполнялись очень долго.
Решение было принято – базу обрезаем! После долгих тестов  типовых обработок по свертыванию, я в них разочаровался. Больше двух недель провел наедине с компьютером обрезая тестовую базу. Такие сроки просто недопустимы в рабочей базе, тем более в базе работают пользователи 6 дней в неделю. Как то нужно было выбираться из тупиковой ситуации. Решили передать задачу на аутсорс. Но и здесь нас не обрадовали, стоимость работ высокая и время для выполнения требовалось немаленькое.
В общем вопрос оставался нерешенным и вернулись к тому, чтобы решить задачу своими силами.
Пришлось прибегнуть к крайним мерам, я отключился от всех других задач и взялся за свертывание базы.
И в скором времени вопрос был решен – обрезали базу за 2 дня, уменьшили его на 70%.

Обрезание базы УТ  с объемом 350 Гб за 2 дня.
Решил выполнить задачу по такому алгоритму:
Создать копию рабочей базы. В копии сформировать остатки на нужную дату, удалить все документы и движения до этой даты. Далее из рабочей базы все новые документы (созданные с момента создания копии) перенести в новую базу. Пустить пользователей в новую базу.

Задача была разделена на 5 подзадач:
1.Создать план обмена, для того чтобы после обрезания базы все новые документы можно было перенести в новую базу.
2.Сформировать остатки на дату свертки.
3.Удалить все документы и движения до даты свертки.
4.Загрузить документы из текущей базы в новую базу.
5.Заменить рабочую базу новой (обрезанной) базой.
На подготовительный этап ушло около двух недель: создание плана обмена, поиск инструментов по созданию остатков и очистки регистров, тестирование механизмов.

Процесс свертки базы данных.

1. Формирование остатков на дату свертки.
Остатки формировал типовой обработкой «СверткаБазы.epf».
Чтобы сэкономить время формирование остатков выполнил в рабочей базе в рабочее время. Т.к. остатки формируются документами «Корректировка записей регистров» и обработка устанавливает неактивными движения в регистрах, то эта процедура для базы безвредна.
В обработке поставил ограничение на количество строк в одном документе  50 000.
Делал не спеша, и в течении 1-2 дня все сформировалось (получилось около 400 документов).
Примечание:
–  если на дату свертки есть  документы «Корректировка записей регистров»  не связанные со сверткой базы,  то их лучше перенести на дату позже, чтобы случайно их не перепутать потом.
– при формировании остатков, лучше просмотреть все регистры, т.к. бывает, что не по всем регистрам начальные остатки вам нужны. Иногда бывают ситуации, когда регистр уже нигде не используется. В итоге это сэкономит ваше время.

2. Создать полный план обмена для выгрузки в идентичную конфигурацию (можно делать параллельно формирования остатков).

3.В нерабочее время очистить зарегистрированные в плане обмена объекты и сделать копию базы с отключенными регламентами.

4.Удаление документов и очистка регистров.
Эта операция самая медленная и для ускорения этой операции нужно использовать прямые запросы SQL . Подобные инструменты можно найти на Инфостарте.  Есть еще один момент, если мы удалим данные таким способом, то объекты удалятся быстро, но без контроля на ссылочную целостность.  Соответственно, в наших документах вода остатков и других документах появятся строки типа «Объект не найден….».
У меня стояла задача оставить эти документы в непроведенном виде для информационных целей.
Для этого была написана обработка, которая сняла с проведения и перенесла на дату свертки  все документы участвующие в движениях в документах корректировки регистров.
После чего, используя обработку по удалению документов и движений через SQL запросы, удалить все до даты свертки (журналы документов, документы, регистры накопления, регистры  сведений и т.д.).
Примечание:
– по регистрам сведений нужно чистить только периодические. Если регистр не периодический, то он скорее всего очистится полностью.

6.Активизаровать движения документов корректировки записей регистров обработкой «СверткаБазы.epf».  При этом обработка эти документы переносит на предыдущую дату (это удобно для сверки остатков в двух базах).
7.Перерасчитать итоги
8.Проверить корректность ввода остатков и исправить (для этой цели можно привлечь сотрудников бухгалтерии)
9.Перенести документы из рабочей базы в новую базу. Эту процедуру можно делать уже сразу после создания копии. Т.е. если ежедневно в базе создается много документов, то перенос документов лучше делать параллельно, чтобы дополнительное время на это не тратить.
10.Пустить пользователей в новую базу. Для этого лучше переименовать  базы на сервере 1с, чтобы для пользователей переход был безболезненным.  Т.е. старую базу называем как угодно а новую (свернутую) базу переименовываем в старую.

Примечание!
Как известно, при непосредственном удалении объектов не происходит контроль ссылочной целостности.
Соответственно, после удаления объектов в текущей базе остаются объекты ссылающиеся на несуществующие объекты (“Объект не найден”).
У меня задача не стояла, чтобы эти объекты были в свернутой базе. Но битые ссылки могут отрицательно сказаться и на разного рода обмены между базами, и на другие процессы.
По этому я их перенес в свернутую базу, но после того как базу свернул.
1.Сделал правила обмена, которые переносят документы (только номер, дата в непроведенном виде).
2.Перенес все документы которые встречались в документах ввода начальных остатков.
Эту процедуру можно делать после свертки, но желательно инструменты подготовить заранее.

setrak • 01.06.2013


Previous Post

Next Post

Добавить комментарий