Внешняя обработка, позволяющая произвести анализ размера БД и грубую обрезку данных до выбранной даты средствами MS SQL. Управляемые формы, 1С:Предприятие 8.3 (8.3.9.1818).
лицензионное соглашение не просто так придумано. предположим вы или кто-то другой ошибетесь в процессе работы с базой напрямую мимо методов 1С. кроме как восстановить из бэкапа другого варианта нет. но и восстановление из бэкапа базы - это также возможные дополнительные проблемы, плюс простой в работе. поэтому такие обработки лучше не выкладывать в общий доступ. каждый для себя сам может решить, когда это оправдано, понимая что он делает и в связи с чем. а если он понимает, что он делает, то он и скрипт сам напишет.
(1) Не надо умничать, если не в теме. Базу размером более 100Гб, с несколькими миллионами документов невозможно свернуть без прямой работы с SQL. Такие обработки очень нужны и плохо только, что 1с сама не даёт такие методики по сверке больших баз.
(3) не знаю, почему вы позволили себе указывать другим что им нужно делать, да еще и хамским способом.
если человек - эксперт по технологическим вопросам, еще понятно. но если нет - то возможны непредвиденные проблемы. если любой будет использовать подобные обработки (пусть автор не сочтет это за неуважение к себе, в реальной жизни всякое может быть), то еще и не проверив работоспособность бэкапа может в худшем случае оставить организацию вообще без базы.
Лицензионное соглашение не позволяет использовать недокументированные фирмой "1С" средства для построения решений на платформе "1С:Предприятие". Это означает, что средства СУБД (или любые другие внесистемные средства) можно использовать только в том случае, если документация по продуктам линейки "1С:Предприятие" (включая 1С:ИТС) содержит явную рекомендацию использовать данное средство для решения данной задачи.
Во всех остальных случаях лицензионное соглашение позволяет использовать для построения решений только штатные средства платформы. В частности, можно обращаться к данным информационной базы только при помощи объектов "1С:Предприятия", специально предназначенных для работы с данными (запросы, справочники, документы и т. д.). Нельзя обращаться к данным информационной базы напрямую, минуя уровень объектов работы с данными "1С:Предприятия", например при помощи средств СУБД или при помощи внешних компонент, которые реализуют прямой доступ к СУБД. Это ограничение распространяется на любые действия с данными, в том числе на изменение их структуры, а так же на чтение или изменение самих данных информационной базы или служебных данных "1С:Предприятия".
Данное ограничение необходимо для обеспечения стабильности работы механизмов системы, осуществления поддержки и возможности перехода на новые версии "1С:Предприятия".
(4) Извините, может и резковато я ответил, но не надо приводить лицензионное соглашение, как аргумент. В данном случае это выглядит немного по детски. Вы не работали с большими базами, у Вас нет опыта в данной области. По этому критиковать наработки экспертов вы не можете. Сами эксперты 1С, которые работают в 1С и преподают на курсах 1С используют методы прямого доступа SQL к данным 1с. Это примерно, как использовать хирургические методы при лечении пациента, опасно, но жизненно необходимо.
А лицензионное соглашение говорит о том, что 1с не гарантирует нормальную работу информационной базы, если вы напрямую лезете к данным. Все на свой страх и риск. Но программа 1с при этом не становиться пиратской, это не взлом и не кряк.
И кстати, делать бэкапы и восстанавливать базу 1С надо именно из бэкапов SQL, а не из DT файла. На это есть четкая рекомендация самой 1С: https://its.1c.ru/db/metod8dev/content/2922/hdoc
(5) ну как бы понятно, что dt-шник нужен только для перехода от файловой к клиент-серверной и от ms sql server к постгресу, и что битые данные могут не выгрузиться.
эксперты если так делают - так я и не против них писал вообще-то, на то он и эксперт.
предположу, что найдется "эксперт", который подобной обработкой что-то сломает в рабочей базе.
я подобные решения если и буду использовать, то в самом крайнем случае. ну и есть база у меня немаленькая, для тестов на ней интересная идея ее использовать, вполне может пригодится. ну и опыта набраться.
dmitrydemenew - спасибо за обработку.
автор удаленного сообщения, которое в уведомлениях я прочел - в личку напиши.
Попробуйте выгрузить несколько терабайт в ДТ и отпишитесь, пожалуйста, о результатах.
предположу, что найдется "эксперт", который подобной обработкой что-то сломает в рабочей базе.
Зря Вы так. Если к базе действительно требуется такой скальпель, то это база не ООО Вектор, а вполне себе из разряда Highload. И в таких компаниях в 99.99% есть хотя бы один да специалист, который знает, что он делает и для чего. А базенки на несколько Гб режутся и стандартными средствами вполне себе приемлемо.
(9) понятия не имею, зачем выгружать базу в несколько терабайт в ДТ как и то, откуда у Вас статистика в 99,99%.
честно говоря не ожидал, что тут за высказывание своего мнения могут заклевать, как будто я кому-то навредить хотел. на этом прекращаю этот бесполезный спор.
(11)Я не хотел заклевать или обидеть. Просто Вы написали, что ДТшник нужен для перехода на постгю. Новичок прочитает Ваше высказывание и примет к сведению не совсем верное мнение.
По поводу высказывания мнения, то это узконаправленное сообщество, где люди делятся рабочими решениями, задают вопросы и получают ответы. Это не пикабу и мнение здесь в идеале должно быть либо технически верным, либо обязательно исправленным.
(6)Уважаемые коллеги! Как автор публикации, я не вижу ни малейшего повода реагировать на мнение imh9305 настолько грубо и оскорбительно. Оно аргументировано и имеет место быть. Давайте не будем опускаться до оскорблений и превращать техническое обсуждение наших разработок в посиделки тролей.
(2) для создания тестовых баз Вы можете секционировать большие таблицы и при создании тестовой просто транкейтить по partition. Очень удобно и быстро. И, кстати, для Вашей задачи будет даже лучшим решением, нежели обстригать обработкой из сабжа, что, конечно же, НЕ УМАЛЯЕТ ее качества.
(10) это все известно и чудесно, но когда дают бэкап продуктивной базы и говорят: "вот, обрежь его", там никаких партиций и секционирования нет и в помине. Вот и приходится сидеть, писать скрипты ручками
можно впилить такой код показывает размер таблиц в мб
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
А как shrink применяется? Есть скрипт, написанный вручную. Все прекрасно, но shrink работает бесконечно долго. База 4Тб. Гугл выводит на статью где сказано: если у вас внутри БД есть строки неограниченной длины (text, varchar и т.п.) - смиритесь и страдайте. А без shrink теряется всякий смысл таких очисток (по-крайней мере для нашего случая). Не возникало такой проблемы?
(20)Да, к сожалению shrink - достаточно длительная операция. На днях обрезали базу документооборота исходным размером 1.4Тб. Пусть не 4Тб, но размер все же внушительный. Для интереса, замерил скорость сжатия - около 10 Мб/с. (300 Гб за ~8,5ч.).
без shrink теряется всякий смысл таких очисток
- не соглашусь, обрезание базы производится часто не только ради освобождения дискового пространства, а для решения проблем производительности системы, возникающих при работе с таблицами большого размера
Вопрос к автору:
в УТ10.3 есть незакрытый РН ЗаказыПокупателей за 7 лет работы.
Данные в нем занимают около 2.5 Гб, Итоги - 16 Гб, Индексы к нему 12 Гб.
Поможет данная обрабокта? Закрывать регистр за все года не очень хочется. Да и валится на том, что файл транзакций разрастается до критического максимума при ТиИ.
(22)Обработка позволяет произвести непосредственное удаление всех записей из выбранных таблиц до указанной даты. Если Вам требуется оставить незначительную часть исходных записей, зарегистрированных с некоторой даты, а остальное очистить без доп. проверок - обработка поможет сделать это наиболее быстрым способом.
- Добавлена возможность выбора количества отбираемых таблиц и установки минимального ограничения размера;
- Добавлена возможность отбора по типу объектов (справочник, документ и т.п.);
- Добавлена возможность определения среза данных по справочному значению выбранного реквизита: к примеру, когда нужно оставить только данные по выбранным организациям;
Возникла ошибка при:
Рассчитать время обрезки таблиц
Обрезка выбранных таблиц до границы среза
Не удалось выполнить обрезку таблиц: {ВнешняяОбработка.ОчисткаТаблиц.Форма.Форма.Форма(1098)}: Ошибка при вызове метода контекста (Execute): Произошла исключительная ситуация (Microsoft OLE DB Provider for SQL Server): Syntax error or access violation
[_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]);
пытался удалить данные по ненужным организациям. На закладке "по выбранным справочным значениям" выбирал ненужны организации. Но обработка удаляла ВСЕ, нажимал "полная очистка выбранных таблиц".
Выбирал только ту, что хочу оставить, опять удалялись ВСЕ таблицы.
Обработка не предназначена для удаления данных по организациям ?
31.
user612295_death4321
14.05.20 18:50 Сейчас в теме
Судя по описанию, обработка алмаз, есть просьба к автору, В старых версиях платформы не было "ЭтотОбъект" внутри формы, использовался "ЭтаФорма", переписывал все эти участки кода. Если принципиальных причин нет, почему пишется ЭтотОбъект, может замените на ЭтаФорма ?
Штатного таймаута 300 тоже очень нехватает, было бы круто опционально настраивать.
p.s: Да я понимаю, штука устаревшая.
У меня свой инструмент свертки с 2013 года, собственная разработка
Но выкладывать и в мыслях не было, так как в неумелых руках такой инструмент порушит базу
Несмотря на то, что выудил за долгие годы вагон и тележку ньюансов, неочевидных вещей, новые релизы платформы и т.д.
Новые грабли находятся периодически
Скачал и я ...тоже начну )
1. попытка просмотра скрипта - запрет модальных окон ... ладно мелочи
2. отметил галкой один вид документа - чеки. Анализ -
Не удалось выполнить запрос анализа таблиц: {ВнешняяОбработка.ОчисткаТаблиц.Форма.Форма.Форма(1119)}: Ошибка при вызове метода контекста (Execute): Произошла исключительная ситуация (Microsoft OLE DB Provider for SQL Server): Время ожидания запроса истекло
Выбрал датой среза 1 день от начала работы базы ( 200 документов в обрезку , чеки). Ошибка та же - см выше... Где то таймаут.. пошел разбираться...
Изменил -
Command.CommandTimeout = больше 300. не помогло
Изменил таймаут и в подключении (через кнопку на форме) и основной, и Генерал, тоже.. По 0 тоже пробовал сделать...
Если отмечать только шапку (там 70 млн строк ) то норм ... попытки отметить табличную часть (250 млн) - не выходит )
41.
user617288_shanginre
20.05.21 14:00 Сейчас в теме
Доброго дня. Вопрос по свертке регистра накопления. При такой подмене таблицы как в вашей обработке корректно ли сохраняется "связь" основной таблицы с таблицами: остатков _AccumRgT (или оборотов _AccumRgTn), настроек хранения итогов _AccumRgOpt, агрегатов _AccumRgAgg, статистики _AccumRgSt?
Добрый день, я уже не первый кто столкнулся с
Не удалось выполнить обрезку таблиц: {ВнешняяОбработка.ОчисткаТаблиц.Форма.Форма.Форма(1098)}: Ошибка при вызове метода контекста (Execute): Произошла исключительная ситуация (Microsoft OLE DB Provider for SQL Server): Время ожидания запроса истекло
В моем случае появляется при обрезке РегистрСведений.ЦеныНомеклатуры размер 34ГБ
Можете помочь?
(49)Добрый день! Timeout выполнения запросов устанавливается при инициализации объектов ADO в функции ВернутьПодключение() в строке Command.CommandTimeout = 300; Т.е. по умолчании 300с = 5мин. Если этого времени недостаточно, необходимо в коде увеличить его до требуемого значения. Кроме этого для большинства команд обработки есть возможность получения текста соответствующего запроса SQL, добавлена как раз для случаев, когда запрос SQL не выполняется из 1С с использованием COM объекта ADODB. Запрос такой команды можно попытаться выполнить в Microsoft SQL Server Management Studio.
при анализе и рассчете времени:
Не удалось выполнить запрос анализа таблиц: {ВнешняяОбработка.ОчисткаТаблиц.Форма.Форма.Форма(1119)}: Ошибка при вызове метода контекста (Execute): Произошла исключительная ситуация (Microsoft OLE DB Provider for SQL Server): Неправильный синтаксис около ключевого слова "UNION".
при обрезке
Не удалось выполнить обрезку таблиц: {ВнешняяОбработка.ОчисткаТаблиц.Форма.Форма.Форма(1098)}: Ошибка при вызове метода контекста (Execute): Произошла исключительная ситуация (Microsoft OLE DB Provider for SQL Server): Ошибка синтаксиса или нарушение прав доступа
Здравствуйте.
Имеем: старая 1с 8.3.5.1383, на ней такая же старая УТ 11.1.9.70. Задача "свернуть" 7 лет работы до 1 года. Документов внутри тьма, есть ошибки в учёте, штатными методами, никак... Решение видится так, обрезка на дату и ввод остатков предыдущей датой. Правильно ли я понял, что Ваша обработка как раз про подобные задачи? Заработает ли на моей версии? И если нет, можете доработать?
(54)Добрый день. Да, обработка предназначена именно для таких случаев.После свертки базы не требуется ввод нач. остатков. Главное условие после "обрезки" - жесткий запрет работы в заднем числе, нельзя создавать документы, формировать отчеты в периоде до даты среза. В 8.3.5.1383 должна работать, но точно не скажу, не проверял. В любом случае нужно сначала пробовать на тестовой базе.