2011-09-12 20 views
3

有沒有免費的工具或方法來了解數據庫表中發生了什麼變化?如何比較表中的數據(操作前後)?

+0

默認情況下,沒有辦法做到這一點。看看我的答案類似的最近問題:http://stackoverflow.com/questions/7337148/how-do-i-get-the-delta-for-user-id-since-the-previous-months-using- oracle-sql/7337524#7337524 – APC

回答

5

你可以採取的副本更新

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

這不會顯示任何已刪除的記錄,如果這是操作。 – APC

+0

好點,掛上我會更新...... –

0

我在過去的時代(對於Schema和Data)都非常成功地使用了Toad。我看到它也與Oracle兼容。

0

嘗試liquibase,它提供了數據庫的版本控制機制。

0

觸發器真的應該避免,但...

如果你是在非生產環境中,你可以設置一個觸發執行日誌記錄到新表。您需要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。比較工具將協助您突出顯示您的更改。

任何幫助?