当前位置: 首页 > news >正文

数据库副本的自动种子设定(自增长)

原文: 数据库副本的自动种子设定(自增长)

背景

在 SQL Server 2012 和 2014 中,初始化 SQL Server Always On 可用性组中的次要副本的唯一方法是使用备份、复制和还原。

在一个高可用组里面添加一个数据库需要很多手动任务和一些必要条件。需要完成的这些工作中,有一些是有些困难的,比如:

  • 我们需要从主副本中备份数据库,并将这个备份分发到可用组的其他副本中。这是基于手动操作的,因为这需要你从主数据库备份还原数据库到次要副本。
  • 有时候,我们不能通过网络防火墙在副本之间传送数据库备份文件。这种情况下,需要开放SMB协议端口,以便能在节点间传输备份文件。
  • 通常,复制一个备份文件会占用更多空间,这是额外的需求,更多的磁盘空间。
  • 特别是针对第三方备份的方案,会导致备份/还原链的中断。但是这又取决于数据库的备份策略。
  • 分发和还原数据库是耗时并且不透明的过程。

 

作为一个兼职DBA,我不喜欢处理这些问题。当我创建数据库在主节点上时,我想要数据库被自动创建在所有副本上,幸运的是SQLServer 2016以后这样的工作就容易多了。为了更好的帮助DBA们处理这些问题,微软引入了可用组的自动增长数据库。即SQL Server 2016 引入了用于初始化次要副本的新功能 - 我一般称之为数据库自增长(自动种子设定)

那么这个自动化如何实现的?

 

当你打算创建一个数据库在主副本上,并且加入数据库到AG里面时,自动填充就会在数据库镜像端间进行通信,并且复制数据库到次要副本中。假设有一个可用组,由N个副本组成,replicas - Replica1, Replica2, ... ReplicaN。当前你的主副本是Replica2 ,然后你创建一个新的数据库在主副本上。下一步就是要尽快把数据库加入到可用组的其他副本上。这个解决方案就如下图的流程所示:

 

数据库自动种子设定(自增长),没有特殊的必要条件和限制,只是需要数据和日志文件路径在可用组中是完全一致的。这个可用组配置自增长,数据库在可用组中一定是完整还原模式,需要有一个完成备份以及事务日志备份。如果在可用组中用手动同步加入的数据库也需要上述一样的条件。

启动自动种子设定功能

在每一个需要自增长数据库的副本上,需要允许可用组创建数据库。下面的脚本用来允许AG创建数据库,但是确保你可以连接到master数据库并且能够对所有可用组中的副本执行这个脚本:

ALTER AVAILABILITY GROUP [{your_AG_name}]
GRANT CREATE ANY DATABASE;
GO

 

可用组必须被切换为自动增长模式。该模式可以通过在每个副本中执行下面额T-SQL代码来实现(或者每个副本中启动自增模式):

ALTER AVAILABILITY GROUP [{your_AG_name}]
MODIFY REPLICA ON '{your_replica_name}' WITH (SEEDING_MODE = AUTOMATIC); GO

 

 

另外,对于Always On 的可用组来说,自增期间能够使用跟踪标记trace flag 9567压缩数据流,从而大大减少传输时间。相关内容可以再找个连接看到: https://docs.microsoft.com/en-us/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql

添加一个带有自增长属性的数据库

打开SSMS并且连接可用组主节点。导航到AlwaysOn 高可用(AlwaysOn High Availability)文件,打开“Availability Groups”,然后找到打算添加数据库的可用组。在打开"Availability Databases" 文件夹。右击"Availability Databases",右键菜单"Add databases..", 这个菜单选项将会激活配置向导如下:

 

选择打算加入到可用组的数据库:

 

注意,这个数据库一定满足一下必要条件。选择选项“Skip initial data synchronization”:

在次要节点,你会看到数据库已经被还原的信息:

 

因此,你也可以在msdb.dbo.restorehistory 表中看到每个数据库的增加信息。在主服务器,可以在表msdb.dbo.backupmediafamily 中看到每个数据库信息,数据库可以shiyo8ng下面的T-SQL语句实现:

ALTER AVAILABILITY GROUP {your_AG_name} ADD DATABASE {your_database_name};

 

这个脚本必须在可用组的每个数据库上执行。

优缺点

我通常使用自动数据库填充为可用组并且发现它很有价值。例如,微软SharePoint 支持组有权去创建新的数据库在主副本上,但是他们不能直接把数据库加入到可用组中,因为这样做影响了数据库的高可用。当我们使用自动数据填充在指定的可用组上时,我们可以自动添加新的Sharepoint 数据库在可用组上,使用一个将所有最近创建的Sharepoint 数据库添加到可用组上的脚本,使用2016这个特性不在需要使用手动操作。

 

综上所述,使用自动填充的优势有如下几点:

  • 操作过程简单.
  • 节省磁盘空间.
  • 节省备份还原事件,因为SQLServer复制数据库使用网络.
  • 使用追踪标记9567,能够大大减少同步时间。

 

在可用组中使用自动增长的缺点:

  • 在同步过程中需要巨大的网络流。
  • 处理需要一些手动处理步骤

     

    引用本文请注明原文地址:http://www.cnblogs.com/wenBlog/p/8341245.html

相关文章:

  • Java入门篇(六)——类和对象
  • My year of 2017
  • 何玺:区块链的价值不止产比特币,在对未来商业逻辑的重构与创新
  • 5,元组
  • vue 前端上传图片组件
  • vuex 笔记整理
  • javascript 总结(常用工具类的封装)
  • 深入浅出webpack学习(1)--核心概念
  • Js基础知识(一) - 变量
  • Linux常用命令大全 (非常有用)
  • 配置karma支持Chrome浏览器
  • Java程序员升职加薪必备技术——分布式
  • unity探索者之微信登录,非第三方插件
  • json 解析豆瓣ApiURL
  • mongodb数据备份脚本和日志切割脚本
  • JavaScript-如何实现克隆(clone)函数
  • 时间复杂度分析经典问题——最大子序列和
  • 【css3】浏览器内核及其兼容性
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • canvas绘制圆角头像
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • hadoop集群管理系统搭建规划说明
  • JavaScript设计模式与开发实践系列之策略模式
  • jquery cookie
  • jQuery(一)
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • mysql常用命令汇总
  • Python socket服务器端、客户端传送信息
  • React中的“虫洞”——Context
  • Redux 中间件分析
  • Solarized Scheme
  • Vue实战(四)登录/注册页的实现
  • 聚类分析——Kmeans
  • 前嗅ForeSpider中数据浏览界面介绍
  • 时间复杂度与空间复杂度分析
  • 新版博客前端前瞻
  • ​香农与信息论三大定律
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #考研#计算机文化知识1(局域网及网络互联)
  • #控制台大学课堂点名问题_课堂随机点名
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (ZT)薛涌:谈贫说富
  • (待修改)PyG安装步骤
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (三)c52学习之旅-点亮LED灯
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • .jks文件(JAVA KeyStore)
  • .net 4.0发布后不能正常显示图片问题
  • .Net Winform开发笔记(一)
  • .net 使用ajax控件后如何调用前端脚本
  • .net 中viewstate的原理和使用
  • .NET国产化改造探索(三)、银河麒麟安装.NET 8环境