gifts2017

Динамическое обновление. Отказ работы механизма сравнения/объединения файлов конфигурации.

Опубликовал Валентин (Valp) в раздел Администрирование - Системное

Проблема некорректной работы механизма сравнения/объединения файлов конфигурации и ее решение.

Нетиповая конфигурация.

Платформа 8.2.17.169.

Часто пользовались динамическим обновлением.

Перешли на платформу 8.3.5.1068.

 

Проблемы:

- «Сравнить, объединить с конфигурацией из файла», «Сравнить конфигурации» платформа не видит отличий, либо видит, но не все.

- При объединении конфигураций объекты метаданных откатывались до версий, которые были несколько обновлений назад.

 

Поиск готовых решений проблемы:

http://forum.infostart.ru/forum26/topic72852/

http://www.forum.mista.ru/topic.php?id=408471

http://www.forum.mista.ru/topic.php?id=629968

 

Поиск источника проблемы:

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

 

Таблица Config.

Система оставила старую версию обновляемого модуля и добавила новую версию с признаком динамического обновления (dynupdate в наименовании).

Система оставила старую версию обновляемого модуля и добавила новую версию с признаком динамического обновления (dynupdate в наименовании).

 

Таблица Params.

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

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

 

После удаления записей из таблиц Config и Params, которые система сделала при динамическом обновлении, произошел откат сделанных обновлений.

 

Сделал копию проблемной рабочей базы и почистил таблицы Config и Params от лишних записей.

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

Данную процедуру провел на 22 базах.

 

Решение:

 

1. Создать копии таблиц Config, Params для случая если что-то пойдет не так.

 

USE [<имя_базы_данных>]

GO


SET ANSI_NULLS ON

GO

 

SET QUOTED_IDENTIFIER ON

GO


CREATE TABLE [dbo].[<Имя_таблицы>Copy]

(

       [FileName] [nvarchar](128) NOT NULL,

       [Creation] [datetime] NOT NULL,

       [Modified] [datetime] NOT NULL,

       [Attributes] [smallint] NOT NULL,

       [DataSize] [int] NOT NULL,

       [BinaryData] [image] NOT NULL,

       PRIMARY KEY CLUSTERED

       (

             [FileName] ASC

       ) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO

 

INSERT INTO [<Имя_таблицы>Copy]

SELECT * FROM <Имя_таблицы>

GO

2. Удалить записи, которые система создает при динамическом обновлении.

 

DELETE

  FROM Config

WHERE

  FileName like '%dynupdate%'

;


DELETE

  FROM Config

WHERE

  FileName like 'DynamicallyUpdated'

;


DELETE

  FROM Params

WHERE

  FileName like '%dynupdate%'

;


DELETE

  FROM Params

WHERE

  FileName like 'DynamicallyUpdated'


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

См. также

PowerTools от 1 000
Подписаться Добавить вознаграждение

Комментарии

1. Станислав Коляда (it@contlog.ru) 12.11.14 04:28
Мы просто отказались от динамического обновления. Этот механизм как не работал так и не работает у 1с.
andry888; sashapere; SuhoffGV; omut; artbear; vladir; webester; cool.vlad4; tormozit; theshadowco; Stim213; Yashazz; Йожкин Кот; +13 Ответить 1
2. борян петров (TODD22) 12.11.14 06:37
Динамическое обновление это верный способ нажить себе проблем. А потом с ними героически сражаться.
За решение спасибо! Может пригодиться.... А то пару раз встречал базы кем то динамически обновленные.
3. Канат Джумадылов (Fox-trot) 12.11.14 07:50
DELETE

  FROM Config

WHERE

  FileName like '%dynupdate%' OR FileName like 'DynamicallyUpdated'
...Показать Скрыть

все ж таки один проход лучше, чем два =) тем паче что оба не оптимизируемы
крута было б ежели все это дело обернуть в ADO и сделать в виде родной обработки 1С с одной лишь кнопкой "Сделать все хорошо" =)
alexscamp; v.a.ryag; TIS_08; Terve!R; +4 Ответить
4. Яков Коган (Yashazz) 12.11.14 09:38
Хотите жить спокойно - никогда не пользуйтесь динамическим обновлением.
5. Виталий (PVG_73) 12.11.14 11:47
Спасибо, за решение. Динамикой увы приходится пользоваться.... но вот таблиц таких слава богу оказалось не так много.....
6. DAnry (DAnry) 12.11.14 18:46
Бывают случаи, что без динамического обновления никак. А за статью - спасибо.
7. Олег Кострицын (recon) 12.11.14 19:13
Честно говоря не совсем понял чем автору не помогла очистка кэша. лезть в SQL ради удаления таблиц имхо последнее дело, когда базе уже ничего не поможет. Более того, платформа сама удаляет эти записи когда происходит монопольное обновление.
http://www.gilev.info/2010/02/1-81.html
https://partners.v8.1c.ru/forum/topic/448505

