Симптоми
Да предположим, че използвате група за наличност на 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:
- Сборна актуализация 3 за SQL Server 2014 SP1
- Сборна актуализация 10 за SQL Server 2014
- Сборна актуализация 8 за SQL Server 2012 SP2
Препоръка: Инсталирайте най-новата кумулативна актуализация за SQL Server
Всяка нова кумулативна актуализация за SQL Server съдържа всички актуални поправки и корекции на защитата, които са били включени в предишната кумулативна актуализация. Препоръчваме ви да изтеглите и инсталирате най-новите сборни актуализации за SQL Server:
- Последна кумулативна актуализация за SQL Server 2014 SP1
- Последна сборна актуализация за SQL Server 2014
- Последна кумулативна актуализация за SQL Server 2012 SP2
Заобиколно решение
Можете да използвате следното заобиколно решение, за да съкратите регистрационните файлове и да възобновите дейността.
Проверете всяка вторична копия, за да се уверите, че вторичната 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>'На първичната копия
- Премахнете базата данни от групата за наличност.
- Добавете отново базата данни към групата за наличност.
На всяка вторична копия
- Добавете отново базата данни към групата за наличност.
Премахването на базата данни от групата за наличност незабавно ще съкрати нейните регистрационни файлове и ще освободи място в регистрационния файл.
Ако last_hardened_lsn на всяка вторична копия е идентична на първичната и не се правят архивни копия на регистрационни файлове по време на премахването на базата данни от групата за наличност и повторното добавяне на базата данни на всяка вторична реплика, вторичната копия ще бъде добавена отново успешно, без да се налага грешки или да се налага да възстановявате архивни копия на регистрационните файлове на вторичната копия.
Ако вторичната копия не е актуална с основната копия и трябва да премахнете базата данни от групата за наличност, преди вторичната да може да я навакса, може да се наложи на тази вторична копия да има възстановени архивни копия на регистрационни файлове, за да я навакса, преди да я добави отново към групата за наличност, или да остави базата данни на вторичната копие и да я посее отново с пълно архивно копие на базата данни с регистрационния файл на транзакциите.
Състояние
Microsoft потвърждава, че това е проблем в продуктите на Microsoft, които са изброени в раздела „Важи за“.