KB3095156 – КОРЕКЦИЯ: Грешка 9002 и 3052 при опит за добавяне или архивиране на регистрационен файл в SQL Server 2012 или SQL Server 2014

Отнася се за
SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Standard SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use)

Симптоми

Да предположим, че използвате група за наличност на AlwaysOn в база данни на Microsoft SQL Server 2012 или SQL Server 2014 и съществува голяма отворена активна транзакция, която изисква допълнително място в регистрационния файл. Когато регистрационният файл не може да се разшири поради една от следните причини, транзакцията е неуспешна.

  • Липса на допълнително място на файла
  • Регистрационният файл е конфигуриран така, че да не се разширява
  • Регистрационният файл е достигнал конфигурирания максимален размер

Освен това се извежда следното съобщение за грешка:

Забележка

Грешка: 9002, Степен на сериозност: 17, Щат: 9.
Регистрационният файл на транзакциите за база данни "<име >на базата" данни е пълен поради "LOG_BACKUP".

След като изпълните архивиране на регистрационни файлове, получавате друго съобщение за грешка 9002:

Забележка

Грешка: 9002, Степен на сериозност: 17, Щат: 9.
Регистрационният файл на транзакциите за база данни "<име >на базата" данни е пълен поради "ACTIVE_TRANSACTION".

След друго архивиране на регистрационни файлове получавате друго съобщение за грешка 9002, последвано от съобщение за грешка 5901:

Забележка

Грешка: 9002, Степен на сериозност: 17, Щат: 9.
Регистрационният файл на транзакциите за база данни "<име >на базата" данни е пълен поради "AVAILABILITY_REPLICA".

      

Забележка

Не можа да се запише запис на контролна точка в името >на базата данни< от база данни, защото в регистрационния файл няма достатъчно място. Обърнете се към администратора на базата данни, за да съкрати регистрационния файл или да разпредели още място за регистрационните файлове на базата данни.
Грешка: 5901, Тежест: 16, Щат: 1.
Една или повече единици за възстановяване, принадлежащи към база данни "<име> на база данни", не са генерирали контролна точка. Това обикновено се дължи на липса на системни ресурси, като например диск или памет, а в някои случаи и на повреда на базата данни. Прегледайте предишните записи в регистрационния файл на грешките за по-подробна информация за тази грешка.

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

Забележка

Съобщение 3052, ниво 16, състояние 1, ред 4
АРХИВЕН РЕГИСТРАЦИОНЕН ФАЙЛ не успя да регистрира актуализации за "<име >на базата" данни данни. Ще са необходими последващи архивни копия на регистрационни файлове, за да се премести точката за архивиране от "<LSN ид 1>" на "<LSN ид 2>", след като бъде освободено място за регистрирането им.

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

Решение

Проблемът е коригиран за първи път в следната кумулативна актуализация на SQL Server:

Препоръка: Инсталирайте най-новата кумулативна актуализация за SQL Server

Всяка нова кумулативна актуализация за SQL Server съдържа всички актуални поправки и корекции на защитата, които са били включени в предишната кумулативна актуализация. Препоръчваме ви да изтеглите и инсталирате най-новите сборни актуализации за SQL Server:

      

Заобиколно решение

Можете да използвате следното заобиколно решение, за да съкратите регистрационните файлове и да възобновите дейността.

  1. Проверете всяка вторична копия, за да се уверите, че вторичната last_hardened_lsn на репликата (вж. sys.dm_hadr_database_replica_states) съответства на last_hardened_lsn на първичното копие. Можете да направите това, като изпълните следната заявка, която е свързана като екземпляр на първичната реплика

    SELECT ags.name as AGGroupName,
        ar.replica_server_name as InstanceName,
        hars.role_desc,
        db_name(drs.database_id)as DBName,
        drs.last_hardened_lsn, drs.log_send_queue_size,
        drs.synchronization_state_desc as SyncState,
        ar.availability_mode_desc as SyncMode,
        CASE drs.is_local WHEN 1 THEN drs.database_id ELSE NULL END as database_id
        FROM sys.dm_hadr_database_replica_states drs
        LEFT JOIN sys.availability_replicas ar ON drs.replica_id = ar.replica_id
        LEFT JOIN sys.availability_groups ags  ON ar.group_id = ags.group_id
        LEFT JOIN sys.dm_hadr_availability_replica_states hars
            ON ar.group_id = hars.group_id and ar.replica_id = hars.replica_id
          WHERE db_name(drs.database_id) = '<database name>'
    
  2. На първичната копия

    • Премахнете базата данни от групата за наличност.
    • Добавете отново базата данни към групата за наличност.
  3. На всяка вторична копия

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

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

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

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

Състояние

Microsoft потвърждава, че това е проблем в продуктите на Microsoft, които са изброени в раздела „Важи за“.