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的”服务,使之生效。
2、打开SQL Server 2000的企业管理器,对两台SQL server进行注册,不要采用local 和ip地址来注册,采用windows
2003的主机名来注册。
3、将需要发布的服务器(主服务器),展开sql serer 树,如下图,右点右边的空白处,在弹出的菜单中点“配置发布、订阅服务器和发布”
4、启动向导,继续
5、提示如下图,“boco2006”服务器是发布服务器,点“下一步”。
6、出现如下图,按照缺省。
7、选择发布数据放置点,默认也可。
8、出现如下的提示,这说明我们在建立帐号的时候,需要管理员权限或者具有该目录的管理权限。
9、默认配置继续。
10、 发布配置完成。
4.新建发布
1、在两台服务器上建立SQL Server 用户,用于相互登录,不用SQL Server的sa用户,主要是sa用户存在安全和其他用户使用的情况,造成修改了sa密码而复制无法顺利进行。
2、修改该用户的属性,设置该用户具有System Administrators 权限。
3、修改该用户数据库访问权限
4、在发布服务器上,展开目录树,点“发布内容”,在右边空白处有点,在弹出的菜单中,点“新建发布”。
5、选择要发布的数据库,这里是“test”。
6、选择“合并发布”,继续,这样主要是在备用数据库启用主数据库的时候,主数据成为备用数据库,系统正常使用。
7、缺省继续即可。
7、缺省继续即可。
9、“项目问题”中,唯一标识中,提示如果不带列表的语
句的Insert可能会失败,即类似“Insert? table values( a,’b’)”,会失败,“Insert? table
(aa,bb) values( a,’b’)”成功。
10、缺省继续即可。
11、剩下步骤缺省继续即可。
12、在配置好的发布属性中,选择“订阅”,点“强制新建【P】”。
13选择订阅服务,这里订阅服务器为“BOCO-SERVER”。
14、 数据,默认就可。
15、 默认配置,继续即可,完成及订阅完毕,没有必要在订阅服务器上配置订阅,因为订阅已经在发布服务器上强制。
5.完成订阅
1、进行测试,在准备阶段,已经在订阅服务器上建立了test数据库,在没有复制同步是,可以看到“boco-server”服务器上没有user1
表。
2、同步后,两个数据库一样。
3、平时可以查看相关的日志,发布服务器上,展开发布数据库的树“代理服务器”->“合并代理程序”。
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(也就是本机器)但srvname和datasource不一样, 需要按如下方法修改(如果
本机的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'
---------------------到此结束------------------------------------
修改这项参数,需要重新启动MSSQLserver和Sqlserveragent服务才能生效 |
|