
说明:
Oracle数据库,误删除数据文件,无任何备份情况下,仍然有希望完全恢复数据。
本次恢复方式需要满足一个条件:需要完整的从数据文件创建到当前时间点的重做日志。
恢复过程如下:
Oracle 10以前版本恢复方法如下:
SQL> alter database create datafile 'missing name' as 'misisng name';
SQL> recover datafile 'missing name';
SQL> alter database datafile '<missing name>' online;
复制
Oracle 10G以后版本恢复方法如下:
注意:没有任何rman备份的情况下,只要满足条件,仍可以执行下面操作
RMAN> restore datafile <missing file id>;
RMAN> recover datafile <missing file id>;
RMAN> sql 'alter database datafile <missing file id> online';
复制
详细测试过程如下:
数据库版本:Oracle 19.22
1.新增表空间 和 测试数据
SQL> create tablespace cjc datafile '/oracle/oradata/CHEN/cjctbs.dbf' size 10M;
SQL> create user cjc identified by "a" default tablespace cjc;
SQL> grant connect,resource to cjc;
SQL> create table cjc.t1(id int);
SQL> insert into cjc.t1 values(1);
SQL> commit;
复制
2.查询file_id
set line 150
col tablespace_name for a15
col file_name for a50
select file_id,tablespace_name,file_name from dba_data_files order by 1;
FILE_ID TABLESPACE_NAME FILE_NAME
---------- --------------- --------------------------------------------------
1 SYSTEM oracle/oradata/CHEN/system01.dbf
3 SYSAUX oracle/oradata/CHEN/sysaux01.dbf
4 UNDOTBS1 oracle/oradata/CHEN/undotbs01.dbf
5 CJC oracle/oradata/CHEN/cjctbs.dbf
7 USERS oracle/oradata/CHEN/users01.dbf
SQL> select * from cjc.t1;
ID
----------
1
复制
3.模拟误删除
停库:
SQL> shutdown immediate;
复制
重命名数据文件,模拟误删除
mv /oracle/oradata/CHEN/cjctbs.dbf /oracle/oradata/CHEN/cjctbs.dbf.bak
复制
4.启动数据库,报错:
SQL> startup;
ORACLE instance started.
Total System Global Area 1560279512 bytes
Fixed Size 8939992 bytes
Variable Size 905969664 bytes
Database Buffers 637534208 bytes
Redo Buffers 7835648 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 5 - see DBWR trace file
ORA-01110: data file 5: '/oracle/oradata/CHEN/cjctbs.dbf'
复制
告警日志报错:
2025-03-02T14:23:44.156026+08:00
ALTER DATABASE OPEN
2025-03-02T14:23:44.276937+08:00
Errors in file /oracle/db/diag/rdbms/chen/chen/trace/chen_dbw0_787.trc:
ORA-01157: cannot identify/lock data file 5 - see DBWR trace file
ORA-01110: data file 5: '/oracle/oradata/CHEN/cjctbs.dbf'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 7
2025-03-02T14:23:44.277719+08:00
Smart fusion block transfer is disabled:
instance mounted in exclusive mode.
复制
5.rman恢复?
说明:数据库安装以后,没有做过任何的rman备份,但是只要该数据文件创建以来的redo日志没有覆盖,仍然可以恢复。
[oracle@cjc-db-02 CHEN]$ rman target /
Recovery Manager: Release 19.0.0.0.0 - Production on Sun Mar 2 14:25:47 2025
Version 19.22.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
connected to target database: CHEN (DBID=1574800662, not open)
复制
检查,没有 datafile 5 的备份
RMAN> list copy of datafile 5;
using target database control file instead of recovery catalog
specification does not match any datafile copy in the repository
RMAN> list backup of datafile 5;
specification does not match any backup in the repository
复制
仍然可以成功执行restore
RMAN> restore datafile 5;
Starting restore at 02-MAR-25
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=46 device type=DISK
creating datafile file number=5 name=/oracle/oradata/CHEN/cjctbs.dbf
restore not done; all files read only, offline, excluded, or already restored
Finished restore at 02-MAR-25
复制
检查新restore的文件
[oracle@cjc-db-02 CHEN]$ ls -lrth cjctbs.dbf*
-rw-r----- 1 oracle asmadmin 11M Mar 2 14:22 cjctbs.dbf.bak
-rw-r----- 1 oracle asmadmin 11M Mar 2 14:26 cjctbs.dbf
[oracle@cjc-db-02 CHEN]$ md5sum cjctbs.dbf*
866fc473e7c668e47bd75a700682c736 cjctbs.dbf
f67077d86b29c1e5e959eeaf42906bce cjctbs.dbf.bak
复制
继续进行recover
RMAN> recover datafile 5;
Starting recover at 02-MAR-25
using channel ORA_DISK_1
starting media recovery
media recovery complete, elapsed time: 00:00:00
Finished recover at 02-MAR-25
复制
查看 recover 时,后台的告警日志:
可以看到,是自动使用 Online Redo Log Thread 1 Group 2进行恢复的。
2025-03-02T14:27:35.129644+08:00
alter database recover datafile list clear
Completed: alter database recover datafile list clear
alter database recover
if needed datafile 5
2025-03-02T14:27:35.131946+08:00
Media Recovery Start
2025-03-02T14:27:35.132289+08:00
Serial Media Recovery started
2025-03-02T14:27:35.173906+08:00
Recovery of Online Redo Log: Thread 1 Group 2 Seq 11 Reading mem 0
Mem# 0: /oracle/oradata/CHEN/redo02.log
2025-03-02T14:27:35.264340+08:00
Media Recovery Complete (chen)
Completed: alter database recover
if needed datafile 5
复制
执行online
RMAN> sql 'alter database datafile 5 online';
sql statement: alter database datafile 5 online
复制
启动数据库
RMAN> sql 'alter database open';
sql statement: alter database open
复制
恢复成功:
验证数据:
SQL> select status,instance_name from v$instance;
STATUS INSTANCE_NAME
------------ ----------------
OPEN chen
SQL> select * from cjc.t1;
ID
----------
1
SQL> insert into cjc.t1 values(2);
1 row created.
SQL> commit;
Commit complete.
SQL> select * from cjc.t1;
ID
----------
1
2
复制
参考:
Recreating a missing datafile with no backups (Doc ID 1149946.1)
复制
###chenjuchao 20250302###
欢迎关注我的公众号《IT小Chen》

