SQL Server如何通过备份文件初始化复制2014-08-02一、背景MySQL在对有历史数据的数据库进行搭建复制(Master/Slave)的时候,可以通过在Master服务器备份历史数据,利用这个备份文件在Slave进行还原;这样做的好处是可以更加快速的搭建好环境,因为可以对备份文件进行压缩、分包,并且可以使用FTP等工具保证传输过程的安全与快捷;详情可参考:Windows下搭建MySQL Master Slave当SQL Server遇到同样需要对历史数据库搭建复制,通常的做法是在本地发布快照,再由订阅传输数据,那SQL Server应该如何实现备份历史数据搭建复制(发布/订阅)呢?下图是备份文件初始化订阅的基本逻辑结构图:

(Figure0:备份文件初始化订阅逻辑结构图)二、搭建过程(一) 环境信息系统环境:Windows Server 2008 + SQL Server 2008发布服务器:192.168.1.105,服务器名称:QuZhoushiwei105分发服务器:与发布服务器同一台机器订阅服务器:192.168.1.106,服务器名称:QuZhoushiwei106发布数据库:Barfoo.TestPublish订阅数据库:Barfoo.TestSubscribe数据库帐号:ReplicationUser/ ReplicationPassword说明:发布服务器与订阅服务器是在同一内网的机器,如果你的环境是跨网段(跨机房)的请参考:SQL Server复制(发布订阅)实战二:跨网段(跨机房)部署(二) 搭建步骤1) 在发布服务器上以QuZhoushiwei105服务器名称登陆发布服务器,如果你以localhost或者IP形式登陆服务器,在创建发布的时候会出现下图Figure1的错误信息;

(Figure1:错误信息)登陆服务器之后使用下面的SQL脚本创建一个测试数据库:Barfoo.TestPublish,创建一个测试表:UserInfo,并插入一条数据,用于模拟历史数据;
--创建测试数据库USE MASTERGOCREATE DATABASE [Barfoo.TestPublish]GO--创建测试表USE [Barfoo.TestPublish]GOCREATE TABLE [dbo].[UserInfo]([Id] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,[names] [nvarchar](50) NULL,[address] [nvarchar](50) NULL, CONSTRAINT [PK_UserInfo] PRIMARY KEY CLUSTERED ([Id] ASC) ON [PRIMARY]) ON [PRIMARY]GO--插入测试数据INSERT [dbo].[UserInfo] ([names],[address]) VALUES (N"gaizai", N"广州")

(Figure2:UserInfo表记录)2) 在发布数据库和订阅服务器上分别执行下面的SQL脚本创建帐号和密码(ReplicationUser/ ReplicationPassword);
--发布服务器创建帐号密码USE [master]GOCREATE LOGIN [ReplicationUser] WITH PASSWORD=N"ReplicationPassword", DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFFGOEXEC master..sp_addsrvrolemember @loginame = N"ReplicationUser", @rolename = N"sysadmin"GOUSE [Barfoo.TestPublish]GOCREATE USER [ReplicationUser] FOR LOGIN [ReplicationUser]GOUSE [Barfoo.TestPublish]GOALTER USER [ReplicationUser] WITH DEFAULT_SCHEMA=[dbo]GO--订阅服务器创建帐号密码USE [master]GOCREATE LOGIN [ReplicationUser] WITH PASSWORD=N"ReplicationPassword", DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFFGOEXEC master..sp_addsrvrolemember @loginame = N"ReplicationUser", @rolename = N"sysadmin"GO