sqlserver 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:如果通过快照初始化,第一次运行代理便可,不必设定每周去运行代理。
sqlserver 2000事务复制问题的更多相关文章
- SQL Server 2000事务复制问题
2000现在用的估计不多了,把之前收集的一些复制问题整理发布出来.可能都是些很白很二的问题,但人总是由最初的无知不断成长●-● SQL Server 2000事务复制问题服务器A(发布) 服务器B(分 ...
- sqlserver 2005 分布式架构 对等事务复制 .
http://www.cnblogs.com/qanholas/archive/2012/03/22/2412444.html 一.为什么要使用对等事务复制 首先要说明的是使用sqlserve ...
- SQLServer 事务复制中使用脚本添加某个对象的发布
原文:SQLServer 事务复制中使用脚本添加某个对象的发布 -- use [发布库] --添加表:创建项目并将其添加到发布中 exec sp_addarticle @publication = N ...
- SqlServer 使用脚本创建分发服务及事务复制的可更新订阅
原文:SqlServer 使用脚本创建分发服务及事务复制的可更新订阅 [创建使用本地分发服务器] /************************[使用本地分发服务器配置发布]*********** ...
- 在Sql2000 sql2005 sql2008 下已能实现事务复制的强制订阅,但请求订阅始终不能实现总有下列错误提示
硬件环境 : 一台服务器 安装了 sqlserver2008 数据库 局域网还有一台机器 安装了 sqlserver2000数据库 两台server 通信 共享均没有问题 同步过程中遇到的问题 : ...
- SQLServer 数据库镜像+复制方案
目标: 主机做了Mirror和Replication,当主机出现问题时,Replication和Mirror实现自动的故障转移(Mirror 和Replication都切换到备机,而当主机 重新启动后 ...
- SQL Server提高事务复制效率优化(一)总体概述
随着公司业务的发展,数据量增长迅速,在解决Scale Out的同时,还要考虑到主从的复制延迟问题,尽量降到1s以内满足线上业务,如果不调整,SQL Server默认的配置可能平均要3s左右.生产的 ...
- (初稿)SQL Server 复制(Replication)系列(2)——事务复制搭建
原文:(初稿)SQL Server 复制(Replication)系列(2)--事务复制搭建 本文演示如何搭建最基本的事务复制. 环境准备: 虚拟机2台: 服务器名分别为RepA和RepB,RepA为 ...
- 复制(5)——事务复制中的发布者(Publisher)
发布者是所有被复制(replicated)的数据的集合.每个发布者可以有多个发布(publication),每个发布项包含多个项目(articles),但是这些发布必须处于一个单一的数据库中,而每个项 ...
随机推荐
- Java静态块学习
静态块是类里面的构造器,对象有构造器那么类也有构造器,类里面的构造器叫做初始化方法.也就是new一个对象他会经过一个构造器.加载一个类,也有被初始化的一片代码,这个就称之为静态块.一个类里面可以有很多 ...
- SDUT 2610 Boring Counting(离散化+主席树区间内的区间求和)
Boring Counting Time Limit: 3000MS Memory Limit: 65536KB Submit Statistic Discuss Problem Descriptio ...
- VS插件开发
参考资料: VS插件开发 - 个性化VS IDE编辑器 自己动手编写一个VS插件(一) VS Addin插件基本开发入门 VS Addin插件配置.部署
- BNF 巴科斯范式
BNF 巴科斯范式(BNF: Backus-Naur Form 的缩写)是由 John Backus 和 Peter Naur 首先引入的用来描述计算机语言语法的符号集.现在,几乎每一位新编程语言书籍 ...
- Linux PHP增加JSON支持及如何使用JSON
Linux PHP增加JSON支持及如何使用JSON 目前,JSON已经成为最流行的数据交换格式之一,各大网站的API几乎都支持它. JSON(JavaScript Object Notation) ...
- C++ builder的文件操作
在编程的过程中,文件的操作是一个经常用到的问题,在C++Builder中,可以使用多种方法对文件操作,下面我就按以下几个部分对此作详细介绍,就是:1.基于C的文件操作:2.基于C++的文件操作:3.基 ...
- Qt获取屏幕分辨率
http://my.oschina.net/u/1255773/blog/159557 原 Qt获取屏幕分辨率 发表于1年前(2013-09-06 11:00) 阅读(546) | 评论(0) 3 ...
- android导入项目出现R文件不能生成
关于原因网上有好多,比如 1.有时候eclipse不自动编译,把project clean一下,让R.java重新生成 2.选择菜单 Project >> Clean ,前提是勾选上 ...
- zabbix-agent passive
http://www.cnblogs.com/mysql-dba/p/5010902.html http://blog.chinaunix.net/uid-29155617-id-4668602.ht ...
- CLH锁 、MCS锁
一.引文 1.1 SMP(Symmetric Multi-Processor) 对称多处理器结构,指服务器中多个CPU对称工作,每个CPU访问内存地址所需时间相同.其主要特征是共享,包含对CPU,内存 ...