您好,登錄后才能下訂單哦!
--1、創建測試表
create table cux.cux_test_data as
select * from GL_JE_HEADERS;
--2、查看數據條數
select count(1) from cux.cux_test_data;
--3、查看區塊大小
SELECT segment_name
,extents
,blocks
,initial_extent
FROM dba_segments
WHERE segment_name = 'CUX_TEST_DATA';
--4、刪除表,采用truncate方式
truncate table cux.cux_test_data;
--查看數據塊大小
SELECT segment_name
,extents
,blocks
,initial_extent
FROM dba_segments
WHERE segment_name = 'CUX_TEST_DATA';
由此可見truncate會清除表所占數據塊的大小;
--5、刪除表,采用delete方式
首先對測試表進行重新插入操作,查得數據塊大小如下:
執行刪除操作:
delete from cux.cux_test_data;
再次查詢表所占數據塊大小如下:
可看出,所占數據塊并沒有變動;
--當delete完數據之后,再往測試表中插入100萬條數據,再次查詢數據塊大小如下:
發現跟刪除前一樣,也就是說當delete相關的數據之后,再插入數據如果比刪之前的數據小,則表空間分布不會變;當插入的數據比刪之前多時,才會增加數據塊大小;
--6、采用SHRINK和MOVE方式去收縮表空間
ALTER TABLE cux.cux_test_data MOVE; --降低水位線,釋放表空間
注意:alter table move命令可以釋放空間,該操作期間會鎖表;
而且會導致索引失效,如果該表有索引,還需要進行索引重建操作,重建索引腳本如下:
ALTER INDEX XXX REBUILD ONLINE; --重建索引
alter table cux.cux_test_data enable row movement; --啟用行遷移
alter table cux.cux_test_data shrink;--降低水位線
上述兩步種方式收縮完之后,表空間已釋放
結論:
1、TRUNCATE刪除表會直接釋放表空間;
2、DELETE刪除表不會釋放表空間,若要釋放,可采用SHRINK和MOVE方式進行收縮。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。