Грешка „възникна критична грешка при актуализиране на информационната база“. Грешка при преобразуване на информационна база Възникна критична грешка 1c по време на актуализацията

Грешка „възникна критична грешка при актуализиране на информационната база“. Грешка при преобразуване на информационна база Възникна критична грешка 1c по време на актуализацията

заден план

Трябваше да създадем нов информационен регистър "MessageTrackingLog". Добавено към конфигурацията, заредени са данните. След това дойде работата по оптимизацията. Трябваше да променя структурата на регистъра. Но го нямаше!

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

Най-простият начин е:

NewRecord =RegistersInfo.MessageTrackingLog.CreateRecordSet(); НовЗапис.Запис();

С този метод ще изчистим регистъра в 1C много бързо (но това също ще бъде наша грешка).

Грешка

Изглежда, че регистърът е празен и можете да актуализирате 1C. Не искам да ви изненадам, но пак ще има грешка:


Каква е грешката:

В процес на актуализиране информационна базасе случи критична грешка
защото:
Опит за вмъкване на неуникална стойност в уникален индекс:
Microsoft SQLСобствен клиент на сървъра 11.0: Инструкцията CREATE UNIQUE INDEX е прекратена, защото е намерен дублиран ключ за името на обекта „dbo._InfoRgChngR34546NG“ и името на индекса „_InfoR34546_ByNodeMsg_RNTSRRRRRRNG“. Стойността на дублирания ключ е (0x00000011,d7, , 27 септември 4015 г. 22:22 ч., 768404.00.00.00.00.00.00).
HRESULT=80040E2F, SQLSrvr: SQLSTATE=23000, състояние=1, сериозност=10, естествено=1505, ред=1

Обяснение

Нека разберем структурата на SQL. Имаме регистър „MessageTrackingLog“, в SQL е в таблицата „ _InfoR34546". Можете да го проверите специални леченияили по метода "poke" (не е нужно да правим това, защото името на таблицата вече е посочено в текста на грешката).

Сега нека обясня какво се случи. Когато заредихме данните в регистъра, тогава в SQL те попаднаха в таблицата " _InfoR34546". Когато изчистихме таблицата с кода в 1C, тези данни бяха изтрити от таблицата " _InfoR34546", но те бяха копирани в таблицата " _InfoRgChngR34546". Това стана проблемът.

Решение

За да разрешим проблема, трябва да изчистим SQL таблицата "_InfoRgChngR34546".

Ще използвам примера на „Microsoft SQL сървър Management Studio". Отидете на " Management Studio". Намираме нашата база данни, отваряме раздела с таблици, кликваме върху която и да е и натискаме бутона "Нова заявка": Сега въвеждаме заявката

Скъсете таблицата "_InfoRgChngR34546"

Можете да имате и друга маса! Не забравяй!

И натиснете Run или натиснете F5. Ето какъв трябва да е резултатът:

Всичко, сега можете безопасно да актуализирате 1C и няма да има грешка!

Преместихме се на нов сървър. На него SQL и 1C. В сравнение със старите беше много по-готин. И тестът на Гилев също потвърди това: срещу 10-15 на стари сървъри даде 39. Затова веднага след покупката прехвърлихме базата данни и започнахме работа.

Но в един момент нещо се обърка - потребителите започнаха да се оплакват бавна работа. Направихме определени настройки за сървъра и услугите (кои от тях са тема на отделна публикация) и решихме да рестартираме сървъра, тъй като скоростта на рестартиране беше 2 минути (на други сървъри достигаше 10). След това, когато влизаме в 1C, получаваме следното съобщение:

„Внимание!!! Възникна грешка при актуализиране на данните след последното преструктуриране. Опитайте отново актуализацията?" "Не точно"

След натискане на бутона "Да" се появява следното:

„Беше открита операция за запазване на непълна конфигурация. Трябва да завършите операцията, за да продължите."

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

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

Решенията, предложени в мрежата, не помогнаха веднага, но заедно с други действия дадоха резултат. И така, какво направих:

Решение:

  1. Какво липсваше за решения от мрежата:

sp_configure 'разрешаване на актуализации', 1
преконфигуриране с отмяна
отивам

2. Прехвърлете базата данни в режим на възстановяване

промяна на набор от бази данни EMERGENCY, SINGLE_USER

3. Извършваме тестване на бази данни:

dbcc checkdb('db_name', REPAIR_ALLOW_DATA_LOSS)

4. Извеждаме базата данни от режим на възстановяване:

промяна на набор от бази данни ОНЛАЙН, MULTI_USER

5. По принцип, ако сте сигурни, че всичко е наред със самата основа, тогава можете да не правите 2-4 точки. След това изпълняваме две заявки в SQL Profiler:

изтриване от конфигурацията, където FileName = 'commit'
изтриване от конфигурацията, където FileName = 'dbStruFinal'

Тези записи са отговорни за динамичното актуализиране - не можете да се страхувате да ги изтриете.

В работещи версии на бази данни заявките:

изберете * от Config WHERE FileName = 'commit'

изберете * от Config WHERE FileName = 'dbStruFinal'

ще бъде празен.

6. върнете настройките:

sp_configure 'разрешаване на актуализации', 0
отивам

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

Освен това базата може да работи след премахване на първия флаг.

Когато работите в 1C:Enterprise, може да се появи следното съобщение: „За работа с нова версия 1C:Enterprise, информационната база трябва да бъде преобразувана. Защо се появява този прозорец и как мога да коригирам грешката?

В повечето случаи причината за появата на прозореца е скорошният преход на програмата от остаряла версияплатформи към по-нова. На различни платформи информационна база 1Cсе формира по свой начин и приема различен състав. Всичко, което трябва да се направи, е да се конвертира базата данни (чиято структура съответства на остарялата платформа) в най-новия формат.

Преобразуване на DB

Тази процедура е проста, но се препоръчва първо да създадете архивиранебаза, в случай че възникне грешка по време на конвертирането (например компютърът се изключва в резултат на това информационна база 1C, както и самата програма, могат да бъдат повредени). След това приложете следния алгоритъм на действия:

  • Отворете базата данни в режим на конфигуратор;
  • Ще видите съобщение с молба да конвертирате информационната база. Натиснете потвърждение;

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

Отворете базата данни - трябва да стартира без проблеми. Ако прозорецът за грешка продължава да се появява след конвертирането, можете да опитате процедурата отново. В случай, че това не помогне, трябва да се свържете с програмиста 1C. Понякога програмата може да замръзне, докато извършва операция. В момента не е необходимо да предприемате никакви действия.

важно! Информационна база 1C, трансформиран последна версияпрограмите не могат да се отварят на предишни версии.