Очистка таблиц SQL



Очередная обработка для быстрой очистки таблиц SQL.

Главное отличие данной разработки — это возможность самому выбирать необходимые таблицы, а также, что более важно, посмотреть результирующий запрос к базе данных. Лично меня немного пугают обработки для работы с SQL напрямую, которые не показывают чего они делают. Также в качестве бонуса небольшая опция, которая позволяет сделать Shrink базы после выполнения очистки. Обработка физически меняет таблицы SQL! Помните об этом и пользуйтесь с осторожностью.

 

20.08.2012 — Добавил возможность изменения таймаута при выполнении длительных операций (по умолчанию 30 сек.)

19 Comments

  1. fomix

    А как насчет ссылочной целостности?!

    Reply
  2. lion-killer

    Ссылочная целостность не контролируется. Обработка создана для очистки ненужных (и очень больших) таблиц.

    Reply
  3. Den_D

    Да иногда надо в тестовой базе почистить например «Все документы» и оставить заполненными справочники и др.

    Тупо иттерациями по всем документам с непосредственным удалением все равно получается очень долго. А вот так зашел, почистил таблички и вуаля.

    Reply
  4. AlexO

    (3) Den_D,

    очередной студент со своим институтским уставом пришел в монастырь 1С?

    А вот так зашел, почистил таблички и…

    .. и оставил кучу мусора в базе в связанных-перекрестных таблицах, который ничем уже не вычистишь. А оно еще и аукнутся может потом, т.к. 1С использует одни и те же названия таблиц.

    Тупо иттерациями по всем документам с непосредственным удалением

    Тупо, по-студенчески, открываете «Универсальный обмен данными в формате XML», тупо входящую в типовые; тупо жмете на вкладку «Удаление данных», тупо выбираете на удаление нужные справочники-регистры-документы-ПВХ, и система за считанные секунды «умно» удаляет все и везде.

    А студенты тупо смотрят, и не понимают, в чем подвох 🙂

    Reply
  5. Den_D

    Тупо век живи — век учись)))

    Спасибо за урок))) (с) Ваш студент

    Reply
  6. AlexO

    (5) Den_D,

    🙂

    вы хоть проверили? или «тупо, по-студенчески», записали и забыли? 🙂

    Reply
  7. Den_D

    (6) AlexO, я посмотрел код универсального обмена, и понял вот что, да удаление документов таким образом будет действительно более корректным, НО это не будет быстро, потому что «Объект.Удалить()».

    Бывает что нужна база без документов, в которой ссылочная целостность не так важна. Основная задача такой базы что бы некоторые пользователи могли бы там потренироваться на реальных справочниках. Все же конечно для этой цели можно было бы выгрузить все эти справочники этим же обменом XML, что бы все было красиво, но это в любом случае очень долго для такой тривиальной задачи.

    Reply
  8. AlexO

    (7) Den_D,

    НО это не будет быстро, потому что «Объект.Удалить()»

    а вы попробуйте, и сравните ощущения.

    Бывает что нужна база без документов, в которой ссылочная целостность не так важна.

    а еще — прочитайте примечание вверху вкладки «Удаление данных» в этой обоработке 🙂

    Reply
  9. lion-killer

    Еще раз повторюсь: обработка создана для очистки очень больших таблиц. Насчет студентов вы неправы. Вы работали с базами данных объемом свыше 120 Гб? Когда одна таблица содержит свыше миллиона записей? Удаление записей такой таблицы займет не считанные секунды, а часы, а, учитывая проверку ссылочной целостности, удаление может занять все выходные.

    Приведу пример: Есть рабочая база в которой работают пользователи. Задача: создать 10 тестовых баз для разработки и отладки. Нехитрые математические вычисления дадут нам 120Гб * 10 = ~1,2Тб на сервере баз данных. А сервер, как известно, не резиновый. Потому при создании копии рабочей базы неплохо бы определить, а нет ли в базе таблиц существенно увеличивающих ее размер и не критичных для выполнения разработки и отладки? Такими таблицами, например могут быть справочник «Хранилище дополнительной информации» или регистр сведений «Версии объектов».

    Reply
  10. AlexO

    (9)

    а, учитывая проверку ссылочной целостности

    еще раз — прочитайте примечание вверху вкладки «Удаление данных» в этой обоработке

    Вы работали с базами данных объемом свыше 120 Гб?

    т.е. для вас тестовая база «для развлечений» — только от 120 ГБ?

    А сделать чистую базу и перенести туда минимально нужное количество документов обработкой «перенос между идентичными» — это не по-хулигански? По-пацански — это все сломать, а потом развести руками? 🙂

    Задача: создать 10 тестовых баз для разработки и отладки.

    «Одно яйцо варится 5 минут. Сколько нужно времени, чтобы сварить 3 яйца?» — Ваш ответ: 15 минут.

    неплохо бы определить, а нет ли в базе таблиц существенно увеличивающих ее размер и не критичных

    т.е. судьба ссылочной целостности при этом вас не волнует? Так на кой тогда вам такая «тестовая» база нужна, если в ней — 120 ГБ мусора?

    Здесь есть обработки, создающие такой документный мусор со скоростью звука в базе. И только по выбранным видам.

    Reply
  11. lion-killer

    (10) AlexO, Сказывается отсутствие опыта работы в крупных компаниях, а также опыта групповой разработки. Вы не разбираетесь в предмете спора.

    Reply
  12. Den_D

    (8) AlexO, удаление только лишь документов «Счет на оплату покупателя» заняло 30 минут

    база маленькая, документов было 6820 шт. всего

    Reply
  13. AlexO

    (11)

    думаете, вы первый «разбирающийся», который курочит базы 1С? 🙂

    делайте хотя бы свои эксперименты не на рабочей, чтобы о вашем позоре никто не узнал 🙂

    Reply
  14. AlexO

    (12) Den_D,

    у меня 3тыс удаляет за минуту.

    Reply
  15. Den_D

    (14) AlexO, То ли лыжи не едут, то ли я…

    Reply
  16. kirlog

    Мне вот кажется, что чистить таким образом можно только табличные части документов и справочников и то сильно с оглядкой на взаимосвязи табличных частей, которые широко используются в современных конфигурациях 1С.

    Ну может быть еще независимые непериодичные регистры сведений, такие, как «Штрихкоды» например.

    В других случаях опасность возникновения серьезных, неустранимых проблем в базе для меня лично более значима чем время выполнения очистки данных штатными средствами.

    Reply
  17. Bitnikov

    Спасибо!

    Лично мне пригодилась.

    Я чищу достаточно большой (больше млн. записей) независимый регистр сведений, без явных ссылок на какие либо объекты. В котором ведется аудит действий пользователей, более детальный чем журнал регистрации. Этот регистр не нужен в копиях баз. Чистка кодом 1С вываливается с ошибкой — не хватает памяти на сервере.

    А эта чистка чистит без ошибок, т.к. сразу на сервере СУБД.

    Reply
  18. sbv2005

    Очень полезная вещь! Эффективность подтверждена! Для независимых регистров сведений самое то.

    Reply
  19. AKV77

    Спасибо за обработку !

    Почистил базу УПП, оставив только справочники и необходимые регистры сведений. Нужна была именно такая «чистая» база.

    Мой алгоритм:

    1.Почистил регистры накопления

    2.Регистры расчета

    3.Регистры бухгалтерии

    4.Регистры сведений (выборочно)

    5.Документы

    6.Журналы документов

    7.Необходимые справочники

    средствами SQL также провел необходимое обслуживание БД.

    Далее в тех справочникам где должны быть ссылки на документы почистил соответствующие реквизиты.

    В данный момент тестирую, то что получилось.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *