SQL Server 同步复制测试

1.     测试环境:

操作系统 windows  Server 2003 sp1  ,两台,独立系统,不在一个信任域内(如果在同一信任域,权限操作就更简单了)。
数据库:SQL Server 2000 SP4 企业版

2.     条件准备:

1、安装好两台windows 2003 server Sql server 2000企业版的服务器。
2、在两台windows 2003服务器添加windows 系统用户SqlCopy ,密码相同,属于administrators 组。
3、在两台服务器的hosts文件中相互添加两条记录(参考“失败可能的问题”部分)。
4、服务器名称及及相关配置
Windows 主机名
Sql server 建库
服务类型
Boco-server
Test数据库(空)
订阅服务器
Boco2006
Test数据库(有数据)
发布服务器
5、SQL server 上建立两个sql 用户:“fuzhi”,权限system administrators,具备管理发布的数据库的所有的权限(参看以下步骤)。

3.     配置发布、订阅服务步骤:

1、进入服务器的服务内,找到“SQLSERVERAGENT的”服务,双击,在弹出的属性中,选“登录”在登录身份中输入在准备条件中建立的帐号和密码(本次用户名为“SqlCopy),点“确定”,重启“SQLSERVERAGENT的”服务,使之生效。
SQL Server 同步复制测试_SQLServer
2、打开SQL Server 2000的企业管理器,对两台SQL server进行注册,不要采用local ip地址来注册,采用windows 2003的主机名来注册。
3、将需要发布的服务器(主服务器),展开sql serer 树,如下图,右点右边的空白处,在弹出的菜单中点“配置发布、订阅服务器和发布”
SQL Server 同步复制测试_sql_02
 
4、启动向导,继续
 SQL Server 同步复制测试_server_03
5、提示如下图,“boco2006”服务器是发布服务器,点“下一步”。
SQL Server 同步复制测试_同步 _04
6、出现如下图,按照缺省。
SQL Server 同步复制测试_sql_05
7、选择发布数据放置点,默认也可。
SQL Server 同步复制测试_sql_06
8、出现如下的提示,这说明我们在建立帐号的时候,需要管理员权限或者具有该目录的管理权限。
SQL Server 同步复制测试_sql_07
9、默认配置继续。
SQL Server 同步复制测试_同步 _08
10、            发布配置完成。
SQL Server 同步复制测试_sql_09

4.     新建发布

1、在两台服务器上建立SQL Server 用户,用于相互登录,不用SQL Serversa用户,主要是sa用户存在安全和其他用户使用的情况,造成修改了sa密码而复制无法顺利进行。
SQL Server 同步复制测试_SQLServer_10
2、修改该用户的属性,设置该用户具有System Administrators 权限。
 
SQL Server 同步复制测试_server_11
3、修改该用户数据库访问权限
SQL Server 同步复制测试_sql_12
4、在发布服务器上,展开目录树,点“发布内容”,在右边空白处有点,在弹出的菜单中,点“新建发布”。
SQL Server 同步复制测试_数据库_13
5、选择要发布的数据库,这里是“test”。
 SQL Server 同步复制测试_server_14
6、选择“合并发布”,继续,这样主要是在备用数据库启用主数据库的时候,主数据成为备用数据库,系统正常使用。
SQL Server 同步复制测试_sql_15
7、缺省继续即可。
SQL Server 同步复制测试_sql_16
8、选择要发布的内容,选择“全部发布”。
SQL Server 同步复制测试_server_17
9、“项目问题”中,唯一标识中,提示如果不带列表的语句的Insert可能会失败,即类似“Insert  table values( a,’b’)”,会失败,“Insert  table aabb values( a,’b’)”成功。
SQL Server 同步复制测试_数据库_18
10、            缺省继续即可。
SQL Server 同步复制测试_SQLServer_19
 
11、            剩下步骤缺省继续即可。
SQL Server 同步复制测试_server_20 
12、            在配置好的发布属性中,选择“订阅”,点“强制新建【P】”。
SQL Server 同步复制测试_server_21 
 
13、            选择订阅服务,这里订阅服务器为“BOCO-SERVER”
SQL Server 同步复制测试_server_22 
14、            数据,默认就可。
SQL Server 同步复制测试_SQLServer_23
 
15、            默认配置,继续即可,完成及订阅完毕,没有必要在订阅服务器上配置订阅,因为订阅已经在发布服务器上强制。
SQL Server 同步复制测试_server_24

5.     完成订阅

1、进行测试,在准备阶段,已经在订阅服务器上建立了test数据库,在没有复制同步是,可以看到“boco-server”服务器上没有user1 表。
SQL Server 同步复制测试_SQLServer_25
2、同步后,两个数据库一样。
SQL Server 同步复制测试_数据库_26
3、平时可以查看相关的日志,发布服务器上,展开发布数据库的树“代理服务器”->“合并代理程序”。
SQL Server 同步复制测试_server_27

6.     失败可能的问题

1、在同步过程中,出现“远程服务器不是内容订阅服务器”的问题,该问题有可能两个原因引起。
A、   hosts 文件问题,在准备工作中,hosts文件中配置的IP地址和主机名,但是如果 SQL Server的实例名成为类似  wwwserver\remote 那么在 hosts文件中 的格式为
 
192.168.1.2                 wwwserver\remote    #注意中间的“\”
 
然后在企业管理中以“wwwserver\remote”重新注册远程的服务器,重新配置复制即可。
 
B、   修改了机器名等出现问题,可以按照以下的步骤解决。
   
       在查询分析器里执行:
         use master
         select srvid,srvname,datasource from sysservers   
          如果没有srvid=0或者srvid=0(也就是本机器)但srvnamedatasource不一样, 需要按如下方法修改(如果 本机的srvid必须是“0,否则也必须执行如下脚本:
         ----------------------以下可以直接粘贴到 查询分析器 --------------------------
         USE master
        GO
        -- 设置两个变量
        DECLARE @serverproperty_servername  varchar(100),  @servername    varchar(100)
        -- 取得Windows NT 服务器和与指定的 SQL Server 实例关联的实例信息
        SELECT @serverproperty_servername = CONVERT(varchar(100), SERVERPROPERTY('ServerName'))
        -- 返回运行 Microsoft SQL Server 的本地服务器名称
        SELECT @servername = CONVERT(varchar(100), @@SERVERNAME)
        -- 显示获取的这两个参数
        select @serverproperty_servername,@servername
        --如果@serverproperty_servername@servername不同(因为你改过计算机名字),再运行下面的
        --删除错误的服务器名
        EXEC sp_dropserver @server=@servername
        --添加正确的服务器名
        EXEC sp_addserver @server=@serverproperty_servername, @local='local'
        ---------------------到此结束------------------------------------
       修改这项参数,需要重新启动MSSQLserverSqlserveragent服务才能生效
该问题还可参考:
【备注】本文经测试后,已经移植到生产环境中,效果良好!