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. HDU4722——Good Numbers——2013 ACM/ICPC Asia Regional Online —— Warmup2

    今天比赛做得一个数位dp. 首先声明这个题目在数位dp中间绝对是赤裸裸的水题.毫无技巧可言. 题目的意思是个你a和b,要求出在a和b中间有多少个数满足数位上各个数字的和为10的倍数. 显然定义一个二维 ...

  2. QProcess 进程调用

    1. 调用方的接口: void QProcess::start(const QString &program, const QStringList &arguments, OpenMo ...

  3. 02.基于IDEA+Spring+Maven搭建测试项目--详细过程

    一.背景介绍 1.1公司相关技术 Git:是一款免费的开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目,方便多人集成开发 Maven:是基于项目对象模型(POM),可以通过一小段描述信息 ...

  4. URAL 1969. Hong Kong Tram

    有一个trick就是没想到,枚举第二段时间后,要检测该火车能否继续跑一圈来判断,不能先检测前半圈能不能跑加进去后在检测后半段: // **** 部分不能放在那个位置: 最近代码导致的错误总是找不出,贴 ...

  5. P2461 [SDOI2008]递归数列

    题目描述 一个由自然数组成的数列按下式定义: 对于i <= k:ai = bi 对于i > k: ai = c1ai-1 + c2ai-2 + ... + ckai-k 其中bj 和 cj ...

  6. 五种并发包总结ConcurrentHashMap CopyOnWriteArrayList ArrayblockingQueue

    五种并发包总结 1.常用的五种并发包 ConcurrentHashMap CopyOnWriteArrayList CopyOnWriteArraySet ArrayBlockingQueue Lin ...

  7. 【刷题】BZOJ 3668 [Noi2014]起床困难综合症

    Description 21 世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳.作为一名青春阳光好少年,atm 一直坚持与起床困难综合症作斗争.通过研究相关文献,他找 ...

  8. CF1009F Dominant Indices 解题报告

    CF1009F Dominant Indices 题意简述 给出一颗以\(1\)为跟的有根树,定义\(d_{i,j}\)为以\(i\)为根节点的子树中到\(i\)的距离恰好为\(j\)的点的个数,对每 ...

  9. HDU.2147 kiki's game (博弈论 PN分析)

    HDU.2147 kiki's game (博弈论 PN分析) 题意分析 简单的PN分析 博弈论快速入门 代码总览 #include <bits/stdc++.h> using names ...

  10. logstash5生成init脚本后台启动

    默认情况使用rpm包安装完logstash之后没有启动脚本,这一点我觉得算是开发不够彻底.官网给了一个脚本,需要根据不同的系统版本生成对应的启动脚本,而且官网没有给明使用方法,对于新用户来说算是个坑, ...