在测试从 SQL Server 2014 SP1 (12.0.4422.0) 到 SQL Server 2016 CTP 3.2 (13.0.900.73) 的升级时,我遵循推荐的更新过程并遇到了一个问题,即故障转移后数据库无法在旧的主数据库上启动到更新的辅助。我们的设置是一个主副本和一个辅助副本,我完成的步骤是:
升级辅助节点和故障转移使其成为主节点完全按预期工作。但是在升级以前的主副本后,我注意到其上的数据库在 SSMS 中列为Not Synchronizing / In Recovery。尝试访问它们也会生成错误消息:
数据库...无法访问。(对象浏览器)
通过我看到的 SQL Server 日志检查
无法打开数据库 '...' 版本 782。将数据库升级到最新版本。
查询master..sysdatabases表,确实是旧版本,升级过程中没有更新:
不幸的是,日志没有指出它为什么没有更新,并且可用性组仪表板只给出了一个通用警告,表明某些可用性数据库的数据同步状态不健康,没有任何原因。
我尝试使用 TSQL 分离数据库或将它们设置为离线以“踢”它进行更新,但由于它们是 SQL AG 的一部分,因此这些命令不起作用。
当数据库是 SQL AG 的一部分时,如何将数据库升级到最新版本?
我们刚刚开始设置分布式可用性组,以将我们的生产数据库复制到新的报告集群中。我们为复制设置的第一个可用性组运行良好,没有任何问题,但是当我们转移到具有更大数据库(总共超过 3TB)的第二个可用性组时,它花费的时间更长,并且 5 个数据库中有两个失败了。我们将分布式可用性组设置为使用直接播种,并在查询 sys.dm_hadr_automatic_seding 表时将 current_state 指示为 FAILED,故障状态为 2(SQL 错误)或 21(播种检查消息超时):
我们可以做些什么来解决这个问题?
availability-groups sql-server-2016 distributed-availability-groups
任何人都可以讨论如何逐步将 DDL 架构更改与 Always On Availability Groups 准确合并?我们在一个状态有一个主副本,在另一个状态位置有一个辅助副本。辅助副本将是只读异步的。
如果我要进行架构更改,包括任何种类...
... 我需要什么才能确保主副本 DDL 顺利流向次副本?
次要副本上的读取查询不会影响主 DML(数据修改、插入、更新、删除),并且会顺利进行,因为次要副本设置为读取快照隔离。
次要副本上的读取查询会影响主 DDL(模式更改、表结构更改),因为读取查询会放置模式锁。
停止对从副本的所有查询,进行主副本DDL,然后DDL变化会流向从副本。
此示例仅用于辅助只读异步。如果辅助副本是只读同步的怎么办?
其他背景:Primary Replica是OLTP,日夜事务。我们公司有一个部署变更管理时间窗口。假设我早上只有 1 小时来执行架构和 DDL 更改。我不能等待长时间的查询完成。在异步模式下,日志重做永远不会是最新的。
我记得读过 Microsoft 文章Active Secondary:Readable Secondary Replicas (Always On Availability Groups)