SQL Server2005,2008 复制,发布,订阅 设置
SQL Server2005同步复制设置
一、前言
本文介绍的数据库同步设置步骤仅为可行性方案,中间可能走了弯路。由于公司内部的网络环境没有现场的复杂,加之对SQL Server2005了解不多,有些部分没有足够的时间去测试。现提供现场的状况以便于技术部可以在公司内部适当的模拟现场的直实情况。
现场状况:
l 各数据库服务器不在同一个网段内,主服务器192.168.1.XXX,子服务器192.168.10.XXX。
l 由于没有域名服务器,各服务器之间可以互相Ping通对方的IP地址,Ping对方的机器名失败
其它状况(如有域名服务器,在同一网段内)须逐一测试。
二、同步设置之前
l 在SQL Server2005安装之前,如果安装数据库的机器名为系统默认的长名称,此时可以更改机器名为有意义的机器名,重新启动机器后即可安装SQL Server2005数据库了。数据库安装完成后,机器名不能再行更改。
l 修改RNSS的数据库脚本后,重新生成RNSS数据库。修改方法是把脚本中的with ENCRYPTION替换为--with ENCRYPTION。
三、订阅端及服务服务端设置步骤
本节的设置在订阅端及服务端都要执行。
1. 新建计算机用户DataCopy,密码为DataCopy。
在桌面上,右击【我的电脑】→【管理】打开下方页面:
选中【本地用户和组】→【用户】,在右边区域中右键【新用户】
输入“用户名”及“密码”,取消选中“用户下次登录时须更改密码”,选中“用户不能更改密码”和“密码永不过期”。单击【创建】按钮,关闭对话框。在右边的用户列表中出现刚才增加的用户。
右键【属性】,打开属性对话框,如下:
在【隶属于】选项卡内删除“Users”用户组,增加“Administrators”用户组。
2. 修改MSSQLSERVER协议
【开始】→【程序】→【Microsoft SQL Servr 2005】→【配置工具】→【SQL Server Configuration Manager】,打开下面的页面:
选中【MSSQLSERVER的协议】,如果右边协议列表中的“Named Pipes”的状态为“已禁用”,右键【启用】。
3. 重启SQLSERVER服务
在【控制面板】→【管理工具】→双击【服务】程序,打开服务管理程序。在服务列表中修改“SQL Server Agent”服务的属性,在“常规”选项卡内修改启动方式为“自动”,在“登录”选项卡中修改启动帐户为“DataCopy”,如下图:
确定后,重新启动服务“SQL Server”和“SQL Server Agent”。
四、客户端设置步骤
如果客户端没有安装RNSS数据库,此步可略过。
如果已经安装了RNSS数据库,在SQL Server内删除已经安装的数据库,操作步骤如下:
首先选择「RNSS」数据库,右键删除:
接下来在安全性里面,删除「RNSS」、「RNSS_Admin」、「RNSS_Web」三个用户,如下图:
删除之后,再去SQLServer的数据文件夹,如「:\Program Files\Microsoft SQL Server\MSSQL\Data」目录下删除「RNSS.mdf」和「RNSS_log.LDF」两个数据库实体文件。
五、服务端设置步骤
1. 检查网络结构
此步主要来确定网络架构是否适合做数据库同步,因为SQL 2005数据库的同步不能使用IP地址、服务器别名,所以这一步必须Ping通订阅服务器的机器名或(域名+机器名)。
对于在同一网段内的服务器,不必要特殊设置就应该能够Ping通机器名,如果Ping不通的话肯定是网络没有连接成功,请检查交换机或网线。
对于不在同一网段的服务器,如果有域名服务器,也应该能Ping通订阅服务器,如果不通请检查服务器设置。
对于不在同一网段内的服务器,Ping IP地址也不能的话,请检查路由器的设置。
对于不在同一网段内的服务器,能Ping通IP地址,但是不能Ping通机器名的可以按下面的变通方法设置:
用文本编辑器(记事本)打开『HomePath』\system32\drivers\etc文件下的「lmhosts.sam」文件,在文件的末尾按下图的格式增加订阅服务器的机器名和IP地址:
增加完成后,保存退出。
然后打开「本地连接的状态」窗口,单击「属性」,选中「Internet协议(TCP/IP)」,单击「属性」,单击「高级」,打开「WINS」选项卡,勾选「启用LMHOSTS查询」,单击「导入LMHOSTS」按钮,选中上一步编辑的文件,单击【打开】按钮,然后一路【确定】只到关闭「本地连接状态」窗口。
然后使用Ping命令,访问订阅服务器的机器名,如果能Ping通说明设置成功了。
2. 设置分发服务器
【开始】→【程序】→【Microsoft SQL Servr 2005】→【SQL Server Management Studio】,连接到本地数据库实例。如图:
【对象资源管理器】→【复制】→【本地发布】→右键【新建发布】,进入数据库发布向导页面:
【下一步】→选中要发布的数据库(RNSS)【下一步】→选择发布类型「事务性发布」【下一步】→选中要发布的对象(全勾选)【下一步】→【下一步】→【下一步】→勾选「立即创建快照…」【下一步】→单击【安全设置】按钮,选中「在SQL Server代理帐户下运行…」和「通过模拟进程帐户」,单击【确定按钮】【下一步】→【下一步】→填写发布名称(RNSS)【完成】→等待状态窗口处理完成后单击【关闭】按钮即完成了数据库发布。
在新建立的数据库发布上,右键【属性】,打开属性页后,选择【快照】页如下图:
在【运行其他脚本】栏内单击「应用快照之后执行此脚本」后的【浏览】按钮,选择Createuser.sql文件,此文件随此文档一块提供。然后单击【确定】按钮。
3. 增加订阅服务器
【开始】→【程序】→【Microsoft SQL Servr 2005】→【SQL Server Management Studio】,连接到本地数据库实例。如图:
【对象资源管理器】→【复制】→【本地发布】→【RNSS】→右键【新建订阅】,进入新建订阅向导。
【下一步】→选择发布服务器,选择发布【下一步】→【下一步】→单击【添加订阅服务器】,选择「添加SQL Server订阅服务器」弹出连接到订阅服务器窗口如下:
输入订阅服务器的名称,选择「SQL Server身份验证」,输入登录名及密码,单击连接按钮,在订阅服务器列表内出现连接的数据库如下图:
在订阅服务器名称后面的下拉列表中选择〈新建数据库〉,然后弹出“新建数据库”设置页面如图:
在页面内输入「数据库名称」和数据库的「初始大小」后,单击【确定】按钮。
【下一步】→打开分发代理安全性页面,单击订阅属性列表内,订阅服务器后面的按钮,如下图:
弹出〖分发代理安全性〗页面,在页面内分别选择「在SQL Server代理帐户下运行…」「通过模拟进程帐户」「通过模拟进程帐户」。单击【确定】。
【下一步】→【下一步】→【下一步】→勾选「创建订阅」【下一步】→【完成】→单击【关闭】。
订阅设置完成后界面如下:
右键【启动复制监视器】,即可查看数据库同步运行的状态。
右键【查看同步状态】,即可查看订阅同步运行的状态。如下图:
六、RNSS设置
RNSS系统数据库同步使用的不是合并模式。为了保证各服务器中数据的完全一致,要求对数据库中数据的增、删、改都在发布服务器数据库上进行,然后再通过数据库同步机制把更新后的数据发布到订阅服务器上,为了满足此要求,需要屏蔽掉任何对订阅服务器上数据的直接修改。
具体事项如下:
1、 在SysConfig表中 ConnectionString 列内填写RNSS应用程序和中心数据库的连接字符串。
当此ConnectionString字符串为空时,RNSS的应用程序会直接对订阅服务器上的数据库进行增删改操作。
数据库连接字符串的一个示例如下,请根据现场实际情况修改其中的IP地址(192.168.0.101)、数据库服务端口号(1433)、数据库名称(RNSS)、连接用户(RNSS_Admin)及密码(jnvision)。
DRIVER=SQL Server;Address=192.168.0.101,1433;Port=1433;DATABASE=RNSS;Trusted_Connection=No;Network=DBMSSOCN;UID=RNSS_Admin;PWD=jnvision;
2、 修改分中心数据库中的 prClearLog 存储过程,删除其中对数据库记录进行删除的语句。
3、 禁用分中心数据库对数据库的自动维护,具体来说就是删除或禁用分中心数据库SQL代理上的ClearLog任务,防止通过此途径删除数据库的数据。
4、 各分中心发布WEB站点时,应该让WEB站点中的页面直接连接发布服务器。
5、 对RNSS的应用程序升级时,如果需要涉及到对数据库的操作,应进行数据库同步方面的测试。
6、 中心数据库需要同步的所有表必须具有主键。存储过程、函数如果同步的话,不能进行加密,可以通过注释sql语句中的with ENCRYPTION来把加密去掉。
7、 设置大二进制数据,需要更改SqlServer2005的系统参数:
sp_configure 'max text repl size', 4000000
EXEC sp_spaceused 'maplayer'
RECONFIGURE
以上语句在建立完复制时执行。
七、发布的其它设置
l 关于订阅过期的设置
在数据库的发布属性窗口中,选择「常规」页面,里面有关于订阅过期的设置,SQL2005默认选择「订阅永不过期,但可以将其停用,直到它们重新初始化」,在这里我们无需更改这项,使用默认即可。如下图:
l 关于分发代理和日志读取器代理参数
分发代理参数代理设置页面如下:
在新建的发布上,右键【启动复制监视器】,如图:
在上图中选择发布服务器,右键 【代理配置文件】,即打开代理配置页面,如图:
在代理代理配置页面内,选择分发代理,选定代理配置文件后单击【…】按钮,即打开参数配置页面,如图:
在此页面内修改相应参数后保存即可。
日志读取代理的参数同上,如图:
ü 为日志读取器代理使用 –MaxCmdsInTran。
–MaxCmdsInTran 参数指定日志读取器向分发数据库写入命令时组成一个事务的语句的最大数量。使用此参数能够使日志读取器代理和分发代理在订阅服务器上应用命令时将发布服务器上的大事务(由许多命令组成)分成若干个较小的事务。指定此参数可以减少分发服务器的争用问题并缩短发布服务器与订阅服务器之间的滞后时间。由于初始事务是以较小的单元应用的,订阅服务器可以在初始事务结束之前访问一个较大的逻辑发布服务器事务的行,因而会破坏事务的原子性。默认值为 0,这将保持发布服务器的事务边界。此参数不适用于 Oracle 发布服务器。
ü 为分发代理使用 –SubscriptionStreams 参数。
–SubscriptionStreams 参数可以显著提高聚合复制吞吐量。它使到一台订阅服务器的多个连接可以并行应用批量更改,同时在使用单线程时保持多个事务性特征的存在。如果有一个连接无法执行或提交,则所有连接将中止当前批处理,而且代理将用单独的流重试失败的批处理。在重试阶段完成之前,订阅服务器上会存在临时事务性不一致。失败的批处理成功提交后,订阅服务器将恢复到事务性一致状态。
可以使用 sp_addsubscription (Transact-SQL) 的 @subscriptionstreams 来指定此代理参数的值。
ü 增大日志读取器代理的 -ReadBatchSize 参数的值。
日志读取器代理和分发代理支持事务读取和提交操作的批大小。批大小的默认值为 500 个事务。日志读取器代理从日志中读取特定数量的事务,而不管这些事务是否标记为复制。将大量事务写入发布数据库,而其中只有一小部分标记为复制时,则应使用 -ReadBatchSize 参数增加日志读取器代理的读取批大小。此参数不适用于 Oracle 发布服务器。
ü 增大分发代理的 -CommitBatchSize 参数的值。
提交一组事务的开销是固定的;通过不经常提交大量事务,就可以将开销分散在大量数据上。但是,增大此参数的优势因应用更改的开销由其他因素(例如包含日志的最大磁盘 I/O)限制而降低。另外,需要考虑以下权衡问题:任何导致分发代理重新开始的失败必须回滚并重新应用大量事务。对于不可靠的网络,越小的值导致失败的几率越小,如果导致失败,将回滚并重新应用较少量事务。
ü 降低日志读取器代理的 -PollingInterval 参数的值。
-PollingInterval 参数指定为要复制的事务查询已发布数据库的事务日志的频率。默认值为 5 秒。如果减小此值,日志的轮询将更加频繁,这会使事务从发布数据库传递到分发数据库的滞后时间较低。但是,应该对较低滞后时间的需要和因频繁轮询导致的服务器上增加的负荷之间进行平衡。