在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. 《C++编程规范:101条规则、准则与最佳实践》学习笔记

    转载:http://dsqiu.iteye.com/blog/1688217 组织和策略问题 0. 不要为小事斤斤计较.(或者说是:知道什么东西不需要标准化) 无需在多个项目或者整个公司范围内强制实施 ...

  2. eval 函数的应用 (去除包装在列表外面的引号)

    a="[u'ANDROID-5a9ac5c22ad94e26b2fa24e296787a35', u'0', 0, 0, 0, 1]" 此时的a是一个字符串,目的是要去掉a上面的引 ...

  3. LinQ 基础

    LinQ全名:Linq to Sql,是一种数据库访问技术 常见的数据库访问技术: 1.ADO.NET 2.Entity Framework  框架 3.LinQ LinQ是高集成化的数据访问类,它会 ...

  4. servlet3.0,web.xml的metadata-complete的作用

    metadata-complete是servlet3.0规范中的新增的属性,该属性接受两个属性值,true或false.当该属性值为true时,该web应用将不会加载Annotation配置的web组 ...

  5. Spring Framework------>Class RestTemplate----->

    org.springframework.web.client.RestTemplate 官方文档 学习心得: class RESTTemplate用于管理与客户端的HTTP连接

  6. CentOS7安装mysql5.7.11

    开始安装 yum update yum install wget wget http://repo.mysql.com/mysql57-community-release-el7-7.noarch.r ...

  7. TransactionScope 事务使用说明

    TransactionScope是.Net Framework 2.0滞后,新增了一个名称空间.它的用途是为数据库访问提供了一个“轻量级”[区别于:SqlTransaction]的事物.使用之前必须添 ...

  8. Shi-Tomasi角点检测

    代码示例: #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #inc ...

  9. IOS 导航栏

    系统状态栏改为白色:在Supporting Files文件的info.plist文件中添加 新的key,名字为View controller-based status bar appearance,并 ...

  10. c#控制IE浏览器自动点击等事件WebBrowser,mshtml.IHTMLDocument2 .

    // c#控制IE浏览器自动点击等事件WebBrowser,mshtml.IHTMLDocument2 分类: c# 2013-02-06 15:18 3008人阅读 评论(0) 收藏 举报 可以实现 ...