接上一篇:
https://www.modb.pro/db/1894668668282351616
1.错误描述
Oracle 10i RAC 环境下,用户错误在本地创建了数据文件;
将文件移动到asm磁盘组后,online_status 为 recover;
尝试恢复该文件,归档日志丢失;
step 1.离线数据文件
SQL> alter database datafile '/opt/oracle/product/10.2.0/dbs/rm_data_120.ora' offline;
Database altered.
SQL>
step 2.复制数据文件到ASM
RMAN> copy datafile '/opt/oracle/product/10.2.0/dbs/rm_data_120.ora' to '+data';
Starting backup at 26-FEB-25
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=1869 instance=jczhdb1 devtype=DISK
channel ORA_DISK_1: starting datafile copy
input datafile fno=00124 name=/opt/oracle/product/10.2.0/dbs/rm_data_120.ora
output filename=+DATA/jczhdb/datafile/rm_data.513.1194110013 tag=TAG20250226T171331 recid=8 stamp=1194110100
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:01:35
Finished backup at 26-FEB-25
RMAN>
step 3.rename 文件,该操作实际为修改控制文件中,关于该文件的记录信息
SQL> alter database rename file '/opt/oracle/product/10.2.0/dbs/rm_data_120.ora' to '+DATA/jczhdb/datafile/rm_data.513.1194110013';
Database altered.
SQL>
step 4.尝试恢复该数据文件
sqlplus 下恢复
SQL> alter database datafile '+DATA/jczhdb/datafile/rm_data.513.1194110013' online;
alter database datafile '+DATA/jczhdb/datafile/rm_data.513.1194110013' online
*
ERROR at line 1:
ORA-01113: file 124 needs media recovery if it was restored from backup, or END
BACKUP if it was not
ORA-01110: data file 124: '+DATA/jczhdb/datafile/rm_data.513.1194110013'
SQL>
rman 下恢复
recover datafile '+DATA/jczhdb/datafile/rm_data.513.1194110013';
文件恢复失败,归档日志丢失。
step 5.删除该文件
SQL> alter tablespace RM_DATA drop datafile '+DATA/jczhdb/datafile/rm_data.513.1194110013';
alter tablespace RM_DATA drop datafile '+DATA/jczhdb/datafile/rm_data.513.1194110013'
*
ERROR at line 1:
ORA-03264: cannot drop offline datafile of locally managed tablespace
SQL>
该语句会删除控制文件和磁盘上的文件,删除之后的原数据文件序列号可以重用。
注意,该语句只能是 datafile online 的时候才可以使用。如果说对应的数据文件已经是offline for drop,那么仅针对dictionary managed tablespaces可用。
解决方案
将文件离线
- 对于非归档模式:
对于非归档模式,只能使用 offline drop 离线被删除的数据文件,数据库其他能够正常使用,只是数据文件段内对应的数据无法被dml或者ddl
SQL> alter database datafile '+DATA/jczhdb/datafile/rm_data.513.1194110013' offline drop;
Database altered.
SQL>
该命令不会删除数据文件,只是将数据文件的状态更改为recover。
offline drop 命令相当于把一个数据文件至于离线状态,并且需要恢复,并非删除数据文件。数据文件的相关信息还会存在数据字典和控制文件中。
如果是非归档模式,只能是offline drop;因为非归档模式没有归档文件来进行recover操作,当然,如果offline之后,速度足够块,online redo 里的数据还没有被覆盖掉,那么这种情况下,还是可以进行recover的。
找出对应的数据库段进行表空间迁移
select distinct segment_name,segment_type from dba_extents where file_id=66 and segment_type='TABLE'。
oracle 11g 使用该语法:
alter database datafile '+DATA/jczhdb/datafile/rm_data.513.1194110013' OFFLINE FOR DROP;
此时,数据库文件的状态为 recover,确认该文件没有数据或允许数据丢失,可以将该文件从控制文件删除
ALTER TABLESPACE "rm_data" DROP DATAFILE '+DATA/jczhdb/datafile/rm_data.513.1194110013';
ALTER TABLESPACE rm_data DROP DATAFILE 12;
- 对于归档模式:
alter database datafile ‘file_name’ offline 和 offline drop 没有什么区别。因为offline之后多需要进行recover才可以online。
如:
alter database datafile '+DATA/jczhdb/datafile/rm_data.513.1194110013' offline drop;
通过BBED推进SCN实现数据文件重新online
该方式非常的暴力,对dba来说不友好,不建议使用。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




