Oracle

Oracle - 大表歸檔

  • April 10, 2022

版本: Oracle 12cR2 EE

該表包含以下列類型: NUMBER、CLOB、NVARCHAR2、TIMESTAMP、VARCHAR2

表大小: 95GB

表格行數: 20M

**表分區?**不

表上的索引:表上只有一個主鍵作為索引。

依賴關係: “每一行之前(插入)”只有一個觸發器作為對錶的依賴項。

**約束:**有 3 個約束(其中 1 個是主鍵,其他是檢查)。

我們要存檔此表。但是,我無法決定如何為這麼大的表進行歸檔。使用 CTAS 將某個日期之前的記錄移動到新表中,然後在現有表中刪除這些導入的記錄,這將是一場噩夢。

我認為最好的方法是讓表間隔按月分區(如果你有更好的解決方案,我願意接受任何想法)。

幾個術前和序列問題:

  1. 有沒有辦法預先找出在對這種大小的表進行分區期間會生成多少存檔?
  2. 我們有機會提前計算過程的持續時間嗎?
  3. 停止將在此過程中載入的其他數據庫作業是否是一個不錯的選擇?
  4. 是否需要對操作或其他依賴項或觸發器的主鍵索引進行更改?

對於後處理:

  1. 刪除大分區時是否會導致數據庫負載過重?
  2. 例如,是否可以設置這樣的訂單;我們可以在主表上只保留最近 3 個月或最近 6 個月的數據,並每月將較舊的分區移動到歸檔表中嗎?遷移時只使用導出導入方式是否正確?
  3. 遷移的分區將從遷移過程中刪除。這樣做會不會在歸檔生成的基礎上出現問題?

謝謝你。

最好的祝福。

區間劃分應該是合適的方法。如果您可以注意大多數應用程序也考慮到這一點(意思是:他們的查詢應該始終包含 WHERE 子句中的分區標準),那麼它將加快速度。

術前

  1. 並不真地。我會在另一個(類似的)系統上創建一個複製數據庫並在那裡測試它——這應該回答你的大部分問題。
  2. 看1,看v$session_longops。並不是說這個預測是 100% 準確的,但它們可以給你一個想法。
  3. 如果可能的話,是的。從 12.2 開始,您可以直接線上對錶進行分區,所以實際上您仍然可以使用它 - 但它自然不會加快速度
  4. 那不應該是必要的

後期操作:

  1. 沒有外鍵和触發器,沒有。如果你關閉它們,它不會。
  2. 使用月份級別的間隔分區,這應該不難。經典的方法是將該數據移動到 DWH 並在必要時通過 DB 連結進行訪問。不要使用導出(我希望您的意思是 expdp),請參閱https://docs.oracle.com/en/database/oracle/oracle-database/12.2/vldbg/evolve-nopartition-table.html
  3. 不,如果您使用 alter table drop partition update 全域索引。

引用自:https://dba.stackexchange.com/questions/307427