Динамическое обновление - это зло?

09.05.22

Разработка - Механизмы платформы 1С

Копнем глубже в тему "Что же такое динамическое обновление" и почему оно может привести к проблемам. И может ли?

Давняя история 

Любите ли Вы динамическое обновление конфигураций так, как люблю его я? Обожаю что-нибудь с его помощью пропатчить на продакшене! Особенно в пятницу! Вечером! Перед майскими праздниками! Без предупреждения!

На самом деле нет! Динамическое обновление с одной стороны выглядит отличным механизмом платформы 1С, который позволяет вносить изменения в конфигурации "на лету". Главное, чтобы изменения не затрагивали структуру базы данных, в противном случае придется выполнять обновление монопольно и "выгонять" пользователей.

Согласитесь, при появлении ошибки в коде после очередных изменений просто берешь и обновляешь базу "на горячую" и никаких проблем! Главное всем, кому нужны были эти изменения, перезапустили сеанс и изменения вступят в силу!

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

 
 Посмотри под спойлер, но берегись флешбэков!

И никакие отговорки, что это были изменения для ТОП-менеджеров Вам не помогут!

Но как же так! Вы пользуетесь динамическим обновлением и у Вас нет никаких проблем? Коллеги рассказывают страшные истории, но Вы им не верите? "Просто они плохие 1Сники!", думаете Вы?

Как работает динамическое обновление

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

В любой информационной базе есть таблицы "Config" и "ConfigSave". Назначение этих таблиц также известно:

  • Config - содержит основную конфигурацию информационной базы, которая соответствует актуальной структуре базы данных и используется активными сеансами.
  • ConfigSave - содержит сохраненную конфигурацию. Ту самую, которую Вы редактируете в конфигураторе. Как только Вы нажимаете "Сохранить", все измененные объекты и связанная информация записывается именно сюда. После запуска обновления информационной базы все изменения из этой таблицы переносятся в таблицу Config. Если же выполнить команду "Конфигурация -> Конфигурация базы данных -> Вернуться к конфигурации БД", то вся информация об изменениях в этой таблице удалится.

Все просто, не так ли? Но пойдем еще дальше. Посмотрите на структуру таблиц для хранения данных конфигурации.

 
 Структура таблиц с данными конфигурации

Со структурой таблиц и их назначением понятно. Пойдем дальше.

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

Среди множества служебных действий, платформа переносит данные об объектах из таблицы ConfigSave в Config:

  • Объекты, добавленные динамически, добавляются с именем формата (<ИдентификаторОбъекта>_dynupdate_<ИдентификаторДинамическогоОбновления> как "ab132638-5188-470d-9432-de85f2b2c7d8_dynupdate_ecb01484-0334-4b7a-ac94-b69fb855e9d2", где:
    • ab132638-5188-470d-9432-de85f2b2c7d8 - идентификатор объекта
    • ecb01484-0334-4b7a-ac94-b69fb855e9d2 - идентификатор динамического обновления, ведь таких обновлений может быть несколько подряд
  • Также добавляется объект "DynamicallyUpdated", в котором хранится идентификатор динамического обновления.
  • По поводу переноса данных из ConfigSave в Config все в целом просто.
    • Нажимаете "Обновить информационную базу" и новые записи переносятся в таблицу "Config" с суффиксом ".new".
    • При старте обновления записи "*.new" преобразуются в обычные или в записи после динамического обновления (то, что описано выше).
    • При отказе или при выполнении обновления записи "*.new" удаляются.

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

Это очень поверхностное описание и сам процесс имеет множество особенностей как со стороны работы БД, так и со стороны работы клиентских приложений платформы 1С. Но суть должна быть понятной.

Подробный пример динамического обновления

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

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

 

Модуль полностью клиентский, имеет в своем составе только одну функцию.

Функция НекотороеЗначение() Экспорт
	
	Возврат "1-2-3-4-5-6-7-8-9";
	
КонецФункции

Наша компания развивается и нам нужно изменить возвращаемое значение на "1-2-3-4-5-6-7-8-9-100", а пользователей из базы "выгнать" нельзя, потому что им "так надо". Мы решили сделать обновление динамически, ведь изменился только программный код.

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

 

На этом шаге платформа 1С делает записи в таблицу "ConfigSave", некоторое промежуточное хранилище, из котого потом измененные элементы конфигурации должны будут перенесены в основную таблицу конфигурации "Config".

Вот вся история операций в таблице "ConfigSave" после сохранения конфигурации. Здесь подробная информация обо всех действия практически на физическом уровне, поэтому некоторые операции "INSERT" разделены на две (INSERT и UPDATE), а операция UPDATE может быть выделена как операции DELETE и INSERT. Но эти особенности сейчас не играют роли.

Кроме этого в таблице есть дата операции (Period) и идентификатор транзакции (__$start_lsn). По факту все эти действия выполняются в разных транзакциях, лишь некоторые из действий в таблице выполняются в единой транзакции.

 

Вся операция, как уже упоминалось выше, делится на два этапа:

 

  1. Записываем в таблицу информацию об изменениях конфигурации, в частности нашего общего модуля "ДляДинамическогоОбновления". Кстати, на скрине выше видно, что его идентификатор "cb327a01-e9cc-44e6-af31-5f30c88faeca", отсюда и эти названия похожие. Имена содержат суффикс "new", что говорит о промежуточной записи объектов.
  2. На следующем шаге промежуточные записи преобразовываем в нормальные, просто исключив "new" из имен элементов конфигурации.

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

 

В этот момент платформа 1С сделала два действия:

  1. Скопировала записи из таблицы "ConfigSave" в таблицу "Config" с суффиксом "new", почти все действия выполнены в одной транзакции.
  2. Затем было обнаружено, что обновление невозможно продолжить из-за наличия активных сеансов. Был показан диалог для динамического обновления, а ранее добавленные записи удалены из таблицы "Config" в одной транзакции.

Изменений в таблице "ConfigSave" в этот момент не выполнялось.

 

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

  • В таблице "Config" сначала добавляются новые записи с суффиком "new" для последующих операций с ними. Примерно такие же действия мы видели в самом начале в таблице "Config", перед тем как было предложено выполнение динамического обновления. Но в этот раз также сделаны служебные записи "commit", "dynamicCommit" и "dbStruFinal", которые относятся непосредственно к динамическому обновлению (частично о них было упомянуто выше).

 

 

  • Предварительные записи с суффиксом "new" теперь платформа преобразовывает в нормальные записи, также добавляет записи с форматом "<ИдентификаторОбъекта>_dynupdate_<ИдентификаторДинамическогоОбновления>", плюс вставляет флаг динамического обновления "DynamicallyUpdated".

 

 

  • Из таблицы "ConfigSave" удалены все сохраненные ранее записи. Все в одной транзакции.

 

 

  • И напоследок из таблицы "Config" удаляются служебные данные "commit", "dynamicCommit" и "dbStruFinal".

 

Заметьте, каждый этап - почти всегда разные транзакции, это важно.

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

На самом деле это не все действия платформы 1С, т.к. еще обновляются данные в таблице "Params" и некоторые другие. Но мы это рассматривать сейчас не будем.

Разработчики ликуют и со словами "Я же говорил" продолжают убеждать коллег, что динамическое обновление это нормально!

Что может пойти не так

Весь процесс динамического обновления мы рассмотрели, но что же может случиться?

Представим простую ситуацию: что, если все обновление прошло успешно, кроме последнего этапа? Например, во время выполнения запросов на удаление служебных данных соединение с базой данных почему-то "отпало":

  • Сбой сети.
  • Регламентные работы на сервере, внезапно.
  • Обслуживание базы, которое завершило блокирующий сеанс, опять же внезапно!
  • Конфигуратор вылетел из-за ошибки внутренней.
  • Разработчик 1С был странным и завершил сеанс конфигуратора во время обновления.
  • И еще сотни причин, которые лень добавлять.

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

CREATE TRIGGER [dbo].[tg_Config_OnDelete_DelDynamicCommit]
   ON  [dbo].[Config]
   AFTER DELETE
AS 
BEGIN
	SET NOCOUNT ON;
	
	DECLARE @fileName nvarchar(128);
	SELECT @fileName = del.FileName FROM deleted del;

	IF(@fileName = 'dynamicCommit')
	BEGIN
		;THROW 60000, 'Nope!', 1
	END
END
GO

Попытаемся теперь выполнить динамическое обновление и столкнемся с ошибками:

  • Сначала во время обновления в конфигураторе поймаем ошибку.

 

 

  • А при попытке зайти в конфигуратор повторно мы словим ошибку.

 

 

  • При попытке повторить обновление мы уйдем в бесконечную ошибку вида.

 

Все, конфигуратор нам больше недоступен! Чистите кэш, пытайтесь выполнить обновление ИБ, удаляйте сеансовые данные! Все бесполезно! Можете еще взять бубен, но и он бесполезен!

Но есть и радостная новость! Клиентские приложения будут работать, так что проблема чисто в конфигураторе и попытках выполнить обновление повторно. А чтобы исправить ситуацию достаточно удалить служебные данные из таблицы "Config" вручную:

DELETE FROM [dbo].[Config] 
WHERE FileName IN (
	'commit','dynamicCommit','dbStruFinal'
)

После этого проблема будет полностью исправлена в 99% случаев.

И это все?

Такая ошибка вас не остановит? Говорите, что ну и ладно, что в конфигуратор не вошли, зато клиенты работают, а с конфигуратором бы разобрались? Ведь решения есть на просторах интернета!

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

CREATE TRIGGER [dbo].[tg_OnUpdate_DynamicalyUpdated] 
   ON [dbo].[Params]
   AFTER UPDATE
AS 
BEGIN
	SET NOCOUNT ON;

	DECLARE @fileName nvarchar(128);
	SELECT @fileName = ins.FileName FROM INSERTED ins;
    
	IF(@fileName = 'DynamicallyUpdated')
	BEGIN
		;THROW 60000, 'Nope!', 1
	END
END
GO

При попытке обновления записи "DynamicallyUpdated" в таблице "Params" мы получим падение. Конфигуратор закроется системной ошибкой. Не страшно, скажите Вы! Но в этот же момент все клиентские соединения также вылетят, причем с разными ошибками. Например, с такой.

 

А при попытке перезапустить клиентский сеанс, также будут происходить различные ошибки. Никто не сможет работать с информационной базой!

 
 Вы добились, чего хотели!

Но и тут не все потеряно!

Клиентские сеансы не могут зайти в базу, их всех выкинуло и так далее! Но мы все еще можем в большинстве (но не во всех) случаев зайти в конфигуратор! И при повторном обновлении также в большинстве (но не во всех) случаях мы восстановим работу информационной базы!

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

Вы поистине яркий человек

Если Вам и этого мало, то как Вы думаете, что будет, если оба этих случая будут комбинированы? В этом случае Вы "выкинете" всех пользователей из информационной базы, а потом еще и не сможете войти в конфигуратор повторно. Пойдете после этого вручную очищать таблицу "Config" от служебны записей динамического обновления и надеяться, что это в этот раз поможет.

Вы удивительный человек!

А ведь есть еще проблемы другого рода:

  • Повреждение сеансовых данных сервера. Возникают из-за какого-то особого поведения платформы 1С, меняется от релиза к релизу, сложно прогнозируемые и сложновоспроизводимые ошибки.
  • Повреждение клиентского кэша, которое приводит к:
    • Ошибкам запуска клиентского приложения при входе в информационную базу
    • Случайным ошибкам во время работы приложения, таким как "Тип неопределен" или подобные.

Ниже есть ссылки на примеры различных проблем и их решение. Для воспроизведения таких проблем мне пришлось бы откопать код приложений платформы 1С, но это не очень правильно.

Это весело

Вы все еще считаете, что динамическое обновление это хорошо? Что нет ни единой причины, чтобы отказаться от него? Что все описанные ошибки, которые даже можно воспроизвести прямо на свежих версиях платформы (от 8.0 до 8.3.20), не являются критичными? Может вы еще и бэкапы не делаете?

Вспоминается анегдот:

- Зачем Вы нарушили правила и перешли на красный свет светофора?
- Но мы так ходим уже 5 лет всей семьей и никого еще не сбили? Я, моя жена и дети все еще живы!
- Но это создает несоизмеримый риск!
- Мы ходили и будем ходить, потому что ничего не случилось! Вы все врете!
- ...

Кстати, описанные выше проблемы аткуальный как для платформы 1С версии 8.0, так и для всех более новых версий, вплоть до 8.3.20.*. И это только вершина айсберга!

Надеюсь, информация из статьи поможет кому-то хотя бы задуматься над тем, что Вы делаете!

P.S. А Вы задумывались над тем, что установка расширений тоже может приводить к подобным проблемам? :)

Другие ссылки

Авторские разработки

 
 Другие разработки (бесплатные и за $m)

 

8.x динамическое обновление внутреннее устройство платформы

См. также

Поинтегрируем: сервисы интеграции – новый стандарт или просто коннектор?

Обмен между базами 1C Администрирование СУБД Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

В платформе 8.3.17 появился замечательный механизм «Сервисы интеграции». Многие считают, что это просто коннектор 1С:Шины. Так ли это?

11.03.2024    4626    dsdred    53    

73

Как готовить и есть массивы

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Все мы используем массивы в своем коде. Это один из первых объектов, который дают ученикам при прохождении обучения программированию. Но умеем ли мы ими пользоваться? В этой статье я хочу показать все методы массива, а также некоторые фишки в работе с массивами.

24.01.2024    5312    YA_418728146    25    

64

Планы обмена VS История данных

Обмен между базами 1C Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Вы все еще регистрируете изменения только на Планах обмена и Регистрах сведений?

11.12.2023    6440    dsdred    36    

112

1С-ная магия

Механизмы платформы 1С Бесплатно (free)

Язык программирования 1С содержит много нюансов и особенностей, которые могут приводить к неожиданным для разработчика результатам. Сталкиваясь с ними, программист начинает лучше понимать логику платформы, а значит, быстрее выявлять ошибки и видеть потенциальные узкие места своего кода там, где позже можно было бы ещё долго медитировать с отладчиком в поисках источника проблемы. Мы рассмотрим разные примеры поведения кода 1С. Разберём результаты выполнения и ответим на вопросы «Почему?», «Как же так?» и «Зачем нам это знать?». 

06.10.2023    18508    SeiOkami    46    

118

Дефрагментация и реиндексация после перехода на платформу 8.3.22

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Начиная с версии платформы 8.3.22 1С снимает стандартные блокировки БД на уровне страниц. Делаем рабочий скрипт, как раньше.

14.09.2023    12114    human_new    27    

74

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    8851    YA_418728146    6    

141

Внешние компоненты Native API на языке Rust - Просто!

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Внешние компоненты для 1С можно разработывать очень просто, пользуясь всеми преимуществами языка Rust - от безопасности и кроссплатформенности до удобного менеджера библиотек.

20.08.2023    6290    sebekerga    54    

94

Все скопируем и вставим! (Буфер обмена в 1С 8.3.24)

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Рассмотрим новую возможность 8.3.24 и как её можно эффективно использовать

27.06.2023    16022    SeiOkami    31    

103
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. johnnyshut23 71 09.05.22 23:39 Сейчас в теме
Добавлю, что в первом примере ошибки, когда не можем зайти только в конфигуратор, а пользователи в порядке - не все так однозначно, в порядке только пользователи с толстым клиентом, тонкий клиент и веб не работает, соответственно отмены тоже, если через публикацию настроены.
nik_lankaster; YPermitin; +2 Ответить
2. пользователь 09.05.22 23:44
(1) да, все так. Причем иногда вообще любой клиент может не работать.

Это настоящее казино, как повезет :)
nik_lankaster; ojiojiowka; sinichenko_alex; johnnyshut23; maXon777; +5 Ответить
7. johnnyshut23 71 10.05.22 08:41 Сейчас в теме
(2) это точно, я замечал следующее, что любой клиент когда не запускается, то дело в кэше на клиенте, устанавливал параметр clearcache и тогда точно рослый запускается)
3. a_a_burlakov 285 10.05.22 06:09 Сейчас в теме
Благодарю за то, что написали эту статью после того, как я проработал 3 года в компании, где каждый второй день приходилось динамически обновляться.
kamsky93; polyplastnm; Andreeei; Revachol; Sergafan10; nik_lankaster; d_sdr; user980578; akR00b; Neuroproton; +10 Ответить
50. Repich 562 11.05.22 16:23 Сейчас в теме
(3) Ну ребята смелые, там наверное и бекапы не делали? Я после того, как в славном 2010 году восстанавливал ConfigSave запрещаю делать динамическое обновление на проде в любых продуктах куда дотянусь.
72. TerveRus 09.06.22 11:49 Сейчас в теме
(50) а после того, как тебя раз в жизни собьет машина, запретишь людям переходить дорогу? Или подавишься, и запретишь людям есть? Не много ли на себя берешь, запрещая нести небольшие риски?
76. Repich 562 11.06.22 14:20 Сейчас в теме
(72) Ты после того как перейдешь дорогу на красный свет и тебя собьет машина так и будешь переходить на красный свет? Один раз не ... (считается) ? А про "много на себя берешь" - нет, не много, учитывая, что за работоспособность системы перед руководством отвечаю я.
atomskxs; +1 Ответить
4. muskul 10.05.22 07:21 Сейчас в теме
%#$, ^%#$ и в продакшен
Если же выполнить команду "Конфигурация -> Конфигурация базы данных -> Вернуться к конфигурации БД"

