【问题标题】:How to compare data in table (before and after an operation)?如何比较表中的数据(操作前后)?
【发布时间】:2011-09-12 09:53:41
【问题描述】:

是否有任何免费工具或方法可以了解数据库表中发生了什么变化?

【问题讨论】:

标签: sql database oracle diff compare


【解决方案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,它提供了数据库的版本控制机制。

      【讨论】:

        猜你喜欢
        • 2015-11-14
        • 1970-01-01
        • 1970-01-01
        • 2023-02-06
        • 1970-01-01
        • 2022-10-25
        • 1970-01-01
        • 1970-01-01
        • 2021-09-21
        相关资源
        最近更新 更多