备库查询导致的ORA-01110错误及修复

   最近帮助业务部门解决了一个技术问题,因为发现有数据问题需要对存在问题的数据做分析。当然一个难点就是把数据给筛选出来,当我看到他们提供的语句,在备库做了简单的数据评估之后,发现数据量比想象的要多,大概有200万条左右的数据,而业务部门手头有一个excel文件,需要和这些数据做一些比对,当然停了下筛选逻辑还蛮复杂,最开始建议他们数据量太大,使用excel还是可能出问题,但是业务部门认为应该没有太大的问题,他们会有excel中的公式等来处理,想想也有道理,就提供给了他们一个近40M的文件。
   等到快中午的时候,业务部门找到我说,两个excel文件做比对,电脑完全卡住了,还是想问问我看看有没有好的办法,从我的角度来看,这些操作用sql语句完全可以胜任,而且数据量更大都不是问题。简单了解了需求之后,和开发的同学确认了业务逻辑,就开始准备环境了,当然思路还是比较常规的,用外部表来实现。
    首先通过excel来得到需要的几列数据,生成csv文件或者文本文件均可。然后在目标数据库服务端创建外部表来读取这些文本数据,同时和相关的表做集合运算,比如Minus,intersect之类的操作,即可得到最终的结果。
    说起来容易,在实际操作中碰到了一个比较有意思的问题。
在备库中准备做这类的大查询,结果抛出了一个错误。创建的外部表为jeanron.temp_tab
select t1.cash,t1.TEST_TRANSACTION_ID ,t2.trade_no,t2.cash from TEST_NEW.TEST_detail t1,jeanron.temp_tab t2 where req_time >= to_date('2016-03-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss') and req_time < to_date('2016-04-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss') and status <> '1'  and pay_way_channel_code in ('44','45','46','15','16','17','18','19','91','93','94','146','147','148','149','150','151','159')
*
ERROR at line 1:
ORA-00376: file 21 cannot be read at this time
ORA-01110: data file 21: '/U01/app/oracle/oradata/TEST/TEST_new_index04.dbf'
看问题提示无法读取21号文件,根据错误可以基本判断出来应该是文件在offline状态。
查看数据文件的状态,可以看到21号文件TEST_new_index04.dbf 目前是在RECOVER状态。

jeanron@TEST> select file_name,status,online_status from dba_data_files;
FILE_NAME                                             STATUS    ONLINE_
-------------------------------------------------------- --------- -------
/U01/app/oracle/oradata/TEST/TEST_new_data01.dbf         AVAILABLE ONLINE
/U01/app/oracle/oradata/TEST/system01.dbf                AVAILABLE SYSTEM
...
/U01/app/oracle/oradata/TEST/TEST_new_index04.dbf        AVAILABLE RECOVER
这个问题看起来比较奇怪,查看主库中的数据文件状态,都已经是online,说明在过去的某一个时间出现过一个相关的小问题。
对于这类问题,一个比较快捷的解决方法就是从主库生成备库控制文件,然后启动数据库到Mount阶段即可。
但是这一次还是出了差错,把生成的备库控制文件拷贝到备库替换之后,重启数据库,dg broker报了下面的错误。
DGMGRL> show configuration;
Configuration
  Name:                TEST
  Enabled:             YES
  Protection Mode:     MaxPerformance
  Fast-Start Failover: DISABLED
  Databases:
    TEST   - Primary database
    sTEST4 - Physical standby database
    sTEST2 - Physical standby database

Current status for "TEST":
Warning: ORA-16607: one or more databases have failed
查看alert日志,报出了ORA-01110的错误。
RFS[1]: Archived Log: '/U01/app/oracle/flash_recovery_area/STEST2/archivelog/2016_04_12/o1_mf_1_8158_cjs8mqfp_.arc'
Tue Apr 12 15:24:33 2016
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE  THROUGH ALL SWITCHOVER DISCONNECT  NODELAY
Tue Apr 12 15:24:33 2016
Attempt to start background Managed Standby Recovery process (TEST)
MRP0 started with pid=23, OS id=10683
Tue Apr 12 15:24:33 2016
MRP0: Background Managed Standby Recovery process started (TEST)
Managed Standby Recovery not using Real Time Apply
MRP0: Background Media Recovery terminated with error 1110
Tue Apr 12 15:24:38 2016
Errors in file /U01/app/oracle/admin/TEST/bdump/TEST_mrp0_10683.trc:
ORA-01110: data file 21: '/U01/app/oracle/oradata/TEST/TEST_new_index04.dbf'
ORA-01122: database file 21 failed verification check
ORA-01110: data file 21: '/U01/app/oracle/oradata/TEST/TEST_new_index04.dbf'
ORA-01203: wrong incarnation of this file - wrong creation SCN
Tue Apr 12 15:24:38 2016
Errors in file /U01/app/oracle/admin/TEST/bdump/TEST_mrp0_10683.trc:
ORA-01110: data file 21: '/U01/app/oracle/oradata/TEST/TEST_new_index04.dbf'
ORA-01122: database file 21 failed verification check
ORA-01110: data file 21: '/U01/app/oracle/oradata/TEST/TEST_new_index04.dbf'
ORA-01203: wrong incarnation of this file - wrong creation SCN
Tue Apr 12 15:24:38 2016
MRP0: Background Media Recovery process shutdown (TEST)
根据错误可以看出应该是文件校验的时候有问题,creation SCN校验出现了问题。
而这个时候查看dg broker中的verbose明细信息,显示这个备库目前的状态为:
Current status for "sTEST2":
Error: ORA-16766: Redo Apply unexpectedly offline
对于这个问题,要想修复SCN的部分,有一个策略就是BBED,但是线上库,而且考虑这种风险,与其BBED修改,我更愿意保险一些重建备库。
不过重建备库是最后的方案,我来看看有没有其它的方案。
这个数据文件通过查看明细信息发现已经处于这种状态很久了,也就意味着这部分信息在控制文件中已经无法保留,数据文件的SCN还是很早之前,比如半年前的SCN情况。这个时候如果尝试做recover肯定是不现实的,归档保留也不会那么久。不过因为是备库,所以这个问题还好办一些,那就是从主库还原恢复即可。
这个数据文件大概有5G左右,目前使用率在60%,rman备库数据文件大概有3G左右。
所以拷贝数据文件的备份集到备库之后,使用catalog start with的方式进行还原。
RMAN> catalog start with '/U01/app/oracle/temp';
using target database control file instead of recovery catalog
searching for all files that match the pattern /U01/app/oracle/temp
List of Files Unknown to the Database
=====================================
File Name: /U01/app/oracle/temp/full_1804_908984436_1
Do you really want to catalog the above files (enter YES or NO)? yes
cataloging files...
cataloging done
List of Cataloged Files
=======================
File Name: /U01/app/oracle/temp/full_1804_908984436_1
RMAN> restore datafile 21;
Starting restore at 12-APR-16
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=2976 devtype=DISK

channel ORA_DISK_1: starting datafile backupset restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
restoring datafile 00021 to /U01/app/oracle/oradata/TEST/TEST_new_index04.dbf
channel ORA_DISK_1: reading from backup piece /U01/app/oracle/temp/full_1804_908984436_1
channel ORA_DISK_1: restored backup piece 1
piece handle=/U01/app/oracle/temp/full_1804_908984436_1 tag=TAG20160412T154036
channel ORA_DISK_1: restore complete, elapsed time: 00:00:36
Finished restore at 12-APR-16

这个时候不用重启备库,数据文件的SCN就自然推进到了新的值,再次查看数据文件的状态就变为了ONLINE.
通过这个案例可以看出,对于数据文件的操作还是需要非常谨慎,对于数据文件的状态监控也应该是运维监控的一个重要参考。

时间: 2024-08-20 03:20:01

备库查询导致的ORA-01110错误及修复的相关文章

PostgreSQL源码分析 备库查询冲突 - User was holding shared buffer pin for too long

背景 PostgreSQL 的基于流复制的物理备库是基于redo的物理块复制备库,允许开放只读的功能,但是需要注意,由于主库可能不断的产生redo,这些redo可能会与备库的QUERY产生冲突. 什么情况下query会堵塞.或与恢复冲突? 当以下操作产生的REDO被复制到备库,并且备库准备拿这些REDO来恢复时. Access Exclusive locks taken on the primary server, including both explicit LOCK commands an

