[Oracle] Shrink space & Table move比較
本實驗是對兩個一樣的table,測試shrink space 和 table move釋放了多少空間,以及對index status的影響.
1.新建了兩個一樣的table tt5,tt7
SQL> select (select count(*) from tt5) tt5_count,(select count(*) from tt7) tt7_count from dual;
TT5_COUNT TT7_COUNT
---------- ----------
2619392 2619392
SQL> select segment_name,bytes from user_segments where segment_name in('TT5','TT7');
SEGMENT_NAME BYTES
-------------------- ----------
TT5 301989888
TT7 301989888
2.delete 一定量的資料
SQL> select (select count(*) from tt5 where object_id>25000) delcount,(select count(*) from tt7 where object_id>25000) delcount from dual;
DELCOUNT DELCOUNT
---------- ----------
1393408 1393408
SQL> delete from tt5 where object_id>25000;
1393408 rows deleted.
SQL> delete from tt7 where object_id>25000;
1393408 rows deleted.
SQL> commit;
Commit complete.
SQL> select segment_name,bytes from user_segments where segment_name in('TT5','TT7');
SEGMENT_NAME BYTES
-------------------- ----------
TT5 301989888
TT7 301989888
SQL> select (select count(*) from tt5) tt5_count,(select count(*) from tt7) tt7_count from dual;
TT5_COUNT TT7_COUNT
---------- ----------
1225984 1225984
tt5,tt7 的segment大小沒有變化
4.對tt5,tt7分別進行table move,shrink space
SQL> alter table tt5 move;
Table altered.
SQL> alter table tt7 shrink space;
alter table tt7 shrink space
*
ERROR at line 1:
ORA-10636: ROW MOVEMENT is not enabled
SQL> alter table tt7 enable row movement;
Table altered.
SQL> alter table tt7 shrink space;
Table altered.
SQL> select segment_name,bytes from user_segments where segment_name in('TT5','TT7');
SEGMENT_NAME BYTES
-------------------- ----------
TT5 142606336
TT7 131530752
SQL> select index_name,status from user_indexes where table_name in('TT5','TT7');
INDEX_NAME STATUS
-------------------------------- ----------
TT5_INDEX UNUSABLE
TT7_INDEX VALID
上面可以看出shrink space比table move更加縮小空間(差距很小),table move會將index status置為unusable
5.tt7 disable row movement
SQL> alter table tt7 disable row movement;
Table altered.
6.對tt7進行move後,tt5,tt7兩個table的大小一樣了。為啥shrink space&table move不一樣呢,奇怪...
SQL> alter table tt7 move;
Table altered.
SQL> select segment_name,bytes from user_segments where segment_name in('TT5','TT7');
SEGMENT_NAME BYTES
-------------------- ----------
TT5 142606336
TT7 142606336
7.重新rebuild index
SQL> select index_name,status from user_indexes where table_name in('TT5','TT7');
INDEX_NAME STATUS
----------------------- ----------------
TT5_INDEX UNUSABLE
TT7_INDEX UNUSABLE
SQL> alter index tt5_index rebuild;
Index altered.
SQL> alter index tt7_index rebuild;
Index altered.
SQL> select index_name,status from user_indexes where table_name in('TT5','TT7');
INDEX_NAME STATUS
--------------------- ----------------
TT5_INDEX VALID
TT7_INDEX VALID
1.新建了兩個一樣的table tt5,tt7
SQL> select (select count(*) from tt5) tt5_count,(select count(*) from tt7) tt7_count from dual;
TT5_COUNT TT7_COUNT
---------- ----------
2619392 2619392
SQL> select segment_name,bytes from user_segments where segment_name in('TT5','TT7');
SEGMENT_NAME BYTES
-------------------- ----------
TT5 301989888
TT7 301989888
2.delete 一定量的資料
SQL> select (select count(*) from tt5 where object_id>25000) delcount,(select count(*) from tt7 where object_id>25000) delcount from dual;
DELCOUNT DELCOUNT
---------- ----------
1393408 1393408
SQL> delete from tt5 where object_id>25000;
1393408 rows deleted.
SQL> delete from tt7 where object_id>25000;
1393408 rows deleted.
SQL> commit;
Commit complete.
SQL> select segment_name,bytes from user_segments where segment_name in('TT5','TT7');
SEGMENT_NAME BYTES
-------------------- ----------
TT5 301989888
TT7 301989888
SQL> select (select count(*) from tt5) tt5_count,(select count(*) from tt7) tt7_count from dual;
TT5_COUNT TT7_COUNT
---------- ----------
1225984 1225984
tt5,tt7 的segment大小沒有變化
4.對tt5,tt7分別進行table move,shrink space
SQL> alter table tt5 move;
Table altered.
SQL> alter table tt7 shrink space;
alter table tt7 shrink space
*
ERROR at line 1:
ORA-10636: ROW MOVEMENT is not enabled
SQL> alter table tt7 enable row movement;
Table altered.
SQL> alter table tt7 shrink space;
Table altered.
SQL> select segment_name,bytes from user_segments where segment_name in('TT5','TT7');
SEGMENT_NAME BYTES
-------------------- ----------
TT5 142606336
TT7 131530752
SQL> select index_name,status from user_indexes where table_name in('TT5','TT7');
INDEX_NAME STATUS
-------------------------------- ----------
TT5_INDEX UNUSABLE
TT7_INDEX VALID
上面可以看出shrink space比table move更加縮小空間(差距很小),table move會將index status置為unusable
5.tt7 disable row movement
SQL> alter table tt7 disable row movement;
Table altered.
6.對tt7進行move後,tt5,tt7兩個table的大小一樣了。為啥shrink space&table move不一樣呢,奇怪...
SQL> alter table tt7 move;
Table altered.
SQL> select segment_name,bytes from user_segments where segment_name in('TT5','TT7');
SEGMENT_NAME BYTES
-------------------- ----------
TT5 142606336
TT7 142606336
7.重新rebuild index
SQL> select index_name,status from user_indexes where table_name in('TT5','TT7');
INDEX_NAME STATUS
----------------------- ----------------
TT5_INDEX UNUSABLE
TT7_INDEX UNUSABLE
SQL> alter index tt5_index rebuild;
Index altered.
SQL> alter index tt7_index rebuild;
Index altered.
SQL> select index_name,status from user_indexes where table_name in('TT5','TT7');
INDEX_NAME STATUS
--------------------- ----------------
TT5_INDEX VALID
TT7_INDEX VALID
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24237320/viewspace-2055438/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ALTER TABLE MOVE | SHRINK SPACE區別
- Oracle 11g alter table move與shrink spaceOracle
- ALTER TABLE MOVE和SHRINK SPACE區別
- alter table move 與shrink space的區別
- alter table move跟shrink space的區別
- alter table move 和 alter table shrink space的區別
- alter table move跟shrink space的區別(轉)
- 【轉】Oracle:MOVE與SHRINK命令相比較Oracle
- Oracle 10g Shrink Table - Shrink Space 收縮空間Oracle 10g
- table move 與 shrink 的區別
- oracle 10g__alter table shrink space compactOracle 10g
- Oracle IZ0-053 Q277(Table shrink space)Oracle
- oracle shrink tableOracle
- Oracle中shrink space命令詳解Oracle
- Oracle move和shrink釋放高水位空間Oracle
- oracle10g shrink space 降低HWMOracle
- Oracle ASM Free Space TableOracleASM
- oracle10g_alter table shrink space_compact_cascade回收空間測試(一)Oracle
- Oracle 10g Shrink Table 詳解Oracle 10g
- shrink space的最佳實踐
- Oracle中shrink space命令詳解[轉]--還示測試Oracle
- ORACLE的Copy命令和create table,insert into的比較Oracle
- 比較兩個table是否相同
- 7 、shrink table and its dependent segments
- Oracle OCP 1Z0 053 Q96(Shrink Space Compact)Oracle
- 【TEMPORARY TABLE】Oracle兩種臨時表型別功能特點比較Oracle型別
- alter table table_name move ; 在自身表空間move是如何操作的?
- oracle shrinkOracle
- How to adjust the high watermark in ORACLE 10g – ALTER TABLE SHRINKOracle 10g
- Oracle date 型別比較和String比較Oracle型別
- 測試alter table shrink space compact cascade及學習user_tables相關列的含義
- oracle 比較日期相等Oracle
- oracle sql日期比較:OracleSQL
- [Oracle] minus 和 not exists比較Oracle
- ORACLE 中IN和EXISTS比較Oracle
- 頑固TABLEのtable-layout/white-space
- Oracle 12C 新特性之move (非分割槽表)table onlineOracle
- ORACLE和MSSQL中行鎖比較OracleSQL