2008-10-14 48 views
2

我有一個Oracle表,它包含應用程序的事件日誌消息。我們不希望這張桌子失去控制並佔用太多空間,所以我們想要限制它可以包含的一些行數,例如一百萬。通過刪除舊行來自動實施最大數據庫表大小

所以我們想告訴Oracle,當表格變得太大時,它應該刪除最老的行以爲新行騰出空間。

有沒有辦法做到這一點?我想我們可以通過觸發器或通過使用存儲過程來創建所有插入,但有沒有更簡單的方法?

編輯:幾個答案建議涉及分區的解決方案。我們目前並未對此表進行分類,但我們有能力在必要時這樣做。然而,從調查問題來看,即使我們對錶格進行分區,我們仍然需要某種預定的作業來刪除舊的分區等。因此,我們決定放棄分區而傾向於計劃作業檢查行數並根據需要刪除舊行,每天一次。

感謝您的幫助,每個人。

+0

如果它是一個「大」表,那麼你可能會發現分區更高性能。你可以放下他們沒有大驚小怪。如果您必須在大表上進行選擇並從中刪除行,則會在撤銷/重做方面產生開銷。當然你的決定。 – 2008-10-16 01:27:19

回答

4

根據您的簡單的定義...

我的偏見會安排定期運行(比如,夜間),以刪除最早的行的工作。如果您希望在一天內能夠生成一百萬條事件日誌,那麼您可能希望該工作更頻繁地運行,但對於大多數人來說,夜間通常已足夠。這具有異步的優勢,因此每次執行插入操作時都不會產生計算一百萬行的開銷,以確定是否必須清除某些數據。另一方面,它確實可能需要一些管理部門來完成這項工作。

2

你有分區選項嗎?

如果是這樣,這是滾動分區窗口的好候選。隨着警報日誌老化,您可以刪除最舊的分區。

+0

用drop代替刪除。 – 2008-10-14 14:35:38

1

你不能告訴Oracle讓我的表保持一定的大小。如果這是新聞,分區可能不適合你。否則,我完全同意尼克。

請記住,1M只是一個你決定保留的魔法數字,沒關係,如果它在清理之前達到1.1M就沒問題。如果您要滾動分區,則需要放棄您的1M號碼以保留好幾天。你會每天,每週,不管分區,根據你的標準放棄最老的。

添加評論到您的問題,以表明如果你有分區。

1

如果您只有幾千行,確保簡單的刪除將起作用。但是,如果您預計增長或有大量數據,那麼分區是您最好的方法。

  • 刪除可能容易撤銷空間錯誤。
  • 刪除可能容易出現舊錯誤的快照。
  • 刪除不會減少表格HWM(高水位標記)
  • 刪除可能需要一段時間,具體取決於數據大小。
  • 刪除會生成很多重做(取決於您實際刪除多少數據)。
  • 刪除分區會產生很少的重做。
  • 分區可以改進Oracle執行分區清除的某些查詢。

我可能錯過了一些功能等,分區將很好的下降數據。它的速度很快,將保持你的數據的組織。並且可擴展到大數據量。

相關問題