在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. 通过微信企业号发送zabbix报警

    采用微信报警时,管理员账户中必须要设置"示警媒体"一项,"收件人"一项可随便填写一下.其它成员则可以不用添加设置. ---------------------- ...

  2. ajax请求后根据条件进行页面跳转

    $.ajx({ url: "@Url.Action("DetectCorporationCompetencyCreated", "DataBase") ...

  3. require和include的区别

    require 的使用方法如 require("MyRequireFile.php"); .这个函数通常放在 PHP 程序的最前面,PHP 程序在执行前,就会先读入 require ...

  4. 随笔—邀请赛前训— Codeforces Round #330 (Div. 2) Vitaly and Night

    题意:给你很多对数,要么是0要么是1.不全0则ans++. 思路即题意. #include<cstdio> #include<cstring> #include<iost ...

  5. .NET高级工程师面试题之SQL篇

    1 题目 这确实是一个真实的面试题,琢磨一下吧!知识不用,就会丢掉,我太依赖各种框架和dll了,已经忘记了最基本的东西.有多久没有写过SQL了,我已经不记得了. 已知表信息如下: Department ...

  6. CSS()方法设置元素样式

    使用CSS()方法可以直接设置元素的样式,方法为:css(name,value) $(p).css("font-weight", "bold");     // ...

  7. html 表格的制作

    表格的制作 表格<table></table> <table  width=""  height=""  align=" ...

  8. stream_copy_to_stream的使用

    stream_copy_to_stream - 在数据流之间进行复制操作 例子: <?php //读写方式 $stream = fopen('php://temp', 'w+'); //如果成功 ...

  9. Hessian 初探

    Hessian 是一个序列化协议, 他的优点在于比 Java 原生的对象序列化/反序列化速度更快, 序列化出来以后的数据更小. 序列化协议跟应用层协议无关, 可以将 Hessian 序列化以后的数据放 ...

  10. 根据显示的字符多少来做Label的自适应高度

    根据显示的字符多少来做Label的自适应高度 UILabel *label = [[UILabel alloc]init]; NSString *string = @"其实,经年过往,每个人 ...