AlwaysOn--查看可用性组的首先备份节点
在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--查看可用性组的首先备份节点的更多相关文章
- SQL Server 2012 管理新特性:AlwaysOn 可用性组
SQL Server 2012 新特性(一)管理新特性:AlwaysOn 一.准备环境 1.准备4台计算机 域控制器DC1,IP地址192.168.1.1 主节点SQL1:IP地址192.168.1. ...
- 部署AlwaysOn第二步:配置AlwaysOn,创建可用性组
AlwaysOn是在SQL Server 2012中新引入的一种高可用技术,从名称中可以看出,AlwaysOn的设计目标是保持数据库系统永远可用.AlwaysOn利用了Windows服务器故障转移集群 ...
- SQL Server2012 AlwaysOn 无法将数据库联接到可用性组 针对主副本的连接未处于活动状态
在配置alwayson的可用性组时遇到如下截图中的错误,这里的服务器86是作为副本数据库服务器的. 解决该问题只需将SQL服务的运行账号改成管理员,并且打开防火墙中的5022端口(该端口号可在可用性组 ...
- SQL Server ->> 高可用与灾难恢复(HADR)技术 -- AlwaysOn(实战篇)之AlwaysOn可用性组搭建
因为篇幅原因,AlwaysOn可用性组被拆成了两部分:理论部分和实战部分.而实战部分又被拆成了准备工作和AlwaysOn可用性组搭建. 三篇文章各自的链接: SQL Server ->> ...
- 006.SQLServer AlwaysOn可用性组高可用部署
一 数据库镜像部署准备 1.1 数据库镜像支持 有关对 SQL Server 2012 中的数据库镜像的支持的信息,请参考:https://docs.microsoft.com/zh-cn/previ ...
- AlwaysOn可用性组测试环境安装与配置(二)--AlwaysOn配置(界面与T-SQL)
四.AlwaysOn配置 1.开启AlwaysOn高可用性功能. 1.1.开启Server01的可用性组 1.2.需要重启服务:属于SQL server群集节点的服务,需要通过故障转移界面重启 1.3 ...
- sql server alwayson 可用性组 只读路由的设置
昨天晚上学习了[SQL Server 2012实施与管理实战指南]的第三章,于是今天想在前段时间建的那个alwayson 可用性组测试环境上也配置一下只读路由,尝试实现读写分离. 按照书中的方法,执行 ...
- SQL Server ->> 高可用与灾难恢复(HADR)技术 -- AlwaysOn可用性组(理论篇)
因为篇幅原因,AlwaysOn可用性组被拆成了两部分:理论部分和实战部分.而实战部分又被拆成了准备工作和AlwaysOn可用性组搭建. 三篇文章各自的链接: SQL Server ->> ...
- 005.SQLServer AlwaysOn可用性组高可用简介
一 AlwaysOn 可用性组 1.1 AlwaysOn 可用性组概述 AlwaysOn 可用性组功能是一个提供替代数据库镜像的企业级方案的高可用性和灾难恢复解决方案.SQL Server 2012 ...
随机推荐
- JavaScript:JSON
JSON是一种数据格式,它并不从属于JavaScript,很多语言都有JSON的解析器和序列化器. 语法 JSON可以表示三种类型: 简单值:使用与JavaScript相同的语法,可以在JSON中 ...
- 无法连接到已配置的开发web服务器
http://jingyan.baidu.com/article/29697b91099847ab20de3c8b.html 这是防火墙造成的,将防火墙关闭即可
- solrCloud 管理
创建collection: /soft/server/solr-4.10.0/example/scripts/cloud-scripts/zkcli.sh -cmd upconfig -zkhost ...
- 一段防盗连的PHP代码
$ADMIN[defaulturl] = http://www.163.com/404.htm; //盗链返回的地址 $okaysites = array("http://www.163 ...
- GBDT(MART) 迭代决策树入门教程 | 简介
GBDT(MART) 迭代决策树入门教程 | 简介 http://blog.csdn.net/w28971023/article/details/8240756
- Android之activity初讲
前天我们已经成功创建了第一个Android项目,如果我要把软件推荐给我的第一个用户,毫无疑问是从界面开始介绍.因为即使你的程序算法再高效,架构再出色,用户根本不会在乎这些,他们一开始只会对看到的东西感 ...
- count distinct 多个字段 或者 count(*) 统计group by 结果
SELECT COUNT(*) FROM( SELECT 列名 FROM 表名 where ( 条件 )GROUP BY 多字段)临时表名 例如: SELECT COUNT(*) FROM(SELEC ...
- eclipse编码格式设置教程、如何为eclipse设置编码格式?
如果要使插件开发应用能有更好的国际化支持,能够最大程度的支持中文输出,则最好使 Java文件使用UTF-8编码.然而,EcliPSe工 作空间(workspace)的缺省字符编码是操作系统缺省的编码, ...
- 单片机TM4C123学习(七):I2C模块(温度传感器)
I2C(Inter Intergrated Circuit)总线是Philips公司推出的一种用于IC器件之间连接的二线制串行扩展总线,它通过两根信号线(SDA-串行数据线:SCL-串行时钟线)在连接 ...
- Errors occurred during the build. Errors running builder 'JavaScript Validator' on project 'XXX'.
Errors occurred during the build. Errors running builder 'JavaScript Validator' on project 'XXX'. ...