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‘
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
AlwaysOn--Backup Preference