Oracle数据文件物理删除后的恢复

做系统管理的都是这样,难免会误删文件,某天要是把某个Oracle数据文件删除,那该如何恢复呢?(这里数据库是OPEN的,并且未关闭)

  1. 建立测试表空间
  2. 创建测试用户
  3. 插入测试数据
  4. 删除数据文件
  5. 恢复数据库文件
  1. 建立测试表空间
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
/opt/oracle/oradata/member/system01.dbf
/opt/oracle/oradata/member/sysaux01.dbf
/opt/oracle/oradata/member/undotbs01.dbf
/opt/oracle/oradata/member/users01.dbf
SQL> create tablespace test datafile ‘/opt/oracle/oradata/member/test01.dbf‘ size 10m;
Tablespace created.
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
/opt/oracle/oradata/member/system01.dbf
/opt/oracle/oradata/member/sysaux01.dbf
/opt/oracle/oradata/member/undotbs01.dbf
/opt/oracle/oradata/member/users01.dbf
/opt/oracle/oradata/member/test01.dbf

2.创建测试账户

SQL> create user test identified by test default tablespace test;
SQL> grant connect,resource to test;

3.插入测试数据

SQL> conn test/test
SQL> create table t1(id int);
SQL> insert into t1 values(1);
SQL> select * from t1;

        ID
----------
         1

4.删除数据文件

[[email protected] ~]$ rm -f /opt/oracle/oradata/member/test01.dbf
[[email protected] ~]$ sqlplus test/test
SQL> create table t2 as select * from t1;
create table t2 as select * from t1
                                 *
ERROR at line 1:
ORA-01116: error in opening database file 5
ORA-01110: data file 5: ‘/opt/oracle/oradata/member/test01.dbf‘
ORA-27041: unable to open file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3

SQL> select table_name,tablespace_name from user_tables;
TABLE_NAME                     TABLESPACE_NAME
------------------------------ ------------------------------
T1                             TEST

数据文件被删除了,这怎么办呢?这个时候千万别重启数据库,否则数据就丢失了

5.数据文件恢复

[[email protected] ~]$ ps -ef |grep dbw0
oracle    3309     1  0 12:07 ?        00:00:00 ora_dbw0_member
oracle    6217  5105  0 15:29 pts/0    00:00:00 grep dbw0
#找到ora_dbw0_SID的进程号3309
[[email protected] ~]$ cd /proc/3309/fd
#以上3309就是进程号,然后执行ls -al查看文件的链接

可以看到文件27就是被删除的文件

[[email protected] fd]$ cp 27 /opt/oracle/oradata/member/test01.dbf

查看test表空间状态

SQL> select name,status from v$datafile;
NAME                      STATUS
----------------------------------------   -------
/opt/oracle/oradata/member/system01.dbf    SYSTEM
/opt/oracle/oradata/member/sysaux01.dbf    ONLINE
/opt/oracle/oradata/member/undotbs01.dbf    ONLINE
/opt/oracle/oradata/member/users01.dbf    ONLINE
/opt/oracle/oradata/member/test01.dbf    ONLINE

下线test01表文件

SQL> alter database datafile ‘/opt/oracle/oradata/member/test01.dbf‘ offline;
SQL> recover datafile ‘/opt/oracle/oradata/member/test01.dbf‘;
Media recovery complete.
SQL> alter database datafile ‘/opt/oracle/oradata/member/test01.dbf‘ online;
Database altered.

#以上就成功恢复了,若是出现

SQL> recover datafile ‘/opt/oracle/oradata/member/test01.dbf‘;
ORA-00283: recovery session canceled due to errors
ORA-01110: data file 5: ‘/opt/oracle/oradata/member/test01.dbf‘
ORA-01157: cannot identify/lock data file 5 - see DBWR trace file
ORA-01110: data file 5: ‘/opt/oracle/oradata/member/test01.dbf‘

则有可能是/opt/oracle/oradata/member/test01.dbf文件的权限问题引起,在root用户下

[[email protected] ~]# chown -R oracle.oinstall /opt/oracle/oradata/member/test01.dbf 
再recover datafile ‘/opt/oracle/oradata/member/test01.dbf‘

实验完成后,删除测试用户及测试表空间

SQL> drop user test cascade;
SQL> drop tablespace test INCLUDING CONTENTS AND DATAFILES;
时间: 2024-08-05 15:23:21

Oracle数据文件物理删除后的恢复的相关文章

数据文件被删除,介质恢复测试

实验如下: user数据文件被删除状况下,介质恢复 首先备份user数据文件 alter tablespace user begin backup;复制user数据文件 alter tablespace user end backup: 删除user用户 shutdown abort startup  报错ORA-01157或者ORA-01110 select file#,change# from v$recover_file; 在看一下非INACTIVE状态在线日志的低位SCN;select

