在Alwayson中,可以通过设置来将备份放到指定的节点上完成,微软提供了函数用来判断当前指定节点进行备份:

DECLARE @database_name NVARCHAR(200)
SET @database_name= 'DB5'
SELECT
CASE [master].[sys].[fn_hadr_backup_is_preferred_replica](@database_name)
WHEN 1 THEN '可以在当前节点进行备份'
ELSE '不可以在当前节点进行备份'
END

当DBA登录到主节点上时,如果希望查看当前可用性组下那个节点是首先备份节点,需要是打开Alwasyon的属性界面进行查看,很是不方便,于是有了下面这段代码:

-------------------------------------------------------
--查看AG上首选备份节点 IF(OBJECT_ID('tempdb..#tb_replica_server')IS NOT NULL)
BEGIN
DROP TABLE #tb_replica_server
END CREATE TABLE #tb_replica_server
(replica_server_name NVARCHAR(200)) --查看AG上备份设置和AG组名
DECLARE @backup_preference INT
DECLARE @availability_group_name NVARCHAR(200) SELECT
@backup_preference =AG.[automated_backup_preference],
@availability_group_name= AG.[name]
FROM sys.availability_groups AG IF(@availability_group_name IS NOT NULL)
BEGIN --查看AG上的节点数量
DECLARE @replica_server_count INT
SELECT @replica_server_count=COUNT(1)
FROM sys.availability_groups AG
INNER JOIN sys.availability_replicas AR
ON AR.group_id = AG.group_id
WHERE AG.[name]= @availability_group_name --@backup_preference= 1 仅主节点备份
IF @backup_preference= 0
BEGIN
INSERT INTO #tb_replica_server(replica_server_name)
SELECT AR.replica_server_name FROM sys.availability_groups AG
INNER JOIN sys.availability_replicas AR
ON AR.group_id = AG.group_id
INNER JOIN sys.[dm_hadr_availability_replica_states] AGS
ON AGS.group_id = AR.group_id
AND AGS.replica_id = AR.replica_id
WHERE AG.[name] = @availability_group_name
AND AGS.role=1
END --@backup_preference= 1 仅辅助备份
--@backup_preference=2 首先辅助副本
IF (@backup_preference= 1
OR(@backup_preference=2 AND @replica_server_count>1))
BEGIN
INSERT INTO #tb_replica_server(replica_server_name)
SELECT T1.replica_server_name FROM (
SELECT AR.replica_server_name,
ROW_NUMBER()OVER(ORDER BY AR.backup_priority DESC) AS RID
FROM sys.availability_groups AG
INNER JOIN sys.availability_replicas AR
ON AR.group_id = AG.group_id
INNER JOIN sys.[dm_hadr_availability_replica_states] AGS
ON AGS.group_id = AR.group_id
AND AGS.replica_id = AR.replica_id
WHERE AG.[name] = @availability_group_name
AND AGS.role=2
) AS T1
WHERE T1.RID=1
END --首先辅助副本但只有主节点
IF (@backup_preference=2 AND @replica_server_count=1)
BEGIN
INSERT INTO #tb_replica_server(replica_server_name)
SELECT AR.replica_server_name FROM sys.availability_groups AG
INNER JOIN sys.availability_replicas AR
ON AR.group_id = AG.group_id
INNER JOIN sys.[dm_hadr_availability_replica_states] AGS
ON AGS.group_id = AR.group_id
AND AGS.replica_id = AR.replica_id
WHERE AG.[name] = @availability_group_name
AND AGS.role=1
END --任意备份节点
IF (@backup_preference=3)
BEGIN
INSERT INTO #tb_replica_server(replica_server_name)
SELECT T1.replica_server_name FROM (
SELECT AR.replica_server_name,
ROW_NUMBER()OVER(ORDER BY AR.backup_priority DESC) AS RID
FROM sys.availability_groups AG
INNER JOIN sys.availability_replicas AR
ON AR.group_id = AG.group_id
INNER JOIN sys.[dm_hadr_availability_replica_states] AGS
ON AGS.group_id = AR.group_id
AND AGS.replica_id = AR.replica_id
WHERE AG.[name] = @availability_group_name
) AS T1
WHERE T1.RID=1
END SELECT '当前可用组为:'+@availability_group_name
SELECT '首先备份节点为:',T1.replica_server_name
FROM #tb_replica_server T1 END
ELSE
BEGIN
SELECT '当前不存在可用性组'
END

