gifts2017

Решение "Нарушена целостность структуры конфигурации" для SQL

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

При использовании динамического обновления конфигурации, работающей под SQL Server, в один прекрасный момент можно увидеть сообщение, информирующее о том, что "Нарушена целостность структуры конфигурации", и база становится неработоспособна ни, в режиме Конфигуратора, ни, в режиме Предприятия, так что же делать?

Такая ситуация может возникнуть при монопольном обновлении ИБ в которой ранее производились динамические обновления.

Итак приступим:

Делаем резервную копию средствами SQL Server.

Заходим в SQL Management Studio и создаем новый запрос к нашей ИБ.

 Выполняем запрос :

SELECT FileName, Modified FROM Config
WHERE FileName Like '%_dynupdate_%'
ORDER bY FileName, Modified

должен отобразиться список файлов вида, где [.число] означает возможный суффикс-расширение.

Для каждой группы файлов, начинающейся с одинакового УИД1, ориентируясь на значение поля Modified удаляем все более старые записи и заменяем в поле FileName значение наесли получившиеся строка уже существует в ИБ то необходимо сравнить их даты изменения (поле Modified) и оставить самый новый.

Пример:

из

FileName Modified
02b6f4b6-ebfa-4aab-9e30-e5f0a29588d1_dynupdate_2d7c76c5-9819-418f-a4a8-11085dfb1f7d 4010-10-08 02:36:08.000
02b6f4b6-ebfa-4aab-9e30-e5f0a29588d1_dynupdate_2d7c76c5-9819-418f-a4a8-11085dfb1f7d.0 4010-10-08 02:36:08.000
dc230ac5-7853-4d1f-8d45-168d28f1b6b0_dynupdate_abbd5ed3-1e1b-4752-b63b-eb5072af5d99 4010-10-08 03:04:41.000
dc230ac5-7853-4d1f-8d45-168d28f1b6b0_dynupdate_abbd5ed3-1e1b-4752-b63b-eb5072af5d99.0 4010-10-08 03:04:41.000

должно получиться

FileName Modified
dc230ac5-7853-4d1f-8d45-168d28f1b6b0 4010-10-08 03:04:41.000
dc230ac5-7853-4d1f-8d45-168d28f1b6b0.0 4010-10-08 03:04:41.000

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Oberonm (oberonm) 08.10.10 08:29
только на днях произошло подобное непотребство. пришлось восстанавливать из старого бэкапа и данные из таблиц экспортировать
2. ПСВ (ПСВ) 08.10.10 08:36
Для каждой группы файлов, начинающейся с одинакового УИД1, ориентируясь на значение поля Modified удаляем все более старые записи и заменяем в поле FileName значение на <УИД1[.число]> если получившиеся строка уже существует в ИБ то необходимо сравнить их даты изменения (поле Modified) и оставить самый новый


Так значит в последнем примере , надо оставить только полседнюю строчку?
а не две.
или ты не правильно объяснил.
3. Alexander . (manlak) 08.10.10 09:49
седня такая же беда случилась, даже в конфигуратор не пускало,
1С - это - ****************** (много мата).
И по этой технологии не получилось. Пришлось с бэкапа восстанавливать
4. Alexander . (manlak) 08.10.10 09:50
но плюс все равно за поднятие темы! У нас просто этих строк ОЧЕНЬ много скорей всего из-за этого, это если мало тогда подойдет возможно
5. Станислав Турчинский (Istur) 08.10.10 15:07
10063820 Нарушена целостность структуры конфигурации
Проблема:
В клиент-серверном варианте информационной базы при сохранении конфигурации информационной базы, в которой до этого выполнялось динамическое обновление, а также при последующем запуске Конфигуратора или Предприятия диагностируется ошибка
Нарушена целостность структуры конфигурации
и происходит аварийное завершение работы программы.


