Oracle 12c rman duplicate网卡offload引起文件坏块问题

简介: Oracle 12c rman duplicate网卡offload引起文件坏块问题

前言:

最近,在使用rman duplicate进行备库环境搭建时,遇到了ORA-19849 19612坏块报错,最终分析是发现由于网络的配置导致。

问题:

在 ORACLE 12.2.0.1.180417 通过RMAN duplicate进行备库初始化,在复制文件的过程中,数据文件恢复失败,出现块迷失或者坏块错误

RMAN-03002: failure of Duplicate Db command at 11/18/2022 15:45:06
RMAN-05501: aborting duplication of target database
RMAN-03015: error occurred in stored script Memory Script
ORA-19660: some files in the backup set could not be verified
ORA-19661: datafile 8 could not be verified
ORA-19849: error while reading backup piece from service yjzxpr
ORA-19612: datafile 8 not restored due to missing or corrupt data

问题原因:

网卡开启了TCP OFFLOAD(TCP网络卸载)功能,默认开启,导致在网络传输过程中出现损坏!!!

问题解决:

  • 使用备份压缩方式进行rman duplicate
  • 禁用网卡的tcp offload功能

问题分析:

出现这个报错,我们首先怀疑是源库的数据文件出现了问题,所以检查了数据文件的状态,但源库的数据文件全都是online


SQL> select status,count(*)
  2  from v$datafile_header
  3  group by status;

STATUS                  COUNT(*)
--------------------- ----------
ONLINE                       129

接着,我们对源库的数据文件进行坏块检测,并没有发现到坏块

rman target /
run {
allocate channel d1 type disk;
allocate channel d2 type disk;
allocate channel d3 type disk;
allocate channel d4 type disk;
backup validate check logical database;
release  channel d1;
release  channel d2;
release  channel d3;
release  channel d4;
}
---没有检测到坏块
SQL> select * from V$DATABASE_BLOCK_CORRUPTION ;

no rows selected

SQL>

到这里,我们可以初步排除是源库数据文件问题所导致的

接下来,我们使用debug模式,分析是否有更多详细的报错信息


rman target 'sys/""'@sourceo  auxiliary 'sys/""'@target debug trace=rmanDebug.trc

从debug的日志里面,我们发现坏块是从读取通过网络传输的备份片里面产生的,怀疑很有可能是网络层面问题导致

Corrupt block 747838 found during reading backup piece, file=network, corr_type=3
Continuing reading piece network, no other copies available.

同时,从Oracle mos官方上也发现产生相关问题的可能解决方法

案例一:RMAN Active Duplicate Fails with ORA-19837 ORA-19849 ORA-19850 (Doc ID 2451611.1)

根据文档的描述,如果目标数据库RMAN配置了加密,可能导致该问题的发生,解决的方法是关闭加密配置,但我们的数据库的加密已经关闭,不匹配该问题场景

图片

案例二:ORA-19612 Error Trying To Duplicate Database With Rman (Doc ID 1361914.1)

根据文档的描述,可能由于网络设置,外部超时和防火墙设置,如"SQLNet修复"和"SQLNet深度数据包检查"导致,解决方法是手工检验,修复问题备份片,再重新尝试传输到目标端,该文档提供的信息有限,并且当前环境网络只通过交换机,并没有经过防火墙

图片

案例三:ORA-19660 ORA-19661 DURING BACKUP VALIDATION (NFS) (Doc ID 1921662.1)

根据文档的描述,在通过NFS进行备份片存储时,可能导致备份片出现坏块的情况,由于网卡配置了TCP OFFLOAD功能

注:TCP OFFLOAD是指将本该在操作系统进行的一些大数据包处理(如TCP分段、IP分片、重组、checksum、TCP协议处理等)放到网卡硬件中去做, 降低系统 CPU 消耗的同时,提高处理的性能

该文档可以借鉴的类似地方是通过网络进行备份片传输的过程中,出现了备份片坏块,与之前我们通过debug分析读取通过网络传输的备份片出现坏块比较相似,并且提供了相对具体的网络配置可能问题

图片

图片

接下来我们检查服务器的网卡是否配置了TCP OFFLOAD功能,发现了服务器的网卡的确开启了tcp offload功能

[root@lhr ~]# ethtool -k eth0 | grep offload    
tcp-segmentation-offload: on
udp-fragmentation-offload: off
generic-segmentation-offload: on
generic-receive-offload: on
large-receive-offload: off
rx-vlan-offload: on [fixed]
tx-vlan-offload: on [fixed]
l2-fwd-offload: off [fixed]
hw-tc-offload: off [fixed]
esp-hw-offload: off [fixed]
esp-tx-csum-hw-offload: off [fixed]
rx-udp_tunnel-port-offload: off [fixed]
tls-hw-tx-offload: off [fixed]
tls-hw-rx-offload: off [fixed]
macsec-hw-offload: off [fixed]
hsr-tag-ins-offload: off [fixed]
hsr-tag-rm-offload: off [fixed]
hsr-fwd-offload: off [fixed]
hsr-dup-offload: off [fixed]

确认了可能是网络设置TCP OFFLOAD导致的问题之后,我们尝试通过文档提供方法进行修复,文档共提供了两个方法

  • 使用压缩备份片的方式进行
  • 网卡关闭TCP OFFLOAD功能

最后我们选择采用压缩备份片的方式进行rman duplicate,主要是根据以下考虑,由于关闭TCP OFFLOAD功能涉及网络基础架构,关闭该功能并没有进行充分的测试验证,可能带来潜在的网络性能影响,而使用压缩备份片的方式进行rman duplicate,只是从命令操作方式上进行调整,影响可控

随后,我们使用了压缩方式USING COMPRESSED BACKUPSET的duplicate,这一次,报错没有再次发生,RMAN-19849 19612问题得到解决

duplicate target database for standby from active database nofilenamecheck USING COMPRESSED BACKUPSET;

总结:

这个问题的分析解决过程还是比较诡异、曲折的,因为同环境上有4套数据库,使用相同的dupliate方式部署了2套是没有问题的,在部署第三套时才发生坏块问题,由于第三套的数据量较大达到TB级别,所以才触发了网络层面的问题,好在最后找到规避的方法。

参考

https://mp.weixin.qq.com/s/4ZHznQhr-tbTBB0CMc8OXw

目录
相关文章
|
10天前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的控制文件与归档日志文件
本文介绍了Oracle数据库中的控制文件和归档日志文件。控制文件记录了数据库的物理结构信息,如数据库名、数据文件和联机日志文件的位置等。为了保护数据库,通常会进行控制文件的多路复用。归档日志文件是联机重做日志文件的副本,用于记录数据库的变更历史。文章还提供了相关SQL语句,帮助查看和设置数据库的日志模式。
【赵渝强老师】Oracle的控制文件与归档日志文件
|
10天前
|
Oracle 关系型数据库 数据库
【赵渝强老师】Oracle的参数文件与告警日志文件
本文介绍了Oracle数据库的参数文件和告警日志文件。参数文件分为初始化参数文件(PFile)和服务器端参数文件(SPFile),在数据库启动时读取并分配资源。告警日志文件记录了数据库的重要活动、错误和警告信息,帮助诊断问题。文中还提供了相关视频讲解和示例代码。
|
10天前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的数据文件
在Oracle数据库中,数据库由多个表空间组成,每个表空间包含多个数据文件。数据文件存储实际的数据库数据。查询时,如果内存中没有所需数据,Oracle会从数据文件中读取并加载到内存。可通过SQL语句查看和管理数据文件。附有视频讲解及示例。
|
2月前
|
Oracle 关系型数据库 数据库
数据库数据恢复—Oracle数据库文件出现坏块的数据恢复案例
打开oracle数据库报错“system01.dbf需要更多的恢复来保持一致性,数据库无法打开”。 数据库没有备份,无法通过备份去恢复数据库。用户方联系北亚企安数据恢复中心并提供Oracle_Home目录中的所有文件,急需恢复zxfg用户下的数据。 出现“system01.dbf需要更多的恢复来保持一致性”这个报错的原因可能是控制文件损坏、数据文件损坏,数据文件与控制文件的SCN不一致等。数据库恢复工程师对数据库文件进一步检测、分析后,发现sysaux01.dbf文件损坏,有坏块。 修复并启动数据库后仍然有许多查询报错,export和data pump工具使用报错。从数据库层面无法修复数据库。
数据库数据恢复—Oracle数据库文件出现坏块的数据恢复案例
|
1月前
|
Oracle 关系型数据库 数据库
oracle数据恢复—Oracle数据库文件损坏导致数据库打不开的数据恢复案例
打开oracle数据库时报错,报错信息:“system01.dbf需要更多的恢复来保持一致性,数据库无法打开”。急需恢复zxfg用户下的数据。 出现上述报错的原因有:控制文件损坏、数据文件损坏、数据文件与控制文件的SCN不一致等。数据恢复工程师对数据库文件做进一步检测分析后发现sysaux01.dbf文件有坏块。修复sysaux01.dbf文件,启动数据库依然有许多查询报错。export和data pump工具无法使用,查询告警日志并分析报错,确认发生上述错误的原因就是sysaux01.dbf文件损坏。由于该文件损坏,从数据库层面无法修复数据库。由于system和用户表空间的数据文件是正常的,
|
4月前
|
Oracle 安全 关系型数据库
|
4月前
|
SQL Oracle 关系型数据库
关系型数据库Oracle设置 RMAN 环境:
【7月更文挑战第25天】
69 2
|
4月前
|
SQL Oracle 关系型数据库
关系型数据库Oracle结束 RMAN 会话:
【7月更文挑战第25天】
83 1
|
30天前
|
存储 Oracle 关系型数据库
Oracle数据库的应用场景有哪些?
【10月更文挑战第15天】Oracle数据库的应用场景有哪些?
153 64
|
20天前
|
SQL Oracle 关系型数据库
Oracle数据库优化方法
【10月更文挑战第25天】Oracle数据库优化方法
26 7