在 SQL Server 2025 CU1 中创建 CAG (Contained Availability Group)

SQL Server 2025 CU1 中的 CAG (Contained Availability Group,包含的可用性组)

SQL Server 2025 - AI ready enterprise database from ground to cloud

请访问原文链接:https://sysin.org/blog/sql-server-2025/ 查看最新版。原创作品,转载请保留出处。

作者主页:sysin.org


SQL Server 2025

SQL Server 2025

2026 年 1 月 16 日,微软宣布 SQL Server 2025 在 Red Hat Enterprise Linux (RHEL) 10 和 Ubuntu 24.04 上的正式发布(GA),从 CU1 版本 开始。此里程碑使企业能够在最新的 Linux 发行版上部署 SQL Server 2025,确保关键任务工作负载的稳健兼容性、增强的安全性和最佳性能 (sysin)。正式发布强化了我们在多样化 Linux 环境中提供现代、安全且 AI 就绪数据库平台的承诺。

创建 Contained Availability Group(CAG)

ℹ️ 简介(Introduction)

Contained Availability Group(CAG,包含的可用性组) 的设计目标是通过将系统数据库(master、msdb)封装在可用性组内部,从而简化高可用性和灾难恢复。这意味着登录名、作业、凭据以及其他元数据都会在各副本之间自动复制,无需手动同步,从而降低运维复杂度。

从 SQL Server 2025 CU1 开始,你可以通过启用会话上下文键,或使用自动化存储过程 [msdb].[dbo].sp_sysutility_cag_create_db,直接通过 CAG 监听器创建或还原数据库,而无需连接到物理 SQL Server 实例。

为什么 Contained AGs 很重要?

  • 自包含的高可用单元:每个 CAG 都拥有独立的 master 和 msdb 副本,使其不依赖于物理 SQL 实例。
  • 简化故障转移:当 AG 发生故障转移时,所有相关元数据都会随之迁移,确保应用无需人工干预即可继续运行。
  • 更强的自动化能力:适用于限制直接访问 SQL 实例的场景 (sysin),允许通过 AG 监听器完成操作。
  • 增强的安全性:通过限制实例级访问来降低暴露面,操作范围可限定在 AG 上下文内。
  • 精简的管理方式:无需在副本之间编写和维护登录名、作业复制脚本。

Step 1: 为可用性组准备数据库

本示例使用 Linux 上的 SQL Server;但这些步骤同样适用于 Windows 上的 SQL Server。

在本示例中,我们将一个名为 CAGDB 的现有数据库添加到 Contained Availability Group(CAG)中。在将数据库加入 CAG 之前 (sysin),请确认其已配置为 FULL 恢复模式,并执行一次 完整数据库备份。

ALTER DATABASE CAGDB SET RECOVERY FULL; GO
BACKUP DATABASE CAGDB TO DISK = N'/var/opt/mssql/backups/CAGDB.bak' WITH INIT, COMPRESSION; GO

注意:在 Linux 上,请确保备份目标目录存在,并且归 mssql 用户所有。

sudo mkdir -p /var/opt/mssql/backups
sudo chown mssql:mssql /var/opt/mssql/backups

Step 2: 创建 Contained Availability Group

在 Linux SQL Server 节点上执行:

CREATE AVAILABILITY GROUP [CAGDemo]
WITH ( CLUSTER_TYPE = EXTERNAL, CONTAINED )
FOR DATABASE [CAGDB]
REPLICA ON
N'node1' WITH (
  ENDPOINT_URL = N'tcp://node1:5022',
  AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
  FAILOVER_MODE = EXTERNAL,
  SEEDING_MODE = AUTOMATIC
),
N'node2' WITH (
  ENDPOINT_URL = N'tcp://node2:5022',
  AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
  FAILOVER_MODE = EXTERNAL,
  SEEDING_MODE = AUTOMATIC
);
GO

-- 连接到辅助副本并加入 AG
ALTER AVAILABILITY GROUP [CAGDemo] JOIN WITH (CLUSTER_TYPE = EXTERNAL);
ALTER AVAILABILITY GROUP [CAGDemo] GRANT CREATE ANY DATABASE;

Step 3: 配置监听器并连接

创建监听器,并使用 SSMS 或 sqlcmd 进行连接:

ALTER AVAILABILITY GROUP [CAGDemo]
ADD LISTENER N'CAGDemoListener'
(
  WITH IP ( (N'*.*.*.*', N'255.255.255.0') ),
  PORT = 1453
);
GO

Step 4: 通过 CAGDemoListener 连接并尝试创建数据库(失败)

通过监听器连接后执行:

CREATE DATABASE TestCAGDB;

结果:Msg 262, Level 14, State 1: CREATE DATABASE is not allowed in this context.

这是因为在包含的 AG 会话中 (sysin),默认禁止创建数据库。

Step 5: 在 CAG 会话或实例 master 中启用数据库创建

EXEC sp_set_session_context = N'allow_cag_create_db', @value = 1;

此操作会为当前会话启用数据库创建权限。

Step 5: 再次尝试创建数据库(成功)

CREATE DATABASE TestCAGDB;

结果:数据库已在包含的 AG 上下文中成功创建。

只有在 CAG 上下文中拥有 dbcreator 角色的用户才能执行该操作。

Step 6: 备份数据库

ALTER DATABASE TestCAGDB SET RECOVERY FULL;
BACKUP DATABASE TestCAGDB TO DISK = N'/var/opt/mssql/data/backups/TestCAGDB.bak';

Step 7: 将数据库添加到 CAG

ALTER AVAILABILITY GROUP [CAGDemo] ADD DATABASE [TestCAGDB];

Automation:

要自动化执行第 4 到第 7 步,请在通过 CAG 监听器连接的上下文中执行以下存储过程:

EXEC [msdb].[dbo].sp_sysutility_cag_create_db @database_name = [ADVENTUREWORKS];

🧩 结论(Conclusion)

Contained Availability Group 在简化 SQL Server 高可用性方面迈出了重要一步。通过将系统数据库封装在 AG 上下文中,它消除了在副本之间同步登录名、作业和凭据的复杂性。

借助 SQL Server 2025 CU1 中新增的能力,组织现在可以通过 sp_set_session_context 直接从 AG 监听器创建或还原数据库,从而简化自动化流程并降低运维开销。

📚 参考资料(References)

部分内容来自官网,有删改。

补丁更新及下载

SQL Server 2025 RTM 64-Bit English/简体中文/繁体中文 (Evaluation, Enterprise Developer, Standard Developer, Express)

SQL Server 2025 RTM 64-Bit English/简体中文/繁体中文 (Enterprise, Standard)


索引页面:

更多:Windows 下载汇总

posted @ 2026-01-25 14:48  sysin  阅读(45)  评论(0)    收藏  举报