一、现象:
目标是想搭建dg库,但是该数据库数据量比较大,将近5T,故需要使用rman备份恢复的方式来搭建, 于是先在主库做了全备,然后在dg库做恢复,restore成功后,尝试recover报错,说某个文件需要restore, 然后查看该文件状态发现报错:WRONG FILE NUMBER
1、数据文件备份方式如下:
RUN {
ALLOCATE CHANNEL ch1 DEVICE TYPE DISK FORMAT '/backup/oracle/rman_backup/20250926/full_%U.bak';
ALLOCATE CHANNEL ch2 DEVICE TYPE DISK FORMAT '/backup/oracle/rman_backup/20250926/full_%U.bak';
ALLOCATE CHANNEL ch3 DEVICE TYPE DISK FORMAT '/backup/oracle/rman_backup/20250926/full_%U.bak';
ALLOCATE CHANNEL ch4 DEVICE TYPE DISK FORMAT '/backup/oracle/rman_backup/20250926/full_%U.bak';
BACKUP AS COMPRESSED BACKUPSET
INCREMENTAL LEVEL 0
DATABASE
TAG 'FULL_BACKUP_20250926'
FILESPERSET 5;
SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT';
BACKUP AS COMPRESSED BACKUPSET
ARCHIVELOG ALL
FORMAT '/backup/oracle/rman_backup/20250926/arch_%U.bak'
TAG 'ARCH_BACKUP_20250926'
DELETE ALL INPUT;
#BACKUP CURRENT CONTROLFILE FORMAT '/backup/oracle/rman_backup/20250926/control_%U.ctl' TAG 'CTL_BACKUP_20250926'; #oracle rac 11.2.0.3 控制文件备份(RMAN 或 SQL)都强制要求“快照控制文件”,所以单独备份通过sql备份控制文件。
RELEASE CHANNEL ch1;
RELEASE CHANNEL ch2;
RELEASE CHANNEL ch3;
RELEASE CHANNEL ch4;
}
2、备份控制文件:
11.2.0.3 RAC 官方代码存在缺陷,任何控制文件备份(RMAN 或 SQL)都强制要求“快照控制文件”与“最终备份片”同时落在共享存储,否则报 ORA-00245;
11.2.0.4 以后才放宽为“只要快照控制文件在共享即可,备份片可写本地”;
oracle rac 11.2.0.3 无法直接备份控制文件到非共享磁盘上, 但是oracle 11.2.0.4 是可以的
1)rman备份控制文件报错:
rman>BACKUP CURRENT CONTROLFILE FORMAT '/backup/oracle/rman_backup/20250926/control_%U.ctl' TAG 'CTL_BACKUP_20250926';
报错:RMAN-03009: failure of backup command on ORA_DISK_1 channel at 09/28/2025 10:06:31ORA-00245: control file backup failed; target is likely on a local file system
2)sql备份控制文件也报错:
SQL> ALTER DATABASE CREATE STANDBY CONTROLFILE AS '/backup/oracle/rman_backup/20250926/control.ctl';
ALTER DATABASE CREATE STANDBY CONTROLFILE AS '/backup/oracle/rman_backup/20250926/control.ctl'*ERROR at line 1:ORA-00245: control file backup failed; target is likely on a local file system
于是通过sql的方式备份控制文件到asm盘上:
SQL> ALTER DATABASE CREATE STANDBY CONTROLFILE AS '+ARCHIVELOGDG/control.ctl';
Database altered.
然后通过asmcmd 把asm上的备份文件cp到本地文件上,最后把备份的控制文件scp到dg库的机器
3、用全备在dg库的机器上恢复,如下所示的恢复命令:
因为执行run块报错,报错如下所示:
RMAN>
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-00558: error encountered while parsing input commands
RMAN-01009: syntax error: found "identifier": expecting one of: ";"
RMAN-01008: the bad identifier was: c0
RMAN-01007: at line 1 column 21 file: standard input
于是采用了如下所示的的恢复命令
1)编写run块内容到文件中,开启多个channel,提高备份恢复性能
[@psdg01 ~]$ cat restore_parallel.rman
RUN {
SET NEWNAME FOR DATABASE TO '/backup/oracle/datafile/%b';
ALLOCATE CHANNEL c0 TYPE DISK;
ALLOCATE CHANNEL c1 TYPE DISK;
ALLOCATE CHANNEL c2 TYPE DISK;
ALLOCATE CHANNEL c3 TYPE DISK;
ALLOCATE CHANNEL c4 TYPE DISK;
ALLOCATE CHANNEL c5 TYPE DISK;
ALLOCATE CHANNEL c6 TYPE DISK;
ALLOCATE CHANNEL c7 TYPE DISK;
ALLOCATE CHANNEL c8 TYPE DISK;
ALLOCATE CHANNEL c9 TYPE DISK;
RESTORE DATABASE ;
SWITCH DATAFILE ALL;
SWITCH TEMPFILE ALL;
RELEASE CHANNEL c0;
RELEASE CHANNEL c1;
RELEASE CHANNEL c2;
RELEASE CHANNEL c3;
RELEASE CHANNEL c4;
RELEASE CHANNEL c5;
RELEASE CHANNEL c6;
RELEASE CHANNEL c7;
RELEASE CHANNEL c8;
RELEASE CHANNEL c9;
}
2)执行备份
rman target / @restore_parallel.rman
4、restore完毕后,尝试recover,报错提示文件286需要restore:
RMAN> recover database;
Starting recover at 29-SEP-25
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=692 device type=DISK
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 09/29/2025 11:27:38
RMAN-06094: datafile 286 must be restored
非常诡异的事情,restore已经成功执行了,为啥还会报错呢?
二、问题排查
1、在dg库查看文件的状态:发现文件头的文件号是错误的。
#文件online状态正常
SQL> SELECT name, status FROM v$datafile WHERE file#=286;
NAME STATUS
----------------------------------------------------------------------------------------------
/backup/oracle/datafile/psimage19.dbf ONLINE
#查看文件头状态,发现异常,错误的文件号
SQL> SELECT file#, status, error FROM v$datafile_header WHERE file#=286;
FILE# STATUS ERROR
---------- -------------------------------------------------------------------------------
286 ONLINE WRONG FILE NUMBER
2、什么是 文件头的文件号?
在Oracle数据库中,“文件头”通常是指数据文件(Datafile)的头部信息。Oracle数据库每个数据文件都有一个文件头,其中包含了重要的元数据信息。
1. 文件头的作用
存储元数据:文件头存储了关于数据文件本身的元数据信息,这些信息对于数据库的正常运行和维护至关重要。
验证文件完整性:文件头中的信息可以用于验证数据文件的完整性和一致性。
支持数据库恢复:在数据库恢复过程中,文件头中的信息可以帮助数据库管理系统(DBMS)确定数据文件的状态和位置。
2. 文件头包含的内容
文件编号(File Number):每个数据文件在数据库中都有一个唯一的编号,文件头中存储了这个编号。
表空间信息(Tablespace Information):文件头中包含了该数据文件所属的表空间名称和表空间编号。
文件状态(File Status):文件头中记录了数据文件的状态,例如是否在线、是否需要恢复等。
文件大小(File Size):文件头中记录了数据文件的大小信息,包括当前大小和最大大小。
创建时间(Creation Time):文件头中记录了数据文件的创建时间。
块大小(Block Size):文件头中存储了数据文件的块大小信息,这是Oracle数据库中数据存储的基本单位。
检查点信息(Checkpoint Information):文件头中包含了最近的检查点信息(包括scn号),这对于数据库的恢复操作非常重要。
3、什么情况下会发生这样的错误呢?
原来是我主库的文件分布在好多个目录中,在不同的目录上有相同名字的数据文件,然而我dg库在restore的时候,全部rename到同一个目录了,这样在dg库就会有冲突,同名的文件覆盖了数据块,但是并没有把数据文件头信息更正,很惊悚的是 restore居然不报错!但是实际上数据文件已经被覆盖了。
三、问题解决
1、从新恢复下286号文件,并指定恢复到另一个目录,具体如下所示:
run {
set newname for datafile 286 to '/backup/oracle/oradata/datafile/hrapp03.dbf';
restore datafile 286;
switch datafile 286;
}
2、再次查看文件状态,发现已经没报错了。
SQL> SELECT file#, status, error FROM v$datafile_header WHERE file#=286;
FILE# STATUS ERROR
---------- -------------------------------------------------------------------------------
286 ONLINE
3、最后再执行recover,正常了。
总结:
1、严格遵守运维规范,oracle数据库添加数据文件时,不管是不是在相同的目录下,都需要保证文件名字唯一性;
2、restore成功没报错,不意味着数据库恢复成功,只意味着每个文件都restore成功,但是遇到重名的会覆盖,需要排查原因。
编辑推荐:
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- 商汤科技押注“1+X”:是破局利刃,还是盲目挣扎?
商汤科技押注“1+X”:是破局利刃,还是盲目挣扎?
26-03-03 - 数据库管理-第375期 26ai:除了改名,还有什么(20251015)
数据库管理-第375期 26ai:除了改名,还有什么(20251015)
26-03-03 - 数据库深夜革命,Oracle 26ai重磅发布!
数据库深夜革命,Oracle 26ai重磅发布!
26-03-03 - 位图索引的妙用
位图索引的妙用
26-03-03 - 数据库管理-第366期 Oracle 19c 多租户 ADG 环境的陷阱(20250911)
- 百奥赛图与中国创新药的全球突围
百奥赛图与中国创新药的全球突围
26-03-03 - 大洋集团未来或通过供股集资用于发展AI数字人、RWA架构及购买战略性数字资产
- 实战系列之外部表简化AI数据导入
实战系列之外部表简化AI数据导入
26-03-03 - 实战系列之自动优化向量搜索性能VECTOR_MEMORY_SIZE
实战系列之自动优化向量搜索性能VECTOR_MEMORY_SIZE
26-03-03 - 曹操出行勾勒未来出行的蓝图,开启“天地空一体化”时代
曹操出行勾勒未来出行的蓝图,开启“天地空一体化”时代
26-03-03
