SQL Server 骚操作系列 1 - 数据库实例间串流数据库

什么是骚操作

个人对它的定义是,一系列炫酷且不容易被模仿的“奇技淫巧”,但绝不哗众取宠,必须要有实际需要和使用场景。对于一个有多年经验的专业DBA,每个人都有自己独特的骚操作, 在接下来的一段时间,我将展示自己的一系列骚操作,就当抛砖引玉吧,同时也让大家看看SQL Server是不是真的不入流。

背景

作为DBA, 一个常见的任务是,将数据库备份,然后恢复到另一个实例,具体涉及到的case可能比较多,比如

  1. 源实例与目标实例物理上处于不同位置,甚至属于不同部门或公司,或者一个在本地,一个在云上。
  2. 源实例与目标实例可能基于不同的操作系统,比如一个是基于Windows, 而另一个是基于Linux。

通常的做法是

  1. 在源实例上备份数据库
  2. 将备份文件拷贝到共享文件夹、FTP, 或直接拷贝到目标实例
  3. 恢复数据库到目标实例

其中存在的问题在于,

  1. 其中的文件拷贝可能慢且繁琐。比如,如果要将本地数据库回复到AWS EC2上的实例。需要(1) 将备份文件上传之S3 (2)将备份文件下载到EC2实例
  2. 串行化。必须要完成备份,才能拷贝文件,然后才能Restore。
  3. 临时存贮需求。当数据库巨大的时候,必须考虑到backup文件的存储需求,这往往意味着额外的成本。

Idea

将这一系列的操作转化为stream操作,其要点有,

  1. 在目标实例服务器的一个TCP端口打开Restore服务
  2. 在源实例上将备份文件stream化,并通过网络发送给目标服务器的Restore服务

这样一来就备份,传输与还原基本上同时进行,大大简化了整个操作,提升了效率,也不需要额外的临时存储。我给它取了个名字叫Endpoint-to-endpoint Backup and Restore.

demo

将tCompareDB数据库从Windows上的SQL Server 2014实例串流到Linux上的SQL Server 2017实例。
SQL Server 骚操作系列 1 - 数据库实例间串流数据库
完整过程 - http://gasql.com/images/test1.gif

更多

甚至可以将其包装为CLR存储过程。在这个实例中,你将看到它对比普通备份与还原,是如何方便与高效。
SQL Server 骚操作系列 1 - 数据库实例间串流数据库
完整过程 - http://gasql.com/media/bar5.mp4

扩展

由于它是如此的简便与高效,以至于可以此为基础,大大简化Log Shipping,甚至建立一种准实时的Log Shipping 模型。

授权

由于它已经或准备商业化,所以无法提供下载以免费使用。但可以通过以下链接下载免费评估版本。
http://gasql.com/manual.html#download
目前尚属比较初级的阶段,欢迎您的反馈与宝贵意见。