【发布时间】:2010-07-13 22:57:40
【问题描述】:
正如我所见,SQL 2008 不再以非常简单的方法通过 Internet 提供复制。不仅如此,我可以看到合并复制方法在数据库中安装了太多的触发器和视图,并添加了名为“rowguid”的附加字段。
我们今天的可用磁盘空间比处理器速度还多。所以我决定为 SQL Server 编写我自己的通用复制。它需要以下步骤。
假设我的所有表都有一个主键(bigint 或 nvarchar(50))
Setup Table : SyncItems
SyncItemID (Primary,AutoNumber)
SyncTable (nvarchar(50) name of table)
RowID (bigint)
RowIDStr (nvarchar(50))
RowOp (nvarchar(10), 'Inserted','Updated','Deleted')
RowTime (datetime, current_timestamp)
我可以在数据库的每个表上设置三个触发器,可以在 SyncItems 中插入一个项目来指定 DML。
现在所有的复制器,只能先扫描 SyncItems 并加载修改后的表行并在目的地更新。
问题:
我已经将数据库恢复模式设置为完整。是否有任何替代方法可以让我读取 DML 历史记录并进行复制而不是设置触发器?
事务日志的历史记录会保留多长时间?在基于触发器的自定义复制中,我可以删除旧记录并相应地截断表。
如果我可以读取事务日志并手动复制,那就太好了,因为我们甚至可以复制 DDL 事务。我尝试使用搜索各种存储过程并进行了足够的谷歌搜索,但没有找到任何提示。
是否有读取复制发布者日志的选项?这样我们就可以编写自己的复制代理来通过互联网复制数据,而不是使用 SQL Server 自己的复制?
(我尝试过网络同步和各种选项,但我们的数据量很大,使用网络同步并不实用)
【问题讨论】:
-
从我在此处阅读的内容看来,您似乎假设触发器中一次只处理一行。确保您的触发器可以处理多行插入、更新、删除。
-
是的,它们可以处理多行。
标签: sql-server tsql logging