分类目录归档:backup&recovery

通过修改控制文件来修改SCN

之前有一些简单介绍SCN的文章: 浅谈SCN_1–从oracle7至今,如何获取scn 浅谈SCN_2–_kcmgas_函数 使用ORACDEBUG 修改 数据库SCN 这个测试是接着上次的使用oradebug修改SCN的,这里使用修改控制文件SCN和相关标示位的方法: 这个测试,我们把SCN增加100万,即从 2726293 修改为 3726293。 查看当前控制文件的位置: 将控制文件拿到本地,进行修改,修改过程如下: 首先找到数据库SCN: 修改SCN和相关标示位: 讲数据库shutdown,然后将修改后的控制文件copy到ASM中,并使用这个控制文件启动数据库: Mount数据库,并查看数据库SCN: 这里我们看到,数据库的SCN已经修改为我们指定的 3726296了。

发表在 backup&recovery, Internal | 标签为 | 留下评论

使用ORACDEBUG 修改 数据库SCN

之前有一些简单介绍SCN的文章: 浅谈SCN_1–从oracle7至今,如何获取scn 浅谈SCN_2–_kcmgas_函数 通过修改控制文件来修改SCN 1988年Oracle发布了Oracle V6,这一版本中Oracle引入了热备的操作,同时SCN使用48位存储的算法写死在代码中,一直沿用至12c以前(12c开始使用8个bytes存储SCN)。由于ORACLE的SCN是由48位来表示的,因此最大值不能超过2的48次方 Oracle为了确保48位的SCN能够用足够长的时间(500年),于是对SCN做出了一个限制,就是每秒钟SCN最大增长不能超过16K,Oracle从1988年1月1日0点0分0秒为基准时间,到当前的秒钟数乘以16K,就是当前SCN的最大允许值这就是SCN HEADROOM。 因此SCN天花板 的计算公式就类似于: (当前时间-19880101 000000)*16384–(current_scn),其中 16384是SCN的内部增长速度16k,这是代码中的硬限制。 这个限制在11.2.0.2版本之前,scn 的最大增长频率是16k,在11.2.0.2版本开始,为32k。 此行为是受到下面参数_max_reasonable_scn_rate控制的: 在11.2中,Oracle除了将SCN 每秒最大的增长量从16K加大为32K,还引入了一个阀值,用于阻断有SCN HEADROOM问题的系统将故障传播到其他系统。 这些修复包含在下列补丁中: 如果SCN发生突增的情况,alert中就会出现类似下面的告警: 因此,打了这上面这些补丁后,就不能使用以前的参数直接修改SCN了。 然后,有时候数据库遇到一些异常错误,还是需要将SCN推进的到一个合适的值,例如,常见一些错误造成数据库的部分block跟数据库SCN不一致,或者一些有undo$数据库启动时引导失败: ORA-600 [2256] ORA-600 [2662] ORA-600 [4000] ORA-600 [kcsadjn1] 在以前我们使用参数来修改SCN,例如: event=”10015 trace name adjust_scn level x” 或者使用 _minimum_giga_scn … 继续阅读

发表在 backup&recovery, Internal | 标签为 | 留下评论

一次体验N种报错的Oracle数据库恢复(ORA-704 ORA-604 ORA-600[25016] ORA-376)

朋友数据库报错: 使用隐含参数拉库: 这里看到由于他之前在OS上删除了文件,又重建了控制文件,因此数据字典中的文件信息和重建的控制文件不匹配 因此,报了上面的错误。 这时候使用使用隐含参数屏蔽system表空间检查,并屏蔽只读打开状态的字典检查,并使用gdb跳过数据字典检查,再次resetlog数据库试试看: 这里是AIX系统: 这是看到,已经跳过了数据字典检查,并且报错是ORA-00604 ORA-00376 ORA-01110 这个跟我以前处理自己的一次测试很相似了,参见《艰难的修复数据库过程,却发现Oracle 11.2果然强大》 alert信息如下: 再次尝试重建控制文件,使用gdb跳过字典检查,然后使用open upgrade尝试打开库(因为此时数据文件的scn都一致了): 尝试open数据库,发现数据库又出现了ORA-00600 [25016] 这至少说明一个问题,没有使用resetlogs的时候,控制文件并没有损坏,因此,不重建控制文件,直接恢复数据库,然后open upgrade: (CDKF177:oracle)/home/oracle>sqlplus / as sysdba 数据库已经open了。

发表在 backup&recovery | 标签为 , , , | 留下评论

浅谈Oracle非常规恢复

一直以来,类似非归档无备份的数据库损坏,或者备份不可用,或者用备份恢复因为时间太长或者空间限制等等原因制约,非常规恢复一直是我们不能扔掉的救命稻草,在这个方面我并不擅长,但是一直都很喜欢。 记得2001年前后,我第一次有兴趣想要认真学习一下Oracle(以前做开发相关比较多,菜鸟dba),在还没有了解Oracle备份恢复的机制时,忘记为什么首先接触了Oracle 817的Standby,一周内完整的读了一遍文档,动手搭建了两个,并记录在ITPUB和我自己的blog上,很有成就感,而那时,我还没有意识到,其实Standby 的本质就是数据库的备份和恢复的完美结合。 后来有机会作为dba参加一个公司(在当时没觉得公司小,但是只有我一个菜鸟dba,O(∩_∩)O哈哈~)的一个海外项目,是做一个3节点Oracle 817 OPS 克隆数据库的事情,当时我还不熟悉RMAN,使用dd裸设备的方式完成了任务。这个项目之后,我开始迷上Oracle的备份和恢复,并且开始玩rman了。 迄今为止,我还是认为数据库备份恢复是学习Oracle的最佳入口,因为很多时候你可以方便的模拟场景,并研究恢复,在一个个案例中,学习和了解更多internal的原理。当然,任何时候官方文档都是第一步,没有这个基础,很多都如同空中楼阁。 还有一点,一个好的架构设计、备份恢复策略和灾备设计都是最好的选择,这个是毋庸置疑的。 但是中国大量D版客户,尤其是小客户中太多情况下是没有专业的设计,出了问题,非常规恢复的手段就是救命稻草了。 下面的ppt就是去年一个客户在备份不可用的情况下,花“巨资”请人做了非常规恢复后,找我们去做的一次交流,客户要求的主题就是“非常规恢复”: 浅谈Oracle非常规恢复-lunar

发表在 backup&recovery, Internal | 标签为 , , , , , , | 留下评论

艰难的修复数据库过程,却发现Oracle 11.2果然强大

