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事务复制问题的更多相关文章

  1. SQL Server提高事务复制效率优化(一)总体概述

      随着公司业务的发展,数据量增长迅速,在解决Scale Out的同时,还要考虑到主从的复制延迟问题,尽量降到1s以内满足线上业务,如果不调整,SQL Server默认的配置可能平均要3s左右.生产的 ...

  2. Sql Server 2012 事务复制遇到的问题及解决方式

    1.订阅服务器提示:作业失败.无法确定所有者 WIN-01Q6JB46CHV\Administrator(拥有作业XXX)是否有服务器访问权限(原因:无法获取有关 Windows NT 组/用户'WI ...

  3. SQL Server提高事务复制效率优化(四)修改数据同步过程优化

    1.原理       我说的数据修改同步过程指的是在快照生成完毕,分发代理将快照应用于订阅服务器完成订阅服务器初始化后,发布服务器后续的更改同步到订阅服务器过程,这也就是我们常常关注的延迟.此过程主要 ...

  4. SQL Server提高事务复制效率优化(二)快照初始化优化

    测试数据表量1500w+,使用初始化默认的快照代理参数,复制的三个过程包括快照初始化,订阅初始化和数据修改复制,主要对快照代理.分发代理.日志读取代理分别作了参数优化,并给出优化前后的对照实验测试. ...

  5. SQL Server提高事务复制效率优化(三)订阅初始化优化

    初始化订阅主要是由分发代理分发和应用快照代理之前生成的快照,所以优化的主体是分发代理. 1.初始化订阅 首先在本地创建一个订阅,发布服务器.分发服务器和订阅服务器都在同一台服务器上,仅为了测试生产环境 ...

  6. sqlserver 2000事务复制问题

    2000现在用的估计不多了,把之前收集的一些复制问题整理发布出来.可能都是些很白很二的问题,但人总是由最初的无知不断成长,不对之处欢迎指正. sqlserver 2000事务复制问题服务器A(发布) ...

  7. SQL Server 2000向SQL Server 2008 R2推送数据

    [文章摘要]最近做的一个项目要获取存在于其他服务器的一些数据,为了安全起见,采用由其他“服务器”向我们服务器推送的方式实现.我们服务器使用的是SQL Server 2008 R2,其他“服务器”使用的 ...

  8. sql server 2000,Log.LDF文件丢失,附加数据库失败的解决办法[转]

    SQL Server数据库备份有两种方式,一种是使用BACKUP DATABASE将数据库文件备份出去,另外一种就是直接拷贝数据库文件mdf和日志文件ldf的方式.下面将主要讨论一下后者的备份与恢复. ...

  9. SQL SERVER 2000 数据恢复(分离数据库+附加数据库)

    一.分离数据库     SQL Server 2000允许分离数据库的数据和事务日志文件,然后将其重新附加到同一台或另一台服务器上.分离数据库将从SQL Server 删除数据库,所以当点击“分离数据 ...

随机推荐

  1. mac下快速安装gearman和php扩展

    1.brew install gearman 用brew安装gearman 2.pecl install gearman 用pecl安装php的gearman扩展 3.ln -s /usr/local ...

  2. Word Ladder II Graph

    Given two words (start and end), and a dictionary, find all shortest transformation sequence(s) from ...

  3. Python2X和Python3X的区别

    python2X:源码重复不规范python3X:整合源码,更清晰简单优美.         python2X:默认的编码是ascii  (解决办法为第一行添加 :  #-*- encoding:ut ...

  4. Embarcadero Delphi 7 Enterprise 7.0.4.453 中文版

    在 win7下可能报错请大家按下面的方式 delphi7运行不正常的提示unable to rename'c:\program files\Borland\delphi7\Bin\delphi32.$ ...

  5. 如何在数据表中存取图片 - 回复 "三足乌" 的问题

    问题来源: http://www.cnblogs.com/del/archive/2009/05/28/1491186.html#1801853 准备工作:1.在空白窗体上添加: ClientData ...

  6. IE userdata 原理 应用 详解

    https://www.cnblogs.com/chyong168/archive/2012/04/24/2467505.html 在Internet Explorer 5中,Microsoft提供了 ...

  7. javascript易混淆的split()、splice()、slice()方法详解

    很多时候,一门语言总有那么些相似的方法,容易让人傻傻分不清楚,尤其在不经常用的时候.而本文主要简单总结了JavaScript中的关于字符串和数组中三个容易混淆的方法.旨在方便查阅,在容易混淆的时候有据 ...

  8. Redis事务介绍

    概述 相信学过Mysql等其他数据库的同学对事务这个词都不陌生,事务表示的是一组动作,这组动作要么全部执行,要么全部不执行.为什么会有这样的需求呢?看看下面的场景: 微博是一个弱关系型社交网络,用户之 ...

  9. 解题:APIO 2014 序列分割

    题面 拆开式子我们发现切割顺序不影响答案,所以可以设计出一个$dp[i][j]$表示到$i$为止切了$j$刀的最大收益之类的,然后做个前缀和就可以转移了. $dp[i][j]=min(dp[i][j] ...

  10. bzoj 4332:JSOI2012 分零食

    描述 这里是欢乐的进香河,这里是欢乐的幼儿园. 今天是2月14日,星期二.在这个特殊的日子里,老师带着同学们欢乐地跳着,笑着.校长从幼儿园旁边的小吃店买了大量的零食决定分给同学们.听到这个消息,所有同 ...