随笔 - 229  文章 - 2  评论 - 511  阅读 - 84万

AlwaysOn--Backup Preference

AlwaysOn group的一个新特性是允许在secondary replica进行backup,backup的负载从primary replica上移除去。

并且提供了Backup preference选项,用于在AlwaysOn Availability Group环境下对备份进行管理。需要强调的是,Backup Preferences并没有强制作用,设定之后,依然可以在任意一个replica上进行备份。

   

下面用一个例子解释如何使用Backup preference

   

环境

===

Secondary node: SQL108W2K8R21.

Secondary node: SQL108W2K8R22.

Primary node: SQL108W2K8R23.

   

Availability group: AgGroupTest

Replica database: dbtest1

   

   

打开AvwaysOn High Availability ->Availability Groups->右键所需要的Availability Replicas->Properties.

会弹出下面的窗口,点击左面的Backup Preference。

   

   

Backup Preference选项分别如下:

Prefer Secondary

优先级高的secondary replica会被设定为Prefer replica ,如果所有的secondary replica优先级相同,那么系统会随机挑选一个作为Prefer replica.

如果高优先级的secondary replica不可用,那么第二高的会被选择为prefer replica,以此类推。

如果primary是唯一可用的replica,那么primary为成为prefer replica

   

Secondary only

Primary replica永远不会成为prefer replica, 其余的和Prefer Secondary相同

   

   

Primary

只有Primary replica成为prefer replica

   

Any Replica

优先级高replica的成为replica

 

如果replica勾选了Exclude Replica,则该replica不会成为prefer replica

 

那么如何将backup preference应用到我们的backup计划中呢?下面是一个例子

 

在所有的replica中建立一个full backup作业,该作业每天运行一次,脚本如下

declare @n int

select @n=sys.fn_hadr_backup_is_preferred_replica ( 'dbtest1' )

if @N=1

begin

declare @timestamp sysname

set @timestamp= replace(replace(CONVERT(char(16),GETDATE(),120),':','_'),' ','_')+'.bak'

declare @dbName sysname

set @dbName='dbtest'

declare @path sysname

set @path='\\sharefolder\'--for example c:\backup\

declare @backup nvarchar(200)

set @backup='backup database '+quotename(@dbName,']')+' to disk='+''''+@path+@dbName+@timestamp+''' with copy_only' //alwayson不支持在seconday做full dbbackup

exec (@backup)

 

 

end

 

在所有的replica中建立一个log backup作业,该作业每天15分钟一次,脚本如下

declare @n int

select @n=sys.fn_hadr_backup_is_preferred_replica ( 'dbtest1' )

if @N=1

begin

 

declare @timestamp sysname

set @timestamp= replace(replace(CONVERT(char(16),GETDATE(),120),':','_'),' ','_')+'.bak'

declare @dbName sysname

set @dbName='dbtest'

declare @path sysname

set @path='\\sharefolder\'--for example c:\backup\

declare @backup nvarchar(200)

set @backup='backup log '+quotename(@dbName,']')+' to disk='+''''+@path+@dbName+'_log'++@timestamp+''''

exec (@backup)

 

 

end

 

这个备份作业使用到了sys.fn_hadr_backup_is_preferred_replica函数,该函数会根据backup preference的设定来判断当前节点是否为prefer replica,如果是,就进行备份,否则退出。

该函数返回010代表NO1代表 YES. 这样就保证同一时刻只有一个replica可以进行备份操作。

 

如果您使用Maintenance Plan来创建计划,默认情况下会自动使用Backup preference.

 

最后是两个关于backup preference的bug fix

FIX: 100 percent of CPU resources are used after you enable the Log Shipping feature for some databases in SQL Server 2012 http://support.microsoft.com/kb/2887115

 

FIX: The system function sys.fn_hadr_backup_is_preferred_replica does not work correctly after you have CU7 for SQL Server 2012 SP1 installed http://support.microsoft.com/kb/2918791

posted on   stswordman  阅读(2067)  评论(2编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示