Oracle数据表被drop后的恢复

对于被drop的表和索引,都会存放在回收站中(所以对于生产的数据库必须设置好回收站功能) 因为本次生成环境在drop掉已有的表后,重新创建了许多的表,所有直接还原的话会提示原有对象存在,表名重复.其中解决方法是:先重命名已经存在的表名,让后还原删除的表,最后进行数据合并 1 重命名已经存在的表 spool bak.txt select 'alter table '||t.original_name||' rename to '||t.original_name||'_bak;',' select

己亥清爽恢复系列之数据文件3篇:非核心数据文件物理损坏或丢失(无备份恢复)

己亥清爽系列说明:清爽系列是作为恢复系列的基础篇,基于FS(File System)文件系统的手工还原恢复,也叫基于用户管理的还原恢复,来自于博客园AskScuti. 实验说明:物理删除非关键系统数据文件,模拟介质损坏或丢失,且在无备份的情况下,如何进行手工完全还原恢复操作.注:控制文件.在线日志和归档日志都完整的情况下. 基于版本:Oracle 11gR2 11.2.0.4 AskScuti 概念说明:请严格区分什么叫还原(Restore),什么叫恢复(Recover). 还原(Restore

Oracle单个数据文件超过32G后扩容

Oracle单个数据文件超过32G后扩容 表空间数据文件容量与DB_BLOCK_SIZE的设置有关,而这个参数在创建数据库实例的时候就已经指定.DB_BLOCK_SIZE参数可以设置为4K.8K.16K.32K.64K等几种,Oracle的物理文件最大只允许4194304个数据块(这个参数具体由操作系统决定,一般应该是此数字),表空间数据文件的最大值对应关系就可以通过4194304×DB_BLOCK_SIZE/1024M计算得出. 4k最大表空间为:16384M 8K最大表空间为:32768M

从文件读取内容,删除一个数据,把删除后的数据重新写入到文件

demo.php : <!--从文件读取内容,删除一个数据,把删除后的数据重新写入到文件--><?php    $aa = file_get_contents('picinfo.db');    $bb = rtrim($aa,'@');    //var_dump($bb);exit;    $array = explode('@@',$bb);    //var_dump($array);exit;        /****测试以下代码,打开var_dump($cc);exit;并依

Oracle数据文件和临时文件的管理

一.数据文件概述在Oracle数据库中,SYSTEM和SYSAUX表空间至少需要包含一个数据文件,此外还将包含多个其他表空间及与其相关的数据文件和临时文件.Oracle的数据文件和临时文件是操作系统文件,属于数据库物理结构范畴,用于存储数据库中的逻辑结构的数据.在创建表空间时,必须明确的为每个表空间指定数据文件. Oracle通过两种方式为文件分配编号:绝对文件号,用于唯一标识数据库中的数据文件,绝对文件号可以通过v$datafile或v$tempfile视图的FILE#列查询,也可以通过DBA

Oracle 数据文件误删除的不完全恢复

应用环境: 我的一个表被人不小心误删除了,这时候,我不可以把整个库都恢复回去,那样太麻烦了. 所以现在我就从新到一个新库,只将这一个数据文件拷贝过来恢复. 那我们Oracle在恢复文件的时候是不可以只恢复一部分数据文件的,因为oracle  要保证数据文件块头信息一致,所以如果我们要恢复部分文件的话,就得采取以下这种方法: 可以另起一个库,再把要恢复的数据文件拷贝过来,恢复.(当然不单单是该数据文件,还要包括system表空间,undo表空间) 1)另起一个库很简单,可以搞出参数文件,在参数文件

在线移动oracle 数据文件位置

    在线移动oracle 数据文件 Oracle数据文件可以在数据库OPEN的时候被重命名或移动,但此时表空间必须为只读,这将允许用户从表中查询,但禁止他们这样做的插入,更新和删除,在表空间至于只读状态的时候,冻结数据文件块头.阻止更新数据文件块头,此时才能在线拷贝数据文件 <注:system表空间除外,system 表空间无法offline> 本测试以TEST表空间为例 SQL> select * from v$version; BANNER -------------------

文件夹删除了怎么恢复?最全面的解决方法

文件夹删除了怎么恢复?在使用电脑进行办公的时候,经常会创建很多的文件夹,这些对于用户来说都非常的重要,但是很多时候操作会容易出现意外的情况,那么如果文件夹被删除了该怎么恢复呢?怎么进行相关的操作? 文件的删除方式分为两种的,普通删除和永久删除,两种方式都有对应不同的恢复操作,下面小编就来和各位分享下具体的恢复教程吧: 一:文件夹普通删除恢复教程: 文件夹在普通删除过后,会出现在回收站当中,这个时候想要恢复文件夹的话,打开回收站功能,然后查看其中是否有被删除过的文件,在其中的话就勾选上,然后点击[