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';