【发布时间】:2011-09-12 09:53:41
【问题描述】:
是否有任何免费工具或方法可以了解数据库表中发生了什么变化?
【问题讨论】:
-
默认情况下没有办法做到这一点。查看我对最近类似问题的回答:stackoverflow.com/questions/7337148/…
标签: sql database oracle diff compare
是否有任何免费工具或方法可以了解数据库表中发生了什么变化?
【问题讨论】:
标签: sql database oracle diff compare
你可以在更新前复制一份
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,则可能很难发现您的更新。
【讨论】:
确实应该避免触发,但是...
如果您在非生产环境中,您可以设置触发器来执行对新表的日志记录。您需要 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 选择到文本文件中。比较工具会帮助您突出显示您的更改。
有什么帮助吗?
【讨论】:
我过去曾非常成功地将Toad 用于 MySQL(用于模式和数据)。我看到它也与 Oracle 兼容。
【讨论】:
试试liquibase,它提供了数据库的版本控制机制。
【讨论】: