成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Oracle 10g Shrink Table和Shrink Space使用詳解

數據庫 Oracle
本文我們主要對Oracle 10g Shrink Table的用法進行了詳細的介紹,以及使用Shrink時的幾點注意事項,希望能夠對您有所幫助。

Oracle 10g Shrink Table的使用是本文我們主要要介紹的內容,我們知道,如果經常在表上執行DML操作,會造成數據庫塊中數據分布稀疏,浪費大量空間。同時也會影響全表掃描的性能,因為全表掃描需要訪問更多的數據塊。從Oracle 10g開始,表可以通過shrink來重組數據使數據分布更緊密,同時降低HWM釋放空閑數據塊。

segment shrink分為兩個階段:

1、數據重組(compact):通過一系列insert、delete操作,將數據盡量排列在段的前面。在這個過程中需要在表上加RX鎖,即只在需要移動的行上加鎖。由于涉及到rowid的改變,需要enable row movement.同時要disable基于rowid的trigger.這一過程對業務影響比較小。

2、HWM調整:第二階段是調整HWM位置,釋放空閑數據塊。此過程需要在表上加X鎖,會造成表上的所有DML語句阻塞。在業務特別繁忙的系統上可能造成比較大的影響。Shrink Space語句兩個階段都執行。Shrink Space compact只執行***個階段。

如果系統業務比較繁忙,可以先執行Shrink Space compact重組數據,然后在業務不忙的時候再執行Shrink Space降低HWM釋放空閑數據塊。shrink必須開啟行遷移功能。

alter table table_name enable row movement ;

注意:alter table XXX enable row movement語句會造成引用表XXX的對象(如存儲過程、包、視圖等)變為無效。執行完成后,***執行一下utlrp.sql來編譯無效的對象。

語法:

  1. alter table <table_name> shrink space [ <null> | compact | cascade ];  
  2. alter table <table_name> shrink space compcat; 

收縮表,相當于把塊中數據打結實了,但會保持high water mark;

alter table <tablespace_name> Shrink Space;

收縮表,降低 high water mark;

alter table <tablespace_name> Shrink Space cascade;

收縮表,降低 high water mark,并且相關索引也要收縮一下下。

alter index idxname Shrink Space;

回縮索引

1:普通表

Sql腳本,改腳本會生成相應的語句

  1. select'alter table '||table_name||' enable row movement;'||chr(10)||'alter table '||table_name||' shrink space;'||chr(10)from user_tables;  
  2. select'alter index '||index_name||' shrink space;'||chr(10)from user_indexes; 

2:分區表的處理

進行Shrink Space時 發生ORA-10631錯誤.Shrink Space有一些限制.

在表上建有函數索引(包括全文索引)會失敗。

Sql腳本,改腳本會生成相應的語句

  1. select 'alter table '||table_name||' enable row movement;'||chr(10)||'alter table '||table_name||' shrink space;'||chr(10) from user_tables where ;  
  2. select 'alter index '||index_name||' shrink space;'||chr(10) from user_indexes where uniqueness='NONUNIQUE' ;  
  3. select 'alter table '||segment_name||' modify subpartition '||partition_name||' shrink space;'||chr(10) from user_segments where segment_type='TABLE SUBPARTITION' '; 

Shrink的幾點問題:

1. shrink后index是否需要rebuild:因為shrink的操作也會改變行數據的rowid,那么,如果table上有index時,shrink table后index會不會變為UNUSABLE呢?

我們來看這樣的實驗,同樣構建my_objects的測試表:

  1. create table my_objects tablespace ASSM as select * from all_objects where rownum<20000;  
  2. create index i_my_objects on my_objects (object_id);  
  3. delete from my_objects where object_name like '%C%';  
  4. delete from my_objects where object_name like '%U%'; 

現在我們來shrink table my_objects:

  1. SQL> alter table my_objects enable row movement;  
  2. Table altered  
  3. SQL> alter table my_objects shrink space;  
  4. Table altered  
  5. SQL> select index_name,status from user_indexes where index_name='I_MY_OBJECTS';  
  6. INDEX_NAME STATUS  
  7. ------------------------------ --------  
  8. I_MY_OBJECTS VALID 

