Восстановление базы 1С, ошибка источника потока




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

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

Бэкграунд ситуации: УПП (1.3.113.4), платформа 8.3.13.1644, распределенная база (центральная и 2 периферийные базы). В какой-то момент после динамического обновления и попытки входа в режиме Предприятия в центральной базе появилась ошибка на скриншоте, периферийные базы обновление не получили. Бэкапов еще делать не начинали, базу внедрили в начале года и впопыхах об этом важном моменте как-то забыли. И хорошо что случилось это в новогодние праздники, иначе пользователи меня бы растерзали…

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

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

От отчаяния был даже переписано содержимое таблицы Config взятой из периферийной базы, но опять ошибка потока. Вспомнил что кто-то советовал переписать и содержимое таблиц Params и DBSchema, изменения возымели действие и при запуске уже появлялись ошибки отсутствия каких-то полей, которые я пытался восстанавливать по методике //infostart.ru/public/391766/. Максимум что мне удалось это запуск конфигуратора, но запуск в режиме Предприятия все равно заканчивался ошибкой модуля и ругательством про то, что нет возможности записать пользователя в таблицу. Накатывание конфигурации самой периферийной базы так же было в пустую, никаких изменений сравнение конфигураций не выявляло, что довольно объяснимо…

Пытался анализировать пользуясь SQL Server Profiler что же 1С при запуске пытается сравнивать или какую информацию считывать из базы перед тем, как выдать сообщение про проклятый поток, увы в силу малого опыта работы с SQL сервером выяснить это так и не получилось, ситуацию усугублял фон от активно работающих с другими базами пользователей. 

Пришлось искать какие-то другие варианты, была попытка даже анализировать алгоритм создания записей в таблице Config путем создания в пустой базе какое нибудь объекта. Но никакой полезной информации или каких либо закономерностей так и не получилось получить, в прочем знакомыми показались записи увиденные в таблице Params (рис.2)

в памяти всплыла методика борьбы с нарушением целостности структуры конфигурации описанная в статье //infostart.ru/public/76626/ единственное что смущало, что в далеком 2010 году такие записи создавались в таблице Config, в то время как сейчас я вижу их в таблице Params, тем не менее вариант было решено адаптировать под сегодняшние реалии и применить, за основу был взят скрипт пользователя denp2002 представленный в комментариях к статье по ссылке выше.

Собственно решение…

Применяем нижеприведенный скрипт:

use [НазваниеВашейБазы]

BEGIN TRANSACTION
delete from [dbo].[Params] where FileName in (
select c.filename from Config as c
inner join (
select * from (

SELECT max( modified ) over (partition by substring(FileName,0,37)) as mdt
,SUM(1) over (partition by substring(FileName,0,37)) as sm, substring(FileName,0,37) fs
, substring(FileName,48,37) sc
, *
FROM [dbo].[Params]
WHERE FileName Like '%_dynupdate_%')as a
where a.sm != 1 ) as b
on b.mdt != c.modified and b.FileName = c.FileName)

delete from [dbo].[Params] where FileName in (
select filename from (
select MAX(Modified) over(partition by substring(a.filename, 0, 37) ) as mdt
, *
from [dbo].[Params] as a
where LEN(a.FileName) = 36
or a.FileName like '%_dynupdate_%'
) as b
where b.mdt != b.Modified
)

update [dbo].[Params] set filename = substring(filename, 0, 37)
where FileName like '%_dynupdate_%'

commit

 


 
Результат выполнения:

После этого без каких либо сообщений открываются и Конфигуратор и Предприятие, как будто ничего и не было до этого…

Бинго!

23 Comments

  1. МихаилМ

    нет в статье расследования ,выявления проблемы.

    так — случайное тыканье. Вы проблему исправили случайно.

    Reply
  2. idle

    (1) Если данное «тыканье», как Вы выразились, сэкономит кому то пару суток времени в безуспешных попытках реанимировать базу, значит я это написал не зря!

    А для любителей покидать говно на вентилятор могу подсказать более подходящий ресурс… в личке…

    Reply
  3. nyam-nyam
    Бэкапов еще делать не начинали, базу внедрили в начале года и впопыхах об этом важном моменте как-то забыли.

    — куда катится этот мир? УПП, РИБ, SQL!!! И всё это без бекапа. Весь отдел ИТ вместе с руководителем на выход с вещами.

    Reply
  4. Artem.Po

    (3) ну к сожалению на данный момент времени новый отдел войдёт такой же..

    Reply
  5. Artem.Po

    а статья кстати нужная, автору благодарность)

    Reply
  6. caponid

    (1) Выводы на лету можно сделать… dynupdate — динамическое обновление…

    Идет 2018 год… кактус как ни странно, по прежнему не съедобный…

    Reply
  7. idle

    (5)Спасибо Артем! 🙂

    Reply
  8. as

    Добавьте версию платформы и СУБД. За статью спасибо, просто применимость сильно зависит от версии платформы и режима совместимости вашей базы.

    Reply
  9. idle

    (8) Платформа 8.3.13.1644, включил в статью…

    Reply
  10. kauksi

    Здравствуйте, меня зовут Сергей и я делаю динамическое обновление.

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

    Я мог не спросить пользователей, не сделать бекап средствами СУБД и динамически обновить базу ради изменения макета печатной формы счета на оплату.

    Но потом случилось горе и в одно прекрасное обновление база просто не запустилась.

    Это был ч0рный день в моей жизни.

    Я потерял друзей, коллеги отвернулись от меня.

    Жена меня бросила и дети не хотят со мной разговаривать.

    Попа болела после долгого и многозначительного разговора с начальством.

    И я решил изменить свою жизнь.

    Я теперь занимаюсь спортом

    Стал посещать бассейн.

    Питаюсь правильно и соблюдаю правила дорожного движения.

    Сегодня у меня праздник.

    Я уже 30 дней не делаю динамического обновления без ахивации базы данных средствами СУБД.

    Я практически готов полностью отказаться от динамического обновления.

    Вообще не обновлять динамически.

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

    12 ШАГОВ , РАЗРАБОТАННЫЕ САМИМИ ДИНАМИЧЕСКИМИ ОБНОВЛЯЛЬЩИКАМИ

    1. Признать свое бессилие перед поведением платформы 1с при динамическом обновлении.

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

    3. Мысленно перепоручить себя некой Высшей силе, которая поможет.

    4. Проанализировать свои поступки.

    5. Признать перед собой и кем-то еще свои ошибки.

    6. Не сомневаться, что бекап перед динамическим обновлением сработает.

    7. Просить высшие силы избавить от недостатков.

    8. Составить список всех людей, кому причинили зло, и захотеть загладить свою вину перед ними.

    9. Лично возместить этим людям ущерб, нанесенный вами и вашим динамическим обновлением.

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

    11. Не переставать размышлять и благодарить помощника из пункта 3.

    12. Достигнув пробуждения, благодаря пунктам 1-11, помогать другим динамическообновлялщикам.

    Reply
  11. Glebis

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

    Reply
  12. feva

    (10)

    Здравствуйте, меня зовут Сергей и я делаю динамическое обновление.

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

    Я мог не спросить пользователей, не сделать бекап средствами СУБД и динамически обновить базу ради изменения макета печатной формы счета на оплату.

    Но потом случилось горе и в одно прекрасное обновление база просто не запустилась.

    Это был ч0рный день в моей жизни.

    Я потерял друзей, коллеги отвернулись от меня.

    Жена меня бросила и дети не хотят со мной разговаривать.

    Попа болела после долгого и многозначительного разговора с начальством.

    И я решил изменить свою жизнь.

    Я теперь занимаюсь спортом

    Стал посещать бассейн.

    Питаюсь правильно и соблюдаю правила дорожного движения.

    Сегодня у меня праздник.

    Я уже 30 дней не делаю динамического обновления без ахивации базы данных средствами СУБД.

    Я практически готов полностью отказаться от динамического обновления.

    Вообще не обновлять динамически.

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

    12 ШАГОВ , РАЗРАБОТАННЫЕ САМИМИ ДИНАМИЧЕСКИМИ ОБНОВЛЯЛЬЩИКАМИ

    1. Признать свое бессилие перед поведением платформы 1с при динамическом обновлении.

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

    3. Мысленно перепоручить себя некой Высшей силе, которая поможет.

    4. Проанализировать свои поступки.

    5. Признать перед собой и кем-то еще свои ошибки.

    6. Не сомневаться, что бекап перед динамическим обновлением сработает.

    7. Просить высшие силы избавить от недостатков.

    8. Составить список всех людей, кому причинили зло, и захотеть загладить свою вину перед ними.

    9. Лично возместить этим людям ущерб, нанесенный вами и вашим динамическим обновлением.

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

    11. Не переставать размышлять и благодарить помощника из пункта 3.

    12. Достигнув пробуждения, благодаря пунктам 1-11, помогать другим динамическообновлялщикам.

    Показать

    на принтер и в рамку

    Reply
  13. ivdvorkovoy

    Спасибо за статью!

    Reply
  14. GreenDragon

    (2) Вангую ссылку на Мисту в личке

    Reply
  15. user1169191

    Спасибо за статью

    Reply
  16. Hadgehogs

    (1) Тоже мне ребус мебиуса.

    Запускаем профайлер. смотрим трассу и где она спотыкается.

    У меня было подобно на таблице depot, что это за таблица — фиг знает, решилось ее очисткой.

    Reply
  17. CheBurator

    по прежнему — все способы суть шаманский бубен

    Reply
  18. baracuda

    Ребят, очень часто обновляю расширение динамически? платформа 8.3.11.3034.

    причем при обновлении никаких вопросов платформа не задает, просто обновляет и все, я что то делаю не так?

    Reply
  19. tricolor

    (18)ты обновляешь расширение, а не саму конфу.

    Reply
  20. rinat_alp2

    Напишите, пожалуйста, сколько рабочих серверов 1С?

    У нас ошибки падения после динамического обновления пропали, после того как убрали дублирующееся требование назначения функциональности на один сервер.

    Уже точно не помню какая функциональность была.

    Reply
  21. idle

    (20)

    1 (1С+SQL)

    Reply
  22. vadim1011985

    (17) А какие еще могут быть способы , кроме шаманских ?

    Нет универсального решения в таких вопросах и инструментов для решения практически нет .

    Я конечно больше по восстановлению файловых баз, и если SQL позволяет такие штуки как описал Автор , то все не так плохо по сравнению с файловыми базами.

    Конечно для файловых баз, есть утилиты Tools 1CD и 1CD_ Lib, только не работают они с форматом 8.3.8 , и если сконвертнуть в старый формат не удается , остается только сидеть в HeX — редакторе крыжить.

    Так что и файловыми и SQL базами одно шаманство , где-то в большей степени , где-то в меньшей.

    Reply
  23. baracuda

    (19) Спасибо, теперь понятно.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *