oracle删除数据文件
在我們詳細介紹之前,我們必須說清楚一點: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
-------????--------------------------------------------???????------------------
4????????/u01/app/oracle/oradata/orcl/users01.dbf????USERS
?
sys@ORCL>alter tablespace users add datafile
??2??'/u01/app/oracle/oradata/orcl/users02.dbf' size 5M autoextend off;
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
-------????--------------------------------------------????????-------------------
4????????/u01/app/oracle/oradata/orcl/users01.dbf?????USERS
9????????/u01/app/oracle/oradata/orcl/users02.dbf?????USERS
?
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
??2??'/u01/app/oracle/oradata/orcl/users02.dbf';
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
-------????--------------------------------------------??????---------------------
4????????/u01/app/oracle/oradata/orcl/users01.dbf???USERS
?
三、oracle 10g可以刪除臨時表空間的文件
alter database tempfile '/home/oracle/temp01.dbf' drop including datafiles;
總結
以上是生活随笔為你收集整理的oracle删除数据文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RMAN SET NEWNAME
- 下一篇: 统计数据库每天的数据增长量的脚本