备库中ORA-00600错误的简单修复

最近偶尔会接到一条短信,提示某个备库中出现了ORA-00600的错误.对于这个问题还真不能心存侥幸,自己带着疑问查看了一下, 这是一个一主两备的库,主库和其中的一个备库没有任何的ORA-00600的错误,只有这一个备库中偶尔会出现ORA-00600的错误. 这个问题如果放大还是很严重的,比如主库出现问题了,如果切换到这个备库,那么ORA-00600的错误就会直接转移过来,这个时候这儿备库就有点鸡肋的味道了.所以这个问题一种思路就是重新搭建备库,另外一种就是手工修复.我还是更希望通过手工修复的方式

DG3.2——逻辑备库搭建

原文转自:http://blog.csdn.net/tianlesoftware/article/details/5564179 操作系统:linux redhat 4.7 Oracle: 10.2.0.1 主库:orcl_pd 备库:LGDG   一.  逻辑Standby创建过程   1  创建物理Standby 参考之前的博客 简单的做如下几点提示: 1).初始化参数配置 初始化参数的修改并不仅仅只是在待创建的Standby数据库端创建,当前的Primary数据库甚至同一个Data Gua

CentOS 6.5 ext4 filesystemio_options=SETALL 备库archivelog 损坏问题

数据库版本 11.2.0.3.15 操作系统 CentOS 6.5  文件系统 ext4 最近发现我们线上数据库的3台备库,全部出现一样的错误如下: INCIDENT_ID          PROBLEM_KEY                                                 CREATE_TIME                               -------------------- -------------------------------

逻辑备库的Swichover和Failover

逻辑备库的Switchover  检查Primary数据库状态 查看当前Primary数据库状态:SQL>  SELECT SWITCHOVER_STATUS FROM V$DATABASE; SWITCHOVER_STATUS -------------------- TO STANDBY  如果该查询返回TO STANDBY 或SESSIONS ACTIVE则表示状态正常,可以执行转换操作,如果是其他值,你就需要重新检查一下Data Guard配置,如看看LOG_ARCHIVE_DEST_n

Oracle中DG备库报错ORA-00313、00312、27037

DATAGUARD配置如下: PROD为主库,SBDB为备库 日志组1-3组为redolog file,4-6组为standby log 在创建standby log后主库关库,使用冷备tar包将数据传输到备库进行的恢复. DG配置完成之后,启动备库之后,备库alert日志报错如下: Errors in file /u01/app/oracle/admin/SBDB/udump/sbdb_rfs_14903.trc: ORA-00313: open failed for members of l

一封备库报警邮件的分析

对于orabbix报出的警报,自己都是心怀敬畏,因为这些表面的现象如果深入分析没准就能有所收获,当然目的还是解决问题,不是一味追求指标. 今天收到的报警邮件如下,然后在两分钟后问题自动恢复. ### ZABBIX-监控系统: ------------------------------------ 报警内容: DG_issue ------------------------------------ 报警级别: PROBLEM ----------------------------------

备库报警邮件的分析案例(三)

继前两篇分析了一个看似非常普通的报警邮件,结果在分析问题的时候八面玲珑,相关因素都给分析了一下,没想到还真是有不小的收获. 前两篇地址: http://blog.itpub.net/23718752/viewspace-1827685/ http://blog.itpub.net/23718752/viewspace-1829630/ 最后通过手工定位监控的方式终于把罪魁祸首揪了出来,为什么在备库使用ash无果,因为还是10g的库,还没有这个特性,在11g中才可以.这个也算是在10g中的一个监控

一个备库中ORA错误信息的分析

最近也在处理一些遗留的问题,所以对于使用orabbix的报警还是心怀敬畏之心,一方面是我们让它能够做全方位的监控,另一方面也让我发现我们还是存在不少的小问题,小问题虽小,但是放大了,就是大麻烦,甚至数据库事故. 自从上次在社群分享了DB time的抖动案例之后,有不少的朋友似乎对这个工具很感兴趣,我做这个分享的一个主要原因就是希望大家在有些细节中发现问题,至于我分享的问题原因,都是各种各样的小问题,有些朋友也纳闷这种错误似乎还是比较低级的,通过一般的监控都应该解决,但是确实存在,发现了解决了,就