刪除分區如何不讓全局索引失效


  首先,使用12c以上的版本大法好

前提:創建分區表,存在4個分區,每個分區中都有數據,創建全局索引,狀態VALID。

如果此時刪除分區,全局索引會失效,狀態UNUSABLE狀態。

原理Oracle中索引是以B樹的結構存儲的。包括了索引鍵值,rowid信息,而且按照索引鍵值有序排列,當通過索引掃描需要回表的時候,能利用rowid直接定位到索引鍵值對應的數據塊,這是最快的數據訪問方式。當我們刪除表中數據的時候,同時也要刪除對應的索引,因為索引有序排列,如果要刪除一條索引數據,組織結構需要調整,以保證正確的排列順序,12c之前,某種原因,無法再刪除分區的同時對索引重新構建,所以此時索引狀態是失效,於其是錯的,寧可不讓用。

  刪除分區,需要手工rebuild重建索引才能生效。

  那么如果,全局索引的狀態失效,是因為索引對應的分區中數據被刪除,那么如果,分區中的數據不被刪除,索引結構不需調整,狀態是不是就是正常的?

  首先重建索引,讓其生效,此時通過delete刪除第二分區的數據,再次執行分區刪除將第二分區刪除。全局索引狀態未失效為VALID。

 

  數據不需要被刪除,無需調整索引結構,全局索引的狀態就無需置為失效,這個算是對待分區刪除避免全局索引失效的一種解決方案。

 

      --轉,總結自雲和恩墨 墨天輪


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM