Я исследую группы доступности 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 почти нет информации для меня.