none
各位高人,想请教一下数据库复制的问题 RRS feed

  • 问题

  • 1.复制失败(如故意删除、网络不通)导致需要重新配置复制订阅,旧系统的数据要重新初始化到新系统,是否能按指定条件做初始化,而不是将新系统的整个表清空了(这个sql 2005是否能够在不需要代码情况下靠配置就能做到),如果sql2005不行,那么sql2008 r2可以做到吗?

    2.我自己做个实验,发觉复制是出现进程无法向表进行大容量复制,说字段大小太大, 这个怎么理解

    谢谢!

    2012年4月21日 16:41

答案

  • 一般对于因为问题导致要重新订阅的情况, 考虑到数据差异一般不大, 所以在添加 Article 的时候, 使用  @pre_creation_cmd = none 的方式

    这种方式仅创建订阅, 并且把创建订阅之后的数据变更同步到订阅服务器

    而对于在订阅前就存在的数据差异, 采用手工同步的方式处理, 可以通过 sql server 自带的 tablediff 小工具来比较发布和订阅表的差异, 并生成差异修复的 T-SQL 脚本文件, 然后在订阅服务器上执行这个脚本文件来修复数据差异

    2012年4月22日 2:00
  • 对于第二点, 这个要看你的表结构和如何实验的, 初始化数据到订阅表, 复制过程是使用大容易插入的处理方式的, 所以可能会在特殊的表结构(结构有差异, 或者表中存在非常特别的数据)时出现问题, 但在绝大多数情况下, 都是不会有问题的

    2012年4月22日 2:02

全部回复

  • 1. there are options to recreate objects, truncate data only or don't change anything when add subscriber.

    2. there's server option 'max text repl size', default is 64k but you can change it with sp_configure:

    sp_configure 'max text repl size', nnnn

    reconfigure

    Where nnnn is number of bytes you like to set.

    2012年4月21日 20:06
  • 对订阅表的初始操作, 只有下面这几种:

     @pre_creation_cmd =] 'pre_creation_cmd'

    指定在应用该项目的快照时,如果系统在订阅服务器中检测到同名的现有对象,则应该执行的操作。pre_creation_cmd 的数据类型为
    nvarchar(10),可以是下列值之一:

    说明

    none

    不使用命令。

    delete

    在应用快照之前从目标表中删除数据。水平筛选项目时,将只删除筛选子句所指定的列中的数据。定义水平筛选时,不支持用于 Oracle
    发布服务器。

    drop(默认值)

    删除目标表。

    truncate

    截断目标表。对 ODBC 或 OLE DB 订阅服务器无效。

    2012年4月22日 1:56
  • 一般对于因为问题导致要重新订阅的情况, 考虑到数据差异一般不大, 所以在添加 Article 的时候, 使用  @pre_creation_cmd = none 的方式

    这种方式仅创建订阅, 并且把创建订阅之后的数据变更同步到订阅服务器

    而对于在订阅前就存在的数据差异, 采用手工同步的方式处理, 可以通过 sql server 自带的 tablediff 小工具来比较发布和订阅表的差异, 并生成差异修复的 T-SQL 脚本文件, 然后在订阅服务器上执行这个脚本文件来修复数据差异

    2012年4月22日 2:00
  • 对于第二点, 这个要看你的表结构和如何实验的, 初始化数据到订阅表, 复制过程是使用大容易插入的处理方式的, 所以可能会在特殊的表结构(结构有差异, 或者表中存在非常特别的数据)时出现问题, 但在绝大多数情况下, 都是不会有问题的

    2012年4月22日 2:02
  • 一直对复制敬而远之,副作用太多,性能不好

    做过几个同步项目,目前运行还是很稳定、灵活


    Try SQL Server 2008 QQ:315054403 dgdba@hotmail.com

    2012年4月23日 3:20
  • 谢谢各位的帮助,非常感谢!

    2012年5月2日 2:51