oracel数据15TB的数据库恢复小记

该客户数据库在春节之前就出现故障,后面经过多人尝试恢复后,均为打开数据库;数据库在open时报如下

Wed Jan 13 17:03:25 2016
ORA-01555 caused by SQL statement below (SQL ID: 4krwuz0ctqxdt, Query Duration=1452675805 sec, SCN: 0x0d6a.46c6524f):
Wed Jan 13 17:03:25 2016
select ctime, mtime, stime from obj$ where obj# = :1
Wed Jan 13 17:03:25 2016
Errors in file /u01/app/oracle/admin/xxxx/udump/xxxx1_ora_18274.trc:
ORA-00704: bootstrap process failure
ORA-00704: bootstrap process failure
ORA-00604: error occurred at recursive SQL level 1
ORA-01555: snapshot too old: rollback segment number 20 with name "_SYSSMU20$" too small
Error 704 happened during db open, shutting down database
USER: terminating instance due to error 704
Instance terminated by USER, pid = 18274
ORA-1092 signalled during: alter database open resetlogs...
Wed Jan 13 17:06:34 2016

该错误其实很场景,也恢复过太多这种情况了,这里不再过多描述。不过这里让我感觉很诧异的是该SQL的Query Duration 太大了。

根据经验,这种情况下可以直接推进SCN。可是当我们进行如下操作,发现不起作用:
alter session set events ’10015 trace name adjust_scn level 13740′;
进一步通过10046 trace跟踪发现该sql访问了如下几个block:

PARSING IN CURSOR #5 len=52 dep=1 uid=0 oct=3 lid=0 tim=1422682994194207 hv=429618617 ad='395fa870'
select ctime, mtime, stime from obj$ where obj# = :1
END OF STMT
PARSE #5:c=0,e=225,p=0,cr=0,cu=0,mis=1,r=0,dep=1,og=4,tim=1422682994194205
BINDS #5:
kkscoacd
 Bind#0
  oacdty=02 mxl=22(22) mxlc=00 mal=00 scl=00 pre=00
  oacflg=08 fl2=0001 frm=00 csi=00 siz=24 off=0
  kxsbbbfp=2b7694a4aea8  bln=22  avl=02  flg=05
  value=20
EXEC #5:c=0,e=398,p=0,cr=0,cu=0,mis=1,r=0,dep=1,og=4,tim=1422682994194653
WAIT #5: nam='db file sequential read' ela= 20378 file#=1 block#=218 blocks=1 obj#=-1 tim=1422682994215120
WAIT #5: nam='db file sequential read' ela= 480   file#=1 block#=219 blocks=1 obj#=-1 tim=1422682994215712
WAIT #5: nam='db file sequential read' ela= 18990 file#=1 block#=122 blocks=1 obj#=-1 tim=1422682994234841
。。。。。。。
EXEC #6:c=0,e=141,p=0,cr=0,cu=0,mis=0,r=0,dep=2,og=3,tim=1422682994267351
FETCH #6:c=0,e=34,p=0,cr=2,cu=0,mis=0,r=1,dep=2,og=3,tim=1422682994267413
STAT #6 id=1 cnt=1 pid=0 pos=1 obj=15 op='TABLE ACCESS BY INDEX ROWID UNDO$ (cr=2 pr=0 pw=0 time=28 us)'
STAT #6 id=2 cnt=1 pid=1 pos=1 obj=34 op='INDEX UNIQUE SCAN I_UNDO1 (cr=1 pr=0 pw=0 time=16 us)'
WAIT #5: nam='db file sequential read' ela= 12312 file#=7 block#=4993 blocks=1 obj#=-1 tim=1422682994279882
WAIT #5: nam='db file sequential read' ela= 18776 file#=7 block#=4965 blocks=1 obj#=-1 tim=1422682994298789
WAIT #5: nam='db file sequential read' ela= 13157 file#=7 block#=4801 blocks=1 obj#=-1 tim=1422682994312081
WAIT #5: nam='db file sequential read' ela= 12519 file#=7 block#=4954 blocks=1 obj#=-1 tim=1422682994324726
WAIT #5: nam='db file sequential read' ela= 410 file#=7 block#=4952 blocks=1 obj#=-1 tim=1422682994325259
WAIT #5: nam='db file sequential read' ela= 5447 file#=7 block#=4778 blocks=1 obj#=-1 tim=1422682994330830
WAIT #5: nam='db file sequential read' ela= 12349 file#=7 block#=5184 blocks=1 obj#=-1 tim=1422682994343291
WAIT #5: nam='db file sequential read' ela= 11874 file#=5 block#=8645 blocks=1 obj#=-1 tim=1422682994355283
WAIT #5: nam='db file sequential read' ela= 4925 file#=5 block#=8595 blocks=1 obj#=-1 tim=1422682994360323
FETCH #5:c=4999,e=165865,p=15,cr=18,cu=0,mis=0,r=0,dep=1,og=4,tim=1422682994360535
ORA-00704: bootstrap process failure
ORA-00704: bootstrap process failure
ORA-00604: error occurred at recursive SQL level 1
ORA-01555: snapshot too old: rollback segment number 20 with name "_SYSSMU20$" too small

通过分别dump上述block,我们发现file 1 block 122 有点小问题,如下:

seg/obj: 0x12  csc: 0xd6c.1abf4d18  itc: 1  flg: -  typ: 1 - DATA
     fsl: 0  fnx: 0x0 ver: 0x01
 
 Itl           Xid                  Uba         Flag  Lck        Scn/Fsc
0x01   0x003f.02e.001cc47d  0x01c012f4.8562.29  --U-    1  fsc 0x0000.1abf4d19
 
data_block_dump,data header at 0x8b3da44
===============
tsiz: 0x1fb8
hsiz: 0xea
pbl: 0x08b3da44
bdba: 0x0040007a
     76543210
flag=--------
ntab=1
nrow=108

通过脚本将该block copy到文件系统,bbed进行修改之后,再copy回asm diskgroup。
接着再次进行scn的推进,可以很顺利打开数据库。
这里需要注意的是,虽然打开了数据库,但是后面还有很多善后处理工作,比如我们dbv发现undo有坏块,那么就需要重建undo;同时检查alert log是否伴随其他的错误。
其次,对于强制open的数据库,我们建议通过mos脚本检查下数据字典是否存在异常;如果数据字典有明显异常,那么通常是需要通过逻辑导出来重建数据库的;否则一般不需要重建库。
对于是否需要重建库,我认为没有定论,安全起见是通常是建议重建数据库;或者数据库很小的时候也可以考虑重建;否则通过检查数据库告警,或者数据库运行一段时间没有其他异常,那么完全可以不重建数据库。

时间: 2024-11-01 20:41:12

oracel数据15TB的数据库恢复小记的相关文章

数据库数据完全丢失,恢复数据库过程

过程|恢复|数据|数据库 恢复测试,模拟数据库硬盘损坏数据丢失.1.数据库全备份,2.备份数据文件.控制文件.spfile.口令文件3.删除数据库(用dbca删除),只留oracle程序. 4.启动数据库实例 HB130000 oracle$rman target / catalog rman/rman@omsora9 Recovery Manager: Release 9.2.0.1.0 - 64bit Production Copyright (c) 1995, 2002, Oracle C

数据库恢复一例(2)

恢复|数据|数据库 最近通过做实验总结出一种数据库恢复方法,对今后的工作很有帮助: 数据库为非归档状态,只有一周前的数据文件的备份,无redolog,归档日志和controlfile的备份,此种情况一但数据库出故障只能做不完全恢复,会丢失一周前做备份时到出故障那一时候的所有数据,具体恢复方法如下: 操作系统为solaris8,内存2G,2颗CPU. 实验步骤:$sqlplus /nolog SQL>connect / as sysdbaSQL> archive log listDatabase

SYBASE ASA数据库恢复方法

SYBASE ASA数据库当遇到不正常关机时,很容易出现异常,如:表或索引出错,麻烦的是用drop table t_name删除表时数据库就会DOWN下.下面是我常用的两种恢复方法: 一.用备份数据库恢复: 1.用备份数据库启动 2.翻译出错数据库的日志(可能有多个文件) 3.按顺序执行翻译出的日志文件,read 文件 二.没有备份数据库 现象:set rowcount 10 select * from table_name时数据down下 用dbvalid检查此表时报错 检查处理方法:1.删除

mysql数据导入sqlserver数据库方法

  方法一:通过在mysql中备份sql来将mysql数据导入sqlserver.适合于数据量不大的情况使用(如何你的数据中存在的blob字段的数据量不是很多或者不存在可以考虑). 特点:对于小数据量的迁移:方便快捷. 步骤:1:使用mysql工具备份sql文件,我这里用的是SQLyog软件. 2:对备份的sql文件进行处理(原因是这些备份的sql文件可以在sqlserver解析器中不能通过需要进行写修改).此处以SQLyog举例: /*!40101 SET NAMES utf8 */; /*!

Oracle RAC(4 TB ASM) 数据库恢复详细记录

6月底我们接到某客户的紧急支持请求,其客户数据库在不久前由于机房停电,导致数据库重启后无法启动. 我们通过teamviewer远程初步分析了alert log以及kfed读取了几个disk 发现,数据库无法启动的根本原因在于ASM diskgroup无法mount.而ASM diskgroup 无法mount的根本原因在于,ASM元数据出现损坏,其中表现为ASM 启动时无法进行事务恢复. 这里我们先不去纠结为什么会坏.对于asm的元数据如果出现损坏,那么修复的难度可想而知. 这里我采取了非常简单

PostgreSQL 最佳实践 - pg_rman 数据库恢复示例 与 软件限制解说

背景 pg_rman备份已经讲完了,接下来讲一下数据恢复. 由于pg_rman使用了物理备份,所以恢复时,与普通物理备份的恢复原理是一样的. 需要将数据文件恢复,同时需要提供recovery.conf,在recovery.conf中指定需要恢复到哪个位置,以及如何获取XLOG归档文件等配置. 数据库恢复 pg_rman数据恢复时的两个必要要素 1. 新的$PGDATA 2. 备份目录 命令的选项也很简单,甚至可以不指定任何option Restore options: The parameter

如何进行数据库恢复

云数据库RDS(ApsaraDB for RDS,简称RDS)是一种稳定可靠.可弹性伸缩的在线数据库服务.基于飞天分布式系统和全SSD盘高性能存储,支持MySQL.SQL Server.PostgreSQL和PPAS(高度兼容Oracle)引擎,默认部署主备架构且提供了容灾.备份.恢复.监控.迁移等方面的全套解决方案,彻底解决数据库运维的烦恼! 网站数据对每个站长来说都是最宝贵的,如果一个操作不当,一不小心删除某个插件,则有可能导致数据丢失,系统崩溃等情况发生,从而造成严重的后果.因此,我们平时

数据库恢复方案

数据库恢复方案 http://netkiller.github.io/journal/db.restore.html Mr. Neo Chen (netkiller), 陈景峰(BG7NYT) 中国广东省深圳市龙华新区民治街道溪山美地518131+86 13113668890+86 755 29812080<netkiller@msn.com> $Id$ 版权 2011, 2012, 2013 http://netkiller.github.io $Date$ 摘要 这里所谈的内容是对备份数据

数据库恢复操作方法

随着业务变化与时间的推移,数据库中数据也呈不断地增长趋势.阿里云数据库RDS提供了非常稳定的数据备份机制.数据虽备份了,但在实际操作过程中,有可能出现由于误操作等原因导致数据丢失的情况.通过 RDS 提供的创建恢复到时间点的临时实例的方法,可以比较容易的找回数据. 在使用云数据库RDS实例过程中,出现数据丢失后,除非能确认备份集中的数据能满足业务要求,否则不要进行直接使用备份集的覆盖性恢复操作.直接使用备份集覆盖性恢复实例后,通常会无法再从控制台创建到误操作时间点的临时实例,因此推荐通过创建到时