【實驗】兩種方法刪除表中的列與空間儲存釋放
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Mysql InnoDB刪除資料後釋放磁碟空間的方法MySql
- MySQL 5.7的表刪除資料後的磁碟空間釋放MySql
- Linux檔案刪除空間未釋放Linux
- 如何刪除 Mac 儲存空間的其他選項?Mac
- RM刪除檔案空間釋放詳解
- Tablespace表空間刪除
- [待整理]oracle10g刪除(釋放)資料檔案/表空間流程Oracle
- linux中如何解決檔案已刪除但空間不釋放的案例Linux
- Mac蘋果儲存空間的其他選項該如何刪除?Mac蘋果
- Linux檔案刪除但空間不釋放問題篇Linux
- 處理Linux刪除檔案後空間未釋放的問題Linux
- (轉載)刪除檔案後硬碟空間不釋放的問題硬碟
- 刪除臨時表空間組
- oracle級聯刪除使用者,刪除表空間Oracle
- innodb表空間儲存結構
- 小儲存容量手機有救了!Android 新歸檔功能可釋放 60% 儲存空間Android
- oracle建立臨時表空間和資料表空間以及刪除Oracle
- 刪除檔案後儲存空間容量沒有變化怎麼辦?
- 解決刪除檔案後 WSL2 磁碟空間不釋放的問題
- Synology群暉NAS儲存正確建立儲存池和儲存空間的方法
- SQLServer如何釋放tempdb臨時表空間SQLServer
- 鐵威馬NAS建立儲存空間的方法
- 如何釋放Mac空間?釋放Mac系統空間小技巧Mac
- 儲存刪除資料後恢復方法-適用netAPP儲存APP
- Win10如何刪除字型_win10刪除字型的兩種方法Win10
- MySQL防止delete命令刪除資料的兩種方法MySqldelete
- win10保留的儲存空間怎麼檢視_win10保留的儲存空間的檢視方法Win10
- C++ vector 釋放記憶體的兩種方法C++記憶體
- mssql sqlserver 批量刪除所有儲存過程的方法分享SQLServer儲存過程
- 兩種檢視錶空間使用情況的方法
- PHP從陣列中刪除元素的方法PHP陣列
- 表空間TSPITR恢復-實驗
- 【Oracle 恢復表空間】 實驗Oracle
- win10怎麼釋放空間_win10釋放磁碟空間的方法Win10
- iOS開發之tableView左滑刪除的兩種方法iOSView
- Win10系統管理磁碟儲存空間的方法Win10
- Linux 中刪除目錄的多種方法Linux
- Python 中刪除列表元素的三種方法Python
- 分享幾種清理“其他儲存”並在Mac上獲得更多可用空間的方法Mac