2012-12-12 23 views
1

我正在增強基於java的ETL軟件。 Oralce安裝中的這個工具的一個問題是,當在ETL期間發生大量刪除時,即使我使用中間提交的較小批量大小,批量將耗盡UNDO空間。在我目前的生產環境中,存在4GB的硬限制。所以,現在,我的程序試圖從父表中刪除10000條記錄,在每1000條記錄和每個記錄刪除後提交,級聯從5個子表中刪除100萬條記錄,我已經發生了1000x5x1000,000條刪除批/提交。我希望我的軟件比這更聰明 - 我希望它找出Oracle UNDO空間,估計將觸發多少刪除並相應地限制批量大小。我該怎麼做呢?如何使用查詢來確定UNDO相關信息?如何編寫ETL以基於Oracle UNDO設置進行操作?

+2

如果你正在做一些使用所有撤銷的東西,那麼你應該增加它。沒有幫助我知道,但4GB的硬限制看起來很小。我剛剛通過了一些數據庫,其大小分別爲50GB,28GB,38GB,126GB和44GB。 – Ben

+0

你會得到什麼錯誤? ORA-1555? –

+1

也許truncate是要走的路。 – Rene

回答

2

4GB不算什麼。正確的做法是增加UNDO空間。

請注意,大規模刪除也是不鼓勵的,而且很值得研究如何消除這種刪除。

+0

好吧..我不完全控制多少刪除..它將取決於數據依賴性。 (也就是說,您從類型表中刪除了訂單類型A,您可能會清除一百萬份訂單和訂購商品,但刪除類型B可能會消耗1000萬份訂單和訂購商品)。 – Jay

+1

如果這是您必須處理的情況,那麼按訂單類型進行分區並執行分區刪除或截斷可能會很有效。但是,它似乎是一個奇怪的操作,刪除訂單。 –

+0

不完全刪除訂單 - 這只是一個比喻。但是,這更像是DBA的事情,不是嗎?不在應用程序的範圍內? – Jay