Свертка БД 1С: обрезка до выбранной даты средствами MS SQL

0. 522 15.11.19 14:52 Сейчас в теме
Внешняя обработка, позволяющая произвести анализ размера БД и грубую обрезку данных до выбранной даты средствами MS SQL. Управляемые формы, 1С:Предприятие 8.3 (8.3.9.1818).

Перейти к публикации

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. imh0593 16.11.19 10:49 Сейчас в теме
лицензионное соглашение не просто так придумано. предположим вы или кто-то другой ошибетесь в процессе работы с базой напрямую мимо методов 1С. кроме как восстановить из бэкапа другого варианта нет. но и восстановление из бэкапа базы - это также возможные дополнительные проблемы, плюс простой в работе. поэтому такие обработки лучше не выкладывать в общий доступ. каждый для себя сам может решить, когда это оправдано, понимая что он делает и в связи с чем. а если он понимает, что он делает, то он и скрипт сам напишет.
3. zabaluev 376 17.11.19 09:04 Сейчас в теме
(1) Не надо умничать, если не в теме. Базу размером более 100Гб, с несколькими миллионами документов невозможно свернуть без прямой работы с SQL. Такие обработки очень нужны и плохо только, что 1с сама не даёт такие методики по сверке больших баз.
EvGenius23; insurgut; AlexSvt; Irwin; MsDjuice; kets-84@bk.ru; tiniji; igormiro; AK-74S; cmax; SerVer1C; practik1c; WellMaster; michmich; bug256; SVSVSV999; trickster; black_wizard; qvvert; zakiap; jamirza; Nefilimus; dj_tol; +23 Ответить
4. imh0593 17.11.19 10:48 Сейчас в теме
(3) не знаю, почему вы позволили себе указывать другим что им нужно делать, да еще и хамским способом.

если человек - эксперт по технологическим вопросам, еще понятно. но если нет - то возможны непредвиденные проблемы. если любой будет использовать подобные обработки (пусть автор не сочтет это за неуважение к себе, в реальной жизни всякое может быть), то еще и не проверив работоспособность бэкапа может в худшем случае оставить организацию вообще без базы.

Лицензионное соглашение не позволяет использовать недокументированные фирмой "1С" средства для построения решений на платформе "1С:Предприятие". Это означает, что средства СУБД (или любые другие внесистемные средства) можно использовать только в том случае, если документация по продуктам линейки "1С:Предприятие" (включая 1С:ИТС) содержит явную рекомендацию использовать данное средство для решения данной задачи.

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

Данное ограничение необходимо для обеспечения стабильности работы механизмов системы, осуществления поддержки и возможности перехода на новые версии "1С:Предприятия".

https://v8.1c.ru/predpriyatie/questions_licence.htm#65
5. zabaluev 376 18.11.19 10:16 Сейчас в теме
(4) Извините, может и резковато я ответил, но не надо приводить лицензионное соглашение, как аргумент. В данном случае это выглядит немного по детски. Вы не работали с большими базами, у Вас нет опыта в данной области. По этому критиковать наработки экспертов вы не можете. Сами эксперты 1С, которые работают в 1С и преподают на курсах 1С используют методы прямого доступа SQL к данным 1с. Это примерно, как использовать хирургические методы при лечении пациента, опасно, но жизненно необходимо.
А лицензионное соглашение говорит о том, что 1с не гарантирует нормальную работу информационной базы, если вы напрямую лезете к данным. Все на свой страх и риск. Но программа 1с при этом не становиться пиратской, это не взлом и не кряк.
И кстати, делать бэкапы и восстанавливать базу 1С надо именно из бэкапов SQL, а не из DT файла. На это есть четкая рекомендация самой 1С: https://its.1c.ru/db/metod8dev/content/2922/hdoc
sergiyboy; MsDjuice; AK-74S; trickster; +4 Ответить
8. imh0593 18.11.19 12:47 Сейчас в теме
(5) ну как бы понятно, что dt-шник нужен только для перехода от файловой к клиент-серверной и от ms sql server к постгресу, и что битые данные могут не выгрузиться.

эксперты если так делают - так я и не против них писал вообще-то, на то он и эксперт.

предположу, что найдется "эксперт", который подобной обработкой что-то сломает в рабочей базе.

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

dmitrydemenew - спасибо за обработку.

автор удаленного сообщения, которое в уведомлениях я прочел - в личку напиши.
9. buganov 175 18.11.19 18:44 Сейчас в теме
(8)
для перехода от ms sql server к постгресу

Попробуйте выгрузить несколько терабайт в ДТ и отпишитесь, пожалуйста, о результатах.

предположу, что найдется "эксперт", который подобной обработкой что-то сломает в рабочей базе.

Зря Вы так. Если к базе действительно требуется такой скальпель, то это база не ООО Вектор, а вполне себе из разряда Highload. И в таких компаниях в 99.99% есть хотя бы один да специалист, который знает, что он делает и для чего. А базенки на несколько Гб режутся и стандартными средствами вполне себе приемлемо.
11. imh0593 18.11.19 19:29 Сейчас в теме
(9) понятия не имею, зачем выгружать базу в несколько терабайт в ДТ как и то, откуда у Вас статистика в 99,99%.

честно говоря не ожидал, что тут за высказывание своего мнения могут заклевать, как будто я кому-то навредить хотел. на этом прекращаю этот бесполезный спор.
12. buganov 175 18.11.19 19:33 Сейчас в теме
(11)Я не хотел заклевать или обидеть. Просто Вы написали, что ДТшник нужен для перехода на постгю. Новичок прочитает Ваше высказывание и примет к сведению не совсем верное мнение.

По поводу высказывания мнения, то это узконаправленное сообщество, где люди делятся рабочими решениями, задают вопросы и получают ответы. Это не пикабу и мнение здесь в идеале должно быть либо технически верным, либо обязательно исправленным.
MsDjuice; +1 Ответить
6. qwed557 30 18.11.19 12:08 Сейчас в теме
Сообщение было скрыто модератором.
...
7. dmitrydemenew 522 18.11.19 12:29 Сейчас в теме
(6)Уважаемые коллеги! Как автор публикации, я не вижу ни малейшего повода реагировать на мнение imh9305 настолько грубо и оскорбительно. Оно аргументировано и имеет место быть. Давайте не будем опускаться до оскорблений и превращать техническое обсуждение наших разработок в посиделки тролей.
AlexSvt; Irwin; MsDjuice; WellMaster; michmich; SVSVSV999; Jogeedae; trickster; nata_07; +9 Ответить
2. Dach 311 16.11.19 14:47 Сейчас в теме
Обработка хорошая, скачал и использую для создания тестовой базы уменьшенного размера.

Есть пару замечаний:

1. Не всегда корректно группирует метаданные в дереве таблиц - в корневой элемент Регистр.РН1 запихнула таблицы других регистров.

2. Выводит только топ 30 больших таблиц. Хотелось бы этот вопрос самостоятельно задавать, 30 или 50 или 100

3. В современных конфигурациях могут быть таблицы платформенной истории данных - их обработка не показывает вовсе.

А так, в целом - достойная вещь, лично мне кучу времени сэкономила для подготовки тестовой среды. Автору спасибо
Nefilimus; +1 Ответить
10. buganov 175 18.11.19 18:48 Сейчас в теме
(2) для создания тестовых баз Вы можете секционировать большие таблицы и при создании тестовой просто транкейтить по partition. Очень удобно и быстро. И, кстати, для Вашей задачи будет даже лучшим решением, нежели обстригать обработкой из сабжа, что, конечно же, НЕ УМАЛЯЕТ ее качества.
13. Dach 311 18.11.19 23:01 Сейчас в теме
(10) это все известно и чудесно, но когда дают бэкап продуктивной базы и говорят: "вот, обрежь его", там никаких партиций и секционирования нет и в помине. Вот и приходится сидеть, писать скрипты ручками
40. user1377630 14.05.21 09:54 Сейчас в теме
можно впилить такой код показывает размер таблиц в мб
Use имя вашей бд
GO
SELECT --TOP (колличество)
t.NAME AS TableName,
s.Name AS SchemaName,
p.rows AS RowCounts,
SUM(a.total_pages) * 8/1024 AS TotalSpaceMB,
SUM(a.used_pages) * 8/1024 AS UsedSpaceMB,
(SUM(a.total_pages) - SUM(a.used_pages)) * 8/1024 AS UnusedSpaceMB
FROM
sys.tables t
INNER JOIN
sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN
sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
INNER JOIN
sys.allocation_units a ON p.partition_id = a.container_id
LEFT OUTER JOIN
sys.schemas s ON t.schema_id = s.schema_id
GROUP BY
t.Name, s.Name, p.Rows
ORDER BY
UsedSpaceMB DESC
14. Wi5hMaCTeP 3 20.11.19 11:07 Сейчас в теме
Коллеги, добрый день!
Только у меня такая ошибка?
Ткните пальцем плиз, где посмотреть решение.
Спасибо!
Прикрепленные файлы:
15. Wi5hMaCTeP 3 20.11.19 14:31 Сейчас в теме
В итоге сам решил. Нужно внести пару записей в реестр и перезарузиться.

Подробности в статье:
https://support.microsoft.com/ru-ru/help/4077486/secdoclienthandshake-ssl-security-error-installing-dynamics-crm-server
dmitrydemenew; +1 Ответить
16. Wi5hMaCTeP 3 20.11.19 14:49 Сейчас в теме
Продолжаем разговор :)

УТ 11.4.6. Платформа 8.3.12.1685. Сборка SQL - 14.0.2072.2.

Пытаюсь обрезать РС.ВерсииОбъектов на дату. (типовой регистр, не менялся).
Получаю ошибку на скрине 1. (про неправильный синтаксис).

Смотрим итоговый запрос (Скрин 2) на что ругается SQL.
Видим 2 выделенных строки.

Далее смотрим описание на сайте microsoft, а там сказано следующее - скрин 3.
То есть передан аргумент неверного типа.

Вот тут я совсем не силен и поправить сам не смог :)

И еще одна ошибка при нажатии кнопки "Рассчитать время обрезки таблиц" (скрин 4)
Прикрепленные файлы:
17. dmitrydemenew 522 20.11.19 15:31 Сейчас в теме
Какие типы полей регистра в 1С?
18. Wi5hMaCTeP 3 20.11.19 15:47 Сейчас в теме
_Fld12610 - ВерсияОбъекта. Тип ХранилищеЗначения.
_Fld12611 - ТабличныеДокументы. Тип ХранилищеЗначения.
Прикрепленные файлы:
19. dmitrydemenew 522 20.11.19 16:07 Сейчас в теме
20. demka123 22.11.19 23:51 Сейчас в теме
Добрый день

А как shrink применяется? Есть скрипт, написанный вручную. Все прекрасно, но shrink работает бесконечно долго. База 4Тб. Гугл выводит на статью где сказано: если у вас внутри БД есть строки неограниченной длины (text, varchar и т.п.) - смиритесь и страдайте. А без shrink теряется всякий смысл таких очисток (по-крайней мере для нашего случая). Не возникало такой проблемы?
21. dmitrydemenew 522 23.11.19 08:44 Сейчас в теме
(20)Да, к сожалению shrink - достаточно длительная операция. На днях обрезали базу документооборота исходным размером 1.4Тб. Пусть не 4Тб, но размер все же внушительный. Для интереса, замерил скорость сжатия - около 10 Мб/с. (300 Гб за ~8,5ч.).
без shrink теряется всякий смысл таких очисток
- не соглашусь, обрезание базы производится часто не только ради освобождения дискового пространства, а для решения проблем производительности системы, возникающих при работе с таблицами большого размера
22. WellMaster 104 23.12.19 12:18 Сейчас в теме
Вопрос к автору:
в УТ10.3 есть незакрытый РН ЗаказыПокупателей за 7 лет работы.
Данные в нем занимают около 2.5 Гб, Итоги - 16 Гб, Индексы к нему 12 Гб.

