Очистка базы средствами SQL (управляемое приложение)

Администрирование - Чистка базы

Очистка базы средствами SQL (управляемое приложение). Полная и частичная. Любая конфигурация 1С 8.2, 8.3. Тонкий клиент, управляемое приложение, Такси

Друзья, всем бобра и счастья!

Дисклеймер! Политика 1С не разрешает никакие манипуляции с данными напрямую средствами СУБД, только средствами платформы! Поэтому качать, смотреть, думать,  а уж тем более запускать эту обработку категорически нельзя. (или можно, но только ночью, обязательно завесив окна, выключив свет и закрывшись на семь замков). Шутка, конечно же. Просто в случае безвозвратной потери данных виноваты будете Вы и только Вы. Минздрав предупредил.

Цель написания обработки единственная: создание БД для разработчика в максимально короткие сроки путем обрезки базы до минимума, необходимого для работы. Никакая целостность не проверяется и не гарантируется. Возможно, кто-то уже сталкивался с проблемой в больших компаниях, когда база 1С весит сотни гигов (по несколько млн документов в год), и развернуть каждому программисту в отделе по отдельной копии просто физически невозможно. И не рентабельно. Лучшее решение - обрезать базу, оставив в ней данные лишь за небольшой период. Но удаление большого числа объектов средствами 1С занимает очень много времени.

В качестве статистики приведу пример. 1С у меня удаляет данные со скоростью ~25 000 объектов/час, Обработка - ~2 000 000 объектов за 20 минут. Разница налицо, как говорится.

За основу идеи была взята обработка //1c-soft.it-terminal.ru/public/122546/ . За что огромное спасибо автору и долгих лет жизни. К сожалению, столкнулся с единственной проблемой - скорость работы. Поэтому решил полностью изменить алгоритм.


Как пользоваться обработкой?

Аутенфикация 

Некоторые данные для аутенфикации подтягиваются автоматически из строки соединения с ИБ, но они совсем не всегда совпадают. Поэтому необходимо ввести имя именно своего сервера SQL.

Для проверки корректности данных есть кнопочка "Проверить подключение".

Тайм-ауты можно оставить как есть. 30 сек для подключения, 1ч на выполнение запроса в СУБД. Если в процессе удаления появится ошибка "(Microsoft OLE DB Provider for SQL Server): Query timeout expired", значит, необходимо увеличить тайм-аут выполнения запроса, т.к. слишком много данных, и СУБД не успела их почистить.

 

Удаление

Удаление возможно частичное или полное.

Обработка позволяет очищать следующие объекты:

  • Документы,
  • Журналы документов,
  • Регистры сведений,
  • Регистры накопления,
  • Регистры бухгалтерии.

Полное удаление выполняется быстро через команду TRUNCATE TABLE.

Частичное удаление производится путем выбора периода удаляемых данных (отбор по полю _Period в БД).

Для Документов также автоматически очищаются таблицы, содержащие данные табличных частей документов.

Для Регистров накопления и бухгалтерии есть возможность выбора действия обработки виртуальных таблиц (Итоги, Обороты...). По хорошему, в идеале лучше всего виртуальные таблицы очищать полностью, после чего из Конфигуратора запускать Тестирование и исправление с галкой "Пересчет итогов".

Для Регистров сведений есть возможность выбора Подчиненных или Независимых. Для Подчиненных возможен отбор по периоду регистратора.

Команда "Очистить всё" последовательно проходит по всем страницам обработки и выполняет действия в зависимости от выбранных параметров.

Скачать файлы

Наименование Файл Версия Размер
Очистка базы средствами SQL (управляемое приложение)
.epf 21,10Kb
03.07.15
270
.epf 1.0 21,10Kb 270 Скачать

См. также

Комментарии
Сортировка: Древо
1. DoctorRoza 27.05.15 08:57 Сейчас в теме
Удаление возможно частичное или полное.


