在 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

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 下载汇总

Microsoft SQL Server 2025 RTM GDR & CU1 (2026 年 1 月安全更新 | 累计更新)
浙公网安备 33010602011771号