暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 11g 误删除非系统表空间数据文件(rm)

原创 Albert 2024-12-17
174

背景

在Linux系统下执行rm,将非系统表空间的数据文件删除后。当该表空间没有DML或DDL的情况下,数据库的alert日志并不会及时输出错误。当alert日志中出现该问题时,也就是影响业务正常运行的时候。

宕机时间

无,不影响其它用户正常使用。但是该数据文件对应的表空间文件有短暂的不可使用时间。

解决方向

1、如果有备份,可以通过备份还原指定表空间
2、Oracle 11g开始支持DRA方式进行自动诊断,快速恢复指定表空间。但是其必须存在Rman全备(0级)
3、没有备份,通过Oracle Recover结合Linux的方式进行恢复 – 当前主要以该方式进行讲解

具体分析

1、前提条件
数据库或者服务器在未恢复数据文件之前一定不能关闭或重启。一旦重启或者关闭,所有进程信息将被清空,就无法执行数据文件恢复。

2、何为Linux方式?
Linux对于每个进程都会PID记录,而每个PID都会存在一个文件夹,该文件夹下记载了当前进程操作的细节信息。其中最重要的就是句柄编号。我们将使用句柄编号进行恢复数据库

3、Recovery
Oracle Recover主要是通过归档日志和redo日志进行恢复备份后的数据。而此处仅需要恢复指定误删除的数据文件即可

4、DBWR进程
DBWR进程是Oracle数据库用来写数据的进程。前端用户执行DML、DDL等SQL操作,相关操作会落盘到高速缓冲区。DBWR进程将高速缓冲区的脏块数据写到数据文件中。

具体操作

1、查询DBWR进程PID
$ ps -ef|grep dbw

2、通过PID进入进程的文件夹中
cd /proc/[pid]/fd

3、查看相关进程信息
ll

4、执行CP
注意:当前文件夹中记录了dbwr进程的操作细节。如果执行了操作系统级别的rm,在句柄对应的文件后系统会追加(delete)标识符。针对该标识符进行cp

cp [句柄编号] [被标识的delete动作的文件]

5、数据库下线数据文件
$ sqlplus / as sysdba
SQL>alter database datafile [file_number] offline;

6、数据库执行恢复
$ sqlplus / as sysdba
SQL> recover datafile [file_number];

7、数据库上线数据文件
$ sqlplus / as sysdba
SQL>alter database datafile [file_number] online;

8、添加系统检查点
$ sqlplus / as sysdba
SQL> alter system checkpoint;

9、校验
注意:此处需要针对误删除的数据文件进行校验。插入数据到数据文件对应的表空间中。如果插入成功就意味着此次恢复成功
SQL> create table [] as select * from dba_objects;

最后修改时间:2024-12-18 08:33:37
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论