首页 > 数据库 >SQL Server 2022 包含的可用性组

SQL Server 2022 包含的可用性组

时间:2023-03-01 14:36:10浏览次数:37  
标签:name 包含 数据库 可用性 msdb Server 2022 SQL

介绍

SQL Server 2022 引入了包含的可用性组的新概念。这是 DBA 自 10 年前引入可用性组以来一直在等待的事情。

包含的可用性组通过在数据库副本之间复制系统对象(如 SQL 代理作业、登录名和链接服务器)的功能来增强可用性组。

在这篇博客文章中,我们将使用 SQL Server 2022 CTP2.0 首先了解即将推出的包含的可用性组。

目录

  • 包含的可用性组

  • 创建包含的可用性组

  • SSMS 中包含的可用性组

  • DMV 变更

  • 通过侦听器连接

  • 创建代理作业

  • 创建登录名

  • 执行故障转移

  • 删除包含的可用性组

  • 重用旧的包含可用性组系统数据库

  • 结语

包含的可用性组

自从在 SQL Server 2012 中引入可用性组以来,多个副本之间的同步仅涉及用户数据库。
当应用程序还依赖于存储在系统数据库(master 或 msdb)中的对象(如用户、登录名、权限、代理作业等)时,存在挑战。
这种类型的对象必须由 DBA 手动复制或编写脚本,例如使用 dbatools。

包含的可用性组通过为每个可用性组自动创建 master 数据库和 msdb 数据库来解决此问题,该可用性组会自动复制在其上下文中创建的对象。

创建包含的可用性组

SSMS 向导包含一个默认情况下未选中的新复选框。

 

 

“创建可用性组”命令有一个新的 T-SQL 关键字:

CREATE AVAILABILITY GROUP [ContainedAG02]
WITH (
AUTOMATED_BACKUP_PREFERENCE = PRIMARY,
REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT = 0,
CONTAINED
)
FOR DATABASE [appdb02]
REPLICA ON N'SQL19VM1\SQL2022A' [...]

SSMS 中包含的可用性组

master 和 msdb 数据库在 SSMS 中的“可用性数据库”文件夹下可见,在主“用户”数据库列表中也可见。

 

 

添加另一个包含的AG当然会带来更多这样的数据库。

 


 

 

 

 

DMV 变更

请注意,sys.availability_groups DMV 有一个名为 is_contained 的新列。

 

图片

 

 

通过侦听器连接

有趣的是,当通过侦听器连接时,您只能看到与该侦听器相关的包含AG相关的数据库。

 

图片

 

 

这不是未包含的“正常”可用性组的行为。

 

 

 

创建代理作业

我创建了 2 个具有不同范围的代理工作。范围是在连接时定义的,因为“新建作业”向导中目前没有将作业设置为包含的 AG 或实例级别相关作业的更改。

-- Connect to primary replica on default database
USE msdb
GO
DECLARE @jobId BINARY(16)
EXEC msdb.dbo.sp_add_job @job_name=N'test_ContainedAG',
@enabled=1,
@notify_level_eventlog=0,
@notify_level_email=2,
@notify_level_page=2,
@delete_level=0,
@category_name=N'[Uncategorized (Local)]',
@owner_login_name=N'sa', @job_id = @jobId
GO
-- Connect to ContainedAG01 on default database
USE msdb
GO
DECLARE @jobId BINARY(16)
EXEC msdb.dbo.sp_add_job @job_name=N'test_ContainedAG',
@enabled=1,
@notify_level_eventlog=0,
@notify_level_email=2,
@notify_level_page=2,
@delete_level=0,
@category_name=N'[Uncategorized (Local)]',
@owner_login_name=N'sa', @job_id = @jobId
GO

结果(如 SSMS 中所示)是包含的 AG 仅显示其相关作业。我发现令人不安的是,作为连接到我的实例的系统管理员,我看不到 ContainedAG 作业,而只看到实例范围。

 

图片

 

 

我可以看到这在管理具有多个 ContainedAG 和数十个作业的实例时会造成很多混乱。

SQL也是如此。

select name
from msdb..sysjobs
go

select name
from ContainedAG01_msdb..sysjobs

 

 

图片

 

创建登录名

登录名和用户也是如此;用户界面没有变化。必须在 T-SQL 中的正确范围内创建它们。

 

连接到侦听器时的登录

 

 

 

接到实例时的登录

 

执行故障转移

故障转移向导显示受故障转移操作影响的主数据库和 msdb 数据库。

 

 

 

与包含的 AG 相关的所有对象(此处仅登录名和作业)在辅助副本上进行故障转移后也可用,而无需“手动”/“DBA”对象同步。

