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
的”服务,使之生效。
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、
缺省继续即可。
8、
选择要发布的内容,选择“全部发布”。
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
服务才能生效
该问题还可参考:
[url]http://support.microsoft.com/kb/321822/[/url]
[url]http://support.microsoft.com/kb/217395/EN-US/[/url]
【备注】本文经测试后,已经移植到生产环境中,效果良好!