oracle刪除資料檔案

2021-06-06 07:59:30 字數 4210 閱讀 3323

在我們詳細介紹之前,我們必須說清楚一點: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 10g可以刪除臨時表空間的檔案

alter database tempfile '/home/oracle/temp01.dbf' drop including datafiles;

oracle刪除資料檔案

在我們詳細介紹之前,我們必須說清楚一點 oracle不提供如刪除表 檢視一樣刪除資料檔案的方法,資料檔案是表空間的一部分,所以不能 移走 表空間。一 使用offline資料檔案的方法 非歸檔模式使用 alter database datafile offline drop 歸檔模式使用 alter ...

Oracle 意外刪除資料檔案的恢復

文章 今天有客戶的資料庫意外被刪除了整個目錄中的資料檔案,作業系統級別的刪除,然而幸運的是這個資料庫沒有崩潰,仍然處於open狀態的時候,客戶就發現了問題,求助到我們,最終完整地恢復了所有資料檔案。在linux下大致重新演示一下恢復的過程,恢復的步驟與資料庫版本沒有太大關係,與作業系統的不同會有所不...

Oracle 刪除資料後釋放資料檔案所佔磁碟空間

oracle 刪除資料後釋放資料檔案所佔磁碟空間 測試的時候向資料庫中插入了大量的資料,測試完成後刪除了測試使用者以及其全部資料,但是資料檔案卻沒有縮小。經查閱資料之後發現這是 oracle 高水位 所致,那麼怎麼把這些資料檔案的大小降下來呢?解決辦法如下 概念 表空間的相關知識請見這裡,詳細的介紹...