В одной из баз уриба это спасло, даже не знал об этой функции
5. kraynev-navi 647 10.05.22 08:15 Сейчас в теме
Юрий, СПАСИБО за статью!
Если возможно, предлагаю все-таки оценить и дополнить статью рисками при дин.обновлении в сравнении с рисками при штатном обновлении.
Часть все-таки пересекается.
6. 3vs 10.05.22 08:20 Сейчас в теме
Спасибо, Юрий за статью!
Все отмечают 9 Мая, а Вы трудитесь!

Давненько не было от Вас статей!
8. dsdred 3279 10.05.22 09:12 Сейчас в теме
Я перестал обновляться динамически с 2014 года, тогда я работал на заводе где каждый день так обновлялись. Я застал момент когда база рухнула и её подымали с бекапа.
В тот день я начал бороздить просторы что же это за обновление такое которое может базу порушить. Начитавшись стал ярым противником динамики и если топы просят что то срочно я им рассказываю о возможных последствиях и говорю готовы ли вы взять на себя ответственность за простой?
После чего слышу: - Впринципе мы готовы потерпеть до завтра, это не горит.
user1671936; Andreyyy; Pete; KoC_one; dabu-dabu; CheBurator; nik_lankaster; Eremkin; zqzq; ojiojiowka; Irwin; d_sdr; rusmil; akR00b; SP2000; maksa2005; Teplotrassamen; JohnyDeath; YPermitin; +19 Ответить
9. пользователь 10.05.22 09:17
11. RustIG 1382 10.05.22 09:48 Сейчас в теме
(8)
P.S. А Вы задумывались над тем, что установка расширений тоже может приводить к подобным проблемам? :)

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

ПС. Я до сих пор использую динам. обновление - но это как исключение крайняя мера, а не как регламентная процедура...После прочтения статьи - ничего не изменится... Единственное, что остается надежда, что разработчики платформы придумают второй контур защиты или обхода ошибок, возникающих при динамическом обновлении.
_bizzon_; Andreeei; TerveRus; +3 Ответить
12. dsdred 3279 10.05.22 09:53 Сейчас в теме
(11)

Единственное, что остается надежда, что разработчики платформы придумают второй контур защиты или обхода ошибок, возникающих при динамическом обновлении.


В этом направлении не будет изменений, динамика как РИБ есть и не развивается. Легаси можно даже сказать.
73. TerveRus 09.06.22 11:51 Сейчас в теме
(8) раз в 10-20 лет можно на старых релизах платформы застать такой момент. Но это не значит, что надо резко отказываться от динамического обновления и всем это решение навязывать.
75. dsdred 3279 09.06.22 12:36 Сейчас в теме
(73) я же не отказываюсь, я даю возможность взять ответственность тем чья работа принимать решения и брать ответственность.
10. RustIG 1382 10.05.22 09:42 Сейчас в теме
Сбой сети.
Регламентные работы на сервере, внезапно.
Обслуживание базы, которое завершило блокирующий сеанс, опять же внезапно!
Конфигуратор вылетел из-за ошибки внутренней.
Разработчик 1С был странным и завершил сеанс конфигуратора во время обновления.
И еще сотни причин, которые лень добавлять.


Добрый день!
Хотел уточнить, если произошло одно из описанных событий, но мы не делали динамического обновления, мы вообще не обновляли базу. Возникнет ли ошибка в работе 1С? Или подобные события обходятся незамеченными со стороны 1с (конфигуратора и клиентской части)?
TerveRus; +1 Ответить
13. yukoz 63 10.05.22 11:58 Сейчас в теме
Тоже самое (случайные обрывы соединения) может произойти и при монопольном (обычном) обновлении базы, также база порушится. Это я к тому, что некоторые спецы в течение рабочего дня, чтобы не обновлять демонически просят всех выйти из базы на 5 мин и с чистой душой начинают обновлять Не димонически., с тут бац и конфигуратор потерял соединение или сист админ перепутал кнопку Выход с Завершением работы (у нас такое было) и звиздец, если это произошло в момент обновления базы. Так что здесь дело случая и удачи, и совсем быть противником динамического обновления тоже не стоит, имхо. Единственное, прямо уже если совсем риски минимизировать, то да, полностью отказывается от динамики, выгоняем всех (блокируем фоновые и все соединения!) и обязательно делаем архивную копию базы средствами SQL, тогда хоть в случае чего мы сможем быстро натянуть копию
_bizzon_; LordKim; Kernelbug; Egor_Yu; BuhBuhov; Mechanist; METAL; Jeka44; Teplotrassamen; 7OH; +10 1 Ответить
14. пользователь 10.05.22 12:35
(13) нет, писков там меньше, чем при динамике, т.к. механика все же отличается.

Так что не соглашусь.
mr_sav; dsdred; zqzq; ojiojiowka; Irwin; +5 Ответить
15. 7OH 69 10.05.22 16:36 Сейчас в теме
Было бы не так обидно, но на 20-ке ловили ошибку и после монопольного обновления.
16. maksa2005 531 10.05.22 18:49 Сейчас в теме
Поставь плюс если хоть раз обновился динамически и все пошло по............. (не тому сценарию)
FesenkoA; Alexs_7574; user1858716; SergVolga_34; Barmi; polyplastnm; Andreeei; Egovigor; White_hunter; sayakimov; Alexwarsis; maximus_2712; user1559729; TerveRus; ejijoka; vowg; mybracho; Necessitudo; Somebody1; on_this_day; yurkh; VOA2009; fd13; dabu-dabu; smit1c; dsdred; rintik; nik_lankaster; kai068; mip128; Eremkin; NeLenin; CSiER; oldcopy; MaxOPTdv; user1304317; Segate; mult1c; zqzq; WhiteDachnik; exitel; user957753; user644613_lopatenko1c; ojiojiowka; Irwin; Jeka44; Kilka_v_Kepke; rusmil; akR00b; cdrw3; Tikoven; t278; muskul; v3132; YPermitin; +55 Ответить
41. zqzq 23 11.05.22 12:16 Сейчас в теме
(16) Один раз пришлось воспользоваться скриптом с инфостарта, который копирует таблицу Config с базы-донора.

