Sql server SQL Server 2005复制

Sql server SQL Server 2005复制,sql-server,database,sql-server-2005,replication,Sql Server,Database,Sql Server 2005,Replication,环境: SQL Server 2005 SP2(9.0.3077) 事务性出版物(生产和测试版) 有一种情况是,我有两个不同的复制发布设置,它们使用相同的文章。这些发布中的每一个都为不同机器上的订阅者提供订阅。这些共享文章之一是表。在固定的时间间隔内,此表中的许多记录都会过时,不再需要。此时将调用删除记录的存储过程 为了节省资源并改善订阅服务器的延迟时间,我已将此存储过程的replicate属性设置为“存储过程的执行”,而不是默认的“仅存储过程定义”。这样,当存储过程删除2000000多条记录时

环境: SQL Server 2005 SP2(9.0.3077) 事务性出版物(生产和测试版)

有一种情况是,我有两个不同的复制发布设置,它们使用相同的文章。这些发布中的每一个都为不同机器上的订阅者提供订阅。这些共享文章之一是表。在固定的时间间隔内,此表中的许多记录都会过时,不再需要。此时将调用删除记录的存储过程

为了节省资源并改善订阅服务器的延迟时间,我已将此存储过程的replicate属性设置为“存储过程的执行”,而不是默认的“仅存储过程定义”。这样,当存储过程删除2000000多条记录时,这些记录不会复制到订阅服务器。而是复制存储过程的执行,并在订阅服务器上执行相同的复制存储过程,同时删除相同的2000000+行

我遇到的问题是我的第二份出版物。我不需要这种类型的行为,所以我将存储过程上的article属性设置为“仅存储过程定义”,并希望复制可以删除其他订阅服务器上的行,但事实并非如此。订阅服务器上的表一直在获取记录。所以为了修复它,我将Article属性设置为“Execution…”,并称之为good。这可能是最好的解决方案,因此beta版与生产版相匹配,但由于发布属性应该彼此独立工作,因此它仍然感觉像是一个难题


问题:为什么“存储过程的执行”项目属性优先并应用于其他发布,即使它设置为“仅存储过程定义”在另一份出版物中?

我已经很久没有主动管理复制了,但我怀疑答案与日志读取器的体系结构有关,并且您正在各出版物之间共享一篇文章。我的理解是,日志读取器将遍历日志,并查找对已复制项的操作。根据文章设置,对数据的个别更改可能会过帐到分发数据库中的表中,或者过帐过程调用的记录。在任何情况下,这都是文章的财产,而不是文章所属的出版物。我假设(但尚未测试和验证)您可以在同一数据库对象上创建多个项目,并使用@type='logbase'复制一个项目,使用@type='proc exec'复制另一个项目

尽管我现在是在SQL 2008上开发的,但我最后一次使用复制是在SQL 7上


pjjH

我们在公司中广泛使用复制,因为我们在多个国家拥有38个仓库,所有仓库都复制回位于伦敦的主服务器

首先,复制筛选器应该使用视图,即使是简单的视图。这样,如果您需要调整过滤器(readwhere子句),您只需要更改视图和完成。否则,你必须重新发布你的数据,并重新订阅每个人,这可能是一个真正的痛苦

您提到在订阅服务器和发布服务器上运行相同的删除操作以保持它们同步。这让我脊背直打哆嗦。您最好在一个地方删除它们,让服务器将所做的更改复制给订阅者。自SQLServer2005以来,复制现在非常快速高效。SQL 2000的复制速度非常慢。如果您使用的是SQL 2005/2008,只需确保您的兼容性级别(右键单击db、属性、选项)设置为90(2005)或100(2008)。这会将sql server切换到快速高效的复制方法


另一种方法是不删除数据,而是保留数据,并使用出版物中的where子句将其过滤掉。

不想在这里玩StackOverfow,但是这个问题是一个非常高级的SQL Server复制查询。我建议将其发布在Microsoft SQL Server复制论坛上,然后用Resultl更新此帖子。虽然我现在也在做一些复制工作,但我同意John的观点。这是一个相当棘手的问题。祝你好运可能要等到有人制作querytimeout.com同意,Hillary Cotter是一位著名的复制专家,她正在观看sql server复制论坛Try ServerFault.com。现在任何人都可以使用密码“alt SyAdmin MultRebug”访问它,我接受这一计划,并认为这是微软SQL Server的一个未被记录的特性。