AlwaysOn故障转移,辅助节点作业失败

时间:2019-06-26 10:36:54

标签: sql-server alwayson tde

在测试故障转移功能时,辅助节点无法运行任何访问TDE数据库的作业,失败并显示以下错误 在执行此操作之前,请在数据库中创建一个主密钥或在会话中打开该主密钥。

我尝试过

按密码打开主密钥解密='password' -现在由SMK设置加密 通过服务主密钥更改加密主密钥

重新启动服务并禁用加密。

我对加密功能了解不多,只是按照步骤将其打开。 没想到故障转移机制如此混乱,更糟糕的是,在线上关于它的信息很少。 任何帮助,将不胜感激。 谢谢 乔恩

3 个答案:

答案 0 :(得分:0)

因此,事实证明SSISDB是问题所在。 我设法通过以下命令停止错误

EXEC sp_control_dbmasterkey_password @ db_name = N'SSISDB',@ password = N'',@ action = N'add'

然后开始抛出可信度错误 然后修复以下问题: ALTER DATABASE [SSISDB]设置为可信任状态

之后,工作开始运行。

答案 1 :(得分:0)

此错误是由AG上节点之间的服务主密钥(SMK)不匹配引起的。您的数据库具有数据库主密钥(DMK),该数据库主密钥在创建时已由本地服务器的SMK加密。如果AG中只有两个节点,则修复相对简单-从 secondary 节点备份SMK,使用密码在主节点上打开DMK,将SMK还原到主节点,然后重新使用新的SMK加密DMK。为什么选择这个方向(相对于主要→次要)?更改DMK是一种写操作,而在辅助节点上则不可能!

答案 2 :(得分:0)

数据库主密钥(DMK)使用服务主密钥(SMK)加密,该密钥对于每个SQL Service实例都是唯一的,因此您需要这种方式。

SQL Server有另一种解密DMK的方法。如果DMK无法用SMK解密,它将在凭证存储中搜索与相同家族GUID匹配的密码。如果找到与您的数据库匹配的家庭GUID,它将尝试使用存储的密码解密DMK。如果成功,则它将使用DMK加密或解密数据库中的凭据或密钥。

因此,使用sp_control_dbmasterkey_password将基于数据库名称和解密主数据库中DMK的密码存储系列GUID。

要确保当AG从主服务器故障切换到辅助服务器时DMK能够工作,请在辅助服务器上运行sp_control_dbmasterkey_password作为将数据库加入AG的过程的一部分。

在SSMS 2016+的AG向导中,提示您添加带有DMK的数据库的密码。添加此密码后,向导将在辅助注释上自动运行sp_control_dbmasterkey_password。 (但是,如果使用自动播种,则存在一个已知的错误)。

有关更多信息,请参见以下链接:sp_control_dbmasterkey_password