0. Kondratenko.as 365 22.01.15 08:58 Сейчас в теме

Извечная проблема. Ошибка после динамического обновления (SQL)

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

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

Комментарии
Сортировка: Древо
1. patimka 22.01.15 09:55 Сейчас в теме
Ну действительно, извечная проблема. Решение только такое - постараться не обновлять динамически, или если уж произошла проблема, то почистить кеш у пользователя, где проблема возникла.
2. Lord_Michael 22.01.15 10:13 Сейчас в теме
(1) patimka, кэш чистить далеко не всегда помогает в силу того, что изменения в базу зачастую уже записаны и записаны как раз с ошибкой. кэш поможет, только если все сохранилось, а у пользователя нет изменений.

для скульных баз действительной хороший способ описан.

вопрос автору: обязательно в master процедуры добавлять или можно в любую другую базу? я не силен в языке запросов, так что можно пояснения по поводу имен объектов и что где храниться в итоге?
5. Kondratenko.as 365 22.01.15 11:24 Сейчас в теме
(2) Lord_Michael, Поместить процедуры можно куда угодно,важно чтобы к ним был доступ. Помещать их в рабочую базы не рекомендую , так как к примеру при загрузки данных средствами 1С (dtшник) ваша процедура затрется. А в мастере она будет в надежной сохранности. В итоги при сохранение, данные хранятся в Databases\System Databases\master\Tables\dbo.Config_Backup
где dbo.Config_Backup - это таблица , полностью скопированная с таблицы dbo.Config вашей рабочей базы
3. ChiginAV 22.01.15 10:21 Сейчас в теме
Отличная идея!
Можно пойти еще дальше и автоматизировать создание бэкапов этих таблиц путем создания триггера.
https://technet.microsoft.com/ru-ru/library/ms189799%28v=sql.105%29.aspx
Это не противоречит лицензионному соглашению 1С и не нужно будет руками запускать обработку
trickster; +1 Ответить
6. Kondratenko.as 365 22.01.15 11:44 Сейчас в теме
(3) ChiginAV, По началу так и хотели сделать,но в действительности реализовать не получилось. Дело в том что 1С использует SQL как хранилище данных , а сам процесс динамического обновления производит платформа и в SQL пишутся данные уже по факту. Отловить триггером этот механизм в платформе не получится, единственное что вы можете это получить момент когда таблица начнет меняться. Но для восстановления нужна таблица до изменения , поскольку остановить процесс записи в нее нельзя, а попытка замедлить этот процесс приводила к ошибкам в платформе. Да и сам процесс копирование записей занимает время, у меня это от 3 до 8 секунд ( Комплексная Автоматизация - 25847 строк в таблице Config и необходимо помнить,что каждая запись не просто текстовые данные, к примеру ячейка [BinaryData] - по сути архивированный файл с описанием метаданного ,а они бывают относительно тяжелыми, к примеру: запись содержащая файл с конфигурацией поставщика от Комплексной Автоматизации весит 261 МБ ).
7. German 1000 22.01.15 12:05 Сейчас в теме
(6) Kondratenko.as, http://main.1c-ei.ru/Home/help/object_config/depot работает именно на триггерах
8. vslimv 22.01.15 12:46 Сейчас в теме
(7) German, Вещь конечно хорошая но и денег стоит)
10. German 1000 22.01.15 13:16 Сейчас в теме
(8) vslimv,
Вещь конечно хорошая но и денег стоит)


Само собой :)

На мой взгляд о прямой записи в SQL стоит всерьез говорить только когда 1с выпустит API


