Oracle 无备份情况下的恢复--临时文件/在线重做日志/ORA-00205
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相关推荐
- Oracle 无备份情况下的恢复--控制文件/数据文件
13.3无备份恢复控制文件 没有备份恢复控制文件其实就是在nomount状态,create control创建一个新的控制文件. dba必须知道4个信息才能正确的创建:数据库名.在线日志路径及其大小. ...
- Oracle 无备份情况下的恢复--密码文件/参数文件
13.1 恢复密码文件 密码文件(linux 为例)在$ORACLE_HOME/dbs目录下,文件名的前缀是orapw,后接数据库实例名. [oracle@DSI backup]$ cd /u01/a ...
- Oracle 无备份情况恢复ocr和olr
Oracle 无备份情况恢复ocr和olr Oracle 11.2 GI中OLR损坏的修复方法 一.先关闭GI,命令不再贴出来了,参见: http://blog.csdn.net/msdnchina/ ...
- oracle恢复drop建的表首次,案例:Oracle dul数据挖掘 没有备份情况下非常规恢复drop删除的数据表...
天萃荷净 通过Oracle dul工具在没有备份情况下进行非常规恢复,找出drop删除的Oracle数据表中的数据进行恢复 dul对被drop对象进行恢复,需要提供两个信息 1.被删除表所属表空间(非 ...
- 偷梁换柱 | 无备份情况下的数据恢复实践(二)
黄玮(Fuyuncat) ♥ 资深 Oracle DBA,致力于数据库底层技术的研究,其作品获得广大同行的高度评价. 个人网站 www.HelloDBA.com 在 数据恢复实践(一)中, ...
- 偷梁换柱 | 无备份情况下的数据恢复实践
作者简介 黄玮(Fuyuncat) 资深 Oracle DBA,致力于数据库底层技术的研究,其作品获得广大同行的高度评价. 个人网站 www.HelloDBA.com 在实际环境中,许多数据库环境并没 ...
- 无备份情况下恢复MySQL误删的表,这样做再也不用怕误删了
中国统计网 2017-09-25 20:28 小编寄语 想必大家都知道,Oracle ACE李真旭(Roger)是国内最专业的Oracle 数据库恢复专家.但知识都是触类旁通,真正的专家,从来不会局限 ...
- 格式化U盘丢失重要照片,未备份情况下该怎么办?2种方案协助您找回宝贵照片!
用户案例:"我在大学期间参加了很多活动,并且在各种场合拍下了许多珍贵的照片.为了方便管理,我将这些照片存放在了一枚u盘中,毕业后我想要用u盘中的照片来参加一个毕业展览活动.但是,在活动之前, ...
- R语言使用timeROC包计算无竞争情况下的生存资料多个标记物在相同时间下的cox及协变量分析AUC值、并可视化多个标记物在相同时间下的ROC值、多指标的ROC曲线
R语言使用timeROC包计算无竞争情况下的生存资料多个标记物在相同时间下的cox及协变量分析AUC值.并可视化多个标记物在相同时间下的ROC值.多指标的ROC曲线(Time-dependent RO ...
最新文章
- java 策略模式会员_七:策略模式(不同等级会员打折算法)
- python6翻_洗礼灵魂,修炼python(6)--活起来的代码+列表
- dataTables-使用详细说明整理
- 薄如冈本,37°恒温发热超薄保暖内衣,既要风度也要温度
- 红帽企业版linux 7.3,红帽推企业Linux 7.3 新功能特性一览
- php5.6 mysql5.5,PHP开发第一步,PHP5.6 + MySQL5.5 + Apache2.4环境搭建
- Entity Framework4.1实现动态多条件查询、分页和排序
- 在哪里可以找到计算机病毒的源码,计算机病毒源代码怎么样
- VS2013安装番茄助手
- P2525 Uim的情人节礼物·其之壱
- Halcon 入门教程(01)
- 「自然语言处理(NLP)论文推送」(中文诗歌生成) 上下文增强Transformer【ACL 微信AI团队 北交】
- matlab igbt 关断,IGBT关断过程分析
- Python3 XML 解析
- 傅立叶级数与傅里叶变换
- 苹果CMS10原生APP修改版 影视APP源码附安装教程
- web如何加入视频?video
- ecshop小京东后台首次上传商品不能上传相册的解决办法
- 该网页无法正常运作 目前无法处理此请求。 HTTP ERROR 500
- 马克思主义03709