表空間中有資料也可以壓縮表空間(資料檔案)大小
表空間中有資料也可以resize表空間(資料檔案)的大小,但是前提要在段級別進行段級別的壓縮。
下面用實驗來驗證這個觀點
先了解一下表空間、資料檔案和段的關係。
表空間和段是邏輯上的概念,一個表空間(tablespace)由一個或者多個段(segment)組成;而表空間所對應的物理物件是資料檔案(datafile)。
oracle中,段和表空間可以自動增長,但是不能自動收縮;要想收縮必須要手動完成。
順序是 壓縮段--->壓縮表空間(也就是壓縮資料檔案)
1.建立表空間t6
conn / as sysdba
SQL> create tablespace t6 datafile '/u01/app/oracle/oradata/orcl/t6.dbf' size 5m autoextend on next 5m;
2.在表空間t6上建立測試表ttt
conn scott/tiger
SQL> create table ttt tablespace t6 as select * from emp;
檢視資料檔案t6.dbf的大小
-rw-r----- 1 oracle oinstall 5.1M 05-13 16:27 t6.dbf
3.向表ttt中查資料,要多次執行插入資料
insert into ttt select * from ttt;
隨著資料的插入,資料檔案t6.dbf在不斷增長
-rw-r----- 1 oracle oinstall 11M 05-13 16:29 t6.dbf
-rw-r----- 1 oracle oinstall 21M 05-13 16:31 t6.dbf
4.下面刪除部分資料,讓ttt所在段有空閒空間,為壓縮段做準備;因為資料檔案由段組成,所以壓縮段後才能壓縮資料檔案。
delete ttt where rownum<1000;
SQL> delete ttt where EMPNO=7788;
SQL> delete ttt where EMPNO=7369;
SQL> delete ttt where EMPNO=7499;
SQL> delete ttt where EMPNO=7934;
SQL> select count(*) from ttt;
COUNT(*)
----------
326962
SQL> commit;
順序是 壓縮段--->壓縮表空間(也就是壓縮資料檔案)
刪除後段就出現碎片了,也就是有很多不連續的空閒空間;下面進行段級別壓縮;
SQL> alter table ttt shrink space; //壓縮碎片
SQL> alter table ttt deallocate unused; //收回段中嶄新的沒有使用的部分(也就是高水位以上的部分)
壓縮表空間(資料檔案)
SQL> alter database datafile '/u01/app/oracle/oradata/orcl/t6.dbf' resize 15m;
Database altered.
檢視資料檔案t6.dbf的大小,注意原來是21m
-rw-r----- 1 oracle oinstall 16M 05-13 17:14 t6.dbf
還想再壓縮
SQL> alter database datafile '/u01/app/oracle/oradata/orcl/t6.dbf' resize 10m;
alter database datafile '/u01/app/oracle/oradata/orcl/t6.dbf' resize 10m
*
ERROR at line 1:
ORA-03297: file contains used data beyond requested RESIZE value
ORA-03297:檔案包含的資料超出了要求改變尺寸值,所以不能再壓縮了。
到這裡,實驗結束。
結論:表空間中由資料也可以進行壓縮,不過前提是先壓縮段的大小!
實驗中,想到了alter table move跟shrink space的區別,具體內容可以參考這篇部落格
http://hi.baidu.com/kywinder/blog/item/f96e62d4aa69c82306088b6f.html
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28371090/viewspace-1183957/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 檢視Oracle資料庫表空間大小,是否需要增加表空間的資料檔案Oracle資料庫
- oracle 回收表空間的資料檔案大小Oracle
- 表空間(資料檔案shrink)收縮示例
- Oracle資料庫表空間的資料檔案大小上限。Oracle資料庫
- 如何檢視Oracle資料庫表空間大小(空閒、已使用),是否要增加表空間的資料檔案...Oracle資料庫
- MySQL innodb共享表空間新增表空間資料檔案方法MySql
- Oracle 表空間與資料檔案Oracle
- 表空間和資料檔案管理
- oracle 資料檔案表空間管理Oracle
- 移動資料檔案、系統表空間檔案、臨時表空間檔案
- 表空間和資料檔案的管理
- oracle 表空間 資料檔案 筆記Oracle筆記
- 資料檔案,表空間的移動
- 表空間資料檔案故障處理
- 線上遷移表空間資料檔案
- Oracle 表空間資料檔案遷移Oracle
- 表空間新增資料檔案的疑惑
- Oracle案例11——Oracle表空間資料庫檔案收縮Oracle資料庫
- 表空間&資料檔案和控制檔案(zt)
- oracle 普通表空間資料檔案壞塊Oracle
- 誤刪oracle資料庫表空間檔案Oracle資料庫
- 重新命名資料檔案和表空間
- InnoDB資料表空間檔案平滑遷移
- 錯誤新增表空間的資料檔案
- PostgreSQL:表空間-->資料庫-->表SQL資料庫
- Sqlserver delete表部分資料釋放資料檔案空間SQLServerdelete
- 測試表的空間壓縮與表空間的關係
- Oracle臨時表空間檢視、新增臨時表空間資料檔案、修改預設臨時表空間 方法!Oracle
- 達夢資料庫表空間等空間大小查詢方法總結資料庫
- MySQL InnoDB系統表空間資料檔案配置MySql
- ORACLE表空間、資料檔案離線問題Oracle
- oracle基礎管理——表空間和資料檔案Oracle
- (個人)Oracle 表空間資料檔案遷移(轉)Oracle
- oracle誤刪除表空間的資料檔案Oracle
- 表空間online移動資料檔案
- rman恢復資料檔案 恢復表空間
- 分析表空間空閒率並收縮表空間
- 2.5.9 在資料庫建立期間支援大檔案表空間資料庫