症状
假设你使用 Microsoft SQL Server 2012 中的 "AlwaysOn 可用性组" 功能。 将辅助副本的连接访问从 "可读" 更改为 "不可读" 时,在给定副本中使用页面压缩的页面上会出现损坏。由于同步的 "恢复" 阶段出错,在辅助副本上遇到此问题的可用性数据库无法恢复。 辅助副本将不会与主副本同步,并且会报告 "SUSPEND_FROM_REDO" 的同步状态。 此外,你会在托管辅助副本的 SQL Server 的错误日志中收到以下错误消息:
<> <Time> Spid<ID> 错误:17066,严重性:16,状态:1。 <日期> <> SQL Server Assertion> <0 的 spid> ID : File: <Page .cpp>,line = 3898 失败断言 = '! pageFull '。 此错误可能与计时有关。 如果在重新运行该语句后,该错误仍然存在,请使用 DBCC CHECKDB 检查数据库的结构完整性,或重启服务器以确保内存中的数据结构未损坏。 <日期> <时间> Spid<ID> 错误:3624,严重性:20,状态: 1 。 <日期> < 有关详细信息,请查看 SQL Server 错误日志。 通常,断言失败由软件错误或数据损坏导致。 若要检查数据库是否损坏,请考虑运行 DBCC CHECKDB。 如果你同意在安装期间将转储发送到 Microsoft,则会向 Microsoft 发送一个小转储。 从 Microsoft 的最新服务包或从技术支持部门获取的 QFE 中可能提供更新。 <日期> <时间> Spid<ID> AlwaysOn 可用性组数据库 "<数据库名称>" 的数据移动已暂停,原因如下: "system" (Source ID 2;源字符串: "SUSPEND_FROM_REDO")。 若要恢复数据库中的数据移动,需要手动恢复数据库。 有关如何恢复可用性数据库的信息,请参阅 SQL Server ID联机丛书。 <日期> <时间> spid<ID> 错误:3313,严重性:21,状态:2。 <日期> <Time> 在数据库 "> <0数据库名称>" 中重复日志记录操作时,在日志记录 ID (1786:4978584:74)处出现错误。 通常,特定故障以前作为 Windows 事件日志服务中的错误登录。 从完整备份还原数据库,或修复数据库。 <日期> <时间> SPID<ID> ALTER DB param 选项:恢复<日期> <> AlwaysOn 可用性组数据库 "> <0数据库名称>"的数据移动已恢复。 这只是一条信息性消息。 无需任何用户操作。 <日期> <时间> Spid<ID> Nonqualified 事务将在数据库 <数据库名称> 回滚 AlwaysOn 可用性组状态更改。 估计回滚完成:100%。 这只是一条信息性消息。 无需任何用户操作。 <日期> <时间> Spid<ID> ALWAYSON 可用性组与使用副本 ID: {bbdedecb-f26b-47e9-9e7d-7c22f99edb23} 的可用性副本上的辅助数据库 "<数据库名称>" 的主数据库的连接。 这只是一条信息性消息。 无需任何用户操作。 <日期> <时间> Spid<ID> 启动数据库 "<数据库名称>"。 <日期> <> spid> <2 ID> 数据库' <数据库名称> ' 的恢复(13)已完成0% (大约781秒)。 第1阶段,共3阶段。 这只是一条信息性消息。 无需执行任何用户操作 .。。
解决方案
在 SQL Server 的以下累积更新中,此问题首先已修复。
Sql server 2012 SP2 累积更新 6 - SQL server 2012 SP1 的累积更新 16
SQL Server 的每个新的累积更新均包含以前的累积更新中包含的所有修补程序和所有安全修补程序。 查看 SQL Server 的最新累积更新:
更多信息
当辅助副本的读访问发生更改时,可能会发生上一个问题。你可以使用以下两种方法设置辅助副本上的可用性数据库的读取访问权限:
-
通过使用 "更改可用性组" 命令设置 "读取" 访问:
ALTER AVAILABILITY GROUP [AGName]MODIFY REPLICA ON N'<SRV>' WITH (SECONDARY_ROLE(ALLOW_CONNECTIONS = NO))
-
通过在 SQL Server Management Studio (SSMS)的对象资源管理器中更改设置来设置读取访问权限:
-
连接到服务器,然后打开 "AlwaysOn 可用性" 文件夹。
-
打开 "可用性组" 文件夹。
-
右键单击 "可用性" 组,然后选择 " 属性"。
-
将辅助副本的可读辅助属性更改为 " 否",然后单击 "确定"。
-
状态
Microsoft 已确认这是在“适用范围”部分中列出的 Microsoft 产品存在的问题。