0. dmitrydemenew 435 15.11.19 14:52 Сейчас в теме

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

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

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

Комментарии
Избранное Подписка Сортировка: Древо
1. imh9305 10 16.11.19 10:49 Сейчас в теме
лицензионное соглашение не просто так придумано. предположим вы или кто-то другой ошибетесь в процессе работы с базой напрямую мимо методов 1С. кроме как восстановить из бэкапа другого варианта нет. но и восстановление из бэкапа базы - это также возможные дополнительные проблемы, плюс простой в работе. поэтому такие обработки лучше не выкладывать в общий доступ. каждый для себя сам может решить, когда это оправдано, понимая что он делает и в связи с чем. а если он понимает, что он делает, то он и скрипт сам напишет.
3. zabaluev 420 17.11.19 09:04 Сейчас в теме
(1) Не надо умничать, если не в теме. Базу размером более 100Гб, с несколькими миллионами документов невозможно свернуть без прямой работы с SQL. Такие обработки очень нужны и плохо только, что 1с сама не даёт такие методики по сверке больших баз.
AK-74S; cmax; SerVer1C; practik1c; WellMaster; michmich; bug256; SVSVSV999; trickster; black_wizard; qvvert; zakiap; jamirza; Nefilimus; dj_tol; +15 Ответить
4. imh9305 10 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 420 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
AK-74S; trickster; +2 Ответить
8. imh9305 10 18.11.19 12:47 Сейчас в теме
(5) ну как бы понятно, что dt-шник нужен только для перехода от файловой к клиент-серверной и от ms sql server к постгресу, и что битые данные могут не выгрузиться.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

А так, в целом - достойная вещь, лично мне кучу времени сэкономила для подготовки тестовой среды. Автору спасибо
Nefilimus; +1 Ответить
10. buganov 59 18.11.19 18:48 Сейчас в теме
(2) для создания тестовых баз Вы можете секционировать большие таблицы и при создании тестовой просто транкейтить по partition. Очень удобно и быстро. И, кстати, для Вашей задачи будет даже лучшим решением, нежели обстригать обработкой из сабжа, что, конечно же, НЕ УМАЛЯЕТ ее качества.
13. Dach 292 18.11.19 23:01 Сейчас в теме
(10) это все известно и чудесно, но когда дают бэкап продуктивной базы и говорят: "вот, обрежь его", там никаких партиций и секционирования нет и в помине. Вот и приходится сидеть, писать скрипты ручками
14. Wi5hMaCTeP 2 20.11.19 11:07 Сейчас в теме
Коллеги, добрый день!
Только у меня такая ошибка?
Ткните пальцем плиз, где посмотреть решение.
Спасибо!
Прикрепленные файлы:
15. Wi5hMaCTeP 2 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 2 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 435 20.11.19 15:31 Сейчас в теме
Какие типы полей регистра в 1С?
18. Wi5hMaCTeP 2 20.11.19 15:47 Сейчас в теме
_Fld12610 - ВерсияОбъекта. Тип ХранилищеЗначения.
_Fld12611 - ТабличныеДокументы. Тип ХранилищеЗначения.
Прикрепленные файлы:
19. dmitrydemenew 435 20.11.19 16:07 Сейчас в теме
20. demka123 22.11.19 23:51 Сейчас в теме
Добрый день

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

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

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

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

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

Не удалось выполнить обрезку таблиц: {ВнешняяОбработка.ОчисткаТаблиц.Форма.Форма.Форма(1098)}: Ошибка при вызове метода контекста (Execute): Произошла исключительная ситуация (Microsoft OLE DB Provider for SQL Server): Syntax error or access violation
26. d.snissarenko 152 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 435 31.12.19 11:48 Сейчас в теме
27. dmitrydemenew 435 31.12.19 10:45 Сейчас в теме
Для анализа нужен полный текст скрипта, скиньте в личку
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

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

Архитектор 1С
Нижний Новгород
зарплата от 180 000 руб.
Полный день

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

Разработчик 1С
Нижний Новгород
зарплата до 90 000 руб.
Полный день

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