Также многократно слетала РИБ с ошибкой обновления конфигурации, хотя основная база "успешно" динамически обновилась.

Теперь никакого динамического обновления, обновляемся одной кнопкой через служебную самописную конфигурацию: указание времени обновления для таймера, установка блокировки, обновление из хранилища рабочей, выгон пользователей, обновление БД, снятие блокировки -- все автоматически с перезапуском если что-то вылетело/не прошло -- где-то на 5 минут обычно прерывание пользователей.
42. maksa2005 531 11.05.22 12:17 Сейчас в теме
(41)Да. мне это знакомо. РИБ УТ 10.3.
Всегда говорю всем = ждите вечера.
17. Andreeei 47 10.05.22 19:33 Сейчас в теме
Остается вопрос - почему 1С не уберет возможность динамического обновления, если все так печально?
_bizzon_; TerveRus; METAL; +3 Ответить
29. METAL 289 11.05.22 09:59 Сейчас в теме
(17) Возможно потому, что не всё так печально?

См. пункт статьи "После этого проблема будет полностью исправлена в 99% случаев."
Так и не понял, ловил ли кто-то проблемы из оставшегося 1%. Мы за долгие годы - нет

Аналогия про светофор, на мой взгляд, неуместна, так как движение на красный - нарушение ПРАВИЛ. Никаких официальных правил от вендора про нерекомендацию дин.обн. я не слышал.
almierm; SergVolga_34; Pependos; nik_lankaster; add063; bilex; nghtmn_cmth; +7 Ответить
30. пользователь 11.05.22 10:02
(29) :)

- Зачем Вы нарушили правила и перешли на красный свет светофора?
- Но мы так ходим уже 5 лет всей семьей и никого еще не сбили? Я, моя жена и дети все еще живы!
- Но это создает несоизмеримый риск!
- Мы ходили и будем ходить, потому что ничего не случилось! Вы все врете!
- Но ведь на зеленый свет ходить безопаснее!
- Если на красный свет ходить нельзя, то почему его вообще не уберут и не поставят охрану на дороге???
- ...

И так можно продолжать бесконечно :)

Просто знайте, иногда ДИНАМИЧЕСКОЕ обновление превращается в ДИНАМИЧНОЕ. :))))
Armageddon25; dsdred; +2 Ответить
31. METAL 289 11.05.22 10:02 Сейчас в теме
(30) Аналогия про светофор, на мой взгляд, неуместна, так как движение на красный - нарушение ПРАВИЛ. Никаких официальных правил от вендора про нерекомендацию дин.обн. я не слышал.
Andreeei; user1114234; TerveRus; bilex; brr; +5 Ответить
35. пользователь 11.05.22 10:42
(31) производители светофоров тоже не говорят, что на красный нельзя ездить.

Об этом говорят другие люди.

В общем, удачи вам в вашей вере. Раз и примеры вас не убедили, но и доводовтнайти не получится.
39. METAL 289 11.05.22 11:36 Сейчас в теме
(35)
производители светофоров тоже не говорят, что на красный нельзя ездить.

Ну камон, давайте не будем противопоставлять производителей светофоров, писателей ПДД и ГАИ - это всё одна команда под началом Министерства Транспорта. Но если хотите аналогию про светофор, то рекомендация никогда не обновляться динамически напоминает мне предостережение не переходить даже на зелёный свет, так как "я однажды видел что кого-то сбили на зелёный, поэтому давайте пользоваться только наземными и подземными переходами"


(35)
Раз и примеры вас не убедили

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

Были ли у нас сбои после дин.обновления? Да, были. Удалось решить? Да, 100% удалось починить. Перестали ли мы обновлять динамически? Нет, обновляем при надобности, чередуем с монопольными обновлениями и пока не видим причин прекращать. По крайней мере, на базах, где допустимы кратковременные простои.
romankoav; polyplastnm; LordKim; anchar007; EliasShy; bilex; brr; +7 Ответить
40. пользователь 11.05.22 11:41
79. user1112807 05.09.22 17:36 Сейчас в теме
(39) Как пример из личного опыта - пару лет назад во франче один товарищ без бэкапа положил динамическим обновлением базу. С концами. Наличие данного кейса честно говоря его не порадовало. Смысл статьи на мой взгляд не в строжайшем запрете а в донесении до широких масс возможных последствий.
78. maximus_2712 15 29.06.22 14:35 Сейчас в теме
(30) я ожидал "ДЕМОНИЧЕСКОЕ", но и динамичное тоже подходит)
74. TerveRus 09.06.22 11:54 Сейчас в теме
(17) из-за пары параноиков убирать жизненно необходимый и классный механизм?
18. KilloN 56 10.05.22 21:00 Сейчас в теме
Заметьте, каждый этап - почти всегда разные транзакции, это важно.


Не пойму почему 1с не изменяет таблицы ConfigSave и Config в одной транзакции?
user1559729; Mistral_Trading; METAL; kote; alk; kalyaka; d_sdr; +7 Ответить
19. Kutuzov 737 10.05.22 21:57 Сейчас в теме
Данные проблемы касаются также и расширений?
polyplastnm; Andreeei; +2 Ответить
20. t278 56 11.05.22 02:59 Сейчас в теме
Ловим такую ошибку раз в год .
https://infostart.ru/1c/articles/324751/
https://infostart.ru/1c/articles/116123/
не могу найти статью которая прям явно сказала что делать.

Мы делаем две команды
1) delete from base_1c.dbo.Config
go

2) ins ert in to base_1c.dbo.Config sel ect * fr om TMP.dbo.Config
36. METAL 289 11.05.22 10:59 Сейчас в теме
(20)
Мы делаем две команды
1) delete from base_1c.dbo.Config
go

2) insert in to base_1c.dbo.Config select * from TMP.dbo.Config

Не в коем случае не рекомендовал бы данный метод (по крайней мере для лечения сбоев при дин.обновлении), последствия его применения описаны здесь https://infostart.ru/1c/articles/390768/

В статье описан метод, который действительно работает в 99% случаев , продублирую
DELETE FROM [dbo].[Config] 
WHERE FileName IN (
	'commit','dynamicCommit','dbStruFinal'
)


Я пользуюсь немного другим
DELETE FROM [dbo].[Config] 
WHERE FileName LIKE '%com%'

Процент починки за много лет = 100% (нет, аналогия про светофор всё еще неуместна)
21. quazare 3587 11.05.22 06:43 Сейчас в теме
никогда не воспринимал динамическое обновление серьезно... 8-ка еще "сырая"
TerveRus; +1 Ответить
22. user1519152 11.05.22 06:57 Сейчас в теме
У нас динамические обновления запретили после того, как у всех(сотен) пользователей сломался кеш метаданных.
Добавлю что сброс кеша метаданных у клиента - первое действие при любых проблемах 1с. Проще всего это сделать прибив создав базу в приглашении 1с у клиента.
23. evn-zorin 32 11.05.22 08:04 Сейчас в теме
года три уже перестал как динамически обновляться, после того как часть кода просто исчезала бесследно.
Проще всех выбросить на пару минут, ничего страшного не случится, люди отдохнут и конфигурация целее будет.
24. sinichenko_alex 178 11.05.22 08:06 Сейчас в теме
Спасибо Юрий за очередную очень познавательную статью в которой вопрос и "корень зла" как всегда рассмотрены детально и главное на примерах!
25. akR00b 22 11.05.22 08:18 Сейчас в теме
Частенько диманически обновляемся, ловим раз в пол года ошибки с юзерпик, пару раз приходилось восстанавливаться на день назад, пару раз переносить конфиг с бэкапа, согласен с автором, если можете не обновляться лучше не обновляться.
polyplastnm; +1 Ответить
26. ser6702 165 11.05.22 08:51 Сейчас в теме
В центре угла любой проблемы д. стоять не программист, а тот для кого он должен являться обслуживающим персоналом, который его облизывает как официант посетителя ресторана.
По иной аналогии, если не нравится ресторанная, как авиационные техники и инженеры обслуживают летный состав, начиная работы за несколько часов до полетов и заканчивая через несколько часов после окончания полетов.
Поэтому для оптимизации решения задач учёта хозяйственной деятельности предприятия и человека следует иначе расставлять весовые коэффициенты. Если главный бухгалтер срочно требует внести поправки, связанные с финансовыми регулятивными рисками, а в вашей базе в тот же момент проходит отгрузка на складе на несколько сотен миллионов? Вы не можете никого выгнать

У вас как у чукчи из анекдота: а если потеряешь билет - есть второй, а если второй потеряешь - есть проездной
По бэкапам должно быть также
Вы должны осознавать и иметь подтвержденные регламенты от руководства документальные. Возможность восстановить в случае сбоя на заданную точку времени.
И выполнить задачу
В таком случае динамический способ обновления - это не зло а благо. Все определяется приоритетами. Забудьте что главный это программист. Это в корне не верно
32. dubrovin 11.05.22 10:21 Сейчас в теме
(26)
Забудьте что главный это программист. Это в корне не верно


Главным должен быть здравый смысл, а не позиция в пищевой цепочке :)
Решения должны приниматься взвешенно и обсуждаться всеми специалистами.
Если есть возможность не делать рискованную операцию, то лучше избежать риска.
Если ситуация аховая и без динамического обновления ну прям никак, то придется делать. Максимально подстраховавшись по возможности.
А потом неплохо бы проанализировать как можно избежать подобных ситуаций. Опять же совместно.
Как адекватные люди. А то ведь в следующий раз может не повезти. И, как результат, сорванная сделка на несколько сотен миллионов и финансовые потери, связанные с регулятивными исками.
Кто в этом случае будет виноват: главный бухгалтер или "не главный" программист (админ) ?
polyplastnm; Pete; YPermitin; EliasShy; zqzq; ser6702; +6 Ответить
27. Droonimus 11.05.22 09:01 Сейчас в теме
Статья хорошая, пока не увидишь своими глазами хотя бы один труп конфига в продуктивном контуре, не будет полного ощущения момента. Каждый должен разок в карьере положить хотя бы одну базу в несколько сотен гигов. Но если уж обновлять базы фоном без бэкапов, то только в режиме V2.Для подстраховки можно даже обмены не тормозить, особенно если у вас несколько сотен узлов. Наличие пары - тройки расширений с включенными в их состав новыми объектами и реквизитами - будет огромным плюсом.))
TerveRus; +1 Ответить
28. laperuz 46 11.05.22 09:38 Сейчас в теме
Очень интересно почитать насчёт расширений, устанавливаемых "на лету", с учётом того, что в технологии fresh это основной вариант установки расширений)
Andreeei; TMV; +2 Ответить
33. reset2 17 11.05.22 10:23 Сейчас в теме
Сбой сети.
Регламентные работы на сервере, внезапно.
Обслуживание базы, которое завершило блокирующий сеанс, опять же внезапно!
Конфигуратор вылетел из-за ошибки внутренней.
Разработчик 1С был странным и завершил сеанс конфигуратора во время обновления.
И еще сотни причин, которые лень добавлять.

