在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. TIJ读书笔记06-终结清理和垃圾回收

    TIJ读书笔记06-终结清理和垃圾回收 finalize()方法 垃圾回收器如何工作 java的垃圾回收是由jvm来控制的.所以需要java程序员参与的部分不是很多. 但是在这里需要明白一点,java ...

  2. An attempt was made to load a program with an incorrect format

      用.net调用一个C++ 32位的DLL, 编译的时候选择x86, 在部署到一个64位的机器上的时候报错:"An attempt was made to load a program w ...

  3. docker网络配置之自定义网桥

    使用特定范围的 IP (仅适用于v1.x)不适用于新版的v1.1x Docker 会尝试寻找没有被主机使用的 ip 段,尽管它适用于大多数情况下,但是它不是万能的,有时候我们还是需要对 ip 进一步规 ...

  4. session基础

    1.每个页面都必须开启session_start()后才能在每个页面里面使用session. 2.session_start()初始化session,第一次访问会生成一个唯一会话ID保存在客户端(是基 ...

  5. QtCreator动态编译jsoncpp完美支持x86和arm平台

    如果是做嵌入式开发. 在Qt下支持JSon最好的办法,可能不是采用qjson这个库.QJson这个库的实例只提供了x86环境下的编译方法. Installing QJson-------------- ...

  6. Spring3 url匹配规则

    Spring3 url匹配规则 Wildcard Description ? 匹配任何单字符 * 匹配0或者任意数量的字符 ** 匹配0或者更多的目录 宝贝网址:

  7. linux 下文件节点索引

    最近发现一个奇怪的问题,就是一个pyhton 后台的服务一直打印日志文件,在中间我用vim看日志文件,关闭时习惯性的:wq退出,在此之后日志文件就不输出了. 1 对于这个现象我开始认为是python ...

  8. iOS9的新特性以及适配方案

    新的iOS 9系统比iOS8更稳定,功能更全面,而且还更加开放.iOS 9加入了更多的新功能,包括更加智能的Siri,新加入的省电模式.iOS 9为开发者提供5000个全新的API. 1. 限制HTT ...

  9. [原创]HEXO博客搭建日记

    博客系统折腾了好久,使用过Wordpress,Ghost,Typecho,其中Typecho是我使用起来最舒心的一种,Markdown编辑+轻量化设计,功能不多不少刚好,着实让我这种强迫症患者舒服了好 ...

  10. TCP/ip协议栈之内核调优

    大并发带来服务器各种层出不穷的问题,我们要善用服务器系统内核,因为其性能优于用户态的玩意 注:若想永久保存参数,可将其加入到/etc/sysctl.conf中,执行sysctl -p使其永久生效,临时 ...