oracle 小議如何從表空間 刪除 資料檔案

楊奇龍發表於2010-04-14

Oracle不提供如刪除表。

檢視一樣刪除資料檔案的方法,資料檔案是表空間的一部分,所以不能“移走”表空間。

在對錶空間/資料檔案進行任何離線、刪除之前,首先對資料庫進行一個全備份。

如果資料檔案是所在表空間的唯一的資料檔案,你只要簡單地刪除表空間即可:

DROP TABLESPACE INCLUDING CONTENTS;

你可以執行下面的命令來查詢表空間包含多少資料檔案。

select file_name, tablespace_name

from dba_data_files

where tablespace_name ='';

DROP TABLESPACE命令從Oracle資料字典刪除表空間、資料檔案和表空間的內容。Oracle不會再訪問該表空間中的任何內容。物理地刪除檔案需要使用作業系統命令(Oracle從不物理地刪除檔案<注:本文是針對8i或者之前,9i可以使用including datafile選項來刪除物理檔案>),依賴你的作業系統平臺,有的作業系統需要Oracle完全關閉才才可以刪除(例如在WINDOWS NT 中需要關閉資料庫,停掉相應的服務,在有的情況下Oracle還可能持有檔案鎖)。

如果你的表空間有多個資料檔案,而你不需要表空間中的內容,或者你可以很容易重新生產表空間的內容,你可以使用DROP TABLESPACE INCLUDING CONTENTS;命令來從Oracle資料字典刪除表空間、資料檔案和表空間的內容。Oracle不會再訪問該表空間中的任何內容。然後重新建立表空間並重新匯入資料。

如果你的表空間有多個資料檔案,而你還需保留該表空間中的其它資料檔案中的內容,則你必須首先export出該表空間中的所有內容。為了確定表空間中包含那些內容,執行:

select owner,segment_name,segment_type

from dba_segments

where tablespace_name=''

export出你想保留的內容。如果export結束,你可以使用DROP TABLESPACE tablespace INCLUDING CONTENTS. 這樣永久刪除表空間的內容,使用作業系統命令物理刪除資料檔案,按所需資料檔案重新建立表空間,把資料import至表空間。

注意:

ALTER DATABASE DATAFILE OFFLINE DROP命令不能允許你刪除資料檔案,它的目的是離線該資料檔案以刪除表空間。如果在歸檔模式下,使用ALTER DATABASE DATAFILE OFFLINE DROP來代替OFFLINE DROP。一旦資料檔案離線,Oracle不會再訪問該資料檔案的內容,但它仍然是表空間的一部分。這個資料檔案在控制檔案中標記OFFLINE,在資料庫啟動時不會對它與控制檔案進行SCN的比較。在控制檔案中保留這個資料檔案的入口是方便以後的恢復。

如果你不想按照上述方法來刪除表空間,還有其它一些解決方法。

1.         如果你想刪除資料檔案的原因是因為分配了不合適的檔案大小,你可以考慮RESIZE命令。

2.         如果你不小心增加了一個資料檔案,而這個檔案還沒有分配空間,你可以使用

ALTER DATABASE DATAFILE RESIZE;命令使其小於5個 Oracle塊大小,如果資料檔案的大小小於這個,Oracle將不會進行擴充套件資料檔案。在以後,Oracle可以重建的時候來剔除這個不正確的檔案。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22664653/viewspace-659762/,如需轉載,請註明出處,否則將追究法律責任。

相關文章