查看一表所佔的block數目有多少,然後使用delete語句將表數據刪除,更新數據庫的統計信息,然後單看blocks,發現並沒有發生變化,這個就是意味着,數據沒有了,但是所佔的空間沒有返回來。
- SQL> select owner,table_name,tablespace_name,blocks from dba_tables where owner = 'SCOTT';
- OWNER TABLE_NAME TABLESPACE_NAME BLOCKS
- ---------- ---------- -------------------- ----------
- SCOTT DEPT USERS 5
- SCOTT EMP USERS 5
- SCOTT BONUS USERS 0
- SCOTT SALGRADE USERS 5
- SCOTT TEST1 USERS 0
- SCOTT TEST2 USERS 687
- 已選擇6行。
- SQL> delete test2;
- 已刪除114688行。
- SQL> select owner,table_name,tablespace_name,blocks from dba_tables where owner = 'SCOTT';
- OWNER TABLE_NAME TABLESPACE_NAME BLOCKS
- ---------- ---------- -------------------- ----------
- SCOTT DEPT USERS 5
- SCOTT EMP USERS 5
- SCOTT BONUS USERS 0
- SCOTT SALGRADE USERS 5
- SCOTT TEST1 USERS 0
- SCOTT TEST2 USERS 687
- 已選擇6行。
- SQL> select owner,table_name,tablespace_name,blocks from dba_tables where owner = 'SCOTT';
- OWNER TABLE_NAME TABLESPACE_NAME BLOCKS
- ---------- ---------- -------------------- ----------
- SCOTT DEPT USERS 5
- SCOTT EMP USERS 5
- SCOTT BONUS USERS 0
- SCOTT SALGRADE USERS 5
- SCOTT TEST1 USERS 0
- SCOTT TEST2 USERS 687
- 已選擇6行。
那麼,我們在使用truncate對錶進行操作,效果會是什麼樣的:
- SQL> truncate table test2;
- 表被截斷。
- SQL> select owner,table_name,tablespace_name,blocks from dba_tables where owner = 'SCOTT';
- OWNER TABLE_NAME TABLESPACE_NAME BLOCKS
- ---------- ---------- -------------------- ----------
- SCOTT DEPT USERS 5
- SCOTT EMP USERS 5
- SCOTT BONUS USERS 0
- SCOTT SALGRADE USERS 5
- SCOTT TEST1 USERS 0
- SCOTT TEST2 USERS 687
- 已選擇6行。
- SQL> select owner,table_name,tablespace_name,blocks from dba_tables where owner = 'SCOTT';
- OWNER TABLE_NAME TABLESPACE_NAME BLOCKS
- ---------- ---------- -------------------- ----------
- SCOTT DEPT USERS 5
- SCOTT EMP USERS 5
- SCOTT BONUS USERS 0
- SCOTT SALGRADE USERS 5
- SCOTT TEST1 USERS 0
- SCOTT TEST2 USERS 0
- 已選擇6行。
- SQL>
同樣的,在使用了truncate後,更新數據庫的統計信息,發現所佔空間爲0,說明高水位線降下來了。
Note:添加以下如何對數據庫進行統計信息的更新。
- SQL> ANALYZE TABLE scott.test2 ESTIMATE STATISTICS
- SQL> execute dbms_stats.GATHER_SCHEMA_STATS('SCOTT',DBMS_STATS.AUTO_SAMPLE_SIZE)