在我們詳細介紹之前,我們必須說清楚一點:oracle不提供如刪除表、檢視一樣刪除資料檔案的方法,資料檔案是表空間的一部分,所以不能「移走」表空間。
一、使用offline資料檔案的方法
非歸檔模式使用:alter database datafile '...' offline drop;
歸檔模式使用: alter database datafile '...' offline;
說明:1) 以上命令只是將該資料檔案offline,而不是在資料庫中刪除資料檔案。該資料檔案的資訊在控制檔案種仍存在。查詢v$datafile,仍顯示該檔案。
2) 歸檔模式下offline和offline drop效果是一樣的
3) offline後,存在此datafile上的物件將不能訪問
4) noarchivelog模式下,只要online redo日誌沒有被重寫,可以對這個檔案recover後進行online操作
實際使用案例:
直接刪除資料檔案後無法進入系統的解決方案
正常情況下,刪除表空間的正確方法為:
drop tablespace tablespace_name including contents and datafiles;
如果沒有通過以上命令刪除而直接刪除了資料檔案,將導致資料庫無法開啟。
如果直接刪除了資料檔案
普通使用者登入時,則報錯:
ora-01033: oracle initialization or shutdown in progress
sys使用者可以正常登入
但進行操作時(select count(1) from user_tables),則會報錯:
ora-01219: 資料庫未開啟: 僅允許在固定表/檢視中查詢
如果執行命令alter database open以開啟資料庫時,又報如下錯:
ora-01157: 無法標識/鎖定資料檔案 12 - 請參閱 dbwr 跟蹤檔案
ora-01110: 資料檔案 12: 'e:/oracle/product/10.2.0/oradata/orcl/tstest001.dbf'
說明資料庫沒找到這個資料檔案
因為資料檔案在沒有被offline的情況下物理刪除了,導致oracle的資料不一致,因此啟動失敗.
通過以下方法即可解決
解決方法:
sqlplus sys/orcl@orcl as sysdba;
sql> alter database datafile 'e:/oracle/product/10.2.0/oradata/orcl/tstest001.dbf' offline drop;
sql> alter database open;
sql> drop tablespace ctbasedata;
二、oracle 10g r2開始,可以採用:alter tablespace tablespace_name drop datafile file_name;來刪除乙個空資料檔案,並且相應的資料字典資訊也會清除:
sys@orcl>select file_id,file_name,tablespace_name from dba_data_files
2 where tablespace_name='users';
file_id file_name tablespace_name
sys@orcl>alter tablespace users add datafile
tablespace altered.
sys@orcl>select file_id,file_name,tablespace_name from dba_data_files
2 where tablespace_name='users';
file_id file_name tablespace_name
sys@orcl>drop table test;
table dropped.
sys@orcl>create table test tablespace users
2 as
3 select * from dba_objects;
table created.
sys@orcl>select segment_name,file_id,blocks from dba_extents
2 where file_id=9;
segment_name file_id blocks
test 9 8
test 9 8
test 9 8
test 9 8
test 9 8
test 9 8
test 9 8
test 9 8
test 9 8
test 9 8
test 9 8
test 9 8
test 9 8
test 9 8
test 9 8
test 9 128
test 9 128
17 rows selected.
sys@orcl>alter table test move tablespace perfstat; --把錶移動到其它表空間
table altered.
sys@orcl>select segment_name,file_id,blocks from dba_extents
2 where file_id=9;
no rows selected
sys@orcl>alter tablespace users drop datafile
tablespace altered.
sys@orcl>select file_id,file_name,tablespace_name from dba_data_files
2 where tablespace_name='users';
file_id file_name tablespace_name
oracle刪除資料檔案
在我們詳細介紹之前,我們必須說清楚一點 oracle不提供如刪除表 檢視一樣刪除資料檔案的方法,資料檔案是表空間的一部分,所以不能 移走 表空間。一 使用offline資料檔案的方法 非歸檔模式使用 alter database datafile offline drop 歸檔模式使用 alter ...
Oracle 意外刪除資料檔案的恢復
文章 今天有客戶的資料庫意外被刪除了整個目錄中的資料檔案,作業系統級別的刪除,然而幸運的是這個資料庫沒有崩潰,仍然處於open狀態的時候,客戶就發現了問題,求助到我們,最終完整地恢復了所有資料檔案。在linux下大致重新演示一下恢復的過程,恢復的步驟與資料庫版本沒有太大關係,與作業系統的不同會有所不...
Oracle 刪除資料後釋放資料檔案所佔磁碟空間
oracle 刪除資料後釋放資料檔案所佔磁碟空間 測試的時候向資料庫中插入了大量的資料,測試完成後刪除了測試使用者以及其全部資料,但是資料檔案卻沒有縮小。經查閱資料之後發現這是 oracle 高水位 所致,那麼怎麼把這些資料檔案的大小降下來呢?解決辦法如下 概念 表空間的相關知識請見這裡,詳細的介紹...