При динамическом обновлении основная проблема возникает не на сервере SQL, а на клиенте, у которого не обновляется кэш или кэш разрушается. В результате при следующем входе в систему пользователь получает не ту версию конфигурации, которая ожидается, или получает ее не полностью.
artbear; EmpireSer; Rustig; +3 Ответить 1
8. Ийон Тихий (cool.vlad4) 13.11.14 00:53
(6) DAnry, например? мое мнение, если без динамич. обновления никак, то что-то явно делается не так.
Для файловых баз, расшаренных по сети, это однозначно геморрой и проблемы.
9. Валентин (Valp) 13.11.14 04:27
(7) recon, проблема была в том, что при монопольном обновлении платформа с какого-то момента перестала удалять записи сделанные динамическим обновлением. В некоторых базах таблица Config хранила десятки версий одних и тех же объектов. Для таких баз при выполнении сравнения/объединения конфигураций платформа не видела различий в файлах, а при выполнении команды объединения/загрузки конфигурации из файла, считала последней версией объекта одну из старых неудаленных.
10. Сергей Вн (EmpireSer) 13.11.14 09:56
(9) Valp,
Я у десятка клиентов пользуюсь динамическим обновлением. Проблем не возникает.
Точнее... один раз возникла у клиента, у которого мы просто переставили 1С сервер с 8.2.16 на 8.3.4 без выгрузки/загрузки через DT. И то, проблема возникла у всех, у кого когда либо открывали конфигуратор и открывали в нём конфигурацию.

А так, как я сказал, проблем ни каких. Есть даже один клиент у которого я по 30 раз за день делаю динамическое обновление (клиент-сервер 8.2.19.106, MS SQL 2012).
Может Вы не умеете "готовить 1С"? :-)
11. Александр Хомяк (logarifm) 13.11.14 10:24
Ну отказываться от динамического обновления не вижу смысла. А вот использовать хранилище конфигурации всецело устранит эти проблемы. Зачем разрабатывать какой-то кф-ник потом мучаться со сравнениями?
12. Валентин (Valp) 13.11.14 17:12
(11) logarifm,
Для разработки используем хранилище, файл с нужными изменениями выгружаем и отправляем в живые базы,
они обновляются монопольно в пакетном режиме. Проблему получили при очередном таком обновлении, сразу после перехода на новую платформу. Отправили файл с изменениями, по логам все прошло успешно, но по факту в конфигурации БД получили откат некоторых объектов к версиям, которых не было ни в конфигурации которую обновляли, ни в конфигурации которой обновляли. При попытке ручной загрузки, получили то же результат. При сравнении конфигураций оказалось, что платформа не видит изменений. Проблема возникла почти на всех базах, для которых перешли на новую платформу.
13. Канат Джумадылов (Fox-trot) 13.11.14 20:12
(12) Valp, все эти пляски с бубном от того, что 1с вряд ли опубликует алгоритмы процесса обновления
такие дела
14. Сергей Вн (EmpireSer) 14.11.14 00:45
(13) Fox-trot,
Вообще-то он довольно понятный. Даже можно сделать сравнение до и после изменений распаковывая данные в "BinaryData".

(0),
Всё таки "костыль" исправления уже сделанного не правильного перехода описан хорошо.
Но в статье не хватает описания правильного перехода, где не возникнет таких проблем.
Так же Вы не описали как осуществлялся переход с 8.2.17 на 8.3.5, т.е. сами этапы.
15. Канат Джумадылов (Fox-trot) 14.11.14 06:44
(14) EmpireSer, то есть тебе еще не попадалиь случаи когда сравнение не показывало различие всего одного свойства, к примеру в макете, хотя ты точно его изменял
раз уж тебе известно больше чем окружающим, может поделишься кодом 1с сравнения конфигураций. для серверного варианта есесьно
16. Роман Ложкин (webester) 17.11.14 15:04
Один раз произошло так, что факт того, что изменения откатились всплыл где то через пару месяцев. После этого стараюсь не трогать динамическое обновление, можно очень сильно потом об этом пожалеть.
17. Just (Just) 25.11.14 12:08
(10) EmpireSer,
Видимо ты знаешь что-то чего не знают другие, может тебе Борис какой-то секрет рассказал?
Сколько активных юзеров в базе, которую ты в день по 30 раз обновляешь? После таких изменений обычно база долго не живет. По теме, если выгонять всех юзеров после каждого динамического обновления (грубо говоря одно обновление в день), то скорее всего "пронесет", но с 30-кой в день, это не реально.
18. Александр Перевислый (sashapere) 23.09.16 20:11
(1) it@contlog.ru, Как вы это реализовали?
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа