SQL Server Alwayson创建代理作业的注意事项详解
作者:pursuer.chen 发布时间:2024-01-19 06:03:15
前言
Always On 可用性组活动辅助功能包括支持在辅助副本上执行备份操作。 备份操作可能会给 I/O 和 CPU 带来很大的压力(使用备份压缩)。 将备份负荷转移到已同步或正在同步的辅助副本后,您可以使用承载第一层工作负荷的主副本的服务器实例上的资源,您可以创建主数据库的任何类型的备份。 也可以创建辅助数据库的日志备份和仅复制完整备份。下面话不多说了,来一起看看详细的介绍吧。
一、概念
1.辅助副本上支持的备份类型
BACKUP DATABASE :在辅助副仅支持数据库、文件或文件组的仅复制完整备份。 请注意,仅复制备份不影响日志链,也不清除差异位图。
辅助副本不支持差异备份。
BACKUP LOG 仅支持常规日志备份(辅助副本上的日志备份不支持 COPY_ONLY 选项)。
若要备份辅助数据库,辅助副本必须能够与主副本进行通信,并且状态必须为 SYNCHRONIZED 或 SYNCHRONIZING。
2.配置运行备份作业的位置
在辅助副本上执行备份以减轻主生产服务器的备份工作负荷非常有好处。 但是,对辅助副本执行备份会显著增加用于确定应在何处运行备份作业的过程的复杂性。 要解决这个问题,请按如下所示配置备份作业运行的位置:
配置可用性组以便指定要对其执行备份的可用性副本。
为承载作为执行备份候选的可用性副本的每个服务器实例上的每个可用性数据库都创建编写了脚本的备份作业。
3.备份首选项
优先辅助副本
指定备份应在辅助副本上发生,但在主副本是唯一联机的副本时除外。 在该情况下,备份应在主副本上发生。 这是默认选项。
仅辅助副本
指定备份应该永远不会在主副本上执行。 如果主副本是唯一的联机副本,则备份应不会发生。
主副本
指定备份应该始终在主副本上发生。 如果您需要在对辅助副本运行备份时存在不支持的备份功能,例如创建差异备份,此选项将很有用。
任意副本
指定您希望在选择要执行备份的副本时备份作业将忽略可用性副本的角色。请注意,备份作业可能评估其他因素,例如每个可用性副本的备份优先级及其操作状态和已连接状态。
注意:如果您计划使用日志传送为可用性组准备任何辅助数据库,请将自动备份首选项设置为Primary,直到准备好所有辅助数据库并将其加入可用性组。没有强制的自动备份首选项设置。 对此首选项的解释取决于您为给定可用性组中的数据库撰写备份作业脚本的逻辑(如果有)。 自动备份首选项设置对即席备份没有影响。
二、判断语句
若要为某一给定可用性组考虑使用自动备份首选项,则对于承载备份优先级大于零 (>0) 的可用性副本的每个服务器实例,您需要为该可用性组中的数据库的备份作业编写脚本。若要确定当前副本是否为首选备份副本,请在备份脚本中使用 sys.fn_hadr_backup_is_preferred_replica
函数。如果当前实例上的数据库位于首选副本上,则返回 1否则返回 0。 通过对查询此函数的每个可用性副本运行判断脚本,可以确定哪个副本应运行给定的备份作业。
If sys.fn_hadr_backup_is_preferred_replica(@dbname)=1
BEGIN
BACKUP DATABASE @DBNAME TO DISK=<disk>
END
ELSE
PRINT('当前副本不是备份首选副本')
在所有可能执行的备份的副本上面创建相同的备份语句,在发生故障转移时,无需修改任何脚本或作业
三、创建代理作业
注意:
1.这里的数据库要选择“master”,如果当前的alwayson配置了只读路由而你这里选择的是可用性数据库的话那么在辅助副本上面创建的作业会执行失败,因为只读路由连接辅助副本可用性数据库需要readonly连接属性。创建非备份的其它作业也是一样。
2.当前我的备份脚本放在master数据库中,如果是执行其它数据库下的脚本也是一样,这里需要将数据库名带上。
3. 如果if判断这里指定的是一个非可用性组的数据库返回的结果同样是1,因为对于实例来说非可用性的数据库也是备份的首先副本。
判断是否是主副本命令
If sys.fn_hadr_is_primary_replica (@dbname) =1
BEGIN
PRINT('1')
END
ELSE
PRINT('当前副本不是主副本')
备注:判断是否是主副本命令和判断是否是备份主副本命令不一样,如果指定的数据库是非可用性组数据库判断是否是主副本返回的结果是NULL,而判断是否是备份主副本返回的是1。
总结
1.在可用性组的主数据库或辅助数据库上不允许 RESTORE 语句。
2.备份首选项只是给出一个备份的判断选项,无论你手动在哪个副本上备份都可以,唯一的限制就是辅助副本的完整备份只支持“复制”备份。由于辅助副本只支持仅复制备份,所以辅助副本无法进行差异备份。要进行差异备份那么首先备份副本应该选择主副本。
3.无论是在主副本上备份日志还是在辅助副本上备份日志最终都会截断所有副本上的日志链。
好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。
来源:http://www.cnblogs.com/chenmh/p/6971992.html


猜你喜欢
- StringIO它主要是用在内存读写str中。主要用法就是:from io import StringIOf = StringIO()f.w
- PHP 异常处理异常用于在指定的错误发生时改变脚本的正常流程。异常是什么异常处理用于在指定的错误(异常)情况发生时改变脚本的正常流程。这种情
- 本文主要介绍了IDEA配置连接MYSQL数据库遇到Failed这个问题解决,分享给大家,具体如下: &nb
- python高级特性1、集合的推导式•列表推导式,使用一句表达式构造一个新列表,可包含过滤、转换等操作。语法:[exp for item i
- 本文实例讲述了Python实现的用户登录系统功能。分享给大家供大家参考,具体如下:有N,E,Q三个选择,若选择Q或者中断,则系统退出。若其他
- (1)服务器配置:[root@localhost ~]# cd /usr/local/src/[root@localhost src]# w
- Python 字符串字符串是 Python 中最常用的数据类型。我们可以使用引号来创建字符串。创建字符串很简单,只要为变量分配一个值即可。例
- 用下列方法可以做到: main.htm<html><body><form action="
- --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2'
- UCHOME的代码还是很不错的,学习一下! <?php /** * 定义一些常量 */ @define('IN_UCHOME&
- 0. 简介在上篇博客——《Golang调度器(4)—goroutine调度》中一
- SQL语句先前写的时候,很容易把一些特殊的用法忘记,我特此整理了一下SQL语句操作,方便自己写SQL时方便一点,想贴上来,一起看看,同时希望
- 这些对文本的操作经常用到, 那我就总结一下。 陆续补充。。。操作:strip_html(cls, text) 去除html标签separat
- Sqlserver2005日志文件太大,使其减小的方法如下所示:运行下面的三行 dbName为数据库名: backup log dbName
- 在并发编程中,多个Goroutine访问同一块内存资源时可能会出现竞态条件,我们需要在临界区中使用适当的同步操作来以避免竞态条件。Go 语言
- 那么Python如何快速上手?找来了一篇广受好评的新语言学习方法介绍,供大家参考。听说,你决定要为你的 “技能树” 再添加一门特定的编程语言
- JavaScript中,可以使用delete操作符来删除对象中的property:var t = {a:42, b:26};console.
- element-UI el-table树形数据 修改小三角图标el-table树形数据 默认样式有下级没展开是▸ 有下级展开了是▾ 没有下级
- 半透明效果有时候会给页面增加不少色彩,特别是Vista盛行之后,半透明效果更加受推崇。在诸多可用于Web浏览的图片格式中,只有PNG格式和G
- GIT安装访问: https://git-scm.com/downloads ,进入git'下载页面,根据个人操作系统下载对应软件版