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

简介:

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


  1. 建立测试表空间

  2. 创建测试用户

  3. 插入测试数据

  4. 删除数据文件

  5. 恢复数据库文件


  1. 建立测试表空间

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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.创建测试账户

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

3.插入测试数据

1
2
3
4
5
6
7
8
SQL> conn test/test
SQL>  create  table  t1(id  int );
SQL>  insert  into  t1  values (1);
SQL>  select  from  t1;
 
         ID
----------
          1

4.删除数据文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[oracle@db2 ~]$ rm -f /opt/oracle/oradata/member/test01.dbf
[oracle@db2 ~]$ 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.数据文件恢复

1
2
3
4
5
6
[oracle@db2 ~]$  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
[oracle@db2 ~]$  cd  /proc/3309/fd
#以上3309就是进程号,然后执行ls -al查看文件的链接

wKiom1ah23qx99khAAKZNXM6Oh8053.jpg

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

1
[oracle@db2 fd]$  cp  27  /opt/oracle/oradata/member/test01 .dbf


查看test表空间状态

1
2
3
4
5
6
7
8
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表文件

1
2
3
4
5
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.

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

1
2
3
4
5
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用户下

1
2
[root@db2 ~]# chown -R oracle.oinstall /opt/oracle/oradata/member/test01.dbf 
再recover datafile  '/opt/oracle/oradata/member/test01.dbf'



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

1
2
SQL>  drop  user  test  cascade ;
SQL>  drop  tablespace test INCLUDING CONTENTS  AND  DATAFILES;



本文转自 rong341233 51CTO博客,原文链接:http://blog.51cto.com/fengwan/1737664



相关文章
|
存储 Oracle 关系型数据库
【YashanDB 知识库】YMP 校验从 yashandb 同步到 oracle 的数据时,字段 timestamp(0) 出现不一致
在YMP校验过程中,从yashandb同步至Oracle的数据出现timestamp(0)字段不一致问题。原因是yashandb的timestamp(x)存储为固定6位小数,而Oracle的timestamp(0)无小数位,同步时会截断yashandb的6位小数,导致数据差异。受影响版本:yashandb 23.2.7.101、YMP 23.3.1.3、YDS联调版本。此问题会导致YMP校验数据内容不一致。
|
Oracle 关系型数据库 Linux
【YashanDB 知识库】通过 dblink 查询 Oracle 数据时报 YAS-07301 异常
客户在使用 YashanDB 通过 yasql 查询 Oracle 数据时,遇到 `YAS-07301 external module timeout` 异常,导致 dblink 功能无法正常使用,影响所有 YashanDB 版本。原因是操作系统资源紧张,无法 fork 新子进程。解决方法包括释放内存、停掉不必要的进程或增大进程数上限。分析发现异常源于 system() 函数调用失败,返回 -1,通常是因为 fork() 失败。未来 YashanDB 将优化日志信息以更好地诊断类似问题。
|
Oracle 关系型数据库 Java
【YashanDB知识库】Flink CDC实时同步Oracle数据到崖山
本文介绍通过Flink CDC实现Oracle数据实时同步至崖山数据库(YashanDB)的方法,支持全量与增量同步,并涵盖新增、修改和删除的DML操作。内容包括环境准备(如JDK、Flink版本等)、Oracle日志归档启用、用户权限配置、增量日志记录设置、元数据迁移、Flink安装与配置、生成Flink SQL文件、Streampark部署,以及创建和启动实时同步任务的具体步骤。适合需要跨数据库实时同步方案的技术人员参考。
【YashanDB知识库】Flink CDC实时同步Oracle数据到崖山
|
存储 Oracle 关系型数据库
【YashanDB 知识库】YMP 校验从 yashandb 同步到 oracle 的数据时,字段 timestamp(0) 出现不一致
【YashanDB 知识库】YMP 校验从 yashandb 同步到 oracle 的数据时,字段 timestamp(0) 出现不一致
|
Oracle 关系型数据库 Linux
【YashanDB知识库】通过dblink查询Oracle数据时报YAS-07301异常
【YashanDB知识库】通过dblink查询Oracle数据时报YAS-07301异常
|
Oracle 关系型数据库 Linux
【YashanDB 知识库】通过 dblink 查询 Oracle 数据时报 YAS-07301 异常
某客户在使用 YashanDB 通过 yasql 查询 Oracle 数据时,遇到 `YAS-07301 external module timeout` 异常,导致 dblink 功能无法正常使用,影响所有版本。问题源于操作系统资源紧张,无法 fork 新子进程。解决方法包括释放内存、停掉不必要的进程或增大进程数上限。分析发现异常原因为系统调用 fork() 失败。经验总结:优化日志记录,提供更多异常信息。
|
存储 Oracle 关系型数据库
【YashanDB知识库】YMP校验从yashandb同步到oracle的数据时,字段timestamp(0)出现不一致
【YashanDB知识库】YMP校验从yashandb同步到oracle的数据时,字段timestamp(0)出现不一致
|
Oracle 关系型数据库 数据库管理
oracle 移动数据文件
1.先将相应的数据文件 offline ALTER DATABASE DATAFILE'D:/ORACLE/ORADATA/DBA/TEST01.
669 0

推荐镜像

更多