怎么删除oracle的数据文件

怎么删除oracle的数据文件,第1张

一、使用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/1020/ORADATA/ORCL/TSTEST001DBF'

说明数据库没找到这个数据文件

因为数据文件在没有被offline的情况下物理删除了,导致oracle的数据不一致,因此启动失败

通过以下方法即可解决

解决方法:

sqlplus sys/orcl@orcl as sysdba;

SQL> alter database datafile 'E:/ORACLE/PRODUCT/1020/ORADATA/ORCL/TSTEST001DBF' 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/users01dbf USERS

sys@ORCL>alter tablespace users add datafile

2 '/u01/app/oracle/oradata/orcl/users02dbf' 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/users01dbf USERS

9 /u01/app/oracle/oradata/orcl/users02dbf 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/users02dbf';

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/users01dbf USERS

三、oracle 10g可以删除临时表空间的文件

alter database tempfile '/home/oracle/temp01dbf' drop including datafiles;

这样的话,你在下次重启数据库的时候,是启动不了。

如果是你的数据库是归档模式下的话,有数据文件的备份的话,可进行完全恢复,再进入到数据库里执行命令:

drop tablespace tablespace_name including contents and datafile cascade;

如果没有备份的话,也只能启动到数据库的mount状态下,

startup mount;

再把删除的文件所属的表空间离线,再进入到Open状态下。

alter database open;

进入到数据库后再重建表空间。

以上就是关于怎么删除oracle的数据文件全部的内容,包括:怎么删除oracle的数据文件、Oracle 11G删除数据库表空间的文件、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10182011.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存