почти 10 лет на промышеннЫХ базах используется
alexveraww; Evil Beaver; +2 Ответить
9. Kondratenko.as 365 22.01.15 12:48 Сейчас в теме
(7) German, Ну по презентации не понятно как именно она работает. А ссылка интересная,на досуги по изучаю. Но по мне ручной контроль этого менее трудозатратный. И скорее всего при разработке "Хранилища" были задействованы люди знающие как работает этот механизм в платформе 1С. В примере была предоставлена конфигурация ЗУП она довольно простая , разумней было бы показать примеры на УПП и уже на ней говорить о скорости работы. Я пробовал ставить триггер на изменение таблицы и копировал всю ее,а в "Хранилище" скорее всего сохраняется только измененные объекты. Распаковать и получить структуру конфигурации это не проблема V8Unpack20 в свободном доступе причем с его помощью можно не только распаковывать, но и обратно запаковать метаданное и поместить его в SQL , вопрос только в том на сколько это корректно и правильно. На мой взгляд о прямой записи в SQL стоит всерьез говорить только когда 1с выпустит API. 1С бывает сама внезапно перестает работать и сваливаться в дамп :-)
4. ekaruk 4071 22.01.15 10:43 Сейчас в теме
Шикарно.
Очень понравилось название «Восстановить данные после ошибки динамического обновления»
11. AlX0id 22.01.15 13:23 Сейчас в теме
Неужели ж оно настолько часто происходит, что прям вот такая автоматизация нужна?
Просто восстановить конфиг из суточного бэкапа раз в год - не вариант?
12. Kondratenko.as 365 22.01.15 13:29 Сейчас в теме
(11) AlX0id, Происходит не так часто, но поскольку компания работает 24/7 то простой не кому не нужен, а если простой по вине программистов то время простоя вычитается из их жалования:-). Вся проблема во времени восстановления. А динамически обновляемся в день раз 4-5 точно.
17. AlX0id 23.01.15 01:15 Сейчас в теме
(12) Kondratenko.as,
Ну мы тоже не редко обновляемся демонически. Необходимость пересадки конфы возникала лишь пару раз за последние пять лет (тьфу-тьфу-тьфу).

// ЗЫ. Вот прям сегодня вылезла "Нарушена целостность конфигурации" при старте конфигуратора у одного из клиентов. Сглазил чо ли.. Вроде обошлось отключением/подключением ИБ на сервере 1С..
25. gaglo 29.01.15 11:34 Сейчас в теме
(12) А можно поточнее раскрыть "не так часто" (ну, если не тайна)?
У нас система всего лишь 12/5, сотня пользователей, обновления раз 10 в неделю (по дням неравномерно), страшное случилось 1 раз за 5 лет.
26. Kondratenko.as 365 29.01.15 12:57 Сейчас в теме
(25) gaglo, "не так часто" - Стабильно 1 раз в полгода)
13. kalaratra 10 22.01.15 13:41 Сейчас в теме
(11) AlX0id, У кого-то раз в год) А кому-то не так везет)))
14. kalaratra 10 22.01.15 13:44 Сейчас в теме
Однажды согрешила, 17 раз подряд динамически обновила) Повезло что ничего не упало)
15. Fox-trot 67 22.01.15 14:45 Сейчас в теме
судя по тексту храгимок есть вероятность восстановления конфига соседней базы. то есть если выполнить бекап одной базы, то с легкостью мона восстановить в другой
16. Kondratenko.as 365 22.01.15 14:55 Сейчас в теме
(15) Fox-trot, Данный пример был создан для одной рабочей базы,чтоб можно было сделать вызов из любой базы,а не только из рабочей...
18. Fox-trot 67 23.01.15 09:58 Сейчас в теме
(16) ну так а я те про что. сохраняешь в одной, восстанавливаешь в другой ))
19. Kondratenko.as 365 23.01.15 11:55 Сейчас в теме
(18) Fox-trot, Понятно, я тебя не правильно понял. Я думал ты как на ошибку указывал:).
20. narus1 26.01.15 11:01 Сейчас в теме
На мой взгляд, это все костыли. Если база данных находится на MS SQL сервере выше или 2005 и база данных имеет Full логирование и бекапы трензакт лога то можно воспользоваться официальной инструкцией msdn.microsoft.com и восстановить базу до момента нажатия на кнопочку "обновить базу данных". Ну, а по поводу очистки таблицы конфигурации это не всегда спасает.
21. zoytsa 26.01.15 13:57 Сейчас в теме
интересная идея!

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

