Преамбула:
Довелось мне как-то поддерживать БД 1С БП 2.0, в которой вели учет 100+(более СТА, КАРЛ!!!) организаций. Последующий перевод на 3.0 повлек за собой необходимость разделения этой БД на несколько. Разделение обуславливалось возможностью ведения учета ЗП в БП. В БП 2.0 система не ограничивала видимость объектов БД в зависимости от глобальной настройки ведения учета ЗП в БП, а тут - стала. Было принято решение о разделении БД.
База была клиент-серверной, на базе MS SQL.
Естественно, сразу было принято решение о том, что бы создать узел РИБ, и выгрузить в него данные по нужным организациям. Как оказалось, в данном случае появляются префиксы в номерах документов, чего категорически было делать нельзя + сам процесс формирования начального образа узла завершался ошибкой после 10-15 часов непонятных действий.
Попробовав пару раз таким образом создать узел, я оставил эту затею. Решил сделать копию, с надеждой, что в дальнейшем я почищу базы от не нужных организаций.
Пометил на удаление данные по не нужным организациям. Удаляемых объектов оказалось ~500к в одной базе и ~200к - в другой. Оставив процесс удаления на ночь, с утра я обнаружил, что прогресс не шибко продвинулся.
Не прерывая процесса удаление производилось в течении недели и скорость этого процесса была крайне низкая.
После примерно месяца мытарств с типовым удалением, которое так и не выполнилось до конца, мне пришлось создать данную обработку.
Амбула:
Обработка генерирует текст скрипта, соблюдая ссылочную целостность.
Ссылочная целостность соблюдается следующим образом: если есть запись в таблице, в полях которой содержатся ссылки на удаляемый объект, то такая запись так же удаляется из таблицы.
Другими словами:
Нужно удалить ОрганизацияА, значит нужно удалить все банковские счета, где есть ссылка по владельцу ОрганизацияА, значит нужно удалить все документы, в реквизитах которых есть ссылки на все удаляемые банковские счета и т.д.
С помощью сгенерированного скрипта весь процесс удаления длился 30-40 минут для каждой из баз.
Особенно актуально, если БД доступна в режиме 24/7.
Алгоритмы могут быть использованы более универсально, т.е. для удаления других объектов или в условиях других СУБД, но для этого придется доработать самостоятельно.
Использование скрипта, естественно на свой страх и риск.
К версии платформы не чувствительна, т.е. должна и на 8.0 и на 8.3.16 работать одинаково.
P.S. я прекрасно знаю про лицензионные ограничения, но 1С не предоставляет никаких других типовых средств очистки БД сравнимой производительности.
UPD: Версия 1.5.1. Исправлена ошибка приводящая к конфликту типов в конструкции ВЫРАЗИТЬ() запроса наличия данных в БД. Добавлена возможность указать версию pgAdmin при формировании скрипта для PostgreSQL.
UPD: Версия 1.5.0. Добавлена возможность проверять наличие данных в таблицах, чтобы не обрабатывать все возможные комбинации. Добавлена возможность отключать вывод количества удаляемых записей в основных таблицах при выполнении скрипта - это сэкономит время выполнения скрипта в ~2 раза. Добавлено удаление данных из таблиц итогов. Исправлены недочеты/ошибки в формировании текста скрипта, а так же выполнены некоторые дополнительные оптимизации.
UPD: Версия 1.4.0. Добавил возможность указывать максимальный уровень вложенности проверки ссылочной целостности. Внесены некоторые оптимизации в текст скрипта.
UPD: Версия 1.3.0 Добавлена возможность формирования скрипта для PostgreSQL. Исправлены ошибки сформированного скрипта версии 1.2.0.
UPD: Версия 1.2.0 Существенно переработан и оптимизирован алгоритм формирования скрипта. Добавлена возможность сохранять скрипт сразу в файл *.sql.
UPD: Версия 1.1.0 позволяет сохранять структуру метаданных и хранения данных в файлы и читать из файлов. Сделано для возможности отладки формирования скрипта в условиях, когда нет доступа к конфигурации.