13.5 恢复临时文件

临时文件没有也不应该备份。通过V$TEMPFILE可以找到所有的临时文件。

此类文件的损坏会造成需要使用临时表空间的命令执行失败,不至于造成实例崩溃或session中断。由于临时表空间不用保存永久性数据,所以RMAN不会对其备份,一旦损坏采用的恢复策略是替换或者重建。

SQL> ALTER TABLESPACE TEMP ADD TEMPFILE ...

13.6 恢复在线重做日志

所谓恢复在线日志是指其损坏后,创建新的日志取代受损的日志,最终的目的是能够让LGWR进程和实例顺利工作。

本节介绍的恢复策略的前提是实例尚未崩溃

场景1: 每个日志组有两个在线日志,1号组的一个日志redo01A.log丢失

这种情况相当于日志没有损坏,同组的多个日志互为镜像,只要不是同一组的全部日志丢失就行,在alert日志中

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/redo01A.log
ORA-27037: unable to obtain file status

采用删除后再添加的方法可以恢复正常,不过需要注意只有inactive的状态的日志是可以被删除的,所以需要先查看状态。

SQL> select group#,status from v$log;GROUP# STATUS
---------- ----------------1 INACTIVE2 CURRENT3 INACTIVE

如果状态为current,就还不能立即恢复,应该先利用一次日志切换和一次完全检查点将损坏的日志组设置为inactive状态

SQL> alter system switch logfile;
SQL> alter system checkpoint;

然后先将旧配置删除

SQL> alter database drop logfile member ‘/u01/app/oracle/oradata/orcl/redo01A.log’;
SQL> alter database add logfile member ‘/u01/app/oracle/oradata/orcl/redo01A.log’ to group 1;

场景2:每个日志组中有两个在线日志,1号组的所有日志(redo01A.log和redo01B.log)丢失

一个日志组内所有日志丢失并不直接导致SQL命令无法执行,但是会因为无法完成归档导致LGWR不能覆盖日志,以至于日志缓冲被写满,所有的ddl\dml都无法执行

SQL> select event,seconds_in_wait from v$session where wait_class <>'Idle' order by 2 desc;
--log file switch (archiving needed)

在alter 日志中

ORA-00313

ORA-00312

ORA-27037

修复此类问题使用alter database clear unarchived logfile,同样要求被clear的日志应该处于inactive状态

SQL> alter database clear unarchived logfile group 1; ##切记归档日志会消失一组,应立即全备
SQL> select sequence#,name from v$archived_log;

上述两个场景中, 数据库都没有必要关闭或重启,切记处理在线日志丢失或损坏的问题时不加分析就将数据库关闭,这样做将会导致不必要的不完全恢复。

补充场景:启动数据库时发现所有控制文件test01.dbf数据文件一并丢失,数据库报错ORA-00205

SQL> startup force;
ORA-00205: error in identifying control file, check alert log for more info

现在情况:没有使用catalog、控制文件没有任何形式的备份(快照也不在)、test01.dbf的备份在备份集bol_fullbak0du7i4id_1_1_20190725中、所有日志(归档和在线)健康

经过粗略的分析,可能会得出以下回复步骤

--1 既然控制文件没有备份就用create controlfile重建
--2 test01.dbf文件可以从备份集还原
--3 然后用recover恢复整个数据库
--4 最后打开数据库

可以在实际操作时create controlfile报错

SQL> CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS  ARCHIVELOG
ORA-01503:CREATE CONTROLFILE failed
ORA-01565: error in identifying file /u01/app/oracle/oradata/orcl/test01.dbf
ORA-27037: unable to obtain file status

在create controlfile要求datafile子句中的所有文件必须存在,错误ORA-01565表示找不到数据文件,无法创建控制文件。

先从备份集还原数据文件这样就能重建控制文件了,求助RMAN

RMAN> restore datafile 5 from ‘bol_fullbak0du7i4id_1_1_20190725’;
ORA-01507: database not mounted

RMAN报错数据库没有mount,其原因是RMAN资料库无法访问,如果有catalog

$ rman target / catalog rcowner/oracle@oid
RMAN> restore datafile 5;
可惜没有使用catalog。

创建控制文件时报数据文件不存在,从备份集中还原数据文件报错控制文件不在无法mount数据库。

利用RMAN功能包--dbms_backup_restore就能够在nomount状态,且无catalog的情况下从备份片中提取输入文件。

但因oracle不提供该pl/sql包的文档,就要google充分研究dbms_backup_restore的使用案例

declare
device varchar2(100);
done_out boolean;
outhandle_out varchar2(100);
outtag_out varchar2(100);
failover_out boolean;
begin
sys.dbms_backup_restore.restoresetdatafile;
sys.dbms_backup_resotre.restoredatafileto(dfnumber =>5,toname => '/u01/app/oracle/oradata/orcl/test01.dbf');
device := sys.dbms_backup_restore.deviceallocate;
sys.dbms_backup_restore.restoresetpiece(handle => '/home/oracle/backup/bol_fullbak0du7i4id_1_1_20190725',tag => 'BOL_FULLBAK',fromdiak => true,recid =>0,stamp =>0);
sys.dbms_backup_restore.restorebackuppiece(done =>done_out,params =>null,outhandle =>outhandle_out,outtag =>outtag_out,failover =>failover_out);end;/

第8行启动了RMAN的还原会话,第9行指定了被还原的数据文件编号和路径

