Oracle 误删除 DBF 补救措施

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掉

这是我们的实际操作记载!

时间: 2024-10-01 02:31:11

Oracle 误删除 DBF 补救措施的相关文章

Oracle误删除表数据后的恢复具体解释

測试环境: SYSTEM:IBM AIX 5L                         Oracle Version:10gR2 1. undo_retention參数的查询与改动 使用show parameter undo命令查看当前的数据库參数undo_retention设置. 显演示样例如以下: SQL> show parameter undo NAME                                 TYPE        VALUE --------------

oracle 11g dbf数据文件从C盘迁移到D盘

服务器系统为 windows 2008 R2 64位,由于C盘空间将满,要将C盘的oracle的DBF数据文件迁移到D盘下,步骤如下: 1.输入cmd,启动 cmd.exe窗口 2.输入 sqlplus /nolog 3.输入 conn sys/[email protected] as sysdba 4.输入sql:select name from v$datafile; 查看相关data文件存放路径 5. shutdown immediate 关闭 6. startup mount; 7. a

Oracle误删除表空间的恢复

对于误删除表空间的恢复,本文通过基于数据库的时间点恢复和基于表空间的时间点恢复分别加以讨论 一 通过基于数据库的时间点恢复被误删除的表空间 1 需要注意的事项 a 基于数据库的时间点恢复将会回退整个数据库. b 误删除表空间,当数据库有之前可用于恢复的全库备份和相关归档,如果对数据库执行不完全恢复,恢复该数据库到删除表空间之前的状态,便可恢复误删除的表空间.但实际上当我们删除表空间,数据库备份中将不存在关于该表空间的的信息,直接进行恢复将会出现问题.如下所示: RMAN> list backup

oracle通过DBF恢复数据

1,安装oracle 10g数据库并创建一个要恢复的数据库相同一的实例(注意:最好是新安装的数据库,并且安装的数据库尽量和要恢复的数据库的版本一致,并且实例必须一致); 2,以sysdba身份登录:对控制文件进行备份; sqlplus /nolog;(此处不能加分号,否则黑屏窗口会一闪而过) conn /as sysdba;登录 2,备份控件文件到udmp目录的trace文件 alter database backup controlfile to trace; 找到oracle的安装目录:..

Linux系统Oracle Temp01.dbf不断变大应该这样解决

Oracle安装在centos系统上,系统磁盘空间本身不是很大,运行一段时间后发现Oracle的临时表空间占用磁盘越来越大,以至于系统处于崩溃的边缘,解决该问题的方法如下: 第一步:alter database tempfile '/opt/oracle/oradata/orcl/temp01.dbf' drop;第二步:alter tablespace temp add tempfile'/opt/oracle/oradata/orcl/temp01.dbf'size 2048M reuse

Oracle误删除数据的恢复方法

Oracle误删数据的恢复,分为两种方法:SCN和时间戳两种方法恢复. 一.通过SCN恢复删除且已提交的数据 1.获得当前数据库的SCN号 select current_scn from v$database; (切换到sys用户或system用户查询) 查询到的SCN号为:1499223 2.查询当前SCN号之前的SCN select * from 表名 as of scn 1499220; (确定删除的数据是否存在,如果存在,则恢复数据:如果不是,则继续缩小scn号) 3.恢复删除且已提交的

oracle误删除数据恢复

1. select * from Your_Table t         //查询Your_Table中所有的数据,可以看到三条数据 2. delete Your_Table                      //删除Your_Table中所有的数据,三条数据消失 3. select * from Your_Table t         //无数据. 4. insert into Your_Table select * from Your_Table as of timestamp

oracle 误删除表的几种恢复方法

在删除数据的时候不小心,把delete语句执行错了,把别的表给delete,而且还执行了commit!那么如何进行恢复呢,下面介绍几种恢复方法.第一种: 1.打开Flash存储的权限ALTER TABLE tableName ENABLE row movement ;2.把表还原到指定时间点flashback table tableName to timestamp to_timestamp(''2018-03-16 10:40:00'',''yyyy-mm-dd hh24:mi:ss'');后

ORACLE 误删除视图恢复

1.使用 dba_views 回退到特定时间段,查看定义 select view_name,text from (select * From dba_views AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '5' hour-INTERVAL '35' minute) ) where view_name='VP_TASKCLASS_INFO'; 注意,这里必须要有DBA的权限 2.TEXT 是Long 类型,在SQLPLUS 里边要先设置下 SQL> set l