1.问题背景:
前两天系统管理员告诉我数据库现在备份时间能否调整,控制在凌晨4:30之前备份完,4:30之后有大量业务过来,
2.问题分析:
我看了一下,发现这个数据库版本为ORACLE 12.2.0.1,操作系统为CENTOS 7.4,目前从1:00开始备份,有时备份要在早上7:00才备完,进一步查数据库,发现数据库数据文件就只有20G,备份出来,也就5G,怎么会有这么长时间呢
查看备份脚本,也是备份在本地 /backup/
查看备份日志,CROSSCHECK BACKUP时间非常长,要几个小时,
于是手工去测试一下备份过程,发现CROSSCHECK backup,感觉HANG住了,执行备份,等于HANG住,看不到结果。
测试一下 backup validate database;发现几分钟就OK,说明往备份位置写有些问题。
如果进行备份,会话等待事件为:Disk file operations I/O
执行RMAN跟踪,发现:Direct NFS:kgnfsv4.c@4091:kgnfs_complete_create4()
于是,赶紧看一下df -hT /BACKUP,发现确实是NFS
看来与NFS有关,从12.1.0.1开始,ORACLE已经默认开启 DNFS,检查报警日志的启动部分,发现有DNFS的信息,看来确实在使用DNFS,难到RMAN 在 DNFS上备份有问题吗,
于是马上搜MOS,发现了:RMAN Backups Hang using dNFS With NFSv4 (Doc ID 2504179.1)
看来是中招了呀,于是,我把备份位置放到其他位置,比如 /oradata,再去进行备份,发现3分钟备份完成,解决办法,一是打补丁,2是更换备份位置。
我看了一下,我的版本上正好有这个补丁,但生产环境打补丁,需要提前提申请,并且提交应急预案等等,看来算了,还是换个位置吧。
但是在换个位置后,执行备份脚本,发现还是要不出来,经过跟踪,发现停在 CROSSCHECK BACKUP上,LIST BACKUP上不快,于是想到前面的备份应该还在NFS上,怎么能够快速去掉NFS上的备份,不让它去检查呢?
RMAN> list backup of database;
List of Backup Sets
===================
BS Key Type LV Size Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ -------------------
7799 Full 391.05M DISK 00:05:53 2024-03-24 05:13:58
BP Key: 7815 Status: AVAILABLE Compressed: YES Tag: CDBFULL
Piece Name: /dbak/cdb_bak/whole_20240324_js2mfjtl_1_1_CDB.bak
List of Datafiles in backup set 7799
File LV Type Ckp SCN Ckp Time Abs Fuz SCN Sparse Name
---- -- ---- ---------- ------------------- ----------- ------ ----
3 Full 282303837 2024-03-24 05:08:05 NO +DATA/CDB/DATAFILE/sysaux01.dbf
8 Full 282303837 2024-03-24 05:08:05 NO +DATA/CDB/DATAFILE/undotbs2.350.1131740169
BS Key Type LV Size Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ -------------------
7800 Full 39.26M DISK 00:05:05 2024-03-24 05:19:10
BP Key: 7816 Status: AVAILABLE Compressed: YES Tag: CDBFULL
Piece Name: /dbak/cdb_bak/whole_20240324_jv2mfk8t_1_1_CDB.bak
List of Datafiles in backup set 7800
Container ID: 6, PDB Name: TD_CUS
File LV Type Ckp SCN Ckp Time Abs Fuz SCN Sparse Name
---- -- ---- ---------- ------------------- ----------- ------ ----
18 Full 282306012 2024-03-24 05:14:05 NO +DATA/CDB/E720C99EF5DB0A43E05335D3640AB996/DATAFILE/system.293.1131740169
20 Full 282306012 2024-03-24 05:14:05 NO +DATA/CDB/E720C99EF5DB0A43E05335D3640AB996/DATAFILE/users.284.1131740169
如果把备份的元信息去掉,是否就不会去找了呢?
想到使用 change backuppiece 'xxxx' uncatalog;应该可以,于是执行以下语句:
RMAN> change backuppiece '/dbak/cdb_bak/whole_20240324_js2mfjtl_1_1_CDB.bak' uncatalog;
uncataloged backup piece
backup piece handle=/dbak/cdb_bak/whole_20240324_js2mfjtl_1_1_CDB.bak RECID=7815 STAMP=1164431285
Uncataloged 1 objects
RMAN> change backuppiece '/dbak/cdb_bak/whole_20240324_jv2mfk8t_1_1_CDB.bak' uncatalog;
uncataloged backup piece
backup piece handle=/dbak/cdb_bak/whole_20240324_jv2mfk8t_1_1_CDB.bak RECID=7816 STAMP=1164431645
Uncataloged 1 objects
再去执行crosscheck backup;后不再HANG住。
3.问题解决:
修改备份脚本,更换备份文件到非NFS位置,然后,再使用操作系统CP命令,把备份文件拷贝到NFS位置即可。
好了,按照惯例:最后介绍一下我自己,主要从事ORACLE数据库10年以上工作,有10G OCP,10G OCM,11g ocp,11G OCM ,12C OCM,19c ocp,19C OCM,MYSQL5.7 OCP, PGCE ,ogca等等,为了方便交流,我建立了一个微信群:水煮数据库,主要交流日常工作中用到的数据库问题,包含但不限于:ORACLE,PG,MYSQL,SQLSERVER,OB,TIDB,达梦,TDSQL,OPENGAUSS,人大金仓,GBASE等等,如果有兴趣交流,可以加我微信:zq24803366, 我可以拉你入群。
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/cqsztech/article/details/138276141