ORA-10578 ORA-01110 ORA-26040错误处理

179 篇文章 18 订阅

一、问题描述

在ADG的standby库查询某张表的数据时,报如下错误:
在这里插入图片描述

二、原因分析

这是由NOLOGGING操作引起的坏块。

如果数据段(表段、索引段)被定义为NOLOGGING属性,那么当NOLOGGING加APPEND、UNRECOVERABLE操作修改该数据段或者使用数据泵(DATAPUMP)impdp参数DISABLE_ARCHIVE_LOGGING:Y时,联机重做日志只会记录很少的日志信息。如果这些联机重做日志或归档日志被用来恢复数据文件,那么Oracle会将对应的数据块标志为无效(Soft Corrupt),而且下一次访问这些数据块时,会报ORA-01578和ORA-26040错误。

三、处理方法

1. 修改Primary日志记录模式

为了避免后期出现同样的问题,建议把Primary库的日志记录模式修改为FORCE LOGGING。
说明:这里只是一个建议,是否需要修改要结合实际情况决定。

--查看当前日志记录模式(在Primary库操作)
# su - oracle
$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Tue Nov 8 12:26:37 2022

Copyright (c) 1982, 2013, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

--查询结果显示当前日志记录模式未设置为force_logging
SQL> select log_mode,force_logging from v$database;

LOG_MODE     FOR
------------ ---
ARCHIVELOG   NO

--修改日志记录模式为force_logging
SQL> alter database force logging;

Database altered.

--查询结果显示日志记录模式已成功设置为force_logging
SQL> select log_mode,force_logging from v$database;

LOG_MODE     FOR
------------ ---
ARCHIVELOG   YES
2. 替换坏块
----在Primary库执行如下操作

--1.将表空间置于联机备份模式
SQL> alter tablespace USERS begin backup; 
Tablespace altered.

--2.将坏块所在文件从primary拷贝到standby(XXX.XXX.XX.XX替换成standby的ip)
$ scp /oracle/app/oracle/test/users02.dbf root@XXX.XXX.XX.XX:/oracle/app/oracle/test/users02.dbf

--3,结束备份模式
SQL> alter tablespace USERS end backup;  
Tablespace altered.

在热备份之前需要alter tablespace … begin backup呢?
我们在对数据库进行热备份的时候,需要使用alter tablespace … begin backup将表空间置于脱机或backup命令后,然后用操作系统命令进行数据文件的物理拷贝,达到备份的目的,这个过程中数据文件还是照样联机,并进行正常的数据插入,但会导致比平常更多的REDO记录的产生。

begin backup的tablespace下的数据文件在热备期间SCN不会发生变化。
这样带来的好处是,我们拷贝数据文件是个漫长的过程,我们不能保证数据文件头一定是首先被拷贝到备份里去的。在这过程中,数据库有可能会发生变化,假如已经产生变化的数据块之前已经被拷贝到备份里了,而没有置于begin backup的话其数据文件头里的SCN也将会产生变化,之后,数据文件头被拷贝到备份。如果之后的某个时间数据库需要进行恢复,将备份拷贝过来,从数据文件头的SCN开始进行介质恢复,那么从前面热备份操作时开始拷贝到文件产生变化的这段时间内的数据不在备份里,而介质恢复也不会去重做它,就将导致数据丢失。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值