日志文件损坏恢复(实验)
来源:互联网 发布:mac软件删不掉 编辑:程序博客网 时间:2024/04/28 07:42
目录
一,单个日志成员文件损坏(某个日志组下有多个成员文件,单个成员文件损坏)
二、数据库正常关闭,发现某一个组下面所有成员文件都损坏了。
1、丢失的组不是CURRENT 组的所有成员文件。
2、丢失的组是CURRENT组所成员文件
三、数据库非正常关闭,发现某一个日志组下的成员文件都损坏了(非正常关闭来不及写脏数据)
查看当前日志组成员:SQL> select GROUP#,STATUS,MEMBER from v$logfile order by 1; GROUP# STATUS MEMBER---------- ------- ---------------------------------------- 1 /oracle/oradata/testdb/redo01c.log 1 /oracle/oradata/testdb/redo01a.log 1 /oracle/oradata/testdb/redo01b.log 2 /oracle/oradata/testdb/redo02a.log 2 /oracle/oradata/testdb/redo02c.log 2 /oracle/oradata/testdb/redo02b.log 3 /oracle/oradata/testdb/redo03c.log 3 /oracle/oradata/testdb/redo03b.log 3 /oracle/oradata/testdb/redo03d.log 3 /oracle/oradata/testdb/redo03a.log10 rows selected. 删除一个日志成员(故障点) [oracle@oracledb testdb]$ rm -rf redo03a.log 发现丢失日志文件以后,在v$logfile中没有立即标示出INVALID,此时重启数据库。 在丢失日志成员文件情况下,数据库能够正常重启。此时才显示出INVALID。 SQL> select GROUP#,STATUS,MEMBER from v$logfile order by 1; GROUP# STATUS MEMBER---------- ------- ---------------------------------------- 1 /oracle/oradata/testdb/redo01c.log 1 /oracle/oradata/testdb/redo01a.log 1 /oracle/oradata/testdb/redo01b.log 2 /oracle/oradata/testdb/redo02a.log 2 /oracle/oradata/testdb/redo02c.log 2 /oracle/oradata/testdb/redo02b.log 3 /oracle/oradata/testdb/redo03c.log 3 /oracle/oradata/testdb/redo03b.log 3 /oracle/oradata/testdb/redo03d.log 3 INVALID /oracle/oradata/testdb/redo03a.log进行恢复:(1)先删除数据库中对应的成员文件记录:SQL> alter database drop logfile member '/oracle/oradata/testdb/redo03a.log';Database altered.(2)在重新添加新的成员日志文件:SQL> alter database add logfile member '/oracle/oradata/testdb/redo03a.log' to group 3;Database altered.此时恢复完毕,可以正常使用了。
二、数据库正常关闭,发现某一个组下面所有成员文件都损坏了。
1、 丢失的组不是CURRENT 组的所有成员文件。
查看前置环境:SQL> select group#,status from v$log; GROUP# STATUS---------- ---------------- 1 INACTIVE 2 CURRENT 3 INACTIVE已知group 2 是current正常关库:SQL> shutdown immediate;Database closed.Database dismounted.ORACLE instance shut down.删除日志group 1所有成员文件(故障点):[oracle@oracledb testdb]$ rm redo01*尝试打开实例:SQL> startupORA-32004: obsolete and/or deprecated parameter(s) specifiedORACLE instance started.Total System Global Area 1058779136 bytesFixed Size 1304616 bytesVariable Size 704645080 bytesDatabase Buffers 348127232 bytesRedo Buffers 4702208 bytesDatabase mounted.ORA-00313: open failed for members of log group 1 of thread 1ORA-00312: online log 1 thread 1: '/oracle/oradata/testdb/redo01a.log'ORA-00312: online log 1 thread 1: '/oracle/oradata/testdb/redo01b.log'ORA-00312: online log 1 thread 1: '/oracle/oradata/testdb/redo01c.log'只能打开到mount阶段,并且报错。错误恢复:此时数据库已经处于mount状态。查看日志组信息,发现并非current组所有成员丢失。SQL> select group#,status from v$log; GROUP# STATUS---------- ---------------- 1 INACTIVE 3 INACTIVE 2 CURRENT(1)用clear日志组的方式,清理日志组。SQL> alter database clear logfile group 1;Database altered.清理的过程中,oracle实例自动重建了刚刚丢失的所有日志文件。(2)查看,恢复的所有日志文件(被重建)[oracle@oracledb testdb]$ ls -a |grep 'redo01' redo01a.logredo01b.logredo01c.log此时数据就能打开了:SQL> alter database open;Database altered.
查看前置环境:SQL> select group#,status from v$log; GROUP# STATUS---------- ---------------- 1 UNUSED 2 CURRENT 3 INACTIVE发现group 2是CURRENT组正常关闭数据库:SQL> shutdown immediate;Database closed.Database dismounted.ORACLE instance shut down.删除CURRENT组下所有成员文件:(故障点)[oracle@oracledb testdb]$ rm -rf redo02*[oracle@oracledb testdb]$ ls -a | grep 'redo02'打开数据库,提示错误。SQL> startup;ORA-32004: obsolete and/or deprecated parameter(s) specifiedORACLE instance started.Total System Global Area 1058779136 bytesFixed Size 1304616 bytesVariable Size 704645080 bytesDatabase Buffers 348127232 bytesRedo Buffers 4702208 bytesDatabase mounted.ORA-00313: open failed for members of log group 2 of thread 1ORA-00312: online log 2 thread 1: '/oracle/oradata/testdb/redo02a.log'ORA-00312: online log 2 thread 1: '/oracle/oradata/testdb/redo02b.log'ORA-00312: online log 2 thread 1: '/oracle/oradata/testdb/redo02c.log'查看发现丢失的Group 2 是CURRENT组SQL> select group#,status from v$log; GROUP# STATUS---------- ---------------- 1 UNUSED 3 INACTIVE 2 CURRENT错误恢复:(1)尝试,直接clear group 2(出错)。SQL> alter database clear logfile group 2;alter database clear logfile group 2*ERROR at line 1:ORA-00350: log 2 of instance test (thread 1) needs to be archivedORA-00312: online log 2 thread 1: '/oracle/oradata/testdb/redo02a.log'ORA-00312: online log 2 thread 1: '/oracle/oradata/testdb/redo02b.log'ORA-00312: online log 2 thread 1: '/oracle/oradata/testdb/redo02c.log'(2)采用关键字UNARCHIVED(指明,不进行归档操作)的clear操作。SQL> alter database clear unarchived logfile group 2;Database altered.发现所有日志文件被重建了:[oracle@oracledb testdb]$ ls -a | grep 'redo02'redo02a.logredo02b.logredo02c.log现在可以打开数据库了。SQL> alter database open;Database altered.
1、丢失的是Active状态下日志组所有成员文件
制作脏数据:SQL> select * from scott.emp where empno=7788; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7788 SCOTT ANALYST 7566 19-APR-87 3000 20SQL> update scott.emp set sal=5000 where empno=7788;1 row updated.SQL> commit;Commit complete.SQL> select * from scott.emp where empno=7788; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7788 SCOTT ANALYST 7566 19-APR-87 5000 20切换日志组:SQL> select group#,status from v$log; GROUP# STATUS---------- ---------------- 1 CURRENT 2 UNUSED 3 INACTIVESQL> alter system switch logfile;System altered.SQL> select group#,status from v$log; GROUP# STATUS---------- ---------------- 1 ACTIVE 2 CURRENT 3 INACTIVE发现此时,Group 1是Active状态。异常方式关闭数据库:SQL> shutdown abort;ORACLE instance shut down.把日志组1 (ACTIVE)下的所有成员文件删除;(故障点)[oracle@oracledb testdb]$ rm -rf redo01*[oracle@oracledb testdb]$ ls -a | grep redo01[oracle@oracledb testdb]$ 启动数据库,报错。SQL> startup ORA-32004: obsolete and/or deprecated parameter(s) specifiedORACLE instance started.Total System Global Area 1058779136 bytesFixed Size 1304616 bytesVariable Size 704645080 bytesDatabase Buffers 348127232 bytesRedo Buffers 4702208 bytesDatabase mounted.ORA-00313: open failed for members of log group 1 of thread 1ORA-00312: online log 1 thread 1: '/oracle/oradata/testdb/redo01c.log'ORA-27037: unable to obtain file statusLinux Error: 2: No such file or directoryAdditional information: 3ORA-00312: online log 1 thread 1: '/oracle/oradata/testdb/redo01b.log'ORA-27037: unable to obtain file statusLinux Error: 2: No such file or directoryAdditional information: 3ORA-00312: online log 1 thread 1: '/oracle/oradata/testdb/redo01a.log'ORA-27037: unable to obtain file statusLinux Error: 2: No such file or directoryAdditional information: 3尝试,用clear方式清除Group 1,出错,表示需要实例恢复。(出错)SQL> alter database clear logfile group 1 2 ;alter database clear logfile group 1*ERROR at line 1:ORA-01624: log 1 needed for crash recovery of instance test (thread 1)ORA-00312: online log 1 thread 1: '/oracle/oradata/testdb/redo01a.log'ORA-00312: online log 1 thread 1: '/oracle/oradata/testdb/redo01b.log'ORA-00312: online log 1 thread 1: '/oracle/oradata/testdb/redo01c.log'尝试,用archived 方式clear Group 1,出错,表示需要实例恢复。(出错)
SQL> alter database clear unarchived logfile group 1;
alter database clear unarchived logfile group 1*ERROR at line 1:ORA-01624: log 1 needed for crash recovery of instance test (thread 1)ORA-00312: online log 1 thread 1: '/oracle/oradata/testdb/redo01a.log'ORA-00312: online log 1 thread 1: '/oracle/oradata/testdb/redo01b.log'ORA-00312: online log 1 thread 1: '/oracle/oradata/testdb/redo01c.log'故障恢复:<span style="color:#ff0000;">(修改参数文件,添加隐含参数“_allow_resetlogs_corruption=true”)</span>(1)创建参数文件(关闭状态下可以执行)SQL> create pfile from spfile;File created.(2)修改参数文件,添加隐含参数[oracle@oracledb testdb]$ cd $ORACLE_HOME/dbs[oracle@oracledb dbs]$ vi inittest.ora参数文件添加一行:_allow_resetlogs_corruption=true(3)从参数文件强制启动到mount状态SQL> startup mount pfile=$ORACLE_HOME/dbs/inittest.ora force;ORA-32006: REMOTE_OS_AUTHENT initialization parameter has been deprecatedORACLE instance started.Total System Global Area 1058779136 bytesFixed Size 1304616 bytesVariable Size 704645080 bytesDatabase Buffers 348127232 bytesRedo Buffers 4702208 bytesDatabase mounted.查看参数_allow_resetlogs_corruptionSQL> show parameter _allow_resetlogs_corruption;NAME TYPE VALUE------------------------------------ ----------- ------------------------------_allow_resetlogs_corruption boolean TRUE(4)用 resetlogs方式打开数据库,出错:(出错)SQL> alter database open resetlogs;alter database open resetlogs*ERROR at line 1:ORA-01139: RESETLOGS option only valid after an incomplete database recovery(5)假意做不完全恢复。SQL> recover database until cancel; --假意做不完全恢复。ORA-00279: change 2028843 generated at 06/09/2014 18:57:18 needed for thread 1ORA-00289: suggestion : /oracle/oradata/archive2/archive_9c5a9c8e_1_845771110_39.logORA-00280: change 2028843 for thread 1 is in sequence #39Specify log: {<RET>=suggested | filename | AUTO | CANCEL}autoORA-00279: change 2029584 generated at 06/09/2014 19:05:28 needed for thread 1ORA-00289: suggestion : /oracle/oradata/archive2/archive_9c5a9c8e_1_845771110_40.logORA-00280: change 2029584 for thread 1 is in sequence #40ORA-00278: log file '/oracle/oradata/archive2/archive_9c5a9c8e_1_845771110_39.log' no longer needed for this recoveryORA-00308: cannot open archived log '/oracle/oradata/archive2/archive_9c5a9c8e_1_845771110_40.log'ORA-27037: unable to obtain file statusLinux Error: 2: No such file or directoryAdditional information: 3(6)再尝试resetlogs打开库:<span style="color:#33cc00;">(居然打开了)</span>SQL> alter database open resetlogs;Database altered.如果没有打开,如下;SQL> alter database open resetlogs;alter database open resetlogs*ERROR at line 1:ORA-01092: ORACLE instance terminated. Disconnection forcedORA-00600: internal error code, arguments: [2662], [0], [354496], [0],[354513], [4194432], [], [], [], [], [], []Process ID: 5083Session ID: 1 Serial number: 5退出会话,重新用pfile 来启动数据库SQL> startup pfile=$ORACLE_HOME/dbs/inittest.ora;ORACLE instance started.Total System Global Area 1071333376 bytesFixed Size 1341312 bytesVariable Size 620759168 bytesDatabase Buffers 444596224 bytesRedo Buffers 4636672 bytesDatabase mounted.Database opened.(7)日志组序列重置了。SQL> select sequence#,group#,status from v$log; SEQUENCE# GROUP# STATUS---------- ---------- ---------------- 1 1 CURRENT 0 2 UNUSED 0 3 UNUSED检查脏数据是否有丢失,居然没有丢失
SQL> select * from scott.emp where empno=7788; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7788 SCOTT ANALYST 7566 19-APR-87 5000 20 并且重建了已经丢失的Group1
SQL> select * from v$logfile order by 1; GROUP# STATUS TYPE MEMBER IS_---------- ------- ------- ---------------------------------------- --- 1 ONLINE /oracle/oradata/testdb/redo01c.log NO 1 ONLINE /oracle/oradata/testdb/redo01a.log NO 1 ONLINE /oracle/oradata/testdb/redo01b.log NO 2 ONLINE /oracle/oradata/testdb/redo02a.log NO 2 ONLINE /oracle/oradata/testdb/redo02c.log NO 2 ONLINE /oracle/oradata/testdb/redo02b.log NO 3 ONLINE /oracle/oradata/testdb/redo03d.log NO 3 ONLINE /oracle/oradata/testdb/redo03c.log NO 3 ONLINE /oracle/oradata/testdb/redo03a.log NO 3 ONLINE /oracle/oradata/testdb/redo03b.log NO10 rows selected.
注意:resetlogs 打开数据库,以及unarchived 清除日志组后需要立即重新备份数据库。
0 0
- 日志文件损坏恢复(实验)
- .模拟状态为active的日志损坏的数据恢复实验(不完全恢复)
- online redo日志文件损坏恢复
- oracle 日志文件和控制文件损坏的恢复
- Oracle恢复(九)------恢复损坏非当前联机日志
- 联机日志文件损坏后的恢复方法
- 联机日志文件损坏后的恢复方法
- 恢复日志文件损坏的SQL Server 2005数据库
- SQL Server 2005日志文件损坏的恢复方法
- 联机日志文件损坏后的恢复方法
- Oracle联机日志文件损坏后的恢复方法
- 联机日志文件损坏后的恢复方法
- 当前日志文件全部损坏和丢失的恢复
- 记录SQL Server2008日志文件损坏的恢复过程:
- 模拟状态为inactive的日志损坏的恢复实验(完全恢复)
- 联机日志损坏恢复规则
- redo日志损坏恢复总结:
- 当前联机日志损坏恢复
- Swift编程语言入门视频教程(十一)--随机函数的应用
- Spring与JDBC集合以及事物处理
- Swift编程语言入门视频教程(十二)--函数的定义
- 驱动开发之 ZwWriteFile函数
- IOC、Spring的IOC
- 日志文件损坏恢复(实验)
- Swift编程语言入门视频教程(十三)--嵌套函数的定义
- Cocos2d-x -自定义动作 圆周运动
- 在字符串中删除特定的字符
- Ps怎么做火焰字 PS火焰字制作图文教程
- jquery请求node并返回值
- 统计Redo Log切换频率
- 求素数问题
- 曾几何时