如何比较表中的数据(操作前后)?
Posted
技术标签:
【中文标题】如何比较表中的数据(操作前后)?【英文标题】:How to compare data in table (before and after an operation)? 【发布时间】:2011-09-12 09:53:41 【问题描述】:是否有任何免费工具或方法可以了解数据库表中发生了什么变化?
【问题讨论】:
默认情况下没有办法做到这一点。查看我对最近类似问题的回答:***.com/questions/7337148/… 【参考方案1】:你可以在更新前复制一份
CREATE TABLE t2 AS SELECT * FROM t1
运行更新
然后显示差异
使用它来显示更新:
SELECT * FROM t1
MINUS
SELECT * FROM t2
用它来显示删除:
SELECT * FROM t2
WHERE NOT EXISTS(SELECT 1 FROM t1 WHERE t1.primary_key = t2.primary_key)
最后这是检查记录总数是否相同
SELECT count(*) FROM t1
SELECT count(*) FROM t2
注意:如果有其他会话更新 t1,则可能很难发现您的更新。
【讨论】:
这不会显示任何已删除的记录,如果这是操作的话。【参考方案2】:确实应该避免触发,但是...
如果您在非生产环境中,您可以设置触发器来执行对新表的日志记录。您需要 5 个字段,如下所示:
LogTime DateTime;
Table Varchar2(50); -- Table Name
Action Char; -- Insert, Update or Delete
OldRec Blob; -- Concatenate all your field Values
NewRec Blob; -- Ditto
这样做的好处是您可以将给定时间跨度的所有 OldRecs 和 NewRecs 选择到文本文件中。比较工具会帮助您突出显示您的更改。
有什么帮助吗?
【讨论】:
【参考方案3】:我过去曾非常成功地将Toad 用于 mysql(用于模式和数据)。我看到它也与 Oracle 兼容。
【讨论】:
【参考方案4】:试试liquibase,它提供了数据库的版本控制机制。
【讨论】:
以上是关于如何比较表中的数据(操作前后)?的主要内容,如果未能解决你的问题,请参考以下文章