думаю стоит с этим сначала разбираться, а не с ошибками дин.обновления
Neuroproton; METAL; +2 Ответить
34. dubrovin 11.05.22 10:23 Сейчас в теме
Хорошо написано.
Про расширения продолжишь ?
polyplastnm; Andreeei; zinzillya; Necessitudo; kalyaka; +5 Ответить
37. пользователь 11.05.22 11:24
(34) возможно, но пока без гарантий)
38. kalyaka 1053 11.05.22 11:26 Сейчас в теме
Увлекаться точно не стоит, но это удобно. Я обычно придерживаюсь правила: не более 3-х дин. обновлений в одно нормальное обновление.
Ну и конечно дифференциальный бэкап должен быть всегда!

Конечно опасная операция, однако достаточно надежная, чтобы ей пользоваться. Особенно если в течении длительного времени ни одного инцидента не происходило (уже лет 10 не наблюдал проблем). Но тут каждый определяет по своему опыту, надежности сети, оборудования. Обновление всегда произвожу из терминального соединения, а не с рабочего компьютера. Из личного опыта знаю, что сбой произойдет, если при обновлении была открыта транзакция на прямое чтение таблиц 1С.

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

Из статьи для себя сделал вывод: перезапуск сервиса 1С, как и отсутствие соединений, не убирает динамически обновленные записи - требуется провести нормальное обновление в монопольном режиме.
TerveRus; SP2000; +2 Ответить
43. ig-efrem 17 11.05.22 12:20 Сейчас в теме
Я на своей работе запретил динамические обновление на рабочих базах, после того как пару лет назад выяснилось, что в некоторых случаях (не понял явной связи) после динамического обновления переставали работать фоновые задания - просто отчеты не формировались и тд. Спасало только перезапуск служб.
Принял волевое решение и как бы руководство не настаивало на срочном обновлении, я динамически не обновлял - или ждем ночи или останавливаем работу баз на 5-10 мин для монопольного обновления.
В тестовом контуре разработчики практикуют динамическое обновление и периодически(примерно, раз в год) какая нить база тестовая падает после такого обновления
44. sea123 15 11.05.22 12:31 Сейчас в теме
У нас при динамическом обновлении другая проблема: перестают проводиться документы. Транзакции просто подвисают, я, при открытии списка документов, впервые увидел надпись "ошибка транзакции". Лечится только пересбором статистики на сервере 1С.
45. lazarenko 238 11.05.22 13:29 Сейчас в теме
46. ManyakRus 483 11.05.22 13:37 Сейчас в теме
У нас сломалась база 1С один раз из-за динамического обновления, выдавало ошибку что-то типа "транзакция ещё не закончена...". Решилось через 3 часа путём нормального обновления 1С. Напарник до сих пор считает что это не он поломал 1С, и динамически обновляет каждый день.
47. anig99 2843 11.05.22 13:42 Сейчас в теме
Ошибки при обновлении могут возникать и без динамического обновления. Поэтому нужно взять за правило перед обновлением сохранять резервные копии основных таблиц, связанных с обновлением.
48. Silenser 592 11.05.22 14:34 Сейчас в теме
В свое время сделал обработку на 1С которая копировала содержимое таблиц Config и ConfigSave и, если что-то пошло не так, то восстанавливала их из копии. В моих разработках есть, но пиарить не буду, кому интересно - найдет. Но вообще, сейчас этот вопрос решается расширениями, что работает на порядок надежнее, так что динамику давно пора из платформы выпилить.
49. oldcopy 173 11.05.22 14:37 Сейчас в теме
Динамическое обновление с завидной регулярностью ломает обмен в РИБ. Это, конечно, лечится. Но лечится долго и нудно - путем выгрузки CF из основной базы и ручной заливкой ее в периферийные. А если таких баз десяток? И половина из них с мобильным интернетом? После одного такого развлечения от одной только надписи Обновить динамически начинает дергаться глаз.
zqzq; Silenser; YPermitin; +3 Ответить
51. Silenser 592 11.05.22 16:49 Сейчас в теме
(49) По идее, там предопределенные элементы чаще веселья добавляют :)
53. oldcopy 173 11.05.22 18:09 Сейчас в теме
(51) Больше всего веселья там сейчас добавляют патчи и отдельные, сказочно смелые товарищи, которые включают их автоматическую установку.
52. user_2010 873 11.05.22 17:34 Сейчас в теме
Тоже как-то словила проблемы с динамическим обновлением... очень странные... так показалось в тот момент. Внесла изменения. Обновила динамически. Ключевые пользователи - для которых делалось обновление - перезашли в программу, увидели результат обновления, написали инструкции по новому функционалу. А на следующий день - внесенные изменения пропали!
YPermitin; +1 Ответить
54. CheBurator 3119 12.05.22 23:51 Сейчас в теме
Программировать надо нормально. Планировать. А не делать костыли. Тогда и не будет срочности и демонического всего. Подождут до завтра. А пока будут ждать - посиди, подумай. Из очередного гвонокостылся сделай хоть что-то напоминающее нормальное решение...
maximus_2712; Konstantine26; +2 Ответить
55. anosin 29 13.05.22 08:34 Сейчас в теме
Что-то ничего не увидел про механизм фонового обновления когда даже "Рестуктуризация" выполняется без завершения сеансов пользователей
получается еще более "страшная и ненадежная" операция?
77. Dansur 261 24.06.22 14:45 Сейчас в теме
(55) Да, только с динамическим ты хотя бы по времени начала сеанса можешь понять кто из клиентов работает старой логикой а кто новой. а с фоном - даже это не узнаешь.
56. rpgshnik 3633 13.05.22 10:49 Сейчас в теме
Используя 8.3.21 мы можем спокойно обновляться демонически! УРА! УРА! УРА!
60. JohnyDeath 301 15.05.22 11:57 Сейчас в теме
(56) а что там в 21ю завезли по этому поводу?
80. METAL 289 06.09.22 14:58 Сейчас в теме
(56) А что там завезли на этот счёт? Присоединяюсь к вопросу
57. rpgshnik 3633 13.05.22 10:50 Сейчас в теме
Это как с короновирусом, пока сам не столкнёшься с последствиями демонического обновления, не будешь верить до последнего (большинство конечно).
59. anosin 29 13.05.22 11:18 Сейчас в теме
(57) сталкивались и неоднократно, но руки чешутся :) так что сравнение както не показательно.
63. пользователь 18.05.22 15:06
Сообщение было скрыто модератором.
...
61. Vodoley 1 15.05.22 21:29 Сейчас в теме
хм. я думал правка на лету расширениями - способ обойти такие риски. А тоже не все так просто?
62. titanium2008 42 16.05.22 08:34 Сейчас в теме
Пользуюсь дин обновлением постоянно, на 8.3 вроде полет нормальный.
Neuroproton; +1 Ответить
64. пользователь 19.05.22 03:19
Сообщение было скрыто модератором.
...
66. пользователь 27.05.22 15:33
Сообщение было скрыто модератором.
...
65. protexprotex 113 20.05.22 20:11 Сейчас в теме
Раз поймал такое - база упала и не вставала уже с любыми радиусами бубен. Пришлось из копии восстановится. Благо как и у всех :-) есть горячее бекапирование
67. nonofusafree 27.05.22 15:34 Сейчас в теме
Нет ничего лучше, чем обновиться динамически, а потом ныть, что это платформа багованная :))))
И что разработчик/аналитик/менеджер не виноват!
68. kser87 2438 27.05.22 17:40 Сейчас в теме
Да, рабочую базу динамически обновлять низя. Базы разрабов сколько угодно. Пусть сами потом мучаются
69. putdv 30.05.22 03:01 Сейчас в теме
Всегда считал, что "демоническое" обновление - это зло, так как и мне приходилось ловить с ним проблемы. Тем не менее, иногда приходится пользоваться данным способом обновления конфигурации БД, так как нередко срочно требуется подправить конфу для одной группы пользователей, а другие группы не имеют возможности прервать свою работу. Главное сохраняться предварительно.
Спасибо за полезную статью!
70. Bukaska 140 30.05.22 09:56 Сейчас в теме
В любом случае, бекапы наше всё)))
rpgshnik; +1 Ответить
71. life-wayfarer 05.06.22 16:23 Сейчас в теме
Юрий, спасибо за публикацию. Но раздел "что может пойти не так" актуален и для классического обновления. Хотелось бы чтобы вендор давал рекомендации и ограничения по применению своих механизмов.

