Sql 如何比较表中的数据(操作前后)?
有没有免费的工具或方法来了解数据库表中发生了什么变化?我在过去非常成功地使用了MySQL(用于模式和数据)。我发现它也与Oracle兼容。试试,它为数据库提供了版本控制机制。您可以在更新之前复制一份Sql 如何比较表中的数据(操作前后)?,sql,database,oracle,diff,compare,Sql,Database,Oracle,Diff,Compare,有没有免费的工具或方法来了解数据库表中发生了什么变化?我在过去非常成功地使用了MySQL(用于模式和数据)。我发现它也与Oracle兼容。试试,它为数据库提供了版本控制机制。您可以在更新之前复制一份 CREATE TABLE t2 AS SELECT * FROM t1 运行您的更新 然后显示差异 使用此选项可显示更新: SELECT * FROM t1 MINUS SELECT * FROM t2 使用此选项可显示删除: SELECT * FROM t2 WHERE NOT EXISTS(
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
这样做的好处是,您可以选择给定时间范围内的所有oldRec和newRec,并将其放入文本文件中。比较工具将通过突出显示您的更改来帮助您
有任何帮助吗?如果操作是这样的,则不会显示任何已删除的记录。默认情况下,无法执行此操作。看看我最近对一个类似问题的回答: