Oracle資料庫重建無效和不可用物件

2021-06-25 18:00:56 字數 1734 閱讀 8978

無效和不可用物件

無效 pl/sql 物件和不可用索引會對效能產生影響。無效 pl/sql 物件必須先進行重編譯,然後才能使用。這需要在執行嘗試訪問 pl/sql 程式包、過程或函式的第乙個操作之前花費一段編譯時間。如果 pl/sql 重編譯未成功,則操作會因發生錯誤而失敗。優化程式會忽略不可用索引。如果 sql 語句效能的好壞取決於已標記為不可用的索引,則只有重建索引才能改善效能。    

無效 pl/sql 物件:可通過查詢資料字典檢視 pl/sql 物件的當前狀態。

可使用以下命令列查詢到無效 pl/sql 物件:

select object_name, object_type from dba_objects

where status = 'invalid';

預設情況下,每 24 小時檢查一次「所有者的無效物件計數」度量。如果乙個所有者的物件數超過兩個,就會發出預警。

如果查詢到 invalid 狀態的 pl/sql 物件,需要回答的第乙個問題是「此物件曾經是 valid 的嗎?」應用程式開發人員常常會忘記清除不起作用的**。如果 pl/sql 物件因**錯誤而無效,則除了糾正該錯誤之外,沒有什麼別的方法。如果該過程在過去曾經有效,最近才變為無效,則可選擇以下兩種方法解決這個問題:

1.不做任何處理。如果需要,大多數 pl/sql 物件在呼叫時會自動重新編譯。使用者在物件重新編譯時會經歷短暫的延遲。(大多數情況下,這種延遲不十分明顯。)

2.手動重新編譯無效物件。

使用 enterprise manager 或通過 sql 命令可手動重新編譯無效的 pl/sql 物件

alter procedure hr.add_job_history compile;    

手動重新編譯 pl/sql 資料報,需要執行以下兩個步驟:

alter package hr.maintainemp compile;

alter package hr.maintainemp compile body;  

不可用索引:可通過查詢 dba_indexes 資料字典檢視查詢無效索引:

select index_name, table_name from dba_indexes

where status ='unusable';

對於分割槽索引,狀態儲存在 dba_ind_partitions 檢視中。

通過重建不可用索引來重算指標,可使不可用索引變為有效。重建不可用索引會在新位置重新建立索引,然後會刪除不可用索引。

使用 enterprise manager 或通過 sql 命令可完成此操作:

alter index hr.emp_empid_pk rebuild;

alter index hr.emp_empid_pk rebuild online;

alter index hr.email rebuild tablespace users;

如果省略了 tablespace 子句,則在曾經存在的相同表空間中重建索引。

使用 rebuild online 子句,使用者可以在重建時繼續更新索引表。(如果不使用 online 關鍵字,使用者必須等待重建完成後才能對受影響的表執行 dml。如果索引不可用,即使使用了 online 關鍵字,也不會在重建過程中使用該索引。)

enterprise manager 使用「reorganize(重組)」操作修復 unusable 索引。

注:重建索引時需要有可用於重建的空閒空間。請在嘗試重建前驗證是否有足夠的空間。enterprise manager 會自動檢查空間要求。

重建ORACLE資料庫索引

declare str varchar2 400 begin 重建oracle索引 for tmp idx in select tablespace name,owner,table name,index name from all indexes where owner hnacms and te...

Oracle資料庫和MySQL資料庫的不同之處

1 體積不同。oracle它體積比較龐大,一般是用來開發大型應用 例如分布式 的。而mysql的體積相對來說比較小,較之oracle更容易安裝 維護以及管理,操作也簡單,最重要的是它是三個中唯一乙個開源資料庫,但目前也屬於oracle公司的產品了。2 容量不同。oracle容量無限,根據配置決定 而...

Oracle如何批量重建資料庫索引

查詢資料庫索引的方法 select from user indexes 由此我們可以查到該資料庫下面的所有索引資訊,然後批量生成sql重建語句。sql的索引重建語句如下 alter index pk tf t spv testindex rebuild 批量生成的方法是首先將查詢的資料庫index ...