具体参见: http://t.askmaclean.com/thread-3790-1-1.html http://www.itpub.net/thread-1839128-1-1.html 纯属自娱自乐,没有实际意义的,顺便说下我的发现和测试中的发现(虽然到现在为止数据库还没有open,我还会继续鼓捣他,毕竟还有些方法还没用上,O(∩_∩)O哈哈~。。。); 首先就是11.2太强大了,很多时候以往的错误都可以fixed,数据库可以open后,做很多跟损坏先关的check 1, 从11.2开始,控制文件自动备份完成的信息由m000完成,且他还完成很多其余工作,当然,只在别的进程触发的时候,他才会去工作 2,DBA_TABLESPACE和V$TABLESPACE的来源不同,一个来源于控制文件,一个来源于基表ts$ 3,ts$和file$不能跳号 4,DBMS_HM很强大(Health Manager),他会定期检查数据库的很多东西,然后让m000进程写trace 。。。 主要的测试步骤已经不太都记得了,但是主要模拟步骤如下: 我的环境: db 11.2.0.3 OEL 5.8 1,创建2个表空间(其实1个也可以,几个都行,为了看得更加清晰),然后切换日志,然后在OS上讲包括UNDOTBS在内的这些数据文件(普通的数据文件和undo的数据文件就可以) 2,启动数据库的时候,你会发现,报错说文件丢失或者损坏,这时你offline drop掉这个报错的文件,数据库应该就可以打开,当然后台有m000生成的trace,HealthManager会不断的触发m000把所有其余随坏的信息都写入trace 3,想办法清理undo$中的问题回滚段 4,创建新的普通数据的表空间,例如“UNDTBS333”,但是设置UNDO_TABLESPACE=这个普通的表空间(scope=spfile),然后启动数据库————–这时我当时的第一个误操作 5,数据库报错,具体忘记了,怎么解决的也忘记了,印象中无非就是undo的隐含参数等等,然后创建正确的undo表空间(create undo tablespace …)给数据库使用 6,解决后,数据库可以正常open,delete from fs$ where name=‘你曾经误操作的那个普通数据表空间 UNDTBS333’,这么做是因为当时我没有仔细考虑风险,因此,手工清理了 其实如果全部都是手工做的话,也可以的,后面发现了需要手工清理什么,但是当时确实么有想太多,误操作了。。。 7,其实这样数据库也还是可以open的,没有太大问题,我用DBMS_HM.RUN_CHECK(‘Dictionary Integrity Check’, ‘lunar-ck-Dict’)检查,其实这时数据库只有undo$, ts$ 和file$数据不一致,没有影响其他数据对象(因为测试过程没有添加用户测试数据) … 继续阅读

发表在 backup&recovery, Internal, Oracle 11.1 & Oracle11.2 | 标签为 , | 留下评论

模拟ORA-600 [4000] 并修复

我没有测试,但是我感觉,从一个好的库上直接dd一个file 1 block 520,可能也可以的,O(∩_∩)O哈哈~ 我这里使用了bbed去修改文件,生产库请勿效仿,后果自负 :) 模拟ORA-600 [4000]: 查看alert: 查看trace: trace中其他有用的信息如下: 摘要上面的信息,有用的如下: 下面清除锁标识: 成功打开数据库:

发表在 backup&recovery, ORA-600/7445 | 标签为 , | 4 条评论

一次ORA-1578的处理

今天本想测试一个东西,却遇到一个ORA-1578,比较郁闷,最近vm总是出现乱七八糟郁闷问题。。。。。 LUNAR@travel>select count(*) from ff; select count(*) from ff * ERROR at line 1: ORA-01578: ORACLE data block corrupted (file # 4, block # 129) ORA-01110: data file 4: ‘/stage/travel/users01.dbf’ LUNAR@travel>   SYS@travel>select file#,name from v$datafile;   FILE# NAME ———- … 继续阅读

发表在 backup&recovery, ORA-XXXXX | 标签为 | 一条评论

基于scn恢复ADG和ASM在rman备份恢复过程中的tuning

以下过程主要涉及如下3个问题: 1,根据SCN号“重做”ADG 2,主库是ASM数据库,使用了一半自动命名文件名的文件,和一部分手工指定文件名(别名)的文件: ——————————————————————————– 针对OMF的数据文件使用下面命令: catalog start with ‘+DATA1/MUM/DATAFILE/’; 针对非OFM的数据文件使用下面命令: catalog datafilecopy ‘<File-Specification>’; ——————————————————————————– 3,优化ASM的IO效率 源库: 备库: 查看主库force logging: 查看有哪些文件含有force logging操作,以及他们的scn(下次执行,应该带上orderby,这样更清晰): 备库: 生成批量的backup命令,进行基于scn的恢复(含有force logging的都需要) 主库,备份可以有两个方法: 1,根据上述备份命令写备份脚本 2,从最早的一个scn开始备份也可以 restore 数据文件: 总共新增加了3个文件,重新备份这3个文件即可: 现有ASM的文件信息如下: 有两个错误,这个是因为上面操作时没有注意到数据库中有2个offline的数据文件,下次操作记得备份时把offline的文件不要备份就好了。。。。。。 <bold>开始recover database,这个过程非常慢长,主要原因: 1,存储着实太差了。。。。。。 2,网络速度太差了(这个是NFS的空间) 3,ASM在recover 时需要tuning </bold> 监控rman恢复进度: … 继续阅读

发表在 ASM, backup&recovery, Dataguard | 标签为 , , , , | 留下评论

Linux误删除文件并且数据库crash后恢复

我们都知道误删除文件后,如果没有其他操作,且数据库没有crash(句柄还在),那么是可以通过fd找到文件进行数据库恢复的,具体可以参考以前的文章:linux 误删除文件恢复 那么,如果句柄已经释放(比如数据库crash了),且客户重启了数据库,并执行了一些“恢复”尝试,然后怎么办? 我们测试下,这里我们要借助一个小工具:ext3grep 该工具可以在下面的网址下载最新版: http://code.google.com/p/ext3grep/downloads/list 系统必须要有e2fsprogs-libs,否则安装ext3grep的时可能会有问题。 如果你下载了rpm包,那么安装so easy: 如果你下载了src的源码,那么可以如下方式安装: 我们看下他的帮助,还是很强大的: 模拟数据库文件被误删除,且数据库crash: 数据库启动报错,丢失了文件 ‘/oradata/orcl/users01.dbf’。 现在使用ext3grep进行扫描和恢复: ext3grep是针对ext3文件系统的(ext2单有自己的扫描恢复工具),确认丢失的文件是ext3文件体系: 这里,我的数据文件都在/oradata,是设备 /dev/sdc1 : 注意这里,我的数据库目录的inode是 4358145 ,下面我们开始从这个inode继续查找: 文件的inode已经被覆盖了 这里根据两个两个信息进行恢复文件的操作: (1)数据库报错告诉我们需要恢复的文件名称:/oradata/orcl/users01.dbf (2)ext3grep的提示信息告诉我们了从哪里开始写文件: Inode 4358145 is directory “orcl”. 恢复过程如下: 从上面提示我们看到了文件已经恢复出来了,放在 orcl/RESTORED_FILES 下面: 完了不行了,被覆盖了。。。否则这一步就会在当前执行ext3grep的目录下找到一个RESTORED_FILES目录,里面就是我们的user01.dbf文件,再之后,你懂的。。 把他copy到/oradata/orcl/users01.dbf,然后执行recover datafile ‘/oradata/orcl/users01.dbf’,在open,就ok了。。。 我们再测试另一个工具extundelete(感觉原理跟ext3grep一样),看看他是不是强大一些,o(∩_∩)o … 继续阅读

发表在 backup&recovery | 标签为 , , , , , | 留下评论

ASM磁盘头被fdisk损坏的修复过程

一大早起来折腾昨天的12c(我装的是standalone),发现使用文件虚拟成设备的方法,磁盘IO效率很低(我猜是这个原因),于是铲掉打算重新安装 铲掉12c RAC跟铲掉11.2 RAC没啥区别,参考前面的文章 5分钟内搞定。 安装完grid,感觉磁盘不够用,于是把vm停了,加一块新的盘,然后启动后,fdisk /dev/sde 悲剧了,刚弄完就想起来,这个是ASM的DATADG…………于是,你懂的…… 查看日志,ora.DATA.dg 资源状态异常: 使用kfed可以清晰的看到,盘头损坏了: 在ASM中也可以看到,/dev/sdb原本是DATA DG的设备(HEADER_STATU应为 MEMBER),现在确变成“CANDIDATE”: 我们知道,每个ASM磁盘的UNIT 1,块254(Allocation unit# 1, Block# 254)是盘头的备份,因此查看下,这个块是否是好的: 手工把ASM磁盘组DATA挂载上: 好了,可以安装db软件,然后建库了…………

发表在 ASM, backup&recovery | 标签为 , | 一条评论