SQL增删改的DML保存与异步执行

richwong 2012-09-04 02:02:31

将一个表的数据写操作记录下来,然后原封不动的异步执行到另外一个同构的表。

第一步,插入数据,更新和删除数据,将DML(SQL语句)记录下来,或者记录ID行号和动作数据。
第二步,将上面的变动DML直接执行到另一个SQL同结构数据表。

能够实现的方式有,发布订阅,事务日志传送,这2个方式繁琐低效。
还通过JOB实现的有 触发器,时间戳,CDC

触发器属于同步做了2件事,速度慢
时间戳需要不停的检索时间取变更数据
CDC看起来更好,监控变更并记录到一个表,可他为什么不能记录到指定的表呢,又或者不是记录DML来的更直接。

亲,还有什么方式? 异步,对主表最低的性能开销,执行到另一个数据表不要求即时的。
...全文
121 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 元老 2012-09-04
  • 打赏
  • 举报
回复
如果你还是喜欢去抓 DML
那你可以在触发器去抓, 通过@@SPID 可以取得当前操作的进程 id
通过这个 id, 可以调用 dbcc inputbuffer(@@spid) 取到操作的原始 T-SQL(当然, 如果操作的 T-SQL 很长的话, 这个是取不完全的)

另外一个是取这个表的操作

DECLARE @Handle varbinary(64);
SELECT @Handle = sql_handle
FROM sys.dm_exec_requests
WHERE session_id = @@spid and request_id = 0;
SELECT * FROM sys.fn_get_sql(@Handle);

zjcxc 元老 2012-09-04
  • 打赏
  • 举报
回复
直接记录 DML 的方式并不保险, 比如, 如果源头是 bulk 或者 bcp 之类导入的, 或者是 openrowset 之类从外部导入的, 这样的操作在目标服务器上根本就无法直接应用的
zjcxc 元老 2012-09-04
  • 打赏
  • 举报
回复
事务复制就可以了吧, 配置起来也不是很麻烦的

34,589

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