SQL SERVER数据库复制要点.docx
《SQL SERVER数据库复制要点.docx》由会员分享,可在线阅读,更多相关《SQL SERVER数据库复制要点.docx(64页珍藏版)》请在冰豆网上搜索。
SQLSERVER数据库复制要点
SQLSERVER2005数据库复制
一.复制发布模型概述
复制使用出版业术语表示复制拓扑中的组件,其中有发布服务器、分发服务器、订阅服务器、发布、项目和订阅。
发布服务器
发布服务器是一种数据库实例,它通过复制向其他位置提供数据。
发布服务器可以有一个或多个发布,每个发布定义一组要复制的具有逻辑关系的对象和数据。
分发服务器
分发服务器也是一种数据库实例,它起着存储区的作用,用于复制与一个或多个发布服务器相关联的特定数据。
每个发布服务器都与分发服务器中的单个数据库(称作分发数据库)相关联。
分发数据库存储复制状态数据和有关发布的元数据,并且在某些情况下为从发布服务器向订阅服务器移动的数据起着排队的作用。
在很多情况下,一个数据库服务器实例充当发布服务器和分发服务器两个角色。
这称为“本地分发服务器”。
当发布服务器和分发服务器按各自的数据库服务器实例配置时,把分发服务器称为“远程分发服务器”。
订阅服务器
订阅服务器是接收复制数据的数据库实例。
订阅服务器可以接收来自多个发布服务器和发布的数据。
根据所选的复制类型,订阅服务器还可以将数据更改传递回发布服务器或者将数据重新发布到其他订阅服务器。
项目
项目用于标识发布中包含的数据库对象。
一次发布可以包含不同类型的项目,包括表、视图、存储过程和其他对象。
当把表作为项目发布时,可以用筛选器限制发送到订阅服务器的数据的列和行。
发布
发布是一个数据库中的一个或多个项目的集合。
将多个项目分组成一个发布,使得更便于指定一组作为一个单元复制的、具有逻辑关系的数据库对象和数据。
订阅
订阅是把发布副本传递到订阅服务器的请求。
订阅定义将接收的发布和接收的时间、地点。
有两种类型的订阅:
推送订阅和请求订阅。
二.选择复制类型
MicrosoftSQLServer2005提供了下列可在分布式应用程序中使用的复制类型:
事务性复制,合并复制,快照复制。
事务性复制通常用于服务器到服务器环境中,在以下各种情况下适合采用事务性复制。
1.希望发生增量更改时将其传播到订阅服务器。
2.从发布服务器上发生更改,至更改到达订阅服务器,应用程序需要这两者之间的滞后时间较短。
3.应用程序需要访问中间数据状态。
例如某一行更改了5次,事务复制将允许应用程序响应每次更改(例如,激发触发器),而不只是响应该行最终的数据更改。
4.发布服务器有大量的插入、更改、删除活动。
5.当必须在数据被修改时对其进行复制,以及发布服务器和订阅服务器通过网络可靠或经常地连接在一起时,使用事务复制。
6.默认情况下,事务发布的订阅服务器应视为只读,所以更改将不会传播回发布服务器。
在一般情况下,如果发布服务器和订阅服务器都对数据进行了更改,那么以发布服务器的事务为准,覆盖订阅服务器对数据更改。
上海120的拓扑结构是:
上海120指挥调度部分被认定为G3级系统,办公部分被认定为G2级系统。
要求G3系统数据库服务器要实时把数据库数据变化更新到G2系统数据库,并且G3系统可向G2系统直接写入数据,G2系统可以访问G3系统,但不能向G3系统写入数据。
根据上海120的情况,使用“事务性复制”是最合理的。
事务复制的工作机制
事务性复制由SQLServer快照代理、日志读取器代理和分发代理实现。
快照代理准备快照文件(其中包含了已发布表和数据库对象的架构和数据),然后将这些文件存储在快照文件夹中,并在分发服务器中的分发数据库中记录同步作业。
日志读取器代理监视为事务性复制配置的每个数据库的事务日志,并将标记为要复制的事务从事务日志复制到分发数据库中,分发数据库的作用相当于一个可靠的存储-转发队列。
分发代理将快照文件夹中的初始快照文件和分发数据库表中的事务复制到订阅服务器中。
在发布服务器中所做的增量更改根据分发代理的计划流向订阅服务器,分发代理可以连续运行以尽量减少滞后时间,也可以按预定的时间间隔运行。
由于数据更改必须在发布服务器中进行(使用事务性复制时,无需指定立即更新或排队更新选项),从而避免了更新冲突。
最后,所有订阅服务器都将获得与发布服务器相同的值。
如果事务性复制使用了立即更新或排队更新选项,更新可以在订阅服务器中进行,对于排队更新,可能会发生冲突。
三.创建复制前需要做的工作
在SQLServer2005里设置和使用数据库复制之前,应先检查相关的几台SQLServer服务器下面几点是否满足:
发布服务器是调度连接的数据库服务器(需要先做数据库还原建立数据库)
分发服务器起着存储区的作用,用于复制与一个或多个发布服务器相关联的特定数据
订阅服务器是备份数据库服务器(和发布服务器一样需要先做数据库还原建立数据库,数据库要和发布服务器的数据库一样。
)
1、MSSQLserver和Sqlserveragent服务是否是以域用户身份启动并运行的(.\administrator用户也是可以的)
如果登录用的是本地系统帐户local,将不具备网络功能,会产生以下错误:
进程未能连接到Distributor'@Servername'
(如果您的服务器已经用了SQLServer全文检索服务,请不要修改MSSQLserver和Sqlserveragent服务的local启动。
会造成全文检索服务不能用。
请换另外一台机器来做SQLServer2005里复制中的分发服务器。
)
修改服务启动的登录用户,需要重新启动MSSQLserver和Sqlserveragent服务才能生效。
数据库服务器做为发布服务器,MSSQLserver和Sqlserveragent服务要以本地超级管理员用户登录,操作如下:
(1)在我的电脑上右键“管理”进入服务,查找到“SQLServer(MSSQLSERVER)”服务,如下图:
右键“属性”
“启动类型”要选择“自动”,点击“登录”如下
点选“浏览”添加adminadmin超级管理员。
(adminadmin新建的超级管理员,因为Administrator需要被禁用。
)选择好用户后,填写adminadmin本地用户的密码,
然后“应用”即可。
点击“确定”。
(2)在我的电脑上右键“管理”进入服务,查找到“SQLServerAgent(MSSQLSERVER)”服务,如下图:
右键“属性”
启动类型选择“自动”
输入adminadmin本地密码点击应用。
这时,我们对这两个服务进行重新启动。
先重启“SQLServer(MSSQLSERVER)”再重启“SQLServerAgent(MSSQLSERVER)”。
分发服务器和订阅服务器同样要按以上操作。
2、检查相关的几台SQLServer服务器是否改过名称
(需要srvid=0的本地机器上计算机名称srvname和datasource一样)
判断方法:
SQLServer服务器完整的计算机名称和sysservers表中的字段srvid=0的srvname和datasource是否一致。
在查询分析器里执行:
usemaster
selectsrvid,srvname,datasourcefromsysservers
如果没有srvid=0或者srvid=0(也就是本机器)但“服务器完整的计算机名称”和srvname和datasource不一样,需要按如下方法修改:
-----------------------------------------------------------------------------
USEmaster
GO
--设置两个变量
DECLARE@serverproperty_servernamevarchar(100),
@servernamevarchar(100)
--取得WindowsNT服务器和与指定的SQLServer实例关联的实例信息
SELECT@serverproperty_servername=CONVERT(varchar(100),SERVERPROPERTY('ServerName'))
--返回运行MicrosoftSQLServer的本地服务器名称
SELECT@servername=CONVERT(varchar(100),@@SERVERNAME)
--显示获取的这两个参数
select@serverproperty_servername,@servername
--如果@serverproperty_servername和@servername不同(因为你改过计算机名字),再运行下面的
--删除错误的服务器名
EXECsp_dropserver@server=@servername
--添加正确的服务器名
EXECsp_addserver@server=@serverproperty_servername,@local='local'
-------------------------------------------------------------------------------
修改这项参数,需要重新启动MSSQLserver和Sqlserveragent服务才能生效。
这样一来就不会在创建复制的过程中出现18482、18483错误了。
3、检查SQLServerManagementstudio里面相关的几台SQLServer注册名是否和上面第二点里介绍的srvname一样
不能用IP地址的注册名。
(我们可以删掉IP地址的注册,新建以SQLServer管理员级别的用户注册的服务器名)
这样一来就不会在创建复制的过程中出现14010、20084、18456、18482、18483错误了。
4、检查相关的几台SQLServer服务器网络是否能够正常访问
如果ping主机IP地址可以,但ping主机名不通的时候,需要在
winnt\system32\drivers\etc\hosts(WIN2000)
windows\system32\drivers\etc\hosts(WIN2003)
文件里写入数据库服务器IP地址和主机名的对应关系。
例如:
127.0.0.1localhost
192.168.0.35or
acledboracledb
192.168.0.65fengyu02fengyu02
202.84.10.193bj_dbbj_db
或者在SQLServer客户端网络实用工具里建立别名,例如:
5、系统需要的扩展存储过程是否存在(如果不存在,需要恢复)(一般不需要操作)
sp_addextendedproc‘xp_regenumvalues’,@dllname=’xpstar.dll’
go
sp_addextendedproc‘xp_regdeletevalue’,@dllname=’xpstar.dll’
go
sp_addextendedproc‘xp_regdeletekey’,@dllname=’xpstar.dll’
go
sp_addextendedprocxp_cmdshell,@dllname=’xplog70.dll’
6、在分发服务器创建文件夹huhu,设置为共享。
文件夹名称自定义,不一定叫huhu。
7、设置SQLSERVER身份验证,解决连接时的权限问题(发布、订阅服务器均设