Помилка перетворення інформаційної бази. Увага!!! При оновленні даних після останньої реструктуризації сталася помилка

Переїжджали ми на новий сервер. На ньому SQL та 1C. У порівнянні зі старими був набагато крутіший. І тест Гільова це теж підтвердив: проти 10-15 на старих серверах видавав 39. Тому ми одразу після покупки перенесли базу та розпочали роботу.

Але рано чи пізно щось пішло не так — користувачі стали скаржитися на повільну роботу. Зробили певні налаштування сервера та служб (які - тема окремого поста) і вирішили перезавантажити сервер, благо швидкість перезавантаження - 2 хвилини (на інших серверах до 10 доходило). Після цього при вході в 1С отримуємо таке повідомлення:

"Увага!!! При оновленні даних, після останньої реструктуризації, Виникла помилка. Повторити оновлення? "Та ні"

Після натискання кнопки «Так» з'являється таке:

«Виявлено незавершену операцію збереження конфігурації. Для продовження роботи необхідно завершити операцію.

Перше, що вирішив зробити - CHECKDB на Managment Studio - після 2х годин очікування (база 500 ГБ) - все ОК.

На просторах мережі знайшов інформацію, що така ж помилка буває за динамічного оновлення.

Рішення, запропоновані в мережі відразу не допомогли, але разом з іншими події дали результат. Отже, що я робив:

Рішення:

  1. Те, чого не вистачало для рішень із мережі:

sp_configure ‘allow updates’, 1
reconfigure with override
go

2. Переводимо базу в режим відновлення

alter database set EMERGENCY, SINGLE_USER

3. Виконуємо тестування бази:

dbcc checkdb('db_name', REPAIR_ALLOW_DATA_LOSS)

4. Виводимо базу з режиму відновлення:

alter database set ONLINE, MULTI_USER

5. В принципі, якщо впевнені, що з самою базою все ок, то можна не робити 2-4 пункти. Далі виконуємо два запити у профайлері SQL:

delete from config where FileName = ‘commit’
delete from config where FileName = ‘dbStruFinal’

Ці записи відповідають за динамічне оновлення — можна не боятися їх видаляти.

У робочих версіях баз запити:

select * from Config WHERE FileName = ‘commit’

select * from Config WHERE FileName = ‘dbStruFinal’

будуть порожні.

6. повертаємо налаштування:

sp_configure 'allow updates', 0
go

7. Після цього вдалося запустити конфігуратор та база запрацювала.

Також база може отримати після видалення першого прапора.

Пісочниця

авторитет 18 вересня 2013 о 15:24

1С, відновлення конфігурації інформаційної базиз використанням MS SQL

Свого часу зіткнувся з проблемою: при оновленні конфігурації зі сховища стався збій і закрилася 1С.

Як з'ясувалося пізніше - відбулося руйнування сховища конфігурації та при оновленні конфігурації зі сховища злетіла і конфігурація БД. Подібна помилка виникала насамперед за динамічного оновлення ІБ.

Т.к. дана проблемавиникала неодноразово вирішила поділитися варіантом лікування.

При наступному запуску конфігуратора виникла помилка: «Увага! При оновленні даних після останньої реструктуризації сталася помилка. Повторити оновлення? при ствердній відповіді отримуємо повідомлення: «Виявлено незавершену операцію збереження конфігурації. Для продовження роботи необхідно завершити операцію» після цього програма закривається.

При розборі цієї проблеми було знайдено кілька варіантів вирішення проблеми, кожне рішення працює у різних випадках.

Варіант 1 (за наявності бекапу SQL з копією з ідентичною конфігурацією):

Розгортається копія ІБ, та виконується запит наступної конструкції:
USE GO DELETE FROM .. GO INSERT INTO .. ​​SELECT * FROM .. GO
При цьому переливається таблиця в якій зберігається конфігурація ІБ. Бажано після цієї операції виконати тестування та виправлення ІБ.

Варіант 2 (за відсутності бекапу):

До цього варіанта звернулися як до останньої соломинки. Т.к. Конфігурація була на стадії розробки і про бекап трохи забули сподіваючись на сховище.
В базі видаляються два записи з таблиці Config за значенням в стовпці FileName - dbStruFinal і commit

Виконується наступний запит:
USE GO DELETE FROM. WHERE FileName = "dbStruFinal" GO DELETE FROM . WHERE FileName = "commit" GO
Хоч як дивно база оживає.

