Как сравнить данные в таблице (до и после операции)? - PullRequest
3 голосов
/ 12 сентября 2011

Есть ли бесплатный инструмент или способ узнать, что изменилось в таблице базы данных?

Ответы [ 4 ]

5 голосов
/ 12 сентября 2011

Вы можете сделать копию до обновления

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, может быть сложно найти ваши обновления.

0 голосов
/ 12 сентября 2011

Триггеров действительно следует избегать, но ...

Если вы находитесь в непроизводственной среде, вы можете настроить триггер для ведения журнала в новой таблице. Вам нужно 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 для заданного промежутка времени в текстовые файлы. Инструмент сравнения поможет вам выделить ваши изменения.

Любая помощь?

0 голосов
/ 12 сентября 2011

Попробуйте liquibase , это обеспечивает механизм контроля версий для базы данных.

0 голосов
/ 12 сентября 2011

Я использовал Toad для MySQL очень успешно в прошлом (как для схемы, так и для данных). Я вижу, что это также совместимо с Oracle.

...