1、表drop
(1)回收站
drop後的表被放在回收站(user_recyclebin)裏,而不是直接刪除掉。這樣,回收站裏的表信息就可以被恢復,或徹底清除。通過查詢回收站user_recyclebin獲取被刪除的表信息,如下:
SELECT * from user_recyclebin
若要徹底刪除表(不放入回收站),則使用語句:drop table <table_name> purge;
(2) 清除回收站裏的信息
清除指定表:purge table <table_name>;
清除當前用戶的回收站:purge recyclebin;
清除所有用戶的回收站:purge dba_recyclebin;
2、表truncate
Truncate不支持回滾,並且不能truncate一個帶有外鍵的表,如果要刪除首先要取消外鍵,然後再刪除。truncate table 後,有可能表空間仍沒有釋放,可以使用如下語句:
alter table "schema_name"."table_name" deallocate UNUSED KEEP 0;
注意如果不加KEEP 0的話,表空間是不會釋放的。
例如:
alter table "DEMO_TABLE" deallocate UNUSED KEEP 0;
或者:
TRUNCATE TABLE "DEMO_NAME" DROP(REUSE) STORAGE
才能釋放表空間。
例如:
truncate table test1 DROP STORAGE;
3、表空間相關
(1)表空間使用查看
使用DBA賬號登錄,用如下SQL查詢:
SELECT A.TABLESPACE_NAME,
FILENUM,
TOTAL "TOTAL (MB)",
F.FREE "FREE (MB)",
TO_CHAR(ROUND(FREE * 100 / TOTAL, 2), '990.00') "FREE%",
TO_CHAR(ROUND((TOTAL - FREE) * 100 / TOTAL, 2), '990.00') "USED%",
ROUND(MAXSIZES, 2) "MAX (MB)"
FROM (SELECT TABLESPACE_NAME,
COUNT(FILE_ID) FILENUM,
SUM(BYTES / (1024 * 1024)) TOTAL,
SUM(MAXBYTES) / 1024 / 1024 MAXSIZES
FROM DBA_DATA_FILES
GROUP BY TABLESPACE_NAME) A,
(SELECT TABLESPACE_NAME, ROUND(SUM(BYTES / (1024 * 1024))) FREE
FROM DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME) F
WHERE A.TABLESPACE_NAME = F.TABLESPACE_NAME
(2)查看一個表所佔的空間大小
SELECT bytes/1024/1024 ||'MB' TABLE_SIZE ,u.* FROM USER_SEGMENTS U WHERE U.SEGMENT_NAME='JK_TEST';
(3)查看一個表空間所佔的實際大小
SELECT SUM(BYTES) / 1024 / 1024 ||'MB' FROM USER_SEGMENTS U WHERE TABLESPACE_NAME = 'DATA01';
(4)查看一個表空間對應的數據文件
SELECT * FROM DBA_DATA_FILES D WHERE D.TABLESPACE_NAME = 'DATA01';