SQL Server 2000事务复制问题
2000现在用的估计不多了,把之前收集的一些复制问题整理发布出来。可能都是些很白很二的问题,但人总是由最初的无知不断成长●-●
SQL Server 2000事务复制问题
服务器A(发布)
服务器B(分发+订阅)
1、创建发布时对表identity属性问题
因为该发布不允许使用可更新的订阅,当 IDENTITY 列被传输到订阅服务器时,不会传输 IDENTITY 属性。(例如,在发布服务器上定义为 INT IDENTITY 的列在订阅服务器上将定义为 INT。)
如果想将 IDENTITY 属性传输到订阅表,则必须进行如下操作:
>>使用 IDENTITY 属性和 NOT FOR REPLICATION 选项手工创建订阅表。您可以通过让 SQL Server 在应用快照之前执行自定义脚本来执行该操作。若要指定自定义脚本,请先创建发布,再创建脚本,然后在发布属性的“快照”选项卡上输入该脚本的名称。
>>设置名称冲突项目属性,以便 SQL Server 在订阅服务器上应用快照时不会除去现有的表
对于这种该怎么操作,是按照提示还是忽略?
2、对于比较大的数据库,如果我先备份发布数据库,然后在订阅服务器上还原,之后按正常步骤发布订阅,利用sp_scriptpublicationcustomprocs生成创建INSERT、UPDATE和DELETE存储过程的脚本;订阅时,选择不初始化架构和数据,同样对于自增字段是否有影响,该如何调整?
3、快照代理调度问题,对于已生成过的快照是不是可以把它的调度给停了?
问题解答1:根据业务需求,如果需将IDENTITY 属性传输到订阅表,则依据提示信息操作,同时因为identity字段是不能更新的,事务复制产生的update存储过程需要手动调整。
问题解答2:SQL Server 通过备份文件初始化复制:http://www.cnblogs.com/gaizai/p/3309567.html
上面的链接仅限2005及以上版本, 想在2000上面用备份文件“初始化”
----测试步骤---
先配置好分发和发布服务器 ->创建发布(表A)-> 备份发布数据库 ->订阅服务器上还原
->手动生成复制所需的存储过程(sp_MSdel、sp_MSins、sp_MSupd),并到订阅数据库上执行
->UPDATE a SET ..WHERE id=1-> 在 MSrepl_commands、MSrepl_transactions 中能看到对应的记录
->创建强制订阅->UPDATE a SET .. WHERE id=2
比对发布、订阅上表A 的记录,订阅上id=2有更新,id=1的却没有变化
按理来说,我是创建好发布后备份的, 日志代理程序一直在运行,修改的事务也传到分发数据库上, 为什么最后没能应用的订阅上面?
----解答分析---
一个事务复制的bug:http://www.cnblogs.com/stswordman/p/3258897.html
--Log reader会读取发布项目的日志信息,将其写入到 Distribution数据库的msrepl_transactions 和msrepl_commands中;Msrepl_transactions 中的每一条记录都有一个唯一标识 xact_seqno,xact_seqno 对应日志中的 LSN。
--Distribution agent包含两个进程,reader和writer 。Reader负责从分发数据库中读取数据,Writer负责将reader读取的数据写入到订阅数据库.
--reader是通过sp_MSget_repl_commands 来读取Distribution数据库中(读取 Msrepl_transactions表和Msrepl_Commands 表)的数据
大致逻辑是:Reader读取分发数据库中LSN大于@last_xact_seqno 的数据。Writer将读取到的数据写入订阅,并更新相应的LSN(subscription数据库的MSreplication_subscriptions表的transaction_timestamp列和Distribution数据库的msDistribution_history 表的xact_seqno列)。然后Reader 会继续用新的LSN来读取后续的数据,再传递给Writer,如此往复。
select * from distribution2000..MSrepl_transactions
select * from distribution2000..MSrepl_commands
select * from distribution2000..MsDistribution_history
select * from subscriptiondb..MSreplication_subscriptions --订阅创建后才能查询
--创建订阅前对发布数据库执行更新操作,对应 MSrepl_transactions、MSrepl_commands 返回记录
--分发数据库执行下面命令返回具体操作
exec sp_browsereplcmds '0x000000C60000025C0005', '0x000000C60000025C0005'
exec sp_browsereplcmds '0x000000C60000025D0004', '0x000000C60000025D0004'
--创建强制订阅,查询MsDistribution_history、MSreplication_subscriptions
结果可以看出订阅上的LSN直接更新为MSrepl_transactions中最大的xact_seqno,这就是问题所在
--发布数据库再次更新数据,下面命令返回具体操作
exec sp_browsereplcmds '0x000000C70000002E0004', '0x000000C70000002E0004'
--查询 MsDistribution_history、MSreplication_subscriptions
--发布、订阅数据比对
问题解答3:如果通过快照初始化,第一次运行代理便可,不必设定每周去运行代理。
SQL Server 2000事务复制问题的更多相关文章
- SQL Server提高事务复制效率优化(一)总体概述
随着公司业务的发展,数据量增长迅速,在解决Scale Out的同时,还要考虑到主从的复制延迟问题,尽量降到1s以内满足线上业务,如果不调整,SQL Server默认的配置可能平均要3s左右.生产的 ...
- Sql Server 2012 事务复制遇到的问题及解决方式
1.订阅服务器提示:作业失败.无法确定所有者 WIN-01Q6JB46CHV\Administrator(拥有作业XXX)是否有服务器访问权限(原因:无法获取有关 Windows NT 组/用户'WI ...
- SQL Server提高事务复制效率优化(四)修改数据同步过程优化
1.原理 我说的数据修改同步过程指的是在快照生成完毕,分发代理将快照应用于订阅服务器完成订阅服务器初始化后,发布服务器后续的更改同步到订阅服务器过程,这也就是我们常常关注的延迟.此过程主要 ...
- SQL Server提高事务复制效率优化(二)快照初始化优化
测试数据表量1500w+,使用初始化默认的快照代理参数,复制的三个过程包括快照初始化,订阅初始化和数据修改复制,主要对快照代理.分发代理.日志读取代理分别作了参数优化,并给出优化前后的对照实验测试. ...
- SQL Server提高事务复制效率优化(三)订阅初始化优化
初始化订阅主要是由分发代理分发和应用快照代理之前生成的快照,所以优化的主体是分发代理. 1.初始化订阅 首先在本地创建一个订阅,发布服务器.分发服务器和订阅服务器都在同一台服务器上,仅为了测试生产环境 ...
- sqlserver 2000事务复制问题
2000现在用的估计不多了,把之前收集的一些复制问题整理发布出来.可能都是些很白很二的问题,但人总是由最初的无知不断成长,不对之处欢迎指正. sqlserver 2000事务复制问题服务器A(发布) ...
- SQL Server 2000向SQL Server 2008 R2推送数据
[文章摘要]最近做的一个项目要获取存在于其他服务器的一些数据,为了安全起见,采用由其他“服务器”向我们服务器推送的方式实现.我们服务器使用的是SQL Server 2008 R2,其他“服务器”使用的 ...
- sql server 2000,Log.LDF文件丢失,附加数据库失败的解决办法[转]
SQL Server数据库备份有两种方式,一种是使用BACKUP DATABASE将数据库文件备份出去,另外一种就是直接拷贝数据库文件mdf和日志文件ldf的方式.下面将主要讨论一下后者的备份与恢复. ...
- SQL SERVER 2000 数据恢复(分离数据库+附加数据库)
一.分离数据库 SQL Server 2000允许分离数据库的数据和事务日志文件,然后将其重新附加到同一台或另一台服务器上.分离数据库将从SQL Server 删除数据库,所以当点击“分离数据 ...
随机推荐
- Qt Lighthouse学习(二),就是QPA(Qt Platform Abstraction) 项目的名字
上一次关注Qt Lighthouse是在6月初,可是现在都8月底了.时间真快... Lighthouse 是 QPA(Qt Platform Abstraction) 项目的名字,它使得将Qt移植到新 ...
- BZOJ5308 ZJOI2018胖
贝尔福特曼(?)的方式相当于每次将所有与源点直接相连的点的影响区域向两边各扩展一格.显然每个点在过程中最多更新其他点一次且这些点构成一段连续区间.这个东西二分st表查一下就可以了.注意某一轮中两点都更 ...
- 反Nim博弈
原文地址:https://blog.csdn.net/xuejye/article/details/78975900 在尼姆博奕中取完最后一颗糖的人为赢家,而取到最后一颗糖为输家的就是反尼姆博奕.这道 ...
- yii2 查询数据库语法
$query0 = ImGroupUser::find()->where(['gid'=>'56680dfc60b215d62104a4d8'])->select('user_cli ...
- 【BZOJ1922】大陆争霸(最短路)
[BZOJ1922]大陆争霸(最短路) 题面 BZOJ 洛谷 题解 最短路变形题. 定义\(dis\)表示最短路,\(d\)表示最早可以进入当前点的时间.显然\(d=max(max(dis_v,d_v ...
- 为smokeping添加日志开启debug
用包管理工具安装smokeping没有自带日志输出,为了定位问题开启日志就成为第一需求. 1.修改smokeping的配置 # vim /etc/smokeping/config.d/General ...
- rsync命令比对文件及增量同步
A fast,versatile,remote (and local) file-copying tool. rsync基于ssh协议实现高效率远程或本地文件复制,传输速度比scp快.复制文件时会比对 ...
- 6: Junit1_@Test
@Test注解是测试的基础,它提供了其他作用 1.指定将会抛出的异常类型,如果没有抛出异常或者抛出的一场不属于我们指定的类型,就会算是测试失败了. @Test(expected = RuntimeEx ...
- 从 php 源码看 php 中的对象
从一个简单的例子说起: class Person { public $name; public $age; public function __construct($name, $age) { $th ...
- struts2为什么action要继承actionSupport类
我们为了方便实现Action,大多数情况下都会继承com.opensymphony.xwork2.ActionSupport类, 并重载(Override)此类里的String execute()方法 ...