只读可用性组副本

时间:2018-05-03 13:01:26

标签: sql-server alwayson application-role availability-group

我正在调查SQL Server Always On Availability Groups,并且在只读副本数据库上设置应用程序角色时遇到了问题。真正让我烦恼的是行为,我不知道如何解释错误信息。

我所做的只是致电

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)

第一次尝试正常。在第二次和所有后续尝试中,我收到以下错误:

  

Msg 3961,Level 16,State 1,Procedure sp_setapprole,Line 44 [Batch   第25行]   数据库中的快照隔离事务失败   'AGTest'因为语句访问的对象已经存在   自从另一个并发事务中的DDL语句修改   这笔交易的开始。由于元数据,它是不允许的   没有版本。可以导致对元数据的并发更新   如果与快照隔离混合,则不一致。

当我在主数据库上执行相同的语句时,我可以再次在副本上设置批准 - 一次。

我测试了不同的隔离级别设置(虽然我不愿意为后来的高效数据库更改它),但这不起作用。我目前没有进一步的解决方法,谷歌几乎没有我的信息。

1 个答案:

答案 0 :(得分:0)

总结一下(对于那些可能遇到类似问题的人):这是一个SQL Server错误,由Microsoft在我提出支持请求(SP2 CU4)后修复。不幸的是,该修复程序似乎仅可用于 SQL Server 2016 ,2017年没有继承它-我希望它将在2019年发布,否则我将不得不创建一个新的支持案例。

https://support.microsoft.com/en-us/help/4469908/error-3961-when-you-use-application-roles-read-only-secondary-replicas