2009-11-13 117 views
0

我有一个场景,我正在使用事务复制将多个SQL Server 2005数据库(同一实例)复制到单个远程数据库(单独物理机器上的不同实例)。SQL Server 2005/8复制事务ID

然后,我对复制数据执行一些处理以进行报告。我正在使用表级触发器来识别对我的后处理代码进行操作的更改。

到目前为止一切都很好。

但是,我想知道的是,在同一个事务中创建,更新或删除某些表时,是否可以从复制(或任何地方)识别某种事务ID,然后我不'对单个交易多次执行相同的后处理。

基本示例:我有一个TUser表和TAddress表。如果我要在单个事务中创建它们,那么它们也将在单个事务中复制。但是,在复制数据库中会触发两个触发器 - 目前会导致我的后处理代码运行两次。我真正想要确定的是,这两个更改是在同一个事务中复制的。

这有可能以任何方式吗?我描述的标识符是否存在并且是否可访问?

回答

1

简短的答案是否定的,没有什么可以依赖的。总之,总的来说,答案是肯定存在,但不建议以任何方式用于任何事情。

由于复制是事务性一致,一种方法,你可以考虑将推动基础记录的标识符(在这种情况下TUSER,由于TAddress有关TUSER)到一个队列(使用类似Service Broker理想的或潜在的一个user-defined queue),然后通过从队列中弹出数据并单独处理来执行后处理。

另一种可能性是通过轮询来自主表的新/更新记录以及以这种方式进行后处理来简单地批处理每个'x'时间量 - 您需要跟踪ID,rowversions或时间戳的时间戳某种你已经为每个主表处理过的元数据,并在每次批处理运行期间提取尚未处理的任何东西。

只是一些想法,希望有所帮助。

+0

感谢您的回复。你能提供任何有关长答案摘要的信息吗?即使这是不可能的,我想知道你在想什么。 – 2009-11-16 11:34:38

+0

至于其他解决方案都已经考虑。然而,我给出的例子非常简单,实际上是一个包含数百个表的financail系统数据库。服务代理和投票更改都已打上折扣。我们在经过大量研究之后已经登陆了我们的所在地,但如果可能的话,我们真的希望能够将不同的表格更改链接到单个交易。我相信有一些系统交易价值可用,但不知道这些是多么可靠? – 2009-11-16 11:35:10