- На версиях совместимости ниже 8.3.7 однозначный запрет на динамическое обновление.
По причине:
"Повреждение сеансовых данных сервера. Возникают из-за какого-то особого поведения платформы 1С, меняется от релиза к релизу, сложно прогнозируемые и сложно воспроизводимые ошибки."
Которое приводит а) к аварийному завершению сеанса и/или б) тормозов в базе. Виновником будет замечен "сервиса сеансовых данных".
- Каждое дин. обновление должно заканчивать нормальным иначе при аварийном завершении/перезапуска службы обновления рискуют обнулиться.

В итоге его применимость(с приемлемым риском) сводится к обновлению баз с низкой интенсивностью работы и своим тех. окном, чтобы где-то что-то не пошло не так, ради того чтобы пользователя не выбивало из сеанса.
tormozit; rpgshnik; LordKim; +3 Ответить
81. Neuroproton 18 27.04.23 06:44 Сейчас в теме
Не было и раза за 5 лет работы, чтобы динамическое обновление убило мне базу (копии делаю, естественно)
82. tormozit 7138 27.04.23 08:29 Сейчас в теме
(81) Где то с 8.3.16 оно стало работать достаточно стабильно.
83. user1411559 30.05.23 22:52 Сейчас в теме
Слушайте ребят, а почему зло то?
допустим вы хотите обновить динамически, но зачем сразу обновлять прод

обновите полную свежую копию боевой базы динамически, перед обновлением, если все ок обновляйте бой ?


зачем сразу то боевой обновлять бой без предварительного теста
84. SergVolga_34 4 24.08.23 16:54 Сейчас в теме
(83)
а зачем копию обновлять динамически, если она без проблем обновляется монопольно?)
как корректное обновление копии поможет, например, при обрыве соединения при динамическом обновлении рабочей базы?
85. 2michael 23 28.08.23 09:43 Сейчас в теме
>>>P.S. А Вы задумывались над тем, что установка расширений тоже может приводить к подобным проблемам? :)

На сколько я понимаю, работа с расширениями (с точки зрения бд) абсолютно аналогична динамическому обновлению, только используется другая пара таблиц - ConfigCAS и ConfigCASSave. Или что-то еще?

Из своего опыта - нельзя делать динамическое обновление в высоконагруженной среде. Запустить динамическое обновление в "закрытие" - как русская рулетка. Последний раз получили "ошибка потока" - база была полностью недоступна как в конфигураторе так и в предприятии. Пришлось перезаписать таблицу Config из аналогичной базы.
Но совершенно вынужденная мера - много дочерних обществ, пока со всеми согласуешь регламентное окно - пользователи сожрут из-за косяка. Щит хэппенс, как говорится
86. Jekka83 23.01.24 15:55 Сейчас в теме
Я видимо самый рисковый, пишу и отлаживаю на проде, бывает по 50 раз за час обновляю динамически, за 4 года ниразу база не упала (пошел стучать по дереву)
Оставьте свое сообщение