Обработка "Очистка базы данных от данных средствами SQL"
Обработка генерирует SQL-скрипт, который либо просматривает, либо очищает базу данных от всех документов либо по выбранной организации. Проверялась на типовой конфигурации Управление производственным предприятием на платформе 8.3. Так же проверялась на специализированной программе Управления сбытом продукции. Обработка универсальна для стандартных конфигураций на платформе 8.3.
Данная обработка является доработанной модификацией обработки "PUBID_731455-ОчисткаОтДанныхОрганизации" скачанной с Инфостарта. Ссылка: //soft.crimea.com/public/731455/
Предыстория.
Организацией была поставлена задача сделать копии 2х рабочих баз, удалив из них только документы и оставив все справочники и прочие настройки. На основе этих баз открывалась еще одна организация.
Места на SQL Сервере было не так и много, а базы были огромными с 2015 года с оборотом до 3000 документов в день.
В итоге общее число документов превышало 3 000 000 штук в каждой.
Проблема была в том, что времени давалось три дня на две базы.
Так же в специализированной базе были документы не привязанные к Организации.
В связи с чем исходная обработка "PUBID_731455-ОчисткаОтДанныхОрганизации" не видела некоторые типы документов.
Пришлось доработать обработку.
1. Галка "Полное" позволяет найти все документы, не учитывая Организацию.
2. Галка "Только документы" позволяет очистить базы только от документов и их движений по регистрам,
не трогая: "Справочники , Версии объектов, Категории, Свойства, Остальные регистры".
3. Галка "Только помеченные" позволяет удалять только документы помеченные на удаление.
4. Галка "До даты" отрезает список удаляемых документов по дату установленную в поле "Дата по".
По кнопке "Создать SQL скрипт" создается скрипт, который чистит базу.
По кнопке "Создать SQL скрипт просмотра" создается скрипт, который только выводит список типов Документов с
количеством по каждому типу. Cкопировав в EXEL сообщения выданные при запуске скрипта просмотра и выделив
цветом те типы объектов, которые имеют данные не равные 0, можно следовать этому списку при удалении.
Это позволяет сделать анализ сразу все удалять или частями, временно комментируя текстом -- куски по объектам с большим объемом, находясь в скрипте загруженном в SQL Server Management Studio.
Мой опыт таков.
Первое, что я стал делать - это попытаться удалять стандартными средствами 1С. Только пометка на удаление конкретного документа "реализация" заняла 1.5 Суток. Это меня не устраивало. Решил попробовать средствами SQL.
В SQL я запустил на удаление сразу все документы. SQL жужжал 18 часов, а потом выдал, что не хватает места.
Это потому, что весь скрипт делается в одной транзакции. Решил разбить удаление, чтобы транзакции были поменьше размером.
Лог файл разросся в 456 гигабайт. Пришлось уменьшать сжатием базы.
Если места на сервере SQL мало или сервер слабенький, есть два варианта чистки.
Первый вариант:
1. Включить галку "До даты" в обработке выбрать дату и выгрузив скрипт начиная от начала времен данной базы до какой то даты, когда число объектов допустимое, по ресурсам SQL.
2. Выгружаем скрипт из Обработки. В служебном сообщении смотрим, куда выгрузился файл (Примерно выглядит как
нибудь так: "C:\Users\1c-prog\AppData\Local\Temp\32\v8_9E2C_c.sql").
3. Запускаем SQL Server Management Studio.
4. Загружаем скрипт из места выгрузки.
5. В SQL Server Management Studio в верхних кнопках ищем кнопку [! Выполнить], слева от нее в поле "Доступные базы данных" выбираем нашу базу, прыгаем курсором в текст скрипта и давим кнопку [! Выполнить].
6. Ждем окончания выполнения.
7. Возвращаемся в нашу обработку 1С и сдвигаем дату. Повторно выгружаем новый скрипт и по кругу (с пункта 4)
Второй вариант:
1. Галку "До даты" не используем.
2. Выгружаем скрипт из нашей Обработки 1С. В служебном сообщении смотрим, куда выгрузился файл (Примерно выглядит как
нибудь так: "C:\Users\1c-prog\AppData\Local\Temp\32\v8_9E2C_c.sql".
3. Запускаем SQL Server Management Studio и Загружаем скрипт из места выгрузки.
4. В тексте скрипта выделяем один или несколько кусков кода, с большим количеством объектов метим спереди комментарием --
5. В SQL Server Management Studio в верхних кнопках ищем кнопку [! Выполнить], слева от нее в поле "Доступные базы данных"
выбираем нашу базу, прыгаем курсором в текст скрипта и давим кнопку [! Выполнить].
6. Ждем окончания выполнения.
7. Восстанавливаем по одному или сразу несколько за комментированные куски текста и давим
кнопку [! Выполнить]. Повторяем этот пункт до полной выгрузки.
И главное!
Если вы удаляли все документы, то после удаления оных необходимо вручную очистить таблицы журналов документов.
Это таблицы с именем начинающимся на _DocumentJournal....
Как это сделать, смотрите рисунки "Удаление журналов Шаг1 и Шаг2".
Перед запуском по кнопке [! Выполнить], удалите строку: WHERE <Условия поиска,,>
Вот пожалуй и все! Дерзайте!
Мне по своей задаче такое решение очень помогло.
ПРИМЕЧАНИЕ:
При удалении "Справочники , Версии объектов, Категории, Свойства, Движения по регистрам", галка "Пометка удаления" не работает. Хотите, доработайте сами.