【问题标题】:Update table as same table in another database changes将表更新为另一个数据库中的同一表更改
【发布时间】:2018-06-12 20:48:44
【问题描述】:

我在一个 SQL Server 实例中有两个数据库,它们具有相同的结构。 现在我想为数据库中的一些表编写一些触发器,以便在插入、更新或删除记录时相互同步。

类似下面的内容将成为触发器之一:


CREATE TRIGGER AdminMessage_Insert
ON AdminMessage
AFTER INSERT
AS
INSERT INTO SecondDb.dbo.AdminMessage
        ( ID ,
          DeptKey ,
          AdminKey ,
          ReceiverKey ,
          MessageText ,
          IsActive
        )
SELECT i.ID, i.DeptKey, i.AdminKey, i.ReceiverKey, i.MessageText, i.IsActive
FROM INSERTED i

所以我的问题是有很多表,为每个表写三个触发器似乎不是最好的解决方案。

你能给我一个更好更小的方法吗?

更新

我发现了一些方法,例如 CDC、更改跟踪、SQL 审计,当然还有 复制(快照复制) 并阅读它们。 据我了解,对我来说最好的解决方案是使用“CDC”或“Audit”。 在他们两个中,我必须一张一张地处理每张桌子,这需要我很长时间。

我可以用更少的工作和一个 SQL 实例来更改所有表吗? (复制很好,但需要多个实例)

你的想法是什么?

【问题讨论】:

  • 如果您考虑将一个触发器链接到多个表,您不能。
  • @ahmedab​​delqader 我只是在寻找另一种方法,而不是使用触发器。
  • 这个doesn't seem to be the best solution是什么意思
  • 您是否需要双向同步,或者一个数据库是主数据库,另一个是从数据库?
  • 那么你可能应该使用replication 而不是重新发明轮子。

标签: sql-server database tsql database-trigger


【解决方案1】:

虽然变更数据捕获 (CDC) 并非旨在用作一种复制,但我们在我的公司以这种方式使用它,因为它对我们有用。您为只需要获取净更改的特定表启用 CDC。然后将记录存储在 CDC 创建的数据库中。从那里您可以将更改推送到其他数据库。您可以找到有关 CDC here 的更多信息。

【讨论】:

  • 我阅读了您引用的文件,似乎是完成我工作的好方法。我发现 replication 也是一个好方法。谁能说哪个更好?
  • 我不能说哪种方式更好,因为每种情况都是独一无二的。我们有特定的要求,即必须在某个时间点停止复制数据,这就是我们决定与 CDC 合作的原因。您必须决定什么最适合您的要求。如果您只需要复制数据,那么您可以使用两者中的任何一个来完成此操作。
  • +1 表示您对 CDC 的报价。但是对我来说 CDC 存在一个问题,当我想在每个表上启用 CDC 并从它们那里获取更改时,我必须分别处理每个表。我正在寻找一种方法来一次获取整个数据库的更改。
【解决方案2】:

因为您似乎正在寻找一种仅以一种方式复制数据的解决方案,所以我可以假设第二个源是只读的吗?如果是这样,并且因为您说两个数据库都在同一个实例上,您可以在辅助数据库中使用synonyms。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多