SQL Server 跨网段(跨机房)通过备份文件初始化复制
笔者最近碰到了需要搭建跨网段的SQL Server复制,实际的拓扑结构如下草图所示:

发布端A服务器位于CDC机房中
订阅端B服务器位于阿里云
因为SQL Server复制不支持通过IP连接分发服务器,为了解决跨网段、跨机房的问题,笔者采用了如下的解决方案:
1.设置端口映射:在防火墙中开放外网IP的1433端口对应位于CDC机房中的发布服务器A的1433端口。并且该1433端口仅对位于阿里云的服务器B开放。
2.打开位于阿里云的服务器B的1433端口,并设置仅限CDC机房服务器访问。
3.基于安全考虑,采用备份文件初始化,这样可以不必使用文件共享快照文件。
4.使用Host文件,将IP与服务器名对应。
5.由于仅仅是测试,为了简化设置,发布服务器和分发服务器都在同一个服务器上。
----------------------------------------------------------------------------------------------------
以下是实际测试搭建SQL Server 跨网段(跨机房)通过备份文件初始化复制的过程截图:
1,在订阅服务器上设置HOST文件,将CDC机房的外网IP对应发布服务器A的服务器名:

2,同样在发布服务器上设置HOST文件,将位于阿里云的订阅服务器外网IP对应订阅服务器的机器名:

3,在发布服务器和订阅服务器上分别创建Replication用户(这里仅提供了在订阅服务器创建的截图),分别用于日志读取代理器连接发布服务器和推送复制连接到订阅服务器。


4,在发布服务器上新建本地发布



此处快照文件夹可以随便设置,因为后续不会使用到。














设置基本完成。
6,备份发布数据库(需要保留一份在发布数据库上,以备创建订阅时使用):
USE [master]
GO
BACKUP DATABASE [mydb]
TO DISK = N'E:\dbbackup\full\mydb 2015-02-26_2.BAK'
WITH NOFORMAT, NOINIT, NAME = N'mydb-完整数据库备份',
SKIP, NOREWIND, NOUNLOAD,COMPRESSION, STATS = 10
GO
7,拷贝一份备份文件到订阅服务器
8,在订阅服务器还原数据库:
RESTORE DATABASE [mydb]
FROM DISK = N'D:\mydb 2015-02-26\mydb 2015-02-26.BAK'
WITH FILE = 1,
MOVE N'mydb' TO N'D:\MSSQL\Data\mydb\mydb.mdf',
MOVE N'mydb_Data' TO N'D:\MSSQL\Data\mydb\mydb_Data.ndf',
MOVE N'mydb_log' TO N'D:\MSSQL\Log\mydb\mydb_log.ldf',
NOUNLOAD, REPLACE, STATS = 10
GO
9,在发布服务器上创建订阅:
USE [mydb]
GO
EXEC sp_addsubscription
@publication = N'TranPub_mydb',
@subscriber ='mySubscriptionNm',-- 这里应该填订阅服务器的服务器名(即hosts里的名字)
@destination_db = N'mydb',
@subscription_type = N'Push',
@sync_type = N'initialize with backup',
@backupdevicetype='disk',
@backupdevicename='E:\dbbackup\full\mydb 2015-02-26.BAK'-- 这个是发布服务器上备份文件的路径
创建成功后会得到消息:
Job 'XXXX' started successfully.
Warning: The distribution agent job has been implicitly created and will run under the SQL Server Agent Service Account.
10,最后还需要修改订阅端的连接:


打完收工,文字不多,以图片说话,如有不明白的地方请大家留言就是。
参考文献:
https://technet.microsoft.com/zh-cn/library/ms147834(v=sql.105)
http://www.cnblogs.com/gaizai/archive/2013/09/18/3328511.html
http://www.cnblogs.com/gaizai/p/3309567.html
SQL Server 跨网段(跨机房)通过备份文件初始化复制的更多相关文章
- SQL Server 中的跨库视图
SQL Server 中的跨库视图 在一个SQL中,有多个数据库,A.B.C,在使用C为连接库中,现在要查询A中的表T1. 那么,在C中建创视图(A_T1). SELECT *FROM A.dbo.T ...
- SQL Server 数据库同步,订阅、发布、复制、跨服务器
随便说两句 折腾了一周,也算把数据库同步弄好了.首先局域网内搭建好,进行各种测试,弄的时候各种问题,弄好以后感觉还是挺简单的.本地测试好了,又在服务器进行测试,主要的难点就是跨网段同步,最后也解决了, ...
- SQL Server 通过备份文件初始化复制
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 搭建过程(Process) 注意事项(Attention) 疑问(Questions) 参考文 ...
- Step3 SQL Server 通过备份文件初始化复制
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 搭建过程(Process) 注意事项(Attention) 疑问(Questions) 参考文 ...
- SQL Server 通过备份文件初始化复制 – 听风吹雨
一.背景 MySQL在对有历史数据的数据库进行搭建复制(Master/Slave)的时候,可以通过在Master服务器备份历史数据,利用这个备份文件 在Slave进行还原:这样做的好处是可以更加快速的 ...
- (1)sql server 同网段复制
转自:https://blog.csdn.net/hliq5399/article/details/51678774(文末有复制系列文章链接) 一.背景 在复制的运用场景中,事务发布是使用最为广泛的, ...
- SqlServer 跨网段跨服务器复制
注意:被同步的表必须有主键,否则无法同步.对数据库进行操作时需要登录服务器,在服务器本地进行操作,远程对数据库进行操作不能完成所有的步骤 准备工作: 1.将发布数据库完整备份到订阅服务器上,并在订阅服 ...
- SQL Server Agent Job 中用Powershell将备份文件拷贝到AWS S3
SQL Server 数据库备份后,如何再复制一份到AWS S3 上,步骤和需要注意的地方如下: 1. 首先在SQL Server 中创建一个Credential 2. 授权这个Credential ...
- SQL Server 数据变更时间戳(timestamp)在复制中的运用
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 方案(Solution) 方案一(Solution One) 方案二(Solution Two ...
随机推荐
- 前端组件化Polymer入门教程(5)——生命周期
以前我对生命周期这个概念还真不是很清楚,不过想想也简单,比如说人的生命周期,无非就是生老病死.而对于程序的生命周期就是说,它在每个阶段都会做不同的事,再比如说回调函数把,ajax返回的时候它才执行,那 ...
- JNI的又一替代者—使用JNR访问Java外部函数接口(jnr-ffi)
1. JNR简单介绍 继上文“JNI的替代者—使用JNA访问Java外部函数接口”,我们知道JNI越来越不受欢迎,JNI是编写Java本地方法以及将Java虚拟机嵌入本地应用程序的标准编程接口.它管理 ...
- 因为错误关闭Selinux导致CentOS7启动失败(进度条卡死,图形界面加载卡死)
我在CentOS7上安装oracle,非常麻烦,搞半天终于安装完毕,当天我没有发现任何问题,第二天上班打开虚拟机CentOS7就进不去了. 我想起来之前关闭了Selinux,把系统名称改成了redha ...
- PHP7最高性能优化建议
PHP7已经发布了, 作为PHP10年来最大的版本升级, 最大的性能升级, PHP7在多放的测试中都表现出很明显的性能提升, 然而, 为了让它能发挥出最大的性能, 我还是有几件事想提醒下. PHP7 ...
- 第3章:Hadoop分布式文件系统(1)
当数据量增大到超出了单个物理计算机存储容量时,有必要把它分开存储在多个不同的计算机中.那些管理存储在多个网络互连的计算机中的文件系统被称为"分布式文件系统".由于这些计算机是基于网 ...
- laravel 标签
变量标签 {$名} 数组变量标签 {{$名[key]}} 变量调节器 在标签中直接使用php函数,写法和php中一样 条件标签 @if(条件) @endif @if(条件) @else @endif ...
- 点击CheckBox让Gridview控件在编辑与正常状态之间切换
昨晚快休息时,还有一位网友咨询Insus.NET,他想在开发时,实现一个小功能,就是想让用户在点击Gridview控件第一列的CheckBox之后,GridView进入编辑状态,取消选中的CheckB ...
- EF只更新变化的字段
摘要 在使用EF的时候,由于表字段较多,所以在更新的时候,想要只更新变化的字段,有没有办法呢? 解决办法 代码片段 public async Task<int> UpdateAsync(T ...
- 正则表达式 ?P<name>
import re # 将匹配的数字乘以 2 def double(matched): value = int(matched.group('value')) return str(value * 2 ...
- 【 js 基础 】【读书笔记】Javascript “继承”
是时候写一写 “继承”了,为什么加引号,因为当你阅读完这篇文章,你会知道,说是 继承 其实是不准确的. 一.类1.传统的面向类的语言中的类:类/继承 描述了一种代码的组织结构形式.举个例子:“汽车”可 ...