首页 > 代码库 > AlwaysOn--Backup Preference

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‘

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