标签: merge-replication

触发器返回结果集和/或以SET NOCOUNT OFF运行,而另一个未完成的结果集处于活动状态

我有2台服务器通过低速连接连接,我们正在运行带有Merge复制的SQL Server 2008.

在订阅者,有时在尝试插入新行时,我收到此错误:

触发器返回结果集和/或以SET NOCOUNT OFF运行,而另一个未完成的结果集处于活动状态.

  • 我的数据库没有任何触发器; 唯一的触发器是Merge复制创建的触发器
  • 此外,每当发生此错误时,它会自动回滚现有事务
  • 我正在使用DataTablesTableAdapters使用事务插入和更新数据库

我检查了什么:

  1. 数据库日志文件大小低于50Mb
  2. 检查了Zombie事务的源代码(因为我无法在开始时检索实际错误)
  3. 检查了两台服务器之间的连接,发现它很拥挤

问题:

  1. 如何避免这种行为以及为什么它首先发生?
  2. 为什么取消开放交易?

c# sql-server merge-replication

17
推荐指数
1
解决办法
6127
查看次数

将Identity_insert设置为 - 合并复制

我在两个数据库之间设置了合并复制,并在两者上使用标识范围.

我想在发布者上向合并表添加特定行(将标识值设置为标识范围之外的内容).当我尝试这个时,我收到以下错误.

插入失败.它与数据库'xxx'中的标识范围检查约束冲突,复制表'dbo.yyy',列'yyy_id'.如果通过复制自动管理标识列,请按如下所示更新范围:对于Publisher,执行sp_adjustpublisheridentityrange; 对于订阅服务器,运行分发代理程序或合并代理程序.

有没有办法强制将特定标识值放入使用标识范围管理的合并复制表?

sql-server replication sql-server-2005 merge-replication

13
推荐指数
1
解决办法
2380
查看次数

如何合并和同步SQL Server数据库文件?

我正在为与数据库同步的Windows平板电脑构建一个C#程序.他们每个人都有自己的本地.MDFSQL Server数据库,他们使用SQL Server Express进行交互.

但是,用户将从互联网连接中取出平板电脑并进行更改.然后,当一个人重新连接到包含DataBase的"主副本"的网络时,我想要将它们的.MDF数据库同步.然后用新同步的数据库替换计算机和平板电脑的数据库文件.

我有一个uniqueidentifier列,以及datetime最后一次更改该行的时间,所以如果有冲突,我会采取最近的更改.

我已经阅读了一些关于此的文献,但我很乐意看到一个明确的例子或教程如何做到这一点.我知道我想要的是合并复制,并且Microsoft Sync Framework似乎具有我想要的功能.我正在努力实现它.或者,您可以随意推荐其他工具.

提前致谢!

database sql-server synchronization merge-replication microsoft-sync-framework

13
推荐指数
1
解决办法
1722
查看次数

SQL Azure复制

有谁知道SQL Azure是否支持合并复制?我目前正在使用SQL 2008 R2的Web版本,它不支持复制的发布方面,我需要一个不花费7000美元的解决方案.

azure merge-replication azure-sql-database

10
推荐指数
1
解决办法
1万
查看次数

合并复制数据库中的插入非常慢

我有一个SQL服务器,通过合并复制到运行SQL CE的800个移动客户端进行设置.

服务器有足够的资源,进出公司的线路绰绰有余,客户端和服务器之间的复制通常很好,但是我们遇到了一个我无法追踪的间歇性错误.

昨天我们需要在一个主表中插入550条记录,唯一存在的触发器是标准的合并复制.

这个插件花了14个小时,因为它不断地与试图同步的移动设备陷入僵局.

有没有人对如何避免插入锁定以及如何加快整个过程有任何建议?

------更新-----

继一些评论后,我在一个插件上运行了一个分析器,我看到了很多这样的东西

insert into dbo.MSmerge_current_partition_mappings with (rowlock) (publication_number, tablenick, rowguid, partition_id)
            select distinct 1, mc.tablenick, mc.rowguid, v.partition_id
            from dbo.MSmerge_contents mc with (rowlock) 
            JOIN dbo.[MSmerge_JEMProjectME_PromotionResource_PARTITION_VIEW] v with (rowlock) 
            ON mc.tablenick = 286358001
            and mc.rowguid = v.[rowguid]
            and mc.marker = @child_marker 
            and v.partition_id in (select partition_id from dbo.MSmerge_current_partition_mappings cpm with (rowlock) JOIN
                dbo.MSmerge_contents mc2 with (rowlock)
                ON cpm.rowguid = mc2.rowguid
                and mc2.marker = @marker)
            where not exists (select * from MSmerge_current_partition_mappings with (readcommitted, rowlock, readpast) where …
Run Code Online (Sandbox Code Playgroud)

sql sql-server-2008 merge-replication

10
推荐指数
2
解决办法
3725
查看次数

更改列约束null/not null = rowguid复制错误

我有一个在Sql server 2005下运行的数据库,带有合并复制.我想将一些FK列更改为"not null",因为它们应始终具有值.SQL服务器不会让我这样做,这就是它所说的:

  • 无法修改表格.删除合并复制使用的rowguid列上的默认约束无效.在执行内部复制过程期间,架构更改失败.有关更正操作,请参阅此错误消息附带的其他错误消息.交易在触发器中结束.批次已中止.

我根本没有尝试更改rowguid列上的约束,只是在另一个充当FK的列上.我想设置的其他列不为null,因为没有该信息(即客户,客户名称)记录没有任何意义.

问题:有没有办法在不关闭复制然后重新打开它的情况下将列更新为"非空"?这甚至是最好的方法 - 我应该使用约束吗?

sql-server ssms sql-server-2005 constraints merge-replication

7
推荐指数
1
解决办法
8707
查看次数

将数据从本地数据库同步到中央SQL Server

我需要将本地数据库数据与中央SQL服务器同步.远程用户(大多数约10人)将使用笔记本电脑,它将托管应用程序和本地数据库.互联网连接不是24x7全天候.在没有连接的情况下,笔记本电脑用户应该能够在本地数据库中进行更改,并且一旦连接恢复,数据应该自动与中央SQL服务器同步.同步通常只是数据更新.我查看了选项Sync框架和合并复制.我不能使用同步框架,因为我不是C#专家.对于合并复制,我认为需要额外的硬件,这是不可能的.解决方案应易于开发和维护.

还有其他选择吗?在这种情况下是否可以使用SSIS?

synchronization ssis merge-replication microsoft-sync-framework

7
推荐指数
1
解决办法
839
查看次数

从SQL-Server 2005升级到SQL-Server 2008时如何更新冲突解决程序

我们最近从SQL Server 2005升级到SQL Server 2008(R2,SP1).此升级包括一些发布,其中所有表都使用基于"以后获胜"原则的默认冲突解决程序发布.它的智能名称是'Microsoft SQL Server DATETIME(Later Wins)Conflict Resolver',相应的dll文件是ssrmax.dll.

众所周知,一旦使用冲突解决程序发布表,则必须在使用此表的所有后续发布中使用相同的冲突解决程序.很公平,但是,当将以前发布的表添加到新发布中,并指定要用于此表的完全相同的冲突解决程序时,我们收到一条错误消息:

use [myDb]
exec sp_addmergearticle 
    @publication = N'myDb_Pub', 
    @article = N'Tbl_blablabla', 
    @source_owner = N'dbo', 
    @source_object = N'Tbl_blablabla', 
    @type = N'table', 
    @description = N'', 
    @creation_script = N'', 
    @pre_creation_cmd = N'drop', 
    @schema_option = 0x000000000C034FD1, 
    @identityrangemanagementoption = N'none', 
    @destination_owner = N'dbo', 
    @force_reinit_subscription = 1, 
    @column_tracking = N'false', 
    @article_resolver = N'Microsoft SQL Server DATETIME (Later Wins) Conflict Resolver', 
    @subset_filterclause = N'', 
    @resolver_info = N'ddmaj', 
    @vertical_partition = N'false', 
    @verify_resolver_signature = 0, 
    @allow_interactive_resolver = N'false', 
    @fast_multicol_updateproc …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2005 resolver sql-server-2008 merge-replication

6
推荐指数
1
解决办法
879
查看次数

SQL Merge Replication中"逻辑记录"的未来

我正在构建一个新的应用程序,它将在非常差的网络上使用SQL Merge Replication.似乎"逻辑记录"功能将有助于显着地处理这些网络问题,确保我们可以在单独的事务中逐个复制完整的"实体"而不是逐个表.

但是,文档说明

将在Microsoft SQL Server的未来版本中删除此功能.避免在新的开发工作中使用此功能,并计划修改当前使用此功能的应用程序.

我在文档中找不到的建议是应该使用什么来获得类似的功能.这样的建议是否存在?如果不是官方推荐,那么人们有什么想法呢?

sql-server sql-server-2008 database-replication merge-replication sql-server-2012

5
推荐指数
1
解决办法
273
查看次数

是否可以在 Visual Studio 的架构比较中忽略 NOT FOR REPLICATION?

我有两个环境:开发和测试。Dev 有一个 SQL 实例。测试了三个使用合并复制的情况。

当我在开发和测试之间使用架构比较时,每个表总是被标记为不同,因为测试中的表有一些复制工件:

  • 生成的用于复制的唯一 ID:[rowguid] [uniqueidentifier] ROWGUIDCOL NOT NULL CONSTRAINT [MSmerge_df_rowguid_DDDF85B24558D414B8FD278B2219C33A]
  • 主键标记为NOT FOR REPLICATION(我看到在架构比较选项的常规选项卡中有一个选项可以忽略它)
  • [repl_identity_range...]要求主键位于分配给该实例的范围内的约束

有没有办法repl_identity_range_...在运行模式比较时忽略 rowguid 列和约束?

sql-server replication merge-replication schema-compare visual-studio-2015

5
推荐指数
1
解决办法
1358
查看次数