當前位置:成語大全網 - 新華字典 - 如何從表空間中“刪除”數據文件

如何從表空間中“刪除”數據文件

存在兩種情況可能需要從表空間中“移走”數據文件。

1. 妳不小心給壹個表空間增加了壹個數據文件,或者妳把文件大小設得過大,所以想把它刪掉。

2. 妳正在進行恢復,因為丟失了壹個數據文件所以不能啟動數據庫。

本文主要處理第壹種情況,有別的文章來講述由於丟失數據文件而不能使用數據庫的恢復問題。

在我們詳細介紹之前,我們必須說清楚壹點: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可以重建的時候來剔除這個不正確的文件。