Ошибка исправлена в тестовом релизе 8.2.12.92
6. Александр Зубцов (iov) 09.10.10 01:13
5 ага и еще 10 подобных вылезет.... Заколебали тестировать продукты за деньги ... реально платформа стала еще более глючная чем 8.0 первые... Причем критических ошибок с падением данных стало больше кажется.
P.S. не поверите но 3 фирмы откатились на 7.7 из-за того что та стабильнее и мене проблемно на линксах с вайном запускается нежели 8 ки.
7. Михаил Приходько (pri_hod) 10.10.10 12:50
Поставил, вроде ошибка исчезла но при запуске УТ появляется сообщение "ИнформацияОбОшибке" отладчиком отловил что невозможно создать
ComConnector = Новый COMОбъект(УправлениеСоединениямиИБ.ИмяCOMСоединителя())
8. МagIvan (RailMen) 11.10.10 23:02
У меня такое НЕПОТРЕБСТВО (слово понравилось) было в начале сентября на ЗУП конфе, а вот буквально вчера на БП. Платформа-бяка!
9. Dmitiry (ndacoder) 18.10.10 13:16
вот альтернативное шаманство для тех кому не помогло http://infostart.ru/public/76964/
10. Баир Сафштейн (b-real) 20.10.10 00:53
+(2)
Полагаю, что вместо первой строки результирующей таблицы из примера должна быть одна из первых 2х строк таблицы-источника.Отсюда вопрос, а как определить какую строчку нужно оставить? В приведенном примере у строчек с одинаковыми УИД1 отличия только в суффиксе-расширении, поля Modified совпадают.
11. Gens76 (Gens76) 11.11.10 23:25
Быстрее всего поправить это дело через копирование файлов (Config и SaveConfig.) через утилиту (при условие если есть хотяб файл конфигурации )
http://www.interface.ru/home.asp?artId=4013
12. Василий Зайцев (vasiliy_b) 02.12.10 11:30
Может кто скрипт перепишет, который сам сравнит строки и удалит из этих таблиц лишние записи...
К сожалению моих знаний в SQL запросах пока недостаточно, чтобы самому его написать...
13. Денис (denp2002) 10.03.11 01:28
К данной публикации нашел запрос, который мне помог

delete from Config 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 Config
WHERE FileName Like '%_dynupdate_%')as a
where a.sm != 1 ) as b
on b.mdt != c.modified and b.FileName = c.FileName)

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

update Config set filename = substring(filename, 0, 37)
where FileName like '%_dynupdate_%'
14. Maksim Titov (Maks_Payn) 05.10.11 11:07
пробывал запрос в SQL 2008 и он мне ругнулся на синтаксис...
можете подсказать как будет выглядить запрос для 2008 сервера?
15. Игорь Серебренников (PastorNak) 25.11.11 13:29
Если есть живая копия базы:
Вылечилось скриптом

GO
DROP TABLE [dest].[dbo].[Config]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dest].[dbo].[Config](
[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 [dest].[dbo].[Config]
SELECT * FROM [src].[dbo].[Config]
GO
где dest - повреждённая база, а src - восстановленная из архива.
Norml; Letos; +2 Ответить
16. Игорь Серебренников (PastorNak) 25.11.11 13:30
17. Игорь Серебренников (PastorNak) 25.11.11 13:31
(14) Maks_Payn, проверьте соотбетствие кавычек, обычно при копировании возникает глюк кодировки
18. Игорь (avega) 03.07.12 08:38
Если используется терминальный вариант подключения к базе, и ошибка вылетает лишь у одного пользователя а остальных пускает в базу, то достаточно почистить файлы в подкаталогах C:\USERS\ИМЯ_Пользователя\Application Data\1C\1Cv82. После этого необходимо будет добавить в список баз ту базу на которой вылетала ошибка т.к. список баз обнулится. И можно работать! ;) Перезагрузка сервера не требуется. Сие актуально для Windows Server
19. andrey dyak (dyak84) 23.04.13 18:06
Автор спасибо такое бывало и не обнажды. Лечил востановлением из бекапа пробовал разные методы колдовства но они почемуто не сработали.При случае попробую и ваш метод. Про результат обязательно отпишусь. Спасибо за роботу так держать.