前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >由drop datafile导致的oracle bug(r6笔记第56天)

由drop datafile导致的oracle bug(r6笔记第56天)

作者头像
jeanron100
发布2018-03-16 15:37:01
6200
发布2018-03-16 15:37:01
举报

今天碰到了一个dataguard在10gR2的bug,不管怎么样确实是在特定的时间做了特定的操作结果碰到了特定的问题。 这个问题是在10gR2的版本10.2.0.4.0的一个库中出现的,在做巡检的时候发现表空间使用率已经很高了,就准备加一些数据文件把这个问题给修复了,按理说这也是一个常规操作,没有什么可圈圈点点的地方。 但是添加完数据文件之后,过了一会,就收到报警说备库出了点问题,自己还纳闷到底是什么原因导致的,带着疑问使用dgmgrl来查看了一下。

代码语言:javascript
复制
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

通过这个,确实发现备库出了些问题,赶快连接到备库中,结果查看数据日志就发现原来MRP进程给停掉了。

代码语言:javascript
复制

Fri Sep 11 17:58:53 2015
Errors in file /U01/app/oracle/admin/test/bdump/test_mrp0_10953.trc:
ORA-00600: internal error code, arguments: [3689], [21], [], [], [], [], [], []
Errors with log /U01/app/oracle/flash_recovery_area/STEST4/archivelog/2015_09_11/o1_mf_1_7414_bz598mqc_.arc
MRP0: Background Media Recovery terminated with error 600
Fri Sep 11 17:58:55 2015
Errors in file /U01/app/oracle/admin/test/bdump/test_mrp0_10953.trc:
ORA-00600: internal error code, arguments: [3689], [21], [], [], [], [], [], []
Fri Sep 11 17:59:04 2015
Some recovered datafiles maybe left media fuzzy
Media recovery may continue but open resetlogs may fail
Fri Sep 11 17:59:04 2015

看到这个错误,发现问题似乎还是有些奇怪,因为关联的ora错误是ora-600 带着这个疑问,首先想到的就是自己之前碰到过MRP无法启动的问题,dataguard中MRP无法启动的问题分析和解决 感兴趣可以参考这个链接http://blog.itpub.net/23718752/viewspace-1715472/ 结果自己按照当时的问题思路也进行相似的分析,结果还真发现了问题。 使用下面的语句查看数据文件。 在备库查看:

代码语言:javascript
复制

select file#,df.name,df.ts#,ts.name,df.RFILE# from v$datafile df,v$tablespace ts
    where df.ts#=ts.ts#;
     FILE# NAME                                                                TS#                  NAME     
---------- ------------------------------------------------------------ ---------- -
        20 /U01/app/oracle/oradata/test/test_new_data04.dbf                      9 TEST_NEW_DATA       
        21 /U01/app/oracle/oradata/test/test_new_index04.dbf                     9 TEST_NEW_DATA 

主库查看

代码语言:javascript
复制
     FILE# NAME                                                                TS#                  NAME 
---------- ------------------------------------------------------------ ---------
        20 /U01/app/oracle/oradata/test/test_new_data04.dbf                       9 TEST_NEW_DATA   
        21 /U01/app/oracle/oradata/test/test_new_index04.dbf                     10 TEST_NEW_INDEX

通过这个可以发现表空间的数据文件在两个库中不一致。 这个时候联系起来ora600其实在错误里面已经暗示出了21的含义

ORA-00600: internal error code, arguments: [3689], [21], [], [], [], [], [], []

这个时候自己就恍然大悟了,自己在给表空间TEST_NEW_DATA添加数据文件的时候,不小心添加成了test_new_index04.dbf,结果创建好之后发现了这个问题, 就使用alter tablespace test_new_data drop datafile 'xxxxx'的方式删除了,然后又创建了一个新的数据文件test_new_data04.dbf 这么一个操作也没有什么非议之处,但是在10gR2 10.2.0.4.0里就是不行,因为有一个bug Bug 5623467 - Corrupt redo from ALTER TABLESPACE DROP DATAFILE (文档 ID 5623467.8)

这个bug,oracle也没有给出其它可行的意见,除了升级打补丁外,建议就是不要使用drop datafile的命令,但是我已经运行了,你说怎么办,只能重建备库了。 当然在重建备库这个繁重的工作之外我还想做一些尝试。 既然数据字典中不同步,对于drop的操作不支持,我就直接使用alter database datafile ‘xxxxxx' offline drop来搞定这个问题,上次的MRP的问题在11g中就可以这么解决。 SQL> alter database datafile '/U01/app/oracle/oradata/test/test_new_index04.dbf' offline drop; Database altered.

命令运行成功了,但是查看datafile还是没有发生变化。

代码语言:javascript
复制
     FILE# NAME                                                                TS#                  NAME     
---------- ------------------------------------------------------------ ---------- -
        20 /U01/app/oracle/oradata/test/test_new_data04.dbf                      9 TEST_NEW_DATA       
        21 /U01/app/oracle/oradata/test/test_new_index04.dbf                     9 TEST_NEW_DATA       

再次尝试recover managed standby database disconnect from session发现问题依旧,还是ora-600的错误。 这个时候想把database 启动到read only时也出问题。

代码语言:javascript
复制

SQL> alter database open read only;
alter database open read only
*
ERROR at line 1:
ORA-16004: backup database requires recovery
ORA-01196: file 1 is inconsistent due to a failed media recovery session
ORA-01110: data file 1: '/U01/app/oracle/oradata/test/system01.dbf'

所以没有办法了,重建备库了,真是让人无奈的选择。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2015-09-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 杨建荣的学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档