第12行分配默认的disk通道,第13行指定还原所使用的备份片

第19行执行了还原操作,该操作执行后test01.dbf回归,就可以创建控制文件了

SQL> CREATE CONTROLFILE ...

后面的恢复就可以参考前面的几篇

转载于:https://www.cnblogs.com/yhq1314/p/11271746.html

Oracle 无备份情况下的恢复--临时文件/在线重做日志/ORA-00205相关推荐

  1. Oracle 无备份情况下的恢复--控制文件/数据文件

    13.3无备份恢复控制文件 没有备份恢复控制文件其实就是在nomount状态,create control创建一个新的控制文件. dba必须知道4个信息才能正确的创建:数据库名.在线日志路径及其大小. ...

  2. Oracle 无备份情况下的恢复--密码文件/参数文件

    13.1 恢复密码文件 密码文件(linux 为例)在$ORACLE_HOME/dbs目录下,文件名的前缀是orapw,后接数据库实例名. [oracle@DSI backup]$ cd /u01/a ...

  3. Oracle 无备份情况恢复ocr和olr

    Oracle 无备份情况恢复ocr和olr Oracle 11.2 GI中OLR损坏的修复方法 一.先关闭GI,命令不再贴出来了,参见: http://blog.csdn.net/msdnchina/ ...

  4. oracle恢复drop建的表首次,案例:Oracle dul数据挖掘 没有备份情况下非常规恢复drop删除的数据表...

    天萃荷净 通过Oracle dul工具在没有备份情况下进行非常规恢复,找出drop删除的Oracle数据表中的数据进行恢复 dul对被drop对象进行恢复,需要提供两个信息 1.被删除表所属表空间(非 ...

  5. 偷梁换柱 | 无备份情况下的数据恢复实践(二)

    黄玮(Fuyuncat) ♥       资深 Oracle DBA,致力于数据库底层技术的研究,其作品获得广大同行的高度评价. 个人网站 www.HelloDBA.com 在 数据恢复实践(一)中, ...

  6. 偷梁换柱 | 无备份情况下的数据恢复实践

    作者简介 黄玮(Fuyuncat) 资深 Oracle DBA,致力于数据库底层技术的研究,其作品获得广大同行的高度评价. 个人网站 www.HelloDBA.com 在实际环境中,许多数据库环境并没 ...

  7. 无备份情况下恢复MySQL误删的表,这样做再也不用怕误删了

    中国统计网 2017-09-25 20:28 小编寄语 想必大家都知道,Oracle ACE李真旭(Roger)是国内最专业的Oracle 数据库恢复专家.但知识都是触类旁通,真正的专家,从来不会局限 ...

  8. 格式化U盘丢失重要照片,未备份情况下该怎么办?2种方案协助您找回宝贵照片!

    用户案例:"我在大学期间参加了很多活动,并且在各种场合拍下了许多珍贵的照片.为了方便管理,我将这些照片存放在了一枚u盘中,毕业后我想要用u盘中的照片来参加一个毕业展览活动.但是,在活动之前, ...

  9. R语言使用timeROC包计算无竞争情况下的生存资料多个标记物在相同时间下的cox及协变量分析AUC值、并可视化多个标记物在相同时间下的ROC值、多指标的ROC曲线

    R语言使用timeROC包计算无竞争情况下的生存资料多个标记物在相同时间下的cox及协变量分析AUC值.并可视化多个标记物在相同时间下的ROC值.多指标的ROC曲线(Time-dependent RO ...

最新文章

  1. java 策略模式会员_七:策略模式(不同等级会员打折算法)
  2. python6翻_洗礼灵魂,修炼python(6)--活起来的代码+列表
  3. dataTables-使用详细说明整理
  4. 薄如冈本,37°恒温发热超薄保暖内衣,既要风度也要温度
  5. 红帽企业版linux 7.3,红帽推企业Linux 7.3 新功能特性一览
  6. php5.6 mysql5.5,PHP开发第一步,PHP5.6 + MySQL5.5 + Apache2.4环境搭建
  7. Entity Framework4.1实现动态多条件查询、分页和排序
  8. 在哪里可以找到计算机病毒的源码,计算机病毒源代码怎么样
  9. VS2013安装番茄助手
  10. P2525 Uim的情人节礼物·其之壱
  11. Halcon 入门教程(01)
  12. 「自然语言处理(NLP)论文推送」(中文诗歌生成) 上下文增强Transformer【ACL 微信AI团队 北交】
  13. matlab igbt 关断,IGBT关断过程分析
  14. Python3 XML 解析
  15. 傅立叶级数与傅里叶变换
  16. 苹果CMS10原生APP修改版 影视APP源码附安装教程
  17. web如何加入视频?video
  18. ecshop小京东后台首次上传商品不能上传相册的解决办法
  19. 该网页无法正常运作 目前无法处理此请求。 HTTP ERROR 500
  20. 马克思主义03709

热门文章

  1. 年薪30W前端程序员,需要吃透的前端书籍推荐
  2. create-react-app 自定义 eslint 配置
  3. Linux 系统 vim 编辑器使用简明教程
  4. 使用alarm API实现灵活的延时操作
  5. POJ2955Brackets——dp
  6. netstat监控大量ESTABLISHED连接与Time_Wait连接问题
  7. 2012总结--第5篇--人脉篇
  8. the port is already in use
  9. 学习spring必须java基础知识-动态代理
  10. 陈秋贵 CHEN QIUGUI 美国的门窗大王