有需要的朋友可以进行简单封装成函数来使用。

找到备份节点,下面脚本可供您方便查看数据库备份情况

查询指定数据库最近一天的备份历史记录:

--======================================
--查询指定数据库最近一天的备份历史记录
SELECT
CONVERT(CHAR(100),SERVERPROPERTY('Servername'))ASServer,
bs.database_name,
bs.backup_start_date,
bs.backup_finish_date,
bs.expiration_date,
CASE bs.type
WHEN 'D' THEN 'Database'
WHEN 'L' THEN 'Log'
END ASbackup_type,
bs.backup_size,
bmf.logical_device_name,
bmf.physical_device_name,
bs.name AS backupset_name,
bs.description,
'RESTORE DATABASE [DatabaseName] FROM DISK=N'''
+bmf.physical_device_name+ '''WITH NORECOVERY;'
FROM msdb.dbo.backupmediafamily bmf
INNER JOIN msdb.dbo.backupset bs
ON bmf.media_set_id=bs.media_set_id
WHERE bs.database_name='DatabaseName'
AND bs.backup_start_date>DATEADD(DAY,-1,GETDATE())
ORDER BY bs.database_name,
bs.backup_finish_date

查看实例上各数据库最后一次备份时间

--====================================
--查看数据库最后一次备份时间
WITH T1 AS(
SELECT B.[database_name] ,
B.[type],
B.[backup_finish_date] AS [LastBackupDate] ,
BMS.[physical_device_name] ,
ROW_NUMBER() OVER ( PARTITION BY B.[database_name], B.[type]
ORDER BY B.[backup_finish_date] DESC ) AS RID
FROM [msdb]..[backupset] B WITH(NOLOCK)
INNER JOIN [msdb]..[backupmediafamily] BMS WITH(NOLOCK)
ON BMS.[media_set_id] = B.[media_set_id]
),T2 AS
(
SELECT
[database_name],
[type],
[LastBackupDate],
[physical_device_name]
FROM T1
WHERE T1.RID=1
)
SELECT DB.[name] AS [DatabaseName],
DB.[recovery_model_desc] AS [RecoveryModel],
F.[LastBackupDate] AS [LastFullBackupDate],
F.[physical_device_name] AS [LastFullBackupFile],
D.[LastBackupDate] AS [LastDiffBackupDate],
D.[physical_device_name] AS [LastDiffBackupFile],
L.[LastBackupDate] AS [LastLogBackupDate],
L.[physical_device_name] AS [LastLogBackupFile]
FROM SYS.databases DB WITH(NOLOCK)
LEFT JOIN (SELECT * FROM T2
WHERE T2.[type]='D') AS F
ON F.[database_name]=DB.[name]
LEFT JOIN (SELECT * FROM T2
WHERE T2.[type]='I') AS D
ON D.[database_name]=DB.[name]
LEFT JOIN (SELECT * FROM T2
WHERE T2.[type]='L') AS L
ON L.[database_name]=DB.[name]

运行效果:

--=====================================

妹子压贴

AlwaysOn--查看可用性组的首先备份节点的更多相关文章

  1. SQL Server 2012 管理新特性:AlwaysOn 可用性组

    SQL Server 2012 新特性(一)管理新特性:AlwaysOn 一.准备环境 1.准备4台计算机 域控制器DC1,IP地址192.168.1.1 主节点SQL1:IP地址192.168.1. ...

  2. 部署AlwaysOn第二步:配置AlwaysOn,创建可用性组

    AlwaysOn是在SQL Server 2012中新引入的一种高可用技术,从名称中可以看出,AlwaysOn的设计目标是保持数据库系统永远可用.AlwaysOn利用了Windows服务器故障转移集群 ...

  3. SQL Server2012 AlwaysOn 无法将数据库联接到可用性组 针对主副本的连接未处于活动状态

    在配置alwayson的可用性组时遇到如下截图中的错误,这里的服务器86是作为副本数据库服务器的. 解决该问题只需将SQL服务的运行账号改成管理员,并且打开防火墙中的5022端口(该端口号可在可用性组 ...

  4. SQL Server ->> 高可用与灾难恢复(HADR)技术 -- AlwaysOn(实战篇)之AlwaysOn可用性组搭建

    因为篇幅原因,AlwaysOn可用性组被拆成了两部分:理论部分和实战部分.而实战部分又被拆成了准备工作和AlwaysOn可用性组搭建. 三篇文章各自的链接: SQL Server ->> ...

  5. 006.SQLServer AlwaysOn可用性组高可用部署

    一 数据库镜像部署准备 1.1 数据库镜像支持 有关对 SQL Server 2012 中的数据库镜像的支持的信息,请参考:https://docs.microsoft.com/zh-cn/previ ...

  6. AlwaysOn可用性组测试环境安装与配置(二)--AlwaysOn配置(界面与T-SQL)

    四.AlwaysOn配置 1.开启AlwaysOn高可用性功能. 1.1.开启Server01的可用性组 1.2.需要重启服务:属于SQL server群集节点的服务,需要通过故障转移界面重启 1.3 ...

  7. sql server alwayson 可用性组 只读路由的设置

    昨天晚上学习了[SQL Server 2012实施与管理实战指南]的第三章,于是今天想在前段时间建的那个alwayson 可用性组测试环境上也配置一下只读路由,尝试实现读写分离. 按照书中的方法,执行 ...

  8. SQL Server ->> 高可用与灾难恢复(HADR)技术 -- AlwaysOn可用性组(理论篇)

    因为篇幅原因,AlwaysOn可用性组被拆成了两部分:理论部分和实战部分.而实战部分又被拆成了准备工作和AlwaysOn可用性组搭建. 三篇文章各自的链接: SQL Server ->> ...

  9. 005.SQLServer AlwaysOn可用性组高可用简介

    一 AlwaysOn 可用性组 1.1 AlwaysOn 可用性组概述 AlwaysOn 可用性组功能是一个提供替代数据库镜像的企业级方案的高可用性和灾难恢复解决方案.SQL Server 2012 ...

随机推荐

  1. 一步步编写avalon组件01:弹出层组件

    avalon2已经稳定下来,是时候教大家如何使用组件这个高级功能了. 组件是我们实现叠积木开发的关键. avalon2实现一个组件非常轻松,并且如何操作这个组件也比以前的avalon2,还是react ...

  2. APP分发渠道的竞争分析

    一. 最近几年,手机APP市场发展非常迅速,随着手机的硬件水平的不断升级,大量资本涌入,越来越多的开发者从桌面平台开发转移到移动平台开发,面对数以万计的手机APP,如何推广自己的APP成了难题,APP ...

  3. WCF第二天

    消息  : 消息是一个独立的数据单元,它可能由几个部分组成,包括消息正文和消息头.     服务  :  服务是一个构造,它公开一个或多个终结点,其中每个终结点都公开一个或多个服务操作.   终结点 ...

  4. linux上的编译安装

    计算机运行的程序都是二进制的代码,那么我们所用的编程语言都是自然语言中的字符,那么就需要有一种机制来将这些转化成二进制代码,那么根据转化机制不一样,编程语言(软件 产生的源头)分两大类 解释型 编译型 ...

  5. MCS-51系列特殊功能寄存器(摘录)

    MCS-51系列特殊功能寄存器(80H~FFH) 1. P0 (80H) P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0 2.SP 栈指针(81H) 3.DPTR 数据 ...

  6. wpf 任务栏闪烁

    [StructLayout(LayoutKind.Sequential)] public struct FLASHWINFO { public UInt32 cbSize; public IntPtr ...

  7. thymeleaf 中文乱码问题

    使用thymeleaf后,即使使用org.springframework.web.filter.CharacterEncodingFilter也不能解决中文乱码问题了, 后来发现在org.thymel ...

  8. Sql 中text类型字段判断是否为空

    用 len关键字,字段=''会报错:数据类型 text 和 varchar 在 equal to 运算符中不兼容. 正确方法: 1. 字段 is null 2. datalength(字段)=0 注: ...

  9. Linux下安装软件的一般步骤

    目录 一.解析Linux应用软件安装包 二.了解包里的内容 三.搞定使用tar打包的应用软件 四.搞定使用rpm打包的应用软件 五.搞定使用deb打包的应用程序 一.解析Linux应用软件安装包(回目 ...

  10. Oracle中用一条Sql实现任意的行转列拼接 多行拼接

    表结构和数据如下(表名Test): NO VALUE NAME 1 a 测试1 1 b 测试2 1 c 测试3 1 d 测试4 2 e 测试5 4 f 测试6 4 g 测试7 Sql语句: selec ...