move 與shrink區別
shrink和move表空間的區別
alter table xxx shrink space 和 alter table xxx move
move命令是將數據從原來的段移到目標段的命令。
[move命令]
SQL> alter table emp move;
ORA-01652: unable to extend temp segment by 8 in tablespace AUTOSEG_TST
AUTOSEG_TST表空間沒有足夠的空閒空間。
SQL> select f.tablespace_name,d.file_name,f.bytes/1024 KBytes,f.blocks,d.autoextensible
from dba_free_space f,dba_data_files d,dba_tables t
where f.tablespace_name = d.tablespace_name
and f.tablespace_name = t.tablespace_name
and t.owner='SCOTT' and t.table_name='EMP';
TABLESPACE_NAME FILE_NAME KBYTES BLOCKS AUTOEXT
--------------- ---------------------------------------- ------- ------- -------
AUTOSEG_TST /export/home/ora10g/oradata/AUTOSEG1.DBF 64 8 NO
[shrink命令]
即使對象所在表空間幾乎沒有空閒空間,shrink命令也能執行。
SQL> alter table emp shrink space;
Table altered.
# 差異點4. 不需要重建index
[move命令]
table具有主鍵index的時候,如果使用move命令就必須重建index。
SQL> alter table dept move;
Table altered.
SQL> select owner,index_name,status from dba_indexes where table_owner='SCOTT'
and table_name='DEPT';
OWNER INDEX_NAME STATUS
----- ---------- --------
SCOTT PK_DEPT UNUSABLE ←(不能使用index)
SQL> select /*+ index(dept pk_dept) */ * from dept where rownum=1;
ORA-01502: index 'SCOTT.PK_DEPT' or partition of such index is in unusable state
執行move命令之後無法使用index,所以無法利用index查找。要解決這個問題讓index恢復可以使用的狀態,必須對index進行rebuild。
SQL> alter index pk_dept rebuild;
Index altered.
SQL> select /*+ index(dept pk_dept) */ * from dept where rownum=1;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
[shirnk命令]
執行shrink命令的時候就不需要rebuild index。
SQL> alter table dept shrink space;
Table altered.
SQL> select /*+ index(dept pk_dept) */ * from dept where rownum=1;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
SQL> select owner,index_name,status from dba_indexes where table_owner='SCOTT'
and table_name='DEPT';
OWNER INDEX_NAME STATUS
----- ---------- --------
SCOTT PK_DEPT VALID ←(index可以使用)
# 差異點5. cascade選項
前面用shrink命令讓dept表縮小,cascade命令會讓相關的pk_dept索引也同時縮小。
[shrink命令 -沒有選項-]
--dept表shrink之前
SQL> select owner,segment_name,bytes,blocks,extents from dba_segments
where segment_name = 'PK_DEPT';
OWNER SEGMENT_NAME BYTES BLOCKS EXTENTS
----- ------------ ---------- ---------- ----------
SCOTT PK_DEPT 18874368 2304 33
SQL> alter table dept shrink space;
Table altered.
--dept表shrink之後
SQL> select owner,segment_name,bytes,blocks,extents from dba_segments
where segment_name = 'PK_DEPT';
OWNER SEGMENT_NAME BYTES BLOCKS EXTENTS
----- ------------ ---------- ---------- ----------
SCOTT PK_DEPT 18874368 2304 33
大家可以看到相關的pk_dept索引縮小了。
結論
我們已經針對Oracle 10g新功能shrink命令進行兩次檢驗,主要都是介紹shrink命令的優點,下面追加相關限制事項。
1.無法解除行遷移
2.必須是local管理的自動段管理
3.不可以是下面的段:
-集羣(cluster)、集羣化表
-包含long列的物件
-LOB段
-包含函數索引(function index)的表
在我們的檢驗環境下,move命令的執行時間很短。所以,還是根據情況選擇不同命令使用會比較好。這次就介紹到這裏。
oracle 10g 關於收縮shrink
1、在10G 以前收縮表空間是用:
1.exp/imp
2.alter table xxx move
2、10G後用shrink表空間
表空間中支持自動段空間管理 (ASSM), 否則會報 ORA-10635: Invalid segment or tablespace type
適用表,索引,大對象,IOT,物化視圖
必須開啓行遷移功能。
alter table tbname enable row movement shrink
保持HWM
alter table tbname shrink space compact;
回縮表與HWM
alter table tbname shrink space;
回縮表與相關索引
alter table tbname shrink space cascade;
回縮索引
alter index idxname shrink space;
相關限制:
1)、cluster中的表。
2)、有long類型的表。
3)、有on_commit物化視圖的表。
4)、有基於rowid物化視圖的表。
5)、大對象(LOB)索引。
alter table xxx shrink space 和 alter table xxx move
move命令是將數據從原來的段移到目標段的命令。
[move命令]
SQL> alter table emp move;
ORA-01652: unable to extend temp segment by 8 in tablespace AUTOSEG_TST
AUTOSEG_TST表空間沒有足夠的空閒空間。
SQL> select f.tablespace_name,d.file_name,f.bytes/1024 KBytes,f.blocks,d.autoextensible
from dba_free_space f,dba_data_files d,dba_tables t
where f.tablespace_name = d.tablespace_name
and f.tablespace_name = t.tablespace_name
and t.owner='SCOTT' and t.table_name='EMP';
TABLESPACE_NAME FILE_NAME KBYTES BLOCKS AUTOEXT
--------------- ---------------------------------------- ------- ------- -------
AUTOSEG_TST /export/home/ora10g/oradata/AUTOSEG1.DBF 64 8 NO
[shrink命令]
即使對象所在表空間幾乎沒有空閒空間,shrink命令也能執行。
SQL> alter table emp shrink space;
Table altered.
# 差異點4. 不需要重建index
[move命令]
table具有主鍵index的時候,如果使用move命令就必須重建index。
SQL> alter table dept move;
Table altered.
SQL> select owner,index_name,status from dba_indexes where table_owner='SCOTT'
and table_name='DEPT';
OWNER INDEX_NAME STATUS
----- ---------- --------
SCOTT PK_DEPT UNUSABLE ←(不能使用index)
SQL> select /*+ index(dept pk_dept) */ * from dept where rownum=1;
ORA-01502: index 'SCOTT.PK_DEPT' or partition of such index is in unusable state
執行move命令之後無法使用index,所以無法利用index查找。要解決這個問題讓index恢復可以使用的狀態,必須對index進行rebuild。
SQL> alter index pk_dept rebuild;
Index altered.
SQL> select /*+ index(dept pk_dept) */ * from dept where rownum=1;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
[shirnk命令]
執行shrink命令的時候就不需要rebuild index。
SQL> alter table dept shrink space;
Table altered.
SQL> select /*+ index(dept pk_dept) */ * from dept where rownum=1;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
SQL> select owner,index_name,status from dba_indexes where table_owner='SCOTT'
and table_name='DEPT';
OWNER INDEX_NAME STATUS
----- ---------- --------
SCOTT PK_DEPT VALID ←(index可以使用)
# 差異點5. cascade選項
前面用shrink命令讓dept表縮小,cascade命令會讓相關的pk_dept索引也同時縮小。
[shrink命令 -沒有選項-]
--dept表shrink之前
SQL> select owner,segment_name,bytes,blocks,extents from dba_segments
where segment_name = 'PK_DEPT';
OWNER SEGMENT_NAME BYTES BLOCKS EXTENTS
----- ------------ ---------- ---------- ----------
SCOTT PK_DEPT 18874368 2304 33
SQL> alter table dept shrink space;
Table altered.
--dept表shrink之後
SQL> select owner,segment_name,bytes,blocks,extents from dba_segments
where segment_name = 'PK_DEPT';
OWNER SEGMENT_NAME BYTES BLOCKS EXTENTS
----- ------------ ---------- ---------- ----------
SCOTT PK_DEPT 18874368 2304 33
大家可以看到相關的pk_dept索引縮小了。
結論
我們已經針對Oracle 10g新功能shrink命令進行兩次檢驗,主要都是介紹shrink命令的優點,下面追加相關限制事項。
1.無法解除行遷移
2.必須是local管理的自動段管理
3.不可以是下面的段:
-集羣(cluster)、集羣化表
-包含long列的物件
-LOB段
-包含函數索引(function index)的表
在我們的檢驗環境下,move命令的執行時間很短。所以,還是根據情況選擇不同命令使用會比較好。這次就介紹到這裏。
oracle 10g 關於收縮shrink
1、在10G 以前收縮表空間是用:
1.exp/imp
2.alter table xxx move
2、10G後用shrink表空間
表空間中支持自動段空間管理 (ASSM), 否則會報 ORA-10635: Invalid segment or tablespace type
適用表,索引,大對象,IOT,物化視圖
必須開啓行遷移功能。
alter table tbname enable row movement shrink
保持HWM
alter table tbname shrink space compact;
回縮表與HWM
alter table tbname shrink space;
回縮表與相關索引
alter table tbname shrink space cascade;
回縮索引
alter index idxname shrink space;
相關限制:
1)、cluster中的表。
2)、有long類型的表。
3)、有on_commit物化視圖的表。
4)、有基於rowid物化視圖的表。
5)、大對象(LOB)索引。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.