继上一篇不完全恢复

oracle-不完全数据库恢复-被动恢复-ORA-00313/ORA-00366

场景2:数据库拥有备份,CURRENT状态日志组中所有的在线日志头损坏,在发生日志切换时实例被自动强行关闭,视图重新启动db,在mount状态。

--此场景类似在DSI系列中的,归档模式下CURRENT的redo log损坏或丢失

当前redo log状态

SQL> select group#,sequence#,status from v$log;
GROUP# SEQUENCE# STATUS
---------- ---------- ----------------
1 10 CURRENT
2 8 INACTIVE
3 9 INACTIVE

手动损坏current文件

[oracle@DSI orcl]$  dd if=/dev/null of=/u01/app/oracle/oradata/orcl/redo01.log bs=512 count=1
0+0 records in
0+0 records out
0 bytes (0 B) copied, 0.000102439 s, 0.0 kB/s

切换报错,且实例自动关闭

SQL> alter system switch logfile;
alter system switch logfile
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Process ID: 29989
Session ID: 134 Serial number: 19 SQL> alter system switch logfile;
ERROR:
ORA-03114: not connected to ORACLE

启动实例报错,只能到mount阶段

SQL> startup;
ORACLE instance started. Total System Global Area 784998400 bytes
Fixed Size 2257352 bytes
Variable Size 499125816 bytes
Database Buffers 276824064 bytes
Redo Buffers 6791168 bytes
Database mounted.
ORA-00313: open failed for members of log group 1 of thread 1
ORA-00312: online log 1 thread 1: '/u01/app/oracle/oradata/orcl/redo01.log'
ORA-27048: skgfifi: file header information is invalid
Additional information: 13

查看告警日志

[oracle@DSI orcl]$ grep ORA-00313 /u01/app/oracle/diag/rdbms/orcl/orcl/trace/alert_orcl.log |uniq
ORA-00313: open failed for members of log group 1 of thread 1

查看v$log观察当前在线日志组的状态

SQL> select group#,sequence#,status from v$log;
GROUP# SEQUENCE# STATUS
---------- ---------- ----------------
1 10 CURRENT
2 8 INACTIVE
3 9 INACTIVE

10号文件处于current状态,8,9号是unused(或者是inactive的),实例恢复不需要他们,这意味这完全检查点的位置已经进入了10号日志,所有数据文件头的检查点SCN全都比10号日志的第一条重做记录的SCN高,恢复操作也仅仅需要10号日志。

但是10号日志损坏,而且是CURRENT日志不可能存在归档,所以归档没有用处。

此时完全恢复已不可能,而recover database也不行,ORA-00313

SQL> recover database;
ORA-00283: recovery session canceled due to errors
ORA-00313: open failed for members of log group 1 of thread 1
ORA-00312: online log 1 thread 1: '/u01/app/oracle/oradata/orcl/redo01.log'
ORA-27048: skgfifi: file header information is invalid
Additional information: 12

因为实例无法恢复,数据文件不能同步,不满足数据库打开的条件

此时不得不采用不完全恢复,控制恢复操作在10号日志之前结束。

从数据文件的角度理解,就是将数据文件中的10号日志中的变更不论事务提交与否统统从文件中“挖”处理,这样就要求数据文件首先必须足够“旧”,不能一开始就索要10号日志。

在已知10号日志问题的前提下,

RMAN> run {
set until sequence 10;
restore database;
recover database;
alter database open resetlogs;
}2> 3> 4> 5> 6> executing command: SET until clause Starting restore at 25-JUL-19
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=11 device type=DISK channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00001 to /u01/app/oracle/oradata/orcl/system01.dbf
channel ORA_DISK_1: restoring datafile 00002 to /u01/app/oracle/oradata/orcl/sysaux01.dbf
channel ORA_DISK_1: restoring datafile 00004 to /u01/app/oracle/oradata/orcl/users01.dbf
channel ORA_DISK_1: restoring datafile 00005 to /u01/app/oracle/oradata/orcl/test01.dbf
channel ORA_DISK_1: restoring datafile 00008 to /u01/app/oracle/oradata/orcl/rc_data01.dbf
channel ORA_DISK_1: reading from backup piece /home/oracle/backup/bol_fullbak0cu7i4i6_1_1_20190725
channel ORA_DISK_1: piece handle=/home/oracle/backup/bol_fullbak0cu7i4i6_1_1_20190725 tag=BOL_FULLBAK
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:07
channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00003 to /u01/app/oracle/oradata/orcl/undotbs01.dbf
channel ORA_DISK_1: restoring datafile 00006 to /u01/app/oracle/oradata/orcl/assm01.dbf
channel ORA_DISK_1: restoring datafile 00007 to /u01/app/oracle/oradata/orcl/mssm01.dbf
channel ORA_DISK_1: restoring datafile 00009 to /u01/app/oracle/oradata/orcl/ogg01.dbf
channel ORA_DISK_1: restoring datafile 00010 to /u01/app/oracle/oradata/orcl/yhqt01.dbf
channel ORA_DISK_1: reading from backup piece /home/oracle/backup/bol_fullbak0du7i4id_1_1_20190725
channel ORA_DISK_1: piece handle=/home/oracle/backup/bol_fullbak0du7i4id_1_1_20190725 tag=BOL_FULLBAK
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:03
Finished restore at 25-JUL-19 Starting recover at 25-JUL-19
using channel ORA_DISK_1 starting media recovery archived log for thread 1 with sequence 9 is already on disk as file /u01/app/oracle/fast_recovery_area/ORCL/archivelog/2019_07_25/o1_mf_1_9_gmlslqts_.arc
channel ORA_DISK_1: starting archived log restore to default destination
channel ORA_DISK_1: restoring archived log
archived log thread=1 sequence=7
channel ORA_DISK_1: restoring archived log
archived log thread=1 sequence=8
channel ORA_DISK_1: reading from backup piece /home/oracle/backup/arch_0ju7i4ik_1_1_20190725
channel ORA_DISK_1: piece handle=/home/oracle/backup/arch_0ju7i4ik_1_1_20190725 tag=TAG20190725T161824
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
archived log file name=/u01/app/oracle/fast_recovery_area/ORCL/archivelog/2019_07_25/o1_mf_1_7_gmltlc7h_.arc thread=1 sequence=7
channel default: deleting archived log(s)
archived log file name=/u01/app/oracle/fast_recovery_area/ORCL/archivelog/2019_07_25/o1_mf_1_7_gmltlc7h_.arc RECID=28 STAMP=1014568651
archived log file name=/u01/app/oracle/fast_recovery_area/ORCL/archivelog/2019_07_25/o1_mf_1_8_gmltlc83_.arc thread=1 sequence=8
channel default: deleting archived log(s)
archived log file name=/u01/app/oracle/fast_recovery_area/ORCL/archivelog/2019_07_25/o1_mf_1_8_gmltlc83_.arc RECID=29 STAMP=1014568651
archived log file name=/u01/app/oracle/fast_recovery_area/ORCL/archivelog/2019_07_25/o1_mf_1_9_gmlslqts_.arc thread=1 sequence=9
media recovery complete, elapsed time: 00:00:00
Finished recover at 25-JUL-19 database opened

--alter database open resetlogs会重新格式化所有的在线日志,顺便修复了1号日志损坏的问题。

本实例在所有数据文件完好的情况下,仅current的redo log损坏,居然会导致必须还原所有数据文件、丢失事务的结果,且数据库越大消耗的时间就越多。

SQL> select group#,sequence#,status from v$log;

    GROUP#  SEQUENCE# STATUS
---------- ---------- ----------------
1 1 CURRENT
2 0 UNUSED
3 0 UNUSED SQL> conn yhqt/yhqt
Connected.
SQL> select count(*) from yhqtest_1; COUNT(*)
----------
5005

场景3:数据库有备份,current状态日志组中所有的(1号组序列34)在线日志头损坏,在发生日志切换时实例已经被强行关闭,重启db时,数据库在mount阶段

SQL> select group#,sequence#,status from v$log;
GROUP# SEQUENCE# STATUS
---------- ---------- ----------------
1 34 CURRENT
2 33 ACTIVE
3 0 UNUSED

虽然与场景2损坏相同,同为current,但是这个场景中的33号日志处于ACTIVE状态,说明实例崩溃时完全检查点的RBA尚未超越过33号日志组的最后一条记录

RMAN> recover database until sequence 34;
RMAN-03002: failure of recover command at ..
RMAN-11003: failure during parse/execution of SQL statement : alter database recover cancel
ORA-10879: error signaled in parallel recovery slave
ORA-01547: warning RECOVER succeeded bu OPEN RESETLOGS would get error below
ORA-01194: file 1 needs more recovery to be consistent
ORA-01110: data file 1 /u01/app/oracle/oradata/orcl/system01.dbf

告警ORA-01547 接下来open resetlogs会失败

RMAN> alter database open resetlogs;
ORA-01194: file 1 needs more recovery to be consistent
ORA-01110: data file 1 /u01/app/oracle/oradata/orcl/system01.dbf

还是采用场景2的恢复方法

RMAN> run {
set until sequence 34;
restore database;
recover database;
alter database open resetlogs;
}2> 3> 4> 5> 6>

处理current日志损坏并且实例已崩溃的一般方法:当current日志损坏,只能采用restore-recover-resetlogs的方案不完全恢复数据库。

oracle-不完全数据库恢复-被动恢复-ORA-00313/ORA-00366的更多相关文章

  1. oracle-不完全数据库恢复-被动恢复-RMAN-06025/ORA-01190

    不完全数据库恢复 到目前为止,前面讨论的都是完全恢复数据库,这是recover database\recover tablespace\recover datafile默认的行为特征. 所谓完全恢复指 ...

  2. Oracle 【IT实验室】数据库备份与恢复之:如何对Oracle数据库文件进行恢复与备份

    任何数据库在长期使用过程中,都会存在一定的安全隐患.对于数据库管理员来说不能仅寄希望于计算机操作系统的安全运行,而是要建立一整套的数据库备份与恢复机制.当数据库发生故障后,希望能重新建立一个完整的数据 ...

  3. undo丢失恢复异常恢复,运维DBA反映Oracle数据库无法启动报错ORA-01157 ORA-01110,分析原因为Oracle数据库坏块导致

    本文转自 惜纷飞 大师. 模拟基表事务未提交数据库crash,undo丢失恢复异常恢复,运维DBA反映Oracle数据库无法启动报错ORA-01157 ORA-01110,分析原因为Oracle数据库 ...

  4. Oracle数据库备份、恢复及常见问题

    通常我们都是使用PL/SQL Developer来对Oracle中的数据对象和数据进行管理.如果我们想方便快速还原或者部署Oracle到新机器上,怎么进行数据库的备份.导入恢复呢? 这里我们必须要考虑 ...

  5. oracle数据库rman异地恢复

    自己想做两组rac之间的data guard,由于datafile,controlfile,甚至是archivelog都是存放在asm上的,直接复制数据有点不现实,asm磁盘总归都是要用的,所以想从a ...

  6. 数据恢复:如何恢复Linux中意外删除的Oracle和MySQL数据库

    今天有客户的数据库意外被删除了整个目录中的数据文件,操作系统级别的删除,然而幸运的是这个数据库没有崩溃,仍然处于 open 状态的时候,客户就发现了问题,求助到我们,最终完整地恢复了所有数据文件. 在 ...

  7. Oracle 数据库备份和恢复配置

    可能的失败及其解决方法 失败类型 我们坑你遇到的失败或错误分为两大类:物理和逻辑.物理错误一般是硬件错误或使用数据库的应用程序中的软件错误,而逻辑错误一般在终端用户级别(数据库用户和管理员). 按从轻 ...

  8. Oracle DG测试failover和后续恢复报告

    Oracle DG测试failover和后续恢复报告 一.概述 二.验证过程: 2.1 A库异常关闭 2.2 B库进行failover切换为新主库 2.3 要求C库成为新主库的备库 2.4 要求A库成 ...

  9. linux下rm误删除数据库文件的恢复方法

    在linux redhat 5.4版本,rm误删除数据库文件的恢复过程分享.测试没有问题,可用. 1.首先测试rm 误删除数据库文件 [oracle@primary dbwdn]$ ll total ...

随机推荐

  1. 005-使用smtp发送邮件报警

    创建监控项: 如果有两个触发条件则中间用  and 连接,or等 此上  触发器已经创建好了,但是触发器的动作还需要去定义: 默认动作是停用的需要手动打开:

  2. PAT Basic 1071 小赌怡情 (15 分)

    常言道“小赌怡情”.这是一个很简单的小游戏:首先由计算机给出第一个整数:然后玩家下注赌第二个整数将会比第一个数大还是小:玩家下注 t 个筹码后,计算机给出第二个数.若玩家猜对了,则系统奖励玩家 t 个 ...

  3. [CQOI2013]新Nim游戏(博弈论,线性基)

    [CQOI2013]新Nim游戏 题目描述 传统的Nim游戏是这样的:有一些火柴堆,每堆都有若干根火柴(不同堆的火柴数量可以不同).两个游戏者轮流操作,每次可以选一个火柴堆拿走若干根火柴.可以只拿一根 ...

  4. ROPE

    #include <ext/rope> using namespace __gnu_cxx; ]; rope<int> x; rope<int> x(a,a + n ...

  5. Spring框架几种创建bean的方式

    Spring框架下,Bean的创建和装配非常的灵活,提供了三种主要的方式,并且相互见可以互相看见,也就是你可以随意地采用你喜欢且合适的方式创建Bean,而不用担心他们之间的兼容问题. 一.使用XML显 ...

  6. 通过shell监控网页是否正常,然后促发邮件告警

    最近在网上找了下通过shell编写一个脚本来监控网页是否正常,如果不正常则促发邮件告警,修复后有一个修复的通知邮件:但一直没有找到全面的,所以自己研究了下,写了一个linux对接邮箱和通过shell写 ...

  7. pushd&popd&dirs命令

    dirs 显示当前目录栈中的所有记录 -p  一个目录一行显示  -l  以完整格式显示  -c  删除目录栈中的所有记录  -v  每行一个目录来显示,每个目录前加上编号  +N  从左到右的第n个 ...

  8. html头部和底部固定时,中间的内容随屏幕分别率铺满页面

    html页面头部和底部有东西时,怎么让内容填充到中间的页面,且去适应不同的电脑分辨率,看代码 <!DOCTYPE html> <html> <head> <m ...

  9. 【NOIP2016提高A组模拟8.17】(雅礼联考day1)Binary

    题目 分析 首先每个数对\(2^i\)取模.也就是把每个数的第i位以后删去. 把它们放进树状数组里面. 那么当查询操作, 答案就位于区间\([2^i-x,2^{i-1}-1-x]\)中,直接查询就可以 ...

  10. Missing radix parameter.报错解决方法

    当报“Missing radix parameter.”这个错的时候,是因为使用parseInt没有传第二个参数,以前简写的时候大家几乎都不传,甚至不知道还有第二个参数. 当时候Eslint预发检查时 ...