在 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) 10Ubuntu 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  阅读(0)  评论(0)    收藏  举报