SQL Server 骚操作系列 1 - 数据库实例间串流数据库
什么是骚操作
个人对它的定义是,一系列炫酷且不容易被模仿的“奇技淫巧”,但绝不哗众取宠,必须要有实际需要和使用场景。对于一个有多年经验的专业DBA,每个人都有自己独特的骚操作, 在接下来的一段时间,我将展示自己的一系列骚操作,就当抛砖引玉吧,同时也让大家看看SQL Server是不是真的不入流。
背景
作为DBA, 一个常见的任务是,将数据库备份,然后恢复到另一个实例,具体涉及到的case可能比较多,比如
- 源实例与目标实例物理上处于不同位置,甚至属于不同部门或公司,或者一个在本地,一个在云上。
- 源实例与目标实例可能基于不同的操作系统,比如一个是基于Windows, 而另一个是基于Linux。
通常的做法是
- 在源实例上备份数据库
- 将备份文件拷贝到共享文件夹、FTP, 或直接拷贝到目标实例
- 恢复数据库到目标实例
其中存在的问题在于,
- 其中的文件拷贝可能慢且繁琐。比如,如果要将本地数据库回复到AWS EC2上的实例。需要(1) 将备份文件上传之S3 (2)将备份文件下载到EC2实例
- 串行化。必须要完成备份,才能拷贝文件,然后才能Restore。
- 临时存贮需求。当数据库巨大的时候,必须考虑到backup文件的存储需求,这往往意味着额外的成本。
Idea
将这一系列的操作转化为stream操作,其要点有,
- 在目标实例服务器的一个TCP端口打开Restore服务
- 在源实例上将备份文件stream化,并通过网络发送给目标服务器的Restore服务
这样一来就备份,传输与还原基本上同时进行,大大简化了整个操作,提升了效率,也不需要额外的临时存储。我给它取了个名字叫Endpoint-to-endpoint Backup and Restore.
demo
将tCompareDB数据库从Windows上的SQL Server 2014实例串流到Linux上的SQL Server 2017实例。
完整过程 - http://gasql.com/images/test1.gif
更多
甚至可以将其包装为CLR存储过程。在这个实例中,你将看到它对比普通备份与还原,是如何方便与高效。
完整过程 - http://gasql.com/media/bar5.mp4
扩展
由于它是如此的简便与高效,以至于可以此为基础,大大简化Log Shipping,甚至建立一种准实时的Log Shipping 模型。
授权
由于它已经或准备商业化,所以无法提供下载以免费使用。但可以通过以下链接下载免费评估版本。
http://gasql.com/manual.html#download
目前尚属比较初级的阶段,欢迎您的反馈与宝贵意见。