文章转载自青年数据库学习互助会,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
【专家观点】罗敏:从理论到真实SQL,感受DeepSeek如何做性能优化
墨天轮编辑部
1239次阅读
2025-03-06 16:45:38
【专家有话说第五期】在不同年龄段,DBA应该怎样规划自己的职业发展?
墨天轮编辑部
1216次阅读
2025-03-13 11:40:53
2025年2月国产数据库大事记
墨天轮编辑部
955次阅读
2025-03-05 12:27:34
2025年2月国产数据库中标情况一览:GoldenDB 3500+万!达梦近千万!
通讯员
846次阅读
2025-03-06 11:40:20
Oracle RAC ASM 磁盘组满了,无法扩容怎么在线处理?
Lucifer三思而后行
739次阅读
2025-03-17 11:33:53
Oracle+Deepseek+Dify 实现数据库数据实时分析
bicewow
648次阅读
2025-03-06 09:41:49
【ORACLE】ORACLE19C在19.13版本前的一个严重BUG-24761824
DarkAthena
541次阅读
2025-03-04 14:33:31
Oracle避坑指南|同名表导出难题:如何精准排除指定用户下的表?
szrsu
502次阅读
2025-03-05 00:42:34
Ogg23ai高手必看-MySQL Innodb Cluster跟oracle的亲密接触
曹海峰
437次阅读
2025-03-04 21:56:13
2月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
436次阅读
2025-03-13 14:38:19