SELECT @@SERVERNAME AS ServerName
, ag.name AS AgName
, dc.[database_name]
, rs.is_primary_replica
, rs.synchronization_state_desc
FROM sys.dm_hadr_database_replica_states AS rs
INNER JOIN sys.availability_databases_cluster AS dc
ON rs.group_id = dc.group_id
AND rs.group_database_id = dc.group_database_id
INNER JOIN sys.availability_groups AS ag
ON ag.group_id = rs.group_id
WHERE is_primary_replica = 1

select name, sysadmin
from master.sys.syslogins
where name not like '##%' and name not like 'NT%'

select name
from msdb..sysjobs

 

图片故障转移后包含的 AG 对象

 

删除包含的可用性组

删除包含的可用性组不会删除 master 数据库和 msdb 数据库。

 


图片

 


 

 

 

图片

 

 

重用旧的包含可用性组系统数据库

现在,我可以通过重用旧的 msdb 和 master 数据库来重新创建新的可用性组。
这是可以检查“重用系统数据库”的时候。

 


 

正如您在上面看到的,我尝试使用带有后缀“_bis”的新包含可用性组名称。
它没有按计划进行。未检测到 master 和 msdb 数据库,但将其视为简单的用户数据库。

图片

 

 

 

使用原始名称的第二次尝试效果不佳。

 

 

图片

 

实际上,需要在此向导面板上取消选择主节点和 msdb。只需选择用户数据库。
msdb 和 master 数据库将根据其名称与包含的 AG 名称匹配来重用。

 

这也可以在向导中进行改进,以明确这些数据库属于特殊类型,并且在选择“重用系统数据库”选项时可能应将其添加为包含的 AG 中的用户数据库。

结语

此博客文章只是对使用 SQL Server 2022 CTP2.0 和 SSMS 19 预览版的包含可用性组的基本介绍。功能包含的 AG 功能似乎按预期工作,但可能需要对 SSMS 和 DMV 进行一些重要的改进,以使对象(登录名、代理作业等)的范围(包含或实例)更清晰,更易于管理。

 

标签:name,包含,数据库,可用性,msdb,Server,2022,SQL
From: https://www.cnblogs.com/kingster/p/17168044.html

相关文章

  • 动态SQL与静态SQL使用场景
    静态SQL和动态SQL的区别静态SQL(或嵌入式SQL)是应用程序中的SQL语句,它们在运行时不会更改,因此可以硬编码到应用程序中。动态SQL是在运行时构造的SQL语句;例如,应用......
  • OpenMLDB SQL 与标准 SQL 的主要差异
    本文将OpenMLDBSQL的主要使用方式(SELECT查询语句)与标准SQL(以MySQL支持的语法为例)进行比较,让有SQL使用经验的开发者快速上手OpenMLDBSQL。面向OpenMLDB版本:>......
  • PostgreSQL 主从搭建
    PostgreSQL体系结构本地内存本地内存是服务器进程独占的内存结构,每个postgresql子进程都会分配一小块相应内存空间,随着连接会话的增加而增加,它不属于实例的一部分work_mem:用......
  • ArcGIS Server 10.4切片图的发布
    一、ArcGISServer10.4切片图的发布发布步骤:1、打开ArcMap--目录--GIS服务器--arcgisonlocalhost_6080(系统管理员)--SampleWorldCities--鼠标右键点击“停止”,停止准......
  • MySQL数据库架构&SQL注入漏洞
    查找zblog数据库中有哪些表SELECTTABLE_SCHEMA,TABLE_NAMEFROMinformation_schema.`TABLES`WHERETABLE_SCHEMA='zblog';查找目标表(zbp_category)中的字段SELECT6,COLU......
  • 非交互式连接PostgreSQL
    方法一:.pgpass查看postgres家目录greppostgres/etc/passwdpostgres:x:114:119:PostgreSQLadministrator,,,:/var/lib/postgresql:/bin/bash创建.pgpasstouch/var/......
  • ubuntu20.04二进制部署PostgreSQL 15.2
    创建文件存储库配置echo"debhttp://apt.postgresql.org/pub/repos/apt$(lsb_release-cs)-pgdgmain">/etc/apt/sources.list.d/pgdg.list导入存储库签名密钥wget......
  • 2022新操优化师 优化系统(白狐公羊seo)
    2.自动查询网站收录和排名情况权重和IP效果预览:排名效果预览:软件下载地址:​​https://share.weiyun.com/wyHygvx2​​ 账号caocao密码caocao  积分如果不足请联系客......
  • 关于配置中心-ConfigServer
               ......
  • 国产计算机开发实践之环境搭建(Java+Mysql+Idea)
    操作系统:统信UOS/麒麟架构:aarch64(命令行uname-m查看)一、Java1.解压安装包(注:在安装包所在路径下输入命令)sudotar-zxvfjdk-8u271-linux-aarch64.tar.gz-C/usr/loca......