清理用戶表空間

表空間由於平時測試被擴大了,磁盤滿了怎麼辦呢,兩個辦法,一個是收縮文件,一個辦法是重建:
重建表空間比較容易,但是USERS表空間重建要麻煩一點,會了這個,其他的表空間都不是問題(SYSTEM表空間除外)




1、首先在系統中將USERS表空間清理出來,遷移走所有的表和索引,假設目的表空間爲TEST,
   可以在SYS用戶登錄後運行如下SQL:
   Select 'alter table '||t.owner||'.'||t.table_name||' move tablespace TEST;' 
     From all_all_tables t where t.tablespace_name='USERS';


   Select  'alter index '||t.owner ||'.'|| index_name || ' rebuild tablespace test;' 
     From all_indexes t where t.tablespace_name ='USERS';


   運行生成的腳本,把所有對象遷移走。
回縮表空間:
實際上如果表空間的所有對象都遷移走了之後,我們可以使用命令直接回縮,命令如下:
alter database  datafile 'D:\DATA\orcl\USERS01.DBF' resize 1024m;


刪除/重建USERS表空間:
2、關閉數據庫
3、啓動數據庫到MOUNT狀態:
   alter   database   datafile   'D:\DATA\orcl\USERS01.DBF '   offline   drop;
   然後啓動數據庫:
   alter   database   open;
   修改默認表空間:
   alter database default tablespace test;
   脫機表空間users:
   alter tablespace users online;
   刪除表空間,順便把文件刪掉:
   DROP TABLESPACE users INCLUDING CONTENTS and datafiles;
   表空間刪掉了;
   可能遇到的問題:
   系統提示:
第 1 行出現錯誤:
ORA-00604: 遞歸 SQL 級別 1 出現錯誤
ORA-02429: 無法刪除用於強制唯一/主鍵的索引
問題在於沒有清空users表空間的所有對象,檢查一下第一步是否還有沒移走的對象。
4、重建表空間:
   create tablespace users datafile 'D:\DATA\orcl\USERS01.DBF' size 2048M autoextend off;
   設置默認表空間:
   alter database default tablespace users;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章