【實驗】兩種方法刪除表中的列與空間儲存釋放
1.構造一個包含114688行記錄的實驗用大表test_tab1
sec@ora10g> conn sec/sec
Connected.
sec@ora10g> create table test_tab1 as select * from emp;
Table created.
sec@ora10g> insert into test_tab1 select * from test_tab1;
14 rows created.
sec@ora10g> /
sec@ora10g> /
sec@ora10g> /
sec@ora10g> /
sec@ora10g> /
sec@ora10g> /
sec@ora10g> /
sec@ora10g> /
sec@ora10g> /
sec@ora10g> /
sec@ora10g> /
sec@ora10g> /
57344 rows created.
sec@ora10g> commit;
Commit complete.
sec@ora10g> select count(*) from test_tab1;
COUNT(*)
----------
114688
2.查詢測試表的空間分配情況
sec@ora10g> select extent_id,file_id,block_id,blocks from dba_extents where segment_name='TEST_TAB1' and wner='SEC';
EXTENT_ID FILE_ID BLOCK_ID BLOCKS
---------- ---------- ---------- ----------
0 5 177 8
1 5 185 8
2 5 193 8
3 5 201 8
4 5 209 8
5 5 217 8
6 5 225 8
7 5 233 8
8 5 241 8
9 5 249 8
10 5 257 8
11 5 265 8
12 5 273 8
13 5 281 8
14 5 289 8
15 5 297 8
16 5 393 128
17 5 521 128
18 5 649 128
19 5 777 128
20 5 905 128
21 rows selected.
3.刪除hiredate列,move表,驗證空間使用情況--結果:空間得到釋放
sec@ora10g> alter table test_tab1 drop column hiredate;
Table altered.
sec@ora10g> alter table test_tab1 move tablespace sec_d;
Table altered.
sec@ora10g> select extent_id,file_id,block_id,blocks from dba_extents where segment_name='TEST_TAB1' and wner='SEC';
EXTENT_ID FILE_ID BLOCK_ID BLOCKS
---------- ---------- ---------- ----------
0 5 305 8
1 5 313 8
2 5 321 8
3 5 329 8
4 5 337 8
5 5 345 8
6 5 353 8
7 5 361 8
8 5 369 8
9 5 377 8
10 5 385 8
11 5 1033 8
12 5 1041 8
13 5 1049 8
14 5 1057 8
15 5 1065 8
16 5 1161 128
17 5 1289 128
18 5 1417 128
19 5 1545 128
20 rows selected.
4.禁用多列,move表,驗證空間使用情況--結果:空間得到釋放
alter table test_tab1 set unused column comm;
alter table test_tab1 set unused column sal;
alter table test_tab1 set unused column mgr;
sec@ora10g> alter table test_tab1 move tablespace sec_d;
Table altered.
sec@ora10g> select extent_id,file_id,block_id,blocks from dba_extents where segment_name='TEST_TAB1' and wner='SEC';
EXTENT_ID FILE_ID BLOCK_ID BLOCKS
---------- ---------- ---------- ----------
0 5 177 8
1 5 185 8
2 5 193 8
3 5 201 8
4 5 209 8
5 5 217 8
6 5 225 8
7 5 233 8
8 5 241 8
9 5 249 8
10 5 257 8
11 5 265 8
12 5 273 8
13 5 281 8
14 5 289 8
15 5 297 8
16 5 393 128
17 5 521 128
18 5 649 128
19 rows selected.
5.將所置unused列drop掉,move表,驗證空間使用情況--結果:空間使用情況更沒有變化
sec@ora10g> alter table test_tab1 drop unused columns;
Table altered.
sec@ora10g> alter table test_tab1 move tablespace sec_d;
Table altered.
sec@ora10g> select extent_id,file_id,block_id,blocks from dba_extents where segment_name='TEST_TAB1' and wner='SEC';
EXTENT_ID FILE_ID BLOCK_ID BLOCKS
---------- ---------- ---------- ----------
0 5 305 8
1 5 313 8
2 5 321 8
3 5 329 8
4 5 337 8
5 5 345 8
6 5 353 8
7 5 361 8
8 5 369 8
9 5 377 8
10 5 385 8
11 5 777 8
12 5 785 8
13 5 793 8
14 5 801 8
15 5 809 8
16 5 905 128
17 5 1033 128
18 5 1161 128
19 rows selected.
6.小結
這個實驗列出了兩種drop列的方法,以及在move表後表的儲存空間的變化情況。
-- The End --
sec@ora10g> conn sec/sec
Connected.
sec@ora10g> create table test_tab1 as select * from emp;
Table created.
sec@ora10g> insert into test_tab1 select * from test_tab1;
14 rows created.
sec@ora10g> /
sec@ora10g> /
sec@ora10g> /
sec@ora10g> /
sec@ora10g> /
sec@ora10g> /
sec@ora10g> /
sec@ora10g> /
sec@ora10g> /
sec@ora10g> /
sec@ora10g> /
sec@ora10g> /
57344 rows created.
sec@ora10g> commit;
Commit complete.
sec@ora10g> select count(*) from test_tab1;
COUNT(*)
----------
114688
2.查詢測試表的空間分配情況
sec@ora10g> select extent_id,file_id,block_id,blocks from dba_extents where segment_name='TEST_TAB1' and wner='SEC';
EXTENT_ID FILE_ID BLOCK_ID BLOCKS
---------- ---------- ---------- ----------
0 5 177 8
1 5 185 8
2 5 193 8
3 5 201 8
4 5 209 8
5 5 217 8
6 5 225 8
7 5 233 8
8 5 241 8
9 5 249 8
10 5 257 8
11 5 265 8
12 5 273 8
13 5 281 8
14 5 289 8
15 5 297 8
16 5 393 128
17 5 521 128
18 5 649 128
19 5 777 128
20 5 905 128
21 rows selected.
3.刪除hiredate列,move表,驗證空間使用情況--結果:空間得到釋放
sec@ora10g> alter table test_tab1 drop column hiredate;
Table altered.
sec@ora10g> alter table test_tab1 move tablespace sec_d;
Table altered.
sec@ora10g> select extent_id,file_id,block_id,blocks from dba_extents where segment_name='TEST_TAB1' and wner='SEC';
EXTENT_ID FILE_ID BLOCK_ID BLOCKS
---------- ---------- ---------- ----------
0 5 305 8
1 5 313 8
2 5 321 8
3 5 329 8
4 5 337 8
5 5 345 8
6 5 353 8
7 5 361 8
8 5 369 8
9 5 377 8
10 5 385 8
11 5 1033 8
12 5 1041 8
13 5 1049 8
14 5 1057 8
15 5 1065 8
16 5 1161 128
17 5 1289 128
18 5 1417 128
19 5 1545 128
20 rows selected.
4.禁用多列,move表,驗證空間使用情況--結果:空間得到釋放
alter table test_tab1 set unused column comm;
alter table test_tab1 set unused column sal;
alter table test_tab1 set unused column mgr;
sec@ora10g> alter table test_tab1 move tablespace sec_d;
Table altered.
sec@ora10g> select extent_id,file_id,block_id,blocks from dba_extents where segment_name='TEST_TAB1' and wner='SEC';
EXTENT_ID FILE_ID BLOCK_ID BLOCKS
---------- ---------- ---------- ----------
0 5 177 8
1 5 185 8
2 5 193 8
3 5 201 8
4 5 209 8
5 5 217 8
6 5 225 8
7 5 233 8
8 5 241 8
9 5 249 8
10 5 257 8
11 5 265 8
12 5 273 8
13 5 281 8
14 5 289 8
15 5 297 8
16 5 393 128
17 5 521 128
18 5 649 128
19 rows selected.
5.將所置unused列drop掉,move表,驗證空間使用情況--結果:空間使用情況更沒有變化
sec@ora10g> alter table test_tab1 drop unused columns;
Table altered.
sec@ora10g> alter table test_tab1 move tablespace sec_d;
Table altered.
sec@ora10g> select extent_id,file_id,block_id,blocks from dba_extents where segment_name='TEST_TAB1' and wner='SEC';
EXTENT_ID FILE_ID BLOCK_ID BLOCKS
---------- ---------- ---------- ----------
0 5 305 8
1 5 313 8
2 5 321 8
3 5 329 8
4 5 337 8
5 5 345 8
6 5 353 8
7 5 361 8
8 5 369 8
9 5 377 8
10 5 385 8
11 5 777 8
12 5 785 8
13 5 793 8
14 5 801 8
15 5 809 8
16 5 905 128
17 5 1033 128
18 5 1161 128
19 rows selected.
6.小結
這個實驗列出了兩種drop列的方法,以及在move表後表的儲存空間的變化情況。
-- The End --
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/519536/viewspace-566641/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 禪道 - 儲存空間釋放
- OS 刪除temp表空間 而磁碟空間未釋放的解決方案
- oracle刪除(釋放)資料檔案/表空間流程Oracle
- Mysql InnoDB刪除資料後釋放磁碟空間的方法MySql
- MySQL 5.7的表刪除資料後的磁碟空間釋放MySql
- set unused 是否會釋放儲存空間
- 在儲存過程中建立表的兩種方法儲存過程
- RM刪除檔案空間釋放詳解
- Linux檔案刪除空間未釋放Linux
- hpux刪除檔案後空間不釋放UX
- 如何刪除 Mac 儲存空間的其他選項?Mac
- oracle 刪除表空間試驗面面觀Oracle
- 表在表空間中的儲存情況
- Mysql 刪除資料後為釋放物理空間MySql
- Linux 刪除檔案後空間不釋放Linux
- 解決linux下刪除檔案或oracle表空間後空間不釋放的問題LinuxOracle
- 刪除表空間和表空間包含的檔案
- 刪除正在使用的檔案,空間不釋放的問題
- Mac蘋果儲存空間的其他選項該如何刪除?Mac蘋果
- [待整理]oracle10g刪除(釋放)資料檔案/表空間流程Oracle
- delete不釋放表空間delete
- linux中如何解決檔案已刪除但空間不釋放的案例Linux
- 【儲存管理】表空間概念
- ORACLE表空間的建立修改刪除Oracle
- (轉載)刪除檔案後硬碟空間不釋放的問題硬碟
- Oracle 整理表碎片、釋放表的空間Oracle
- 刪除資料庫表空間資料庫
- Linux檔案刪除但空間不釋放問題篇Linux
- 處理Linux刪除檔案後空間未釋放的問題Linux
- 刪除檔案後,磁碟空間沒有釋放的處理記錄
- 【儲存管理】建立永久表空間
- innodb表空間儲存結構
- oracle級聯刪除使用者,刪除表空間Oracle
- db2刪除已經儲存的表儲存過程DB2儲存過程
- [DB2]表空間之DMS、自動儲存的DMS表空間DB2
- oracle建立臨時表空間和資料表空間以及刪除Oracle
- 臨時表空間的建立、刪除,設定預設臨時表空間
- Oracle 釋放過度使用的Undo表空間Oracle