我們發現,table my_objects上的index的狀態為VALID,估計shrink在移動行數據時,也一起維護了index上相應行的數據rowid的信息。我們認為,這是對于move操作后需要rebuild index的改進。但是如果一個table上的index數量較多,我們知道,維護index的成本是比較高的,shrink過程中用來維護index的成本也會比較高。

2. shrink時對table的lock

在對table進行shrink時,會對table進行怎樣的鎖定呢?當我們對table MY_OBJECTS進行shrink操作時,查詢v$locked_objects視圖可以發現,table MY_OBJECTS上加了row-X (SX) 的lock:

  1. SQL>select OBJECT_ID, SESSION_ID,ORACLE_USERNAME,LOCKED_MODE from v$locked_objects;  
  2. OBJECT_ID SESSION_ID ORACLE_USERNAME LOCKED_MODE  
  3. ---------- ---------- ------------------ -----------  
  4. 55422 153 DLINGER 3  
  5. SQL> select object_id from user_objects where object_name = 'MY_OBJECTS';  
  6. OBJECT_ID  
  7. ----------  
  8. 55422 

那么,當table在進行shrink時,我們對table是可以進行DML操作的。

3.shrink對空間的要求

我們在前面討論了shrink的數據的移動機制,既然oracle是從后向前移動行數據,那么,shrink的操作就不會像move一樣,shrink不需要使用額外的空閑空間。

【編輯推薦】

  1. Oracle數據庫包的構造過程實例
  2. Oracle數據庫創建Schema的代碼示例
  3. ORACLE GOLDENGATE的主要組件詳解
  4. Python模擬Oracle的SQL/PLUS工具的實現方法
  5. Windows7安裝Oracle database lite 10g的錯誤解決
責任編輯:趙鵬 來源: 網易博客
相關推薦

2011-03-25 16:10:58

oraclenagios

2011-08-23 18:04:16

Oracle 10g數據泵

2010-04-14 16:09:51

Oracle 10g歸

2011-05-13 11:21:51

linuxoracle 10g安裝

2011-08-29 13:40:12

Oracle 10g創建表空間

2011-07-19 13:28:31

Oracle 10g

2010-04-29 15:50:35

2011-08-17 16:52:11

Oracle 10gLogmnr

2011-08-09 13:14:37

Oracle 10g數據庫閃回

2011-08-17 16:28:31

Windows SerOracle 10g

2009-11-19 10:32:41

Oracle 10g服

2010-03-30 19:31:25

Oracle 10g

2010-04-13 10:07:19

Oracle 10G

2011-08-30 15:57:15

Oracle 10gUNDO_RETENT

2011-07-27 14:22:41

Oracle 10g DBA賬戶

2011-08-17 13:49:08

Oracle 10g客PLSQL develop

2011-08-30 15:10:47

Tomcat 6.0Oracle 10g數據源連接測試

2010-09-17 09:39:31

Oracle 10g

2009-09-07 09:03:47

VMWare安裝Ora

2010-04-09 15:59:24

Oracle 10g
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一级毛片在线看 | 精品国产精品国产偷麻豆 | 91久久看片| av在线视 | 韩国精品在线观看 | 亚洲一区二区黄 | 亚洲欧美日韩在线 | 免费福利视频一区二区三区 | 国产精品久久久久久久久久久久 | 天天干免费视频 | 国产成人精品一区二区三区在线观看 | 欧美亚洲视频在线观看 | 欧美日本久久 | 中文字幕一区在线观看视频 | 久久免费精品 | 久草网在线视频 | 伊人精品一区二区三区 | 亚洲免费人成在线视频观看 | av片在线免费看 | 日韩在线国产 | 激情欧美一区二区三区中文字幕 | 国产精品成人一区二区三区夜夜夜 | 精品国产乱码久久久久久蜜臀 | 色婷婷影院 | 亚洲成人一二三 | 国产在线观 | 亚洲人成在线观看 | 亚洲国产一区在线 | 国产成人99 | 亚洲网在线 | 一级特黄色毛片 | 欧美日韩一区在线 | 国产日韩一区二区三区 | 成人精品福利 | 国产一级片一区二区三区 | 99热在线免费 | 午夜成人免费视频 | 国产一区二区三区久久久久久久久 | 色眯眯视频在线观看 | 久久影院一区 | 日韩中文字幕 |