Поможет данная обрабокта? Закрывать регистр за все года не очень хочется. Да и валится на том, что файл транзакций разрастается до критического максимума при ТиИ.
23. dmitrydemenew 522 23.12.19 13:26 Сейчас в теме
(22)Обработка позволяет произвести непосредственное удаление всех записей из выбранных таблиц до указанной даты. Если Вам требуется оставить незначительную часть исходных записей, зарегистрированных с некоторой даты, а остальное очистить без доп. проверок - обработка поможет сделать это наиболее быстрым способом.
24. dmitrydemenew 522 27.12.19 13:00 Сейчас в теме
Обновление от 2019.12.27:

- Добавлена возможность выбора количества отбираемых таблиц и установки минимального ограничения размера;

- Добавлена возможность отбора по типу объектов (справочник, документ и т.п.);

- Добавлена возможность определения среза данных по справочному значению выбранного реквизита: к примеру, когда нужно оставить только данные по выбранным организациям;
25. d.snissarenko 151 31.12.19 10:12 Сейчас в теме
Возникла ошибка при:
Рассчитать время обрезки таблиц
Обрезка выбранных таблиц до границы среза

Не удалось выполнить обрезку таблиц: {ВнешняяОбработка.ОчисткаТаблиц.Форма.Форма.Форма(1098)}: Ошибка при вызове метода контекста (Execute): Произошла исключительная ситуация (Microsoft OLE DB Provider for SQL Server): Syntax error or access violation
26. d.snissarenko 151 31.12.19 10:14 Сейчас в теме
[_Fld468Dt] [NUMERIC](15,3) NULL,
[_Fld468Ct] [NUMERIC](15,3) NULL,
[_Fld469Dt] [NUMERIC](15,2) NULL,
[_Fld469Ct] [NUMERIC](15,2) NULL,
[_Fld470Dt] [NUMERIC](15,2) NULL,
[_Fld470Ct] [NUMERIC](15,2) NULL,
[_Fld471Dt] [NUMERIC](15,2) NULL,
[_Fld471Ct] [NUMERIC](15,2) NULL,
[_Fld472] [NVARCHAR](150) NOT NULL,
[_Fld473] [BINARY](1) NOT NULL,
[_Fld12599] [NUMERIC](7,0) NOT NULL,
[_EDHashDt] [NUMERIC](10,0) NOT NULL,
[_EDHashCt] [NUMERIC](10,0) NOT NULL
);

{ВнешняяОбработка.ОчисткаТаблиц.Форма.Форма.Форма(1098)}: Ошибка при вызове метода контекста (Execute): Произошла исключительная ситуация (Microsoft OLE DB Provider for SQL Server): Incorrect syntax near '40151231'.

CREATE UNIQUE CLUSTERED INDEX [_AccRg462_ByPeriod] ON [dbo].[_AccRg462_svtmp]([_Period],[_RecorderTRef],[_RecorderRRef],[_LineNo],[_Fld12599]);

и так по всему скрипту
28. dmitrydemenew 522 31.12.19 11:48 Сейчас в теме
37. Sergal999 31.03.21 07:40 Сейчас в теме
(28) где исправили? я скачал у меня такая же ошибка
27. dmitrydemenew 522 31.12.19 10:45 Сейчас в теме
Для анализа нужен полный текст скрипта, скиньте в личку
38. Sergal999 31.03.21 07:41 Сейчас в теме
Сообщение было скрыто модератором.
...
29. Плюшкин_ 223 15.03.20 08:51 Сейчас в теме
пытался удалить данные по ненужным организациям. На закладке "по выбранным справочным значениям" выбирал ненужны организации. Но обработка удаляла ВСЕ, нажимал "полная очистка выбранных таблиц".
Выбирал только ту, что хочу оставить, опять удалялись ВСЕ таблицы.
Обработка не предназначена для удаления данных по организациям ?
30. WellMaster 104 29.04.20 15:55 Сейчас в теме
Для обычных форм нету?
А то не работает на старых конфах в режиме управляемых форм.
31. user612295_death4321 14.05.20 18:50 Сейчас в теме
Судя по описанию, обработка алмаз, есть просьба к автору, В старых версиях платформы не было "ЭтотОбъект" внутри формы, использовался "ЭтаФорма", переписывал все эти участки кода. Если принципиальных причин нет, почему пишется ЭтотОбъект, может замените на ЭтаФорма ?
Штатного таймаута 300 тоже очень нехватает, было бы круто опционально настраивать.
p.s: Да я понимаю, штука устаревшая.
35. vacony 26.12.20 11:05 Сейчас в теме
(31)
300 тоже очень нехватает, было бы круто опционально настраивать.
p.s: Да я понимаю, штука устаревшая.


Простите, вы с таймаутами побороли ?
32. Velifer 23.05.20 02:13 Сейчас в теме
Интересный инструмент, автору однозначно плюс

Но по поводу распространения ...

У меня свой инструмент свертки с 2013 года, собственная разработка
Но выкладывать и в мыслях не было, так как в неумелых руках такой инструмент порушит базу

Несмотря на то, что выудил за долгие годы вагон и тележку ньюансов, неочевидных вещей, новые релизы платформы и т.д.
Новые грабли находятся периодически
33. user724359 01.06.20 11:23 Сейчас в теме
(32) Уважаемый Velifer, подскажите как с Вами можно связаться, нам нужно свернуть базу ERP. мой адрес admin собачка lmilk точка ru.
34. vacony 24.12.20 21:31 Сейчас в теме
Скачал и я ...тоже начну )
1. попытка просмотра скрипта - запрет модальных окон ... ладно мелочи
2. отметил галкой один вид документа - чеки. Анализ -

Не удалось выполнить запрос анализа таблиц: {ВнешняяОбработка.ОчисткаТаблиц.Форма.Форма.Форма(1119)}: Ошибка при вызове метода контекста (Execute): Произошла исключительная ситуация (Microsoft OLE DB Provider for SQL Server): Время ожидания запроса истекло

Выбрал датой среза 1 день от начала работы базы ( 200 документов в обрезку , чеки). Ошибка та же - см выше... Где то таймаут.. пошел разбираться...

Изменил -
Command.CommandTimeout = больше 300. не помогло

Изменил таймаут и в подключении (через кнопку на форме) и основной, и Генерал, тоже.. По 0 тоже пробовал сделать...

Если отмечать только шапку (там 70 млн строк ) то норм ... попытки отметить табличную часть (250 млн) - не выходит )

Я хоть в верном направлении таймауты копаю ? ))
36. Sergal999 31.03.21 07:36 Сейчас в теме
Сообщение было скрыто модератором.
...
39. user1377630 14.05.21 09:48 Сейчас в теме
41. user617288_shanginre 20.05.21 14:00 Сейчас в теме
Доброго дня. Вопрос по свертке регистра накопления. При такой подмене таблицы как в вашей обработке корректно ли сохраняется "связь" основной таблицы с таблицами: остатков _AccumRgT (или оборотов _AccumRgTn), настроек хранения итогов _AccumRgOpt, агрегатов _AccumRgAgg, статистики _AccumRgSt?
42. n2526 23.06.21 15:09 Сейчас в теме
Добрый день. Будет ли работать данная обработка на неуправляемых формах?
43. xten 45 16.07.21 10:12 Сейчас в теме
Огромное спасибо автору и всех благ за такую колоссальную вещь!!!!!!!
dmitrydemenew; +1 Ответить
Оставьте свое сообщение
Вопросы с вознаграждением
Вакансии
Архитектор 1С
Пермь
зарплата до 200 000 руб.
Полный день

Бизнес-аналитик 1С
Санкт-Петербург
зарплата от 120 000 руб. до 150 000 руб.
Полный день

Бизнес-аналитик 1С
Пермь
зарплата до 100 000 руб.
Полный день

Старший программист 1С
Самара
зарплата от 70 000 руб.
Полный день

Программист 1С
Москва
зарплата от 150 000 руб.
Полный день