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,如果是,就进行备份,否则退出。
该函数返回0和1,0代表NO,1代表 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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现