Kondratenko.as; +1 Ответить
22. narus1 27.01.15 14:54 Сейчас в теме
Согласен если это делает автомат. Но мне интересно посмотреть тому человеку в глаза который после динамического обновления не запускает предприятие, и к тому же 1с вылетает при самом обновлении. То есть если у тя при этом работают 100 клиентов в этом есть смысл. Как говориться вернуть в зад :-).
23. Zhilyakovdr 89 29.01.15 09:28 Сейчас в теме
Добрый день!
В хранимой процедуре для создания копий лучше использовать
IF OBJECT_ID( 'dbo.Config_Backup' ) IS NOT NULL  
	drop table [dbo].[Config_Backup];

вместо
truncate table [dbo].[Config_Backup];

т.к. в случае с truncate вылетит ошибка если таблицы еще не созданы.
cleaner_it; +1 Ответить
27. Kondratenko.as 365 29.01.15 13:06 Сейчас в теме
(23) Zhilyakovdr, Зачем дропать? Вам тогда придется и создавать ее заново всякий раз , лишнее время тратить на выполнение

IF OBJECT_ID ('dbo.Config_Backup', 'TR') IS NULL
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CRE ATE   TABLE [dbo].[Config_Backup](
	[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
Показать
30. Zhilyakovdr 89 29.01.15 14:01 Сейчас в теме
(27) Kondratenko.as, можно и не дропать, но тогда предварительно, при первом запуске, необходимо убрать truncate иначе вылетит с ошибкой т.к. при первом запуске нет еще таблицы для очистки.
31. Kondratenko.as 365 29.01.15 14:06 Сейчас в теме
(30) Zhilyakovdr, Согласен с вами,просто я когда создавал таблицу, ее сразу и заполнял)
32. Zhilyakovdr 89 29.01.15 15:12 Сейчас в теме
(31) Kondratenko.as, а зачем ее специально создавать.... MS SQL ее сам создаст.....
24. AllexSoft 29.01.15 10:06 Сейчас в теме
а у нас просто память течет на 1С Сервере после динамического обновления) потом юзеров выкидывает с ошибкой типа Недостаточно памяти на сервере) хотя там памяти этой еще завались
28. Puk2 169 29.01.15 13:45 Сейчас в теме
(24) AllexSoft, версия платформы не 8.3.5.1383 случайно? Там есть баг с утечкой памяти рабочего процесса, в одной из наших организаций наблюдался.
29. AllexSoft 29.01.15 13:48 Сейчас в теме
(28) Puk2, 8.2.19 ) ту же беду наблюдал на 8.3.4.*, на последних 8.3.4 вроде убрали (ну во всяком случае так дико течь перестала)
33. Zhilyakovdr 89 30.01.15 17:48 Сейчас в теме
У кого нибудь получилось написать триггер?
34. Kondratenko.as 365 04.02.15 10:45 Сейчас в теме
(33) Zhilyakovdr, Ссылка на статью по триггеру http://infostart.ru/public/327674/
Lord_Michael; kalaratra; +2 Ответить
35. hiduk 75 12.05.15 16:19 Сейчас в теме
Товарищи а с postgresql будет работать?
36. Fox-trot 67 18.05.15 07:33 Сейчас в теме
(35) hiduk, нуна лишь малость допилить
37. s1cret 08.12.16 12:45 Сейчас в теме
Мне помогло для Postgresql :
Первые 2 пункта позволяют войти в конфигуратор, 3й пункт позволяет сохранять конфигурацию.
1) delete fr om configsave where FileName = 'commit'
2) delete from configsave wh ere FileName = 'dbStruFinal'
3) C:\Users\kub\AppData\Local\1C\1cv8 удаление всех папок кроме logs
38. svk 14.02.18 11:42 Сейчас в теме
Эта проблема только на Скуле бывает?? На ПостГре такое возможно??
40. fish249 21.02.18 17:16 Сейчас в теме
Полезная статья, надо будет испытать.
41. sonGodv 38 11.09.18 10:01 Сейчас в теме
Хорошо. Однако если последствия ДО вылезли например через неделю. Как вариант у пользователя начала форма справочника номенклатура некорректно отображаться. Чистка кэша пользователя помогает но потом снова появляется, хотя ДО более не делалось
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Удаленный консультант-разработчик 1С
Краснодар
зарплата от 60 000 руб. до 60 000 руб.
Полный день



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

Руководитель проектов 1С
Москва
Полный день