Теги: 1с підприємство 8.2, SQL, відновлення конфігурації

Ця стаття не підлягає коментуванню, оскільки автор ще не є повноправним учасником спільноти. Ви зможете зв'язатися з автором лише після того, як він отримає

При роботі в «1С:Підприємство» може випливти таке повідомлення: «Для роботи з новою версією 1С:Підприємства має бути виконане перетворення інформаційної бази». Чому це вікно з'являється і як можна усунути помилку?

Найчастіше причина появи вікна – недавній перехід програми з застарілої версії платформи на нову. У різних платформ інформаційна база 1Сформується по-своєму та приймає різний склад. Все, що потрібно зробити – зробити конвертацію бази даних (структура якої відповідає застарілій платформі) у новий формат.

Перетворення БД

Процедура ця нескладна, проте спочатку рекомендується створити резервну копіюбази, на випадок, якщо під час конвертування буде помилка (наприклад, відключиться комп'ютер, в результаті інформаційна база 1С, як і програма, можуть пошкодитися). Потім застосуйте наступний алгоритм дій:

  • Відкрийте БД у режимі конфігуратора;
  • Ви побачите повідомлення із пропозицією конвертувати інформаційну базу. Натисніть підтвердження;

  • Закрийте конфігуратор.

Відкрийте базу даних – вона має запуститися без проблем. Якщо після перетворення вікно помилка продовжує з'являтися, можна спробувати виконати процедуру повторно. У випадку, коли це не допомагає, необхідно звернутися до програміста 1С. Іноді під час операції програма може підвисати. Не треба в цей момент робити жодних дій.

Важливо! Інформаційна база 1С, перетворена останньою версієюПрограма не може бути відкрита на попередніх версіях.

Передісторія

Потрібно було створити новий регістр відомостей "ЖурналВідстеження Повідомлень". Додали до конфігурації, завантажили дані. Потім пішла робота з оптимізації. Довелося змінювати структуру регістру. Але не тут було!

Тут усе зрозуміло. Записи стали неунікальними, їх треба видалити!

Найпростіший спосіб це:

НовийЗапис = РеєстриВідомостей.ЖурналВідстеженняПовідомлень.СтворитиНабірЗаписів(); НовийЗапис.Записати();

Таким методом ми очистимо регістр у 1С дуже швидко (але це буде і нашою помилкою).

Помилка

Здавалося б, у регістрі порожньо, і можна оновлювати 1С. Не хочу вас здивувати, але знову буде помилка:


Що ж така помилка:

У процесі оновлення інформаційної бази сталася критична помилка
по причині:
Спроба вставки неунікального значення в унікальний індекс:
Microsoft SQL Server Native Client 11.0: Створення UNIQUE INDEX statement termined because a duplicate key was found for object name "dbo._InfoRgChngR34546NG" and index name "_InfoR34546_ByNodeMsg_RNTSRRRRRRNG". The duplicate key value is (0x00000011,d7, , Sep 27 4015 10:22PM, 768404,00,00,00,00,00,00).
HRESULT=80040E2F, SQLSrvr: SQLSTATE=23000, state=1, Severity=10, native=1505, line=1

Пояснення

Давайте розберемося зі структурою SQL. У нас є регістр "ЖурналВідстеження Повідомлень", він SQL знаходиться в таблиці " _InfoR34546". Перевірити це ви можете спеціальними обробками або методом "тику" (нам це не доведеться робити тому що в тексті помилки вже вказано назву таблиці).

А тепер поясню, що сталося. Коли ми завантажили дані в регістр, то SQL вони потрапили в таблицю " _InfoR34546". Коли ми кодом в 1С очистили таблицю, ці дані пішли з таблиці " _InfoR34546", але вони скопіювалися в таблицю " _InfoRgChngR34546". Це і стало проблемою.

Рішення

Для вирішення проблеми нам знадобиться очистити SQL таблицю "_InfoRgChngR34546".

Розповім на прикладі "Microsoft SQL Server Management Studio". Заходимо до " Management Studio". Знаходимо нашу базу, відкриваємо вкладку таблиць, натискаємо на будь-яку і тиснемо кнопку "Новий запит":. Тепер набираємо запит

Truncate table "_InfoRgChngR34546"

У вас може бути інша таблиця! Не забувайте!

І натискаємо виконати або клавішу "F5". Ось такий має бути результат:

Все тепер можна спокійно оновлювати 1С, і помилки не буде!

Поділитися