Ошибка изоляции моментального снимка с использованием sp_setapprole в реплике группы доступности только для чтения
Я исследую группы доступности SQL Server Always On и столкнулся с проблемой при установке роли приложения в базе данных реплики только для чтения. Что меня действительно раздражает, так это поведение, и я не знаю, как интерпретировать сообщение об ошибке.
Все, что я делаю, это звоню
DECLARE @cookie varbinary(8000);
EXEC sys.sp_setapprole
@rolename = 'TestRole', -- sysname
@password = 'password', -- sysname
@fCreateCookie = 1, -- bit
@cookie = @cookie OUTPUT; -- varbinary(8000)
EXEC sys.sp_unsetapprole @cookie = @cookie; -- varbinary(8000)
который отлично работает с первой попытки. На второй и всех следующих попытках я получаю следующую ошибку:
Сообщение 3961, уровень 16, состояние 1, процедура sp_setapprole, строка 44 [Строка пакетного запуска 25] Сбой транзакции изоляции моментального снимка в базе данных AGTest, поскольку объект, к которому обращается оператор, был изменен оператором DDL в другой параллельной транзакции с момента запуска этой транзакции. Это запрещено, потому что метаданные не являются версионными. Одновременное обновление метаданных может привести к несогласованности при смешивании с изоляцией моментальных снимков.
Когда я выполняю ту же инструкцию в первичной базе данных, я могу снова установить утверждение для реплики - один раз.
Я протестировал разные настройки уровня изоляции (хотя я не хотел бы менять его для более поздней производительной базы данных), но это не сработало. В настоящее время у меня нет дальнейшего подхода к проблеме, и у Google почти нет информации для меня.
0 ответов
Подводя итог (для тех, кто может столкнуться с подобными проблемами): это был SQL Server
ошибка, которая была исправлена Microsoft после того, как я отправил запрос в службу поддержки (SP2 CU4). К сожалению, исправление, похоже, доступно только для SQL Server 2016, 2017 не унаследовало его - я надеюсь, что оно будет частью 2019 года, иначе мне придется создать новое обращение в службу поддержки.