Ну частичное да, а вот полное .. может просто конфу скопировать!? :)
3. stsasha87 109 27.05.15 10:17 Сейчас в теме
(1) DoctorRoza, имеется ввиду по объектам метаданных. Удалить полностью за весь период, либо отобрать. Я у себя наиболее используемые документы оставлял за полгода, ненужные - сносил полностью:)
2. TTSTV 27.05.15 09:10 Сейчас в теме
Очищать виртуальные таблицы нельзя, т.к. их нет. Если речь о пересчете итогов, то там только одна таблица - собственно, сами итоги. Таблицы оборотов нет.
Ну и пересчитывать итоги после такого грубого вмешательства нужно не "по хорошему", а обязательно.
4. stsasha87 109 27.05.15 10:40 Сейчас в теме
(2) TTSTV, если взять регистр накопления(остатки или обороты), то нужно всегда помнить, что в базе sql помимо основной таблицы с данными лежит еще таблица с итогами (либо оборотами), которая скорей всего в разы больше основной. А у регистров бухгалтерии и не одна (ИтогиПоСчетамССубконто1, ИтогиМеждуСчетами, ИтогиПоСчетам...).
Я тоже считаю, что после такой чистки запуск ТиИ пересчета итогов и переиндексации обязательны. Но возможность удалять данные из виртуальных таблиц частично я всё же оставил.
ТиИ приходится оставлять на ночь, в моем же случае вопрос времени критичнее достоверности данных, поэтому я чистил "по-быстрому" :-)
Но, опять же, после пересчета итогов и переиндексации получится еще и приличная экономия места.
5. Операция1Ы 53 29.05.15 10:16 Сейчас в теме
(4) чтобы итоги не пересчитывать можно после "обрезания" выгрузить и загрузить дтшник средствами платформы, для базы в 100гб операция загрузки занимает примерно 4 часа, выгрузка около часа, но это если не совсем уж дохлый комп.
6. Yula89 2 02.06.15 08:10 Сейчас в теме
(4) думаю, что для торга могло бы быть актуально)
7. polyplastic 03.06.15 13:24 Сейчас в теме
Автору респект. Тоже делал подобное для тестовых баз.
И совет для удаления больших таблиц: если удаляется бОльшая часть таблицы, выгоднее сделать копию нужной части данных, очистку таблицы TRUNCATE и копирование обратно. Дело в том, что если у вас одна таблица допустим весит 40Гб, при удалении 95% ее содержимого лог базы данных вырастет примерно на 150Гб.
Roman_SE; +1 Ответить
8. stsasha87 109 04.06.15 11:08 Сейчас в теме
(7) polyplastic, спасибо:) дада, сталкивался с переполнением логов, поэтому удаление данных таблицы делаю в одной транзакции. Копирование+транкейт+копирование обратно как-нибудь попробую на досуге, интересна скорость отработки данного метода.
9. WWWWW 08.06.15 10:29 Сейчас в теме
10. Anzhey 16 17.06.16 12:54 Сейчас в теме
11. forsagforsag 69 13.09.16 19:47 Сейчас в теме
И кто из вас украл обработку у другого?????????
При сравнении 1с-ка показывает что они полностью идентичны.
12. forsagforsag 69 15.09.16 13:12 Сейчас в теме
СТОП. Прошу прощения отбой ;))
Сборщик писем подставил - повторно скачал первую обработку :)
13. forsagforsag 69 16.09.16 16:28 Сейчас в теме
Таб/части справочников удаляет?
14. stsasha87 109 20.09.16 17:26 Сейчас в теме
(13) forsagforsag, удаляет) По алгоритму сначала производится удаление табличных частей, а потом и самих документов
15. sanfoto 478 08.11.16 15:10 Сейчас в теме
Обработка ГУД)) Мне помогло Автору респект

ДО ЭТОГО - пробовал очистить регистр сведений (около 10 миллионов записей - SQL на дохлой тачке) - методом копирования Регистра в конфигураторе и удаления Исходного.... так вот отваливался Конфигуратор по таймауту (потом доперло что "Администрирование/Параметры информационной базы.../ Время ожидания блокировки.." - скорей всего бы помогло )

Надоело экспериментировать... да и время кончилось... начальника ругалась))) скачал обработку выбрал регистр ... поставил галку "Удалить полностью (Truncate table)".
16. Kontakt 61 16.11.16 07:12 Сейчас в теме
Формируется остатки на начало периода? если задан период
17. stsasha87 109 16.11.16 18:19 Сейчас в теме
(16) Kontakt, если задается период, то удаляются данные только за этот период. Без формирования остатков. Это не свёртка, а очистка :-)
18. Kontakt 61 16.11.16 19:13 Сейчас в теме
(17) stsasha87, Свертку сделал на 31.12.2015 23:59:59 как теперь обрезать и не затронуть. Если период ставится в обработке лишь датой. 30.12.15 ?
19. dimaxx 41 21.12.16 09:54 Сейчас в теме
(18) Распроведи и перенеси документы свертки на 01.01.2016. потом зачисть и верни все обратно.
20. lexi 1 17.02.17 15:24 Сейчас в теме
ДД! в конфигурации Документооборот будет работать?
21. stsasha87 109 17.02.17 15:59 Сейчас в теме
(20) Насколько я помню, в Документогороде большинство "документов" - это элементы справочников. У которых "Период" - это отдельный реквизит, который на sql-е скорей всего называется как _FldXXXX, а не _Period. Поэтому если делать частичное удаление по периоду, то надо сначала уточнить имя реквизита в субд и поправить в обработке. А так не вижу помех, но обязательно сначала всё пробовать на копии!
22. Roman_SE 5 17.02.18 10:34 Сейчас в теме
Табличные части документов также как оригинальная чистит муторно и долго или переписано? Оригинальная офигевала если документов заказ покупателя под миллион... очень долго чистила даже с таймаутами дикими.
Оставьте свое сообщение