1с 8 при сохранении конфигурации произошла ошибка повторить сохранение конфигурации

Обновлено: 07.07.2024

". И опыт, сын ошибок трудных. "
прекрасное обобщение практики, и очень понятно.
СПАСИБО! чиню подобным скриптом
GO
DROP TABLE [ПОЛОМАНАЯ_БАЗА].[dbo].[Config]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [ПОЛОМАНАЯ_БАЗА].[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 [ПОЛОМАНАЯ_БАЗА].[dbo].[Config]
SELECT * FROM [БЭКАПНАЯ_БАЗА].[dbo].[Config]
GO audion; Dali; skilster; ZeroDM; tehas; madonov; Andre32; Minakov00078; partner1c; cj512; DrSender; trickster; dutlovva; dour-dead; Jkey; Nicholas; Aragorn; Release; pauchok; AlexGS; Kaavan; VitaliyTokarev; sakustov; ctulhua; Garstag; prokopulka; arabesca; ZeusF1; JohnyDeath; dandrontiy; skil; VanDiesel1; ГМВ; marsohod; + 34 – Ответить (4) 1cvirus, Если не сложно, объясните, в чем заключается работа данного скрипта? (11) 1cinfo1,
удаляем таблицу конфигурации и записываем на ее место таблицу с рабочей конфигурацией

(16)Совершенно верно, если на пальцах - вычищаем таблицу с конфигурацией в рухнувшей базе и записываем туда такую же но рабочую конфигурацию из другой неважно какой базы.
Можно склеить пункт 2 и 3, предварительно убедивщись что таблица ConfigSave - пустая.
Use Base2009
go
Delete From [DBO].[Config]
go
insert into [base2009].[Dbo].[Config] select * from [BaseCopy].[Dbo].[Config]
go

(14) Возможно побыстрее будет - но в общей сложности пункт 2 + 3, на конфе УПП котоая весит в cf-файле 365 мб занял около 10 секунд, что для меня не очень критично.

(17) Подскажите пжл, можно ли восстановить не sql-ную базу

(4) 1cvirus, Спасибо, думал сам писать потом увидел комментарий.

Вернул таблицу из копии, все заработало.

(4) 1cvirus, подскажите пжл, что должно стоять вместо [ПОЛОМАНАЯ_БАЗА], я в скриптах плохо разбираюсь, а восстановить очень-очень надо. спасибо (4) 1cvirus, Спасибо! Хирургически восстановил БД. Помогло! (4) Спасибо за скрипт! База запустилась. Работает. Однако при попытке внести в нее изменения - снова возникает ошибка нарушения целостности структуры. Как победить? Сейчас приходится изменять дочернюю конфигурацию и скриптом заливать изменения в основную Спасибо большое!
Я все таки надеюсь никогда не пригодиться.
Хотя всякое бывает, если что буду держать под рукой.
Сенкс! Согласен, хорошее решение, но никому не пожелаю причину, по которой ею можно воспользоваться, спасибо!

Совсем недавно абсолютно похожая ситуация случилась и у меня

УПП 1.3.19 PostgreSQL 8.3.8
при обновлении конфигурации БД упал сеанс конфигуратора.
После этого случился сабж.
Очень помогла эта статья - но сделал немного по другому

через PG_ADMIN
1. copy config to '/home/user/config_1.txt в упавшей базе
2. copy config to '/home/user/config_0.txt в базе поднятой из последнего бэкапа
3. delete from config в упавшей базе
4. copy config from '/home/user/config_0.txt в упавшей базе

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

(7) asady, мне не помогло. Может кому-то пригодится. Я просто выполнил в pg_admin delete from configsave

После этого смог удачно открыть свою конфигурацию (откатиться к конфигурации БД)

через PG_ADMIN
1. copy config to '/home/user/config_1.txt в упавшей базе
2. copy config to '/home/user/config_0.txt в базе поднятой из последнего бэкапа
3. delete from config в упавшей базе
4. copy config from '/home/user/config_0.txt в упавшей базе

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

я извиняюсь, а можете тупому объяснить вот эту часть строки '/home/user/config_1.txt ?
у нас просто ОС Windiws, как мне там написать, пример можете прислать на будущее?

а так у меня получилось восстановить эту таблицу такими действиями:
- в pg_admin delete from config
- открыл таблицы копии базы, там config сделал backup
- и у таблицы config упавшей базы сделал restore

если делать без удаления, то выдает ошибку что запись такая то уже есть

Спасибо!
Надеюсь - никогда не понадобится.
Замечания только по пунктуации. Спасибо за статью! Теперь можно более спокойно прыгать с парашютом (обновлять конфу, имея какоё-либо БЭКАП), имея ещё и запасной парашют (эту методику). Спасибо большое за статью. Только что произошла такая же ситуация, никогда б не подумал, что при замене пары отчетов может такое случится. Для читателей: если у Вас не та самая критическая ситуация, описанная в статье, то рекомендую первым делом прочитать пункт 5! В нём наиболее важная информация, которая может помочь Вам избежать опыта автора.
А в целом - респект!

Нормально, только мне кажется вместо

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

Платформа 1С:Предприятие 8.2 (8.2.15.294).

При обновлении конфигурации конфигуратор завис, windows сказал что приложение будет закрыто. После этого в базу попасть никак не мог.
Пытался восстановить по инструкции http://www.gilev.ru/1c/81/restore/ , но ситуация не изменилась.
Так как это была копия рабочей БД решил поэкспериментировать.
Сравнил чем отличаются таблицы Config битой базы от целой. В битой базе были 2 записи, которых небыло в целой, с полями FileName = 'commit' и FileName = 'dbStruFinal' binaryData 0x0. Никакой информации об этих полях не нашел. Удалил эти записи. Запустил конфигуратор, он выдал предупреждение "Внимание. При обновлении данных, после последней реструктуризации, произошла критическая ошибка. Повторить обновление?" нажал "Да" и все обновилось.
Не знаю на что еще могло повлиять удаление.

Спасибо большое за статью. Сегодня она меня реально выручила.

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

Знал бы раньше этот прикуп - жил бы в Сочи :)

Рекомендую при подобной ситуации попробывать восстановить базу исходя из последнего опыта и сноски. Все просто и быстро. Не нужны копии и скрипты. Правда как и в первом случае 100% успешного результата не обещаю но попробывать конечно же стоит. Спасибо огромное за публикацию. Воспользовался ей повторно и особенно сноской. очень помогло, действительно описанным способом можно легко восстановить базу и хотя бы сделать бекап. Спасибо огромное статья помогла. Но біло так страшно что передать не могу на все решилось автору огромное спасибо так дердать.Заслуженое 5+ респект Хорошая статья.До этого была та же проблема. Думал смерть моя пришла).Выручила копия базы. Зато, после этой проблемы слежу за снятием копии ежедневно))) Автор написал, что на 81 таких проблемм не было, но мне кажется что было, да еще как. Происходили подобные сбои в случае неоднократного динамического обновления, без выгонялки пользователей. После одного из таких сбоев, была забавная ситуация, пускало в конфигуратор и в предприятие одного-двух пользовтаелей, если больше базы висла "наглухо", ни выгрузку ни ТИИ не отрабатовало, приводило к зависанию. Приведенным в статье способом, базу поднять не удалось, к счастью потерялось с прошлого бэкапа 2-3 часа. С тех пор больше никогда не использую динамическое обновление больше 1-го раза в день, даже по-мелочи. Честно говоря надеялся, что эти проблеммы ушли в 82, но видать нет. Еще удивляет, когда я искал подобную проблемму пару лет назад на форумах, то такой ситуацией сталкивались единицы, а в коментах у этой стать чуть ли не каждый второй пишет о подобной проблемме, лично у меня за крайние 2 года больше не было таких косяков, к счаcтью. (29) Just, 3 года обновлял динамически на 8.1 - не было проблем ни разу. а на 8.2 - за год - 2 раза падала, один раз успешно восстанавливал как описано в статье. да вобщем-то 8.3 готовится. )))

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

все больше никаких динамических

восстановил по вышеописанному скрипту:

Use Base2009
go
Delete From [DBO].[Config]
go
insert into [base2009].[Dbo].[Config] select * from [BaseCopy].[Dbo].[Config]
go

Была практически такая ситуация. Помог вовремя сделанный бэкап до обновления. Бэкап рулит )). Спасибо за статью. Теперь буду еще более готов ко всяким таким вещам. Спасибо огромное! Реально спасло. Работает на MS SQL 2008 R2 64x. Данные сохранились все; единственно во время первого запуска конфигуратора в заголовке появился <!> (несмотря на то что предварительно была очищена ConfigSave). ну и сохранение конфигурации происходило очень долго

5 минут. Вобщем, все по делу - спасибо.

Use Base2009
go
Delete From [DBO].[Config]
go
insert into [base2009].[Dbo].[Config] select * from [BaseCopy].[Dbo].[Config]
go

Шикарно просто, ОГРОМНЕЙШЕЕ СПАСИБО за идею, до сих пор шок, как ваще такое может случиться. добавил в оборотно-сальдовую ведомость номера страниц блин.

Есть новое решение проблемы, для тех у кого не сохранилось базы с такой же конфигурацией;
1. Очищаем configsave
2. delete from config where FileName = 'commit'
3. delete from config where FileName = ' dbStruFinal'.
Запускаю 1С, все работает. Потом попробовал сохранить конфигурацию, все сохранилось, работаем уже на такой базе в течении 5-ти часов, полет нормальный, вариант кстати очень быстрый Спасибо большое за статью, взял конфигу из центрального узла (отличающуюся но без изменения в метаданных), создал пустую базу, загрузил. Запустил код - все заработало! Александр4023512; RibD; dutlovva; Скорпио_шка; nzass; deadmz; + 6 – Ответить Для себя завел правило перед любым обновлением конфы сначала Бакап, имхо ведь можно так запороть базу что и простое перезаливание конфы из другой базы не поможет.

можно тогда написать процедуру/функцию которая будет конектится к своей SQL-базе и делать что-нить типа

insert into [Dbo].[Config]<Дата><Время> select * from [Dbo].[Config]

типа быстрый бекап cf-ника, ну а дальше мысль развивайте кто как хочет: можно на кнопку прикрутить к админскому интерфейсу, или программно определять, что это первый запуск(удачный) после пересборки(правда не знаю как, но мысль мне нравится). База при этом будет пухнуть и ее придется чистить переодически, но это уже другая история и всего лишь накладные расходы. Можно например создать под эти таблицы отдельный data-файл или вообще отдельную базу, не 1С-ную, под эти нужды(выдыхай борёр, выдыхай. )
Кому мысль нравится - ставим "+" коментарию не стесняясь.

Сегодня статья реально спасла, база умерла при обновлении - сделали все по инструкции - ожила как спящая красавица, так что спасибо человеку за его первую статью, дай бог не последнюю. ОГРОМНОЕ СПАСИБО. Второй раз, благодаря Вашей статье, поднтмаем базу :) Ребята, подскажите, базу я восстановила через HxD, убрала из таблицы confif "commit". Только сейчас другая проблема. Конфа базовая, загружает обновление, начинает обновлять но обновление не заканчивает. Загружает конфигурацию и выкидывает служебное окно, что для обновления все готово, обновить или при следующей загрузке. И так бесконца. Пробовала обновить вручную, через конифигуратор выдает ошибку Неправильный путь к файлу 'v8srvr://dbeng8/f05133110/Config. Пробовала реструктуризацию, после этого ошибка формата потока и база перестает загружаться.
Помогите пжл, уже голову сломала. нет слов моей благодарности! Тысячу раз спасибо. как вовремя я нашла вашу публикацию.

На терминалке кончилась память в момент динамического обновления. И дальше все по симптомам.
Догадывался, что так можно сделать, но без подтвержденного опыта не рискнул бы. А так юзеры курили около часа, пока тестовая копия жрала хранилице для создания нового прототипа config.
Большое спасибо!

И, нафиг-нафиг, поставлю ночное задание:

use my_1c_database_name
declare @name varchar(64)
select @name = name from sys.Tables where name = 'config_backup'
if @name = 'config_backup'
drop table config_backup
select * into config_backup from config

Вот спасибо огромное! 5 минут и все готово. Учетом поиска этой статьи :) Бэкп был, но база тестовая и хотелось попытаться восстановить результаты до последнего изменения в течении дня хотя бы. В результате выяснилось, что сохранен уже самый последний вариант.
И еще небольшое наблюдения по подобным проблемам: лучше не сохранять сразу и рабочую конфигурацию, и конфу базы данных. Т.е. лучше сначала сохранить основную конфигурацию. А уже только после этого конфигурацию БД. Так ошибки появляются на порядок реже (если вообще появляются). спасибо автору. База умерла при обновлении и отказывалась возрождаться, уже готовились к худшему (восстановление из бекапа с потерей данных за полдня), а тут ваша статья очень вовремя нашлась и жизнь наладилась ))). СПАСИБО. Олег, огромное тебе спасибо!
Выручил, уже не знал что делать с базой, вылетела в конце рабочего дня, а бэкап делается ночью, целый рабочий день 170 пользователей мог потеряться, меня бы расстреляли.. ))
Твой пост, реально помог. Мда, спасибо огромное за инфо. Случилась такая же проблема при динамическом обновлении периферийной БД, включающем незначительные изменения прав на объекты конфигурации.
После возникновения ошибки заметил зависшее несколько дней назад фоновое задание. думаю связано именно с этим. Так что перед обновлением убедитесь в отсутствие оных и включайте блокировку регламентных заданий. В копилку.
Надеюсь никогда не придёться воспользваться. Мне в такой ситуации помогло:
1. Очищаем configsave
2. delete from config where FileName = 'commit'
3. delete from config where FileName = ' dbStruFinal' Alta_k; dutlovva; dour-dead; Aragorn; mordiros; STivO; Rego1337h; VanDiesel1; + 8 – Ответить (61) romak78,
Спасибо, помогло.
Согласен с Вами. В корректно обновленной конфигурации базы данных (таблица Config) таких строк быть не должно.
Пустая таблица ConfigSave означает, что она основная конфигурация не отличается от конфигурации базы данных.

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

Уйма времени ушла на создание бекапа. Минут 5 выполнялся запрос:
Use Base2009
go
Delete From [DBO].[Config]
go
insert into [base2009].[Dbo].[Config] select * from [BaseCopy].[Dbo].[Config]
go

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

Полезная статья, но лучше все-таки с таким встречаться редко, но про запас сохраню в книгу знаний Рад что кому-то помог еще. Да и самому себе опять на днях пришлось помочь ) Переехали в новый офис а тут связь плохая с сервером. Ну и при сохранении конфы рухнула база опять. Восстановил минут за 15 без бэкапа - минут 12 ушло на то чтобы пользователей оставшихся выгнать

А вообще молодец, толково ты все обьяснил))) 5 с плюсом))))))))))))))

(67) plevakin, Это все хорошо)))) Быстро ответил и все дела))) Но есть кнопка "Ответить" ))) Спасибо за статью, пригодилось, когда база после очередного демонического обновления перестала запускаться (зависала намертво при запуске)

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

Так что Ваша статья просто спасла жизнь :)

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

Это её наконец поправили?

Вообще в configsave хранятся только измененные объекты, не вся конфигурация.
При обновлении конфигурации записи из configsave копируются в config замещая аналогичные записи, потом таблица configsave очищается, а в таблице config записи где FileName = 'commit' и FileName = 'dynamicCommit' удаляются.

Мне в такой же ситуации когда во время сохранения конфигурации произошел сбой помогло:
1. В моем случае таблица configsave была пустая, если бы была полная - надо было очистить.
2. delete from config where FileName = 'commit'
3. delete from config where FileName = 'dynamicCommit'

P.S.
Другие записи, в том числе, где FileName = 'root', FileName = 'DynamicallyUpdated', FileName = ' version', FileName = 'versions' трогать не надо.
Можно удалить запись где FileName = 'dbStruFinal', но она в принципе не влияет на загрузку, удалится сама при очередном обновлении.

pfz_spb; KAPACEB.AA; Alta_k; Nicholas; Aragorn; veforg; taishy; mordiros; + 8 – Ответить Можно удалить запись где FileName = 'dbStruFinal', но она в принципе не влияет на загрузку, удалится сама при очередном обновлении.

Два дня назад осуществили переход с 8.1 на 8.2 - меняли конфу УПП 1.2. на 1.3.22.1. Соответственно куча отличий от типовой конфигурации, которые накатывали - повлекло за собой кучу ошибок. Два дня, не ночуя, меняем конфигурацию в режиме нон-стоп. Конфигуратор сохраняется раз 15 в час. Следовало ожидать, что при сохранении, конфигурация может вылететь, что собственно и произошло. Такие проблемы, в конфе 8.1 - всегда разрешались выходом пользователей, которые еще работали в базе, но уже не могли повторно войти и монопольным доступом. В нашей же новой конфигурации 8.2 база сказала нам "Я устал. Я ухожуй" ), в общем проблема описана в анонсе.

Что было предпринято из правильного и неправильного. И совет о том что делать первым делом.

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

В общем во всех трех статьях ответ на решение текущий проблемы один - "Восстанавливайте базу из бэкапа".

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

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

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

(Внимание. Посмотрите обязательно сноску снизу, если хотите попробывать оживить и саму конфигурацию. Сегодня (18.04.2012) путем экспериментов мне это удалось ибо стало жалко недельный труд который был проделан над ней. Таким образом получилось базу оживить оставив старый конфигуратор без всяких копий)

Исходные данные - SQL база 1С 8.2, конфигурация УПП 1.3.22.1 (полагаю описанный способ подойдет для любой эскюэльной базы 8.2). SQL сервер 2005. Ошибка описанная в анонсе и ошибка возникшая в момент сохранения конфигурации! Самое важное и обязательное требование. Копия SQL базы с ТАКОЙ ЖЕ КОНФИГУРАЦИЕЙ(!) У нас настроен авто-обмен с другой базой и конфигурации их совпадают. Кроме этого, так как нас трое программистов 1С - у каждого есть выгруженный и относительно свежий файл конфы. По факту подойдет любая база, неважно с какими данными, главное чтобы конфигурация в ней соответствовала структуре метаданных базы. Отмечу тот факт, что конфигурация даже немного отличалась от той, с которой база вылетела. Самое основное, на мой взгляд, требование, чтобы отличия в конфигурации не затрагивали метаданные. Не стоит забывать тот факт, что если конфигурация отличается, то в итоге вы получите рабочую базу но с конфигурацией из вашей копии.

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

1. Делаем бэкап рухнувшей базы средствами SQL.

2. Очищаем таблицу dbo.config нашей базы в которой лежит наша порушенная конфа. Это можно сделать из SQL- Profiler, к примеру запустив в нем команду:

Delete From [DBO].[Config]

где Base2009 имя рухнувшей базы.

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

3. Копируем таблицу из базы с целой конфигурацией, в нашу порушенную базу. В моём случае обе базы были на одном сервере поэтому команда копирования в SQL-Profiler выглядела так.

insert into [base2009].[Dbo].[Config] select * from [BaseCopy].[Dbo].[Config]

где base2009 - имя рухнувшей базы, BaseCopy имя базы с копией конфигуратора

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

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

5а. Если конфигурация базы с которой вы будете копировать таблицу конфы - все-таки отличается, (не имея при этом отличий в метаданных, о чем я уже говорил), и где-то лежит ваш относительно свежий cf-файл с выгруженной конфой - накатываем его на ожившую базу. В противном случае Вам придется повторить все те отличия, которые были с копией конфигуратора. Так что еще раз хорошо подумайте и проанализируйте - что важнее - ваша работа по изменению конфигурации (и сколько времени вы на это потратите) или работа пользователей базы до момента последнего бэкапа. В моем случае это была работа 2-х программистов в течении 3-х часов против работы порядка 100 пользователей в течении 1.5 дней, так что выбор был очевиден.

З.Ы. Еще раз напомню? что данная функция восстановления является недокументированным 1С-овцами способом восстановления базы (в конкретном случае обрушения базы, произошедшего в процессе сохранения конфы) и все что вы делаете - вы делаете на свой страх и риск, но конкретно в моем случае других путей оживить базу с минимальной потерей существующей информации не было (лог файл потерли и самый свежий бэкап представлял потерю 1.5 дня работы порядка 100 пользователей), поэтому, как говорится мосты были сожжены )

З.Ы.Ы. Это моя первая публикация тут т.к. трусь на других 1С форумах, но нахожу этот ресурс одним из самых полезных в плане выложенных разработок и публикаций, поэтому не судите строго за много ЕСЛИ в данной публикации). Буду очень рад, если реально помог кому-нибудь с восстановлением порушенной базы ибо страшнее этого только ядерная война )

З.Ы.Ы.Ы. Спустя 3 недели проблема повторилась ) На этот раз на решение было потрачены какие-то секунды (если не учитывать время создания бэкапа), и даже пользователей не пришлось выгонять.

Сегодня прибежал коллега. Та же самая беда. Только база тестовая а не рабочая и сама база ему поскольку постольку - а вот конфигуратор ему важен. Неделю он краптел над ним ни разу не выгрузив в cf файл и не накатив изменения в рабочую базу. Ну что ж - почему бы не поковырятся уже с таблицей?! На этот раз все еще проще. Открываю SQL Managment Studio. Формирую запрос по таблице на поля с текущей датой изменения и временем когда у него вылетела база - результат дает 2 записи. Первая - Поле FileName = "commit" Ну что же - грохнуть эту запись - и у меня все получилось! Конфигуратор ожил и база опять работает. Что же нужно сделать?!

Предистория

Два дня назад осуществили переход с 8.1 на 8.2 - меняли конфу УПП 1.2. на 1.3.22.1. Соответственно куча отличий от типовой конфигурации, которые накатывали - повлекло за собой кучу ошибок. Два дня, не ночуя, меняем конфигурацию в режиме нон-стоп. Конфигуратор сохраняется раз 15 в час. Следовало ожидать, что при сохранении, конфигурация может вылететь, что собственно и произошло. Такие проблемы, в конфе 8.1 - всегда разрешались выходом пользователей, которые еще работали в базе, но уже не могли повторно войти и монопольным доступом. В нашей же новой конфигурации 8.2 база сказала нам "Я устал. Я ухожуй" ), в общем проблема описана в анонсе.

Что было предпринято из правильного и неправильного. И совет о том что делать первым делом.

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

В общем во всех трех статьях ответ на решение текущий проблемы один - "Восстанавливайте базу из бэкапа".

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

Требования и непосредственно само восстановление базы

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

(Внимание. Посмотрите обязательно сноску снизу, если хотите попробывать оживить и саму конфигурацию. Сегодня (18.04.2012) путем экспериментов мне это удалось ибо стало жалко недельный труд который был проделан над ней. Таким образом получилось базу оживить оставив старый конфигуратор без всяких копий)

Исходные данные - SQL база 1С 8.2, конфигурация УПП 1.3.22.1 (полагаю описанный способ подойдет для любой эскюэльной базы 8.2). SQL сервер 2005. Ошибка описанная в анонсе и ошибка возникшая в момент сохранения конфигурации! Самое важное и обязательное требование. Копия SQL базы с ТАКОЙ ЖЕ КОНФИГУРАЦИЕЙ(!) У нас настроен авто-обмен с другой базой и конфигурации их совпадают. Кроме этого, так как нас трое программистов 1С - у каждого есть выгруженный и относительно свежий файл конфы. По факту подойдет любая база, неважно с какими данными, главное чтобы конфигурация в ней соответствовала структуре метаданных базы. Отмечу тот факт, что конфигурация даже немного отличалась от той, с которой база вылетела. Самое основное, на мой взгляд, требование, чтобы отличия в конфигурации не затрагивали метаданные. Не стоит забывать тот факт, что если конфигурация отличается, то в итоге вы получите рабочую базу но с конфигурацией из вашей копии.

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

1. Делаем бэкап рухнувшей базы средствами SQL.

2. Очищаем таблицу dbo.config нашей базы в которой лежит наша порушенная конфа. Это можно сделать из SQL- Profiler, к примеру запустив в нем команду:

Delete From [DBO].[Config]

где Base2009 имя рухнувшей базы.

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

3. Копируем таблицу из базы с целой конфигурацией, в нашу порушенную базу. В моём случае обе базы были на одном сервере поэтому команда копирования в SQL-Profiler выглядела так.

insert into [base2009].[Dbo].[Config] select * from [BaseCopy].[Dbo].[Config]

где base2009 - имя рухнувшей базы, BaseCopy имя базы с копией конфигуратора

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

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

5а. Если конфигурация базы с которой вы будете копировать таблицу конфы - все-таки отличается, (не имея при этом отличий в метаданных, о чем я уже говорил), и где-то лежит ваш относительно свежий cf-файл с выгруженной конфой - накатываем его на ожившую базу. В противном случае Вам придется повторить все те отличия, которые были с копией конфигуратора. Так что еще раз хорошо подумайте и проанализируйте - что важнее - ваша работа по изменению конфигурации (и сколько времени вы на это потратите) или работа пользователей базы до момента последнего бэкапа. В моем случае это была работа 2-х программистов в течении 3-х часов против работы порядка 100 пользователей в течении 1.5 дней, так что выбор был очевиден.

З.Ы. Еще раз напомню, что данная функция восстановления является недокументированным 1С-овцами способом восстановления базы (в конкретном случае обрушения базы, произошедшего в процессе сохранения конфы) и все что вы делаете - вы делаете на свой страх и риск, но конкретно в моем случае других путей оживить базу с минимальной потерей существующей информации не было (лог файл потерли и самый свежий бэкап представлял потерю 1.5 дня работы порядка 100 пользователей), поэтому, как говорится мосты были сожжены )

З.Ы.Ы. Это моя первая публикация тут т.к. трусь на других 1С форумах, но нахожу этот ресурс одним из самых полезных в плане выложенных разработок и публикаций, поэтому не судите строго за много ЕСЛИ в данной публикации). Буду очень рад, если реально помог кому-нибудь с восстановлением порушенной базы ибо страшнее этого только ядерная война )

З.Ы.Ы.Ы. Спустя 3 недели проблема повторилась ) На этот раз на решение было потрачены какие-то секунды (если не учитывать время создания бэкапа), и даже пользователей не пришлось выгонять.

Сегодня прибежал коллега. Та же самая беда. Только база тестовая а не рабочая и сама база ему поскольку постольку - а вот конфигуратор ему важен. Неделю он краптел над ним ни разу не выгрузив в cf файл и не накатив изменения в рабочую базу. Ну что ж - почему бы не поковырятся уже с таблицей?! На этот раз все еще проще. Открываю SQL Managment Studio. Формирую запрос по таблице на поля с текущей датой изменения и временем когда у него вылетела база - результат дает 2 записи. Первая - Поле FileName = "commit" Ну что же - грохнуть эту запись - и у меня все получилось! Конфигуратор ожил и база опять работает. Что же нужно сделать?!

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

1.jpg

2. Откройте конфигурацию

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

Меню: Конфигурация – Открыть конфигурацию

Конфигурация откроется и станут доступны кнопки ее сохранения в меню.

2.jpg

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

3. Сохраните конфигурацию

Для сохранения конфигурации в файл на диске воспользуйтесь

Меню: Конфигурация – Сохранить конфигурацию в файл

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

3.jpg

После указания папки и имени файла нажмите кнопку «Сохранить».

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

4.jpg

5.jpg

Размещение файла сохраненной конфигурации 1С в интернете

Примечание: размер конфигурации может быть около 300 Мб, при этом Outlook обычно не пропускает письма больше 20Мб, а во многих компаниях устанавливаются еще меньшие ограничения на размер писем.

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

6.jpg

2. Загрузка файла

Нажмите на кнопку «Обзор» в разделе «Загрузить файл»:

7.jpg

В открывшемся окне выберите папку, куда сохранили конфигурацию, выделите мышкой сам файл конфигурации и нажмите кнопку «Открыть».

8.jpg

После выбора файла нажимайте кнопку «Загрузить» на сайте. Некоторое время понадобится для загрузки файл в интернет. Время зависит от размера файла конфигурации и скорости вашего интернет соединения.

9.jpg

Нажмите на кнопку «Сохранить файл», чтобы загруженный файл сохранился на сервере. Когда файл сохранится, вы перейдете на страницу, где будет доступен адрес файла:

10.jpg

3. Отправка сохраненной конфигурации электронным письмом

Отправьте адрес файла специалисту, просто скопировав ссылку на него в обычное электронное письмо, и он сможет скачать ваш файл конфигурации.

Читайте также: