1
关注
635
浏览

怎么删除一个空数据文件,并且清除相应的数据字典信息

admin 超级管理员 用户来自于: 局域网
2014-12-24 02:18

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;

admin 超级管理员 用户来自于: 局域网
2014-12-24 02:17

oracle 10g可以删除临时表空间的文件
alter database tempfile '/home/oracle/temp01.dbf' drop including datafiles;

admin 超级管理员 用户来自于: 局域网
2014-12-24 02:16
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

关于作者

问题动态

发布时间
2014-12-24 02:16
更新时间
2022-11-01 10:31

相关问题

手动安装Mkey5云平台,怎么修改数据库jdbc.properties配置文件
java 怎么判断文件是否存在
ebass 的push 机制
Tomcat启动报错:java.net.BindException: Cannot assign requested address: JVM_Bind
mysql 数据库 ERROR 1042 (HY000): Can't get hostname for your address
数据库不能启动
mysql修改数据库编码
创建业务管理员的时候数据插不进去,业务管理区域设置不了
java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11.XToolkit异常解决
部署项目到tomcat时提示文件被锁问题,导致报错
All Rights Reserved Powered BY WeCenter V4.0.3 © 2026 粤ICP备17102936号