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 INACTIVE
2 CURRENT
3 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 ...
后面的恢复就可以参考前面的几篇
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备份恢复之无备份情况下恢复undo表空间
UNDO表空间存储着DML操作数据块的前镜像数据,在数据回滚,一致性读,闪回操作,实例恢复的时候都可能用到UNDO表空间中的数据.如果在生产过程中丢失或破坏了UNDO表空间,可能导致某些事务无法回滚, ...
- 迁移/home目录至新硬盘分区总结--无备份情况下
搞了一天,终于成功迁移.由于一开始就没备份过程实在很曲折. 希望本篇对那些没有备份习惯的朋友们有所帮助. 准备工作: sudo vim /etc/fstab 在文件中加入: /dev/sdb8 ...
- windows环境下,svn未备份情况下重新恢复
公司有个同事在未打招呼的情况下把公司服务器进行重新装系统,崩溃啊.SVN之前未备份,还好SVN的库(Repositories)还在,如下图: 恢复办法如下: 由于之前安装的就是VisualSVN-Se ...
- Oracle主库归档丢失,备库日志有gap,在不重建备库的情况下,恢复备库
本文主要描述Oracle备库日志与主库日志之间有gap,切主库这部分gap的归档日志已经删除或丢失,如何在不重建备库的情况下,恢复备库. 欢迎转载,请注明作者.出处. 作者:张正 blog:http: ...
- Oracle redo 日志损坏的几种情况下的恢复
Oracle redo 日志损坏的几种情况下的恢复 第一:损坏的redo为非正在使用的redo log 1.归档模式,不是当前正在日志损坏,数据库打开模式. 模拟损坏:SQL> select * ...
- PostgreSQL在没有备份情况下误删除Clog恢复
创建实验表postgres# create table t (n_id int primary key,c_name varchar(300));CREATE TABLEpostgres# inser ...
- ORACLE数据库不同故障下的恢复总结
ORACLE数据库不同故障下的恢复总结1. 非归档模式下丢失或损坏的文件--1.1 数据文件--启动数据库的状态到MOUNT--恢复方法:通过之前创建的数据库完整备份,修复整个数据库,不过备份之后发生 ...
随机推荐
- height 自适应问题
何为高度自适应? 高度自适应就是高度能跟随浏览器窗口的大小改变而改变,典型的运用在一些后台界面中上面一栏高度固定用作菜单栏或导航栏,下面一栏高度自适应用于显示内容.高度自适应不像宽度自适应那样简单,在 ...
- BZOJ1912 最长链树形DP
每次求出最长链更新答案后要将最长链上的边权改为-1 写的贼长 还可以优化... /*Huyyt*/ #include<bits/stdc++.h> #define mem(a,b) mem ...
- Apk反编译那些事
参考博客: https://blog.csdn.net/cbd_2012/article/details/91410119 https://mp.weixin.qq.com/s?__biz=MzI0N ...
- 网络编程与socket
.互联网协议 互联网协议又称为网络七层协议,OSI七层协议,OSI是一个世界标准组织. OSI七层协议: - 应用层 - 表示层 - 会话层 - 传输层 - 网络层 - 数据链路层 - 物理连接层 学 ...
- BZOJ4004 [JLOI2015]装备购买[贪心+线性基+高消]
一个物品可以被其他物品表出,说明另外的每个物品看成矩阵的一个行向量可以表出该物品代表的行向量. 于是构造矩阵,求最多选多少个物品,就是尽可能用已有的物品去表示,相当于去消去一些没必要物品, 类似于xo ...
- Jenkins环境搭建遇到的问题
参考文章 https://www.cnblogs.com/yuanluo9898/p/10724252.html 问题一:tomcat启动乱码,如图所示 解决方案:https://blog.csdn. ...
- javascript中继承方式及优缺点(二)
一.原型链继承 方式1: 原型链继承 (1)流程: 1.定义父类型构造函数. 2.给父类型的原型添加方法. 3.定义子类型的构造函数. 4.创建父类型的对象赋值给子类型的原型. 5 ...
- ASE高级软件工程 第一次结对作业
黄金点游戏Bot Bot8前来报道 1.问题定义 a) 问题描述 N个玩家,每人写一个0~100之间的有理数 (不包括0或100),提交给服务器,服务器在当前回合结束时算出所有数字的平均值,然后乘以0 ...
- Angular 应用的外壳
你首先需要使用 Angular CLI 来创建一个初始化的应用.随后,你将对你已经初始化的应用进行修改来让你构建出 Tour of Heroes app(英雄指南) 这个应用. 在教程的本部分,你需要 ...
- input输入框如何只能输入非零开头的正整数
input输入框如何只能输入非零开头的正整数 ********* 废话不多说,先来代码 ********* case1: 原生html + javascript <body> <!- ...