您的位置:首页 > 数据库 > Oracle

Oracle 误删除 DBF 补救措施

2016-12-14 11:39 260 查看
oracle数据文件被误删除后的灾难处理方法

steps:
当Oracle数据文件被误删除之后的处理办法!!
1、关闭数据库:
sqlplus "/as sysdba";
sqlplus>shutdown abort;
2、装载数据库
sqlplus>startup mount;
3、删除无效的数据库文件
sqlplus>alter database datafile '/home/oracle/survey/survey.dbf' offline drop
sqlplus>alter database datafile '/home/oracle/survey/surveytemp.dbf' offline drop
4、打开数据库
  sqlplus>alter database open;
5、删除无效的表空间
sqlplus> drop tablespace surevy including contents;
sqlplus> drop tablespace surevytemp including contents;

---dtl----

表空间 GTI40_DATA01 数据文件GTI40_DATA01.dbf被我删除了
我再运行drop tablespace qwer
会报错

ORA-01116: 打开数据库文件48时出错
ORA-01110: 数据文件 48: '/data/GTI40_DATA01.dbf'
ORA-27041: 无法打开文件
Linux Error: 2: No such file or directory
Additional information: 3

我怎么才能删除这个表空间
现在我无法在建立这个空间(在线等急!!!!!!!!)

简单的问题搞这么复杂?
按下面步骤做即可:
1.shutdown immediate
2.startup mount
3.alter database datafile 'xxx' offline drop;
4.alter database open
5.drop tablespace xxxx including contents and datafiles;

先说明一下alter database datafile ... offline drop:

在非归档模式下,可以使用... offline drop,在归档模式下,使用... offline. 这个命令的意思并不是从表空间将这个数据文件彻底删除,而是说将这个数据文件“冻结”住:它的scn不在变化,不会再向它写入任何数据;但是原有存在这个文件中对象和数据还可以继续使用。因此在使用这个命令后,通过修改控制文件将它删除,数据库在启动时就会报文件丢失的错误,并且会在数据字典中产生一个MISGXXXXX的纪录。因此,以一个数据文件是无法被直接从数据库中删除掉的。

如果需要减少表空间的数据文件,可以采用以下办法:

export除表空间的内容:exp ... tablespaces=xxx;

使用include content子句删除表空间:drop tablespace xxx include content;

重见表空间,使之不包括需要去除掉的数据文件;

import表空间的所有数据对象。

re: 彻底将一个数据文件从表空间中删除 [回复]
呵呵,在10g R2的drop empty datafile之前,事实上是无法对单个数据文件进行删除的,除非你更改数据字典或者将表空间删除。如果按你上面的步骤操作,你查dba_data_files里面肯定会有那个数据文件的记录,只是标识为D:ORACLEORA92DATABASEMISSING00005这类的文件,事实上是由于你将控制文件中该数据文件的信息删除掉了,而数据字典里面还有该文件的信息,现在对应不上,因此标识为这种奇怪的文件名,表示该数据文件需要恢复的。

当Oracle数据文件被误删除之后的处理办法!!
1、关闭数据库:
sqlplus "/as sysdba";
sqlplus>shutdown abort;
2、装载数据库
sqlplus>startup mount;
3、删除无效的数据库文件
sqlplus>alter database datafile '/home/oracle/survey/survey.dbf' offline drop
sqlplus>alter database datafile '/home/oracle/survey/surveytemp.dbf' offline drop
4、打开数据库
  sqlplus>alter database open;
5、删除无效的表空间
sqlplus> drop tablespace surevy including contents;
sqlplus> drop tablespace surevytemp including contents;

good:
oracle数据文件被误删除后的灾难处理方法- -
Tag: oracle datafile 数据文件 误删除 灾难
环境:Red Hat Linux 7.2 SMP
数据库:Oracle 8.1.7

起因,一同事建立了一个表空间并建立一张表后发现表空间未用到直接删除了那个数据文件.其操作如下:
create tablespace r_csh_20051001 datafile '/webdata/dbdata/ry/csh20051001.dat' size 50M autoextend on next 500M default storage (initial 10m NEXT 10m MINEXTENTS 1 PCTINCREASE 0);
create table r_csh(
UsedDate char(26) default '',
CardNumber char(26) default '',
UserNumber char(16) default '',
Credit number(5) default 0,
UserArea number(6) default 0,
CardArea number(6) default 0,
ValiDdate char(26) default ''
);

rm /webdata/dbdata/ry/csh20051001.dat
经过这一操作后,数据库出现连接失败,发现数据库已经停止了.
查看oracle的log显示:

Errors in file /oracle/admin/webdb/bdump/ckpt_31638.trc:
ORA-01110: data file 63: '/webdata/dbdata/ry/csh20051001.dat'
ORA-01115: IO error reading block from file 63 (block # 1)
ORA-27041: unable to open file
Linux Error: 2: No such file or directory
Additional information: 3
ORA-01242: data file suffered media failure: database in NOARCHIVELOG mode
ORA-01116: error in opening database file 63
ORA-01110: data file 63: '/webdata/dbdata/ry/csh20051001.dat'
ORA-27041: unable to open file
Linux Error: 2: No such file or directory
Additional information: 3
Fri Oct 21 15:31:47 2005
CKPT: terminating instance due to error 1242
Instance terminated by CKPT, pid = 31638
Fri Oct 21 15:55:09 2005

想要把oracle重新启动,发现也启动不了:

SQL> shutdown immediate;
SQL> startup;
ORACLE instance started.

Total System Global Area 40104096 bytes
Fixed Size 73888 bytes
Variable Size 23080960 bytes
Database Buffers 16777216 bytes
Redo Buffers 172032 bytes
Database mounted.
ORA-01122: database file 63 failed verification check
ORA-01110: data file 63: '/webdata/dbdata/ry/csh20051001.dat'
ORA-01251: Unknown File Header Version read for file number 63

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

解决方法:
lsnrctl stop
sqlplus internal
SQL> shutdown abort
SQL> startup mount
SQL> alter database datafile '/webdata/dbdata/ry/csh20051001.dat' offline drop;
SQL> alter database open;
SQL> drop tablespace r_csh_20051001;
lsnrctl start

其中省略了屏幕输出内容.

小结:oracle数据文件(datafile)被误删除后没有恢复的办法,只能把该数据文件offline后drop掉

这是我们的实际操作记载!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: