
刚开始写知乎专栏,也不知道写啥,就写写今天早上遇到的一个数据库备份问题,我得解决方法吧。希望对大家有帮助。
周一早巡检,发现有个数据库RMAN备份失败,分析备份日志发现遇到ORA-19606 Cannot copy or restore to snapshot control file错误:
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03009: failure of delete command on ORA_DISK_1 channel at 10/19/2020 03:03:15
ORA-19606: Cannot copy or restore to snapshot control file然后查了下资料,发现是这个文件的问题,然后按照下面的步骤成功解决了。
检查文件配置位置
RMAN> show SNAPSHOT CONTROLFILE NAME;
RMAN configuration parameters for database with db_unique_name ESBDB are:
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/snapcf_esbdb.f'将SNAPSHOT CONTROLFILE NAME修改为新的名字。
RMAN>CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/snapcf_esbdb-temp.f'
new RMAN configuration parameters:
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/snapcf_esbdb-temp.f';
new RMAN configuration parameters are successfully stored然后在操作系统上将原有的控制文件镜像删除,我这里使用改名的方式,没有直接删除,这也是一种习惯。
[root@esbdb ~]# cd /u01/app/oracle/product/11.2.0/dbhome_1/dbs/
[root@esbdb dbs]# mv snapcf_esbdb.f snapcf_esbdb.f.bak然后在通过RMAN校验下控制文件的镜像,由于改了名字,将找不到控制文件的镜像,然后删除掉控制文件中的镜像信息。
RMAN>crosscheck controlfilecopy '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/snapcf_esbdb.f';
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=762 device type=DISK
validation failed for control file copy
control file copy file name=/u01/app/oracle/product/11.2.0/dbhome_1/dbs/snapcf_esbdb.f RECID=3 STAMP=986744674
Crosschecked 1 objects
RMAN>delete expired controlfilecopy '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/snapcf_esbdb.f';
released channel: ORA_DISK_1
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=762 device type=DISK
List of Control File Copies
===========================
Key S Completion Time Ckp SCN Ckp Time
------- - ------------------- ---------- -------------------
3 X 2018-09-13 15:44:34 59401966 2018-09-13 15:44:34
Name: /u01/app/oracle/product/11.2.0/dbhome_1/dbs/snapcf_esbdb.f
Tag: TAG20180913T154434
Do you really want to delete the above objects (enter YES or NO)? y
deleted control file copy
control file copy file name=/u01/app/oracle/product/11.2.0/dbhome_1/dbs/snapcf_esbdb.f RECID=3 STAMP=986744674
Deleted 1 EXPIRED objects再将控制文件的镜像备份还原成原来的名字,这有两种方法,一种是直接以全路径的方式修改,一种是以clear的方式修改,两种方法任选其一即可。我用的是第一种
RMAN> CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/snapcf_esbdb.f';
old RMAN configuration parameters:
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/snapcf_esbdb-temp.f';
new RMAN configuration parameters:
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/snapcf_esbdb.f';
new RMAN configuration parameters are successfully stored最后,通过crontab找到备份的脚本,运行后,备份成功。
考虑到很多人不知道这个文件的作用,我把这个SNAPSHOT CONTROLFILE的一些简单介绍也贴出来给大家看看。
快照控制文件:
RMAN在备份期间需要得到一个一致的控制文件视图,RMAN需要知道备份开始时的最新的检查点信息和文件结构信息。开始备份后,RMAN需要这些信息在备份操作期间保持一致。
在热备份期间,控制文件是在不断的发生变化,RMAN又如何获得一个控制文件一致性的视图呢?
RMAN使用快照控制文件(snapshot controlfile)来解决前面的问题,快照控制文件时控制文件的副本。RMAN只在备份和同步操作期间使用快照控制文件。这些操作开始时,RMAN会根据实际控制文件内容来刷新快照控制文件,这样会短暂地锁定控制文件;随后,RMAN会切换到快照并在备份期间持续使用这个快照。这种方式具有读取一致性,且不妨碍数据库活动。
快照控制文件默认在dbs目录下,文件名:snapcf_<ORACLE_SID>.f
[oracle@aix211 ~]$cd $ORACLE_HOME/dbs
[oracle@aix211 dbs]$ls
ab_+ASM.dat hc_prod.dat init.ora initprod.ora lkPROD snapcf_prod.f
hc_+ASM.dat init+ASM.ora initdw.ora lk+ASM orapwprod spfileprod.ora
[oracle@aix211 dbs]$
重命名快照控制文件:
configure snapshot controlfile name to '<locationfile_name>';好了到这里这个问题解决的算是比较透彻了,后续我将继续分享一些有关Oracle数据库相关的知识分享。有兴趣的小伙伴可以关注下
本文详细讲述了作者在周一早间巡检中遇到的ORACLE数据库RMAN备份失败,着重讲解了如何通过定位SNAPSHOTCONTROLFILE错误,修改配置、清理控制文件镜像并最终恢复备份的过程。适合Oracle数据库维护者参考。
1万+

被折叠的 条评论
为什么被折叠?



