Oracle數據庫日常維護相關命令整理

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章