基于用户管理的备份与恢复—恢复重做日志
来源:互联网 发布:mac 开发者必备软件 编辑:程序博客网 时间:2024/06/05 16:55
日志组的某个日志成员损坏
如果没有数据库的全备份,也可以使用_allow_resetlogs_corruption隐藏参数进行恢复(不推荐)。
SQL> select group#,status,member from v$logfile; GROUP# STATUS MEMBER---------- ------- ---------------------------------------------------------------------- 3 F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO03.LOG 2 F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02.LOG 1 F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01.LOG 1 F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01_ADD.LOG 2 F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02_ADD.LOG 3 F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO03_ADD.LOG已选择6行。--使用360强力删除REDO01_ADD.LOG文件,以模拟日志成员损坏--多次切换日志,以使刚删除的redo文件处于invalid状态SQL> alter system switch logfile;系统已更改。SQL> alter system switch logfile;系统已更改。......SQL> select group#,status from v$log; GROUP# STATUS---------- ---------------- 1 CURRENT 2 ACTIVE 3 ACTIVESQL> select group#,status,member from v$logfile; GROUP# STATUS MEMBER---------- ------- ---------------------------------------------------------------------- 3 F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO03.LOG 2 F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02.LOG 1 F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01.LOG 1 INVALID F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01_ADD.LOG 2 F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02_ADD.LOG 3 F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO03_ADD.LOG已选择6行。--如果为为当前日志组成员,则不能被删除,这时需要切换日志,才能够删除成员SQL> alter database drop logfile member 'F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01_ADD.LOG';alter database drop logfile member 'F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01_ADD.LOG'*第 1 行出现错误:ORA-01609: 日志 1 是线程 1 的当前日志 - 无法删除成员ORA-00312: 联机日志 1 线程 1: 'F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01.LOG'ORA-00312: 联机日志 1 线程 1: 'F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01_ADD.LOG'SQL> alter system switch logfile;系统已更改。SQL> select group#,status from v$log; GROUP# STATUS---------- ---------------- 1 ACTIVE 2 CURRENT 3 ACTIVESQL> alter database drop logfile member 'F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01_ADD.LOG';数据库已更改。--添加日志组成员SQL> alter database add logfile member 'F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01_ADD_NEW.LOG' to group 1;数据库已更改。SQL> select group#,status,member from v$logfile; GROUP# STATUS MEMBER---------- ------- ---------------------------------------------------------------------- 3 F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO03.LOG 2 F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02.LOG 1 F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01.LOG 1 INVALID F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01_ADD_NEW.LOG 2 F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02_ADD.LOG 3 F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO03_ADD.LOG已选择6行。
注意,新增加的日志组成员状态也为invalid。
inactive日志组的所有日志成员全部损坏
1)open状态下inactive日志组的所有日志成员全部损坏
2)关闭状态下inactive日志组的所有日志成员全部损坏
1)
SQL> set linesize 110SQL> column member for a70SQL> select group#,status from v$log; GROUP# STATUS---------- ---------------- 1 INACTIVE 2 CURRENT 3 INACTIVESQL> select group#,status,member from v$logfile; GROUP# STATUS MEMBER---------- ------- ---------------------------------------------------------------------- 1 /oracle/10g/oracle/product/10.2.0/oradata/oralife/redo01.log 3 /oracle/10g/oracle/product/10.2.0/oradata/oralife/redo03.log 2 /oracle/10g/oracle/product/10.2.0/oradata/oralife/redo02.log 1 /oracle/10g/oracle/product/10.2.0/oradata/oralife/redo01_add.log 2 /oracle/10g/oracle/product/10.2.0/oradata/oralife/redo02_add.log 3 /oracle/10g/oracle/product/10.2.0/oradata/oralife/redo03_add.log6 rows selected.--使用rm删除日志组1的所有成员(redo01.log,redo01_add.log)SQL> rm ... --切换日志组为current状态SQL> alter system switch logfile;System altered.SQL> select group#,status from v$log; GROUP# STATUS---------- ---------------- 1 CURRENT 2 ACTIVE 3 INACTIVESQL> select group#,status,member from v$logfile; GROUP# STATUS MEMBER---------- ------- ---------------------------------------------------------------------- 1 /oracle/10g/oracle/product/10.2.0/oradata/oralife/redo01.log 3 /oracle/10g/oracle/product/10.2.0/oradata/oralife/redo03.log 2 /oracle/10g/oracle/product/10.2.0/oradata/oralife/redo02.log 1 /oracle/10g/oracle/product/10.2.0/oradata/oralife/redo01_add.log 2 /oracle/10g/oracle/product/10.2.0/oradata/oralife/redo02_add.log 3 /oracle/10g/oracle/product/10.2.0/oradata/oralife/redo03_add.log6 rows selected.--继续切换日志组,归档日志组1SQL> alter system switch logfile;System altered.SQL> select group#,status from v$log; GROUP# STATUS---------- ---------------- 1 ACTIVE 2 ACTIVE 3 CURRENTSQL> select group#,status,member from v$logfile; GROUP# STATUS MEMBER---------- ------- ---------------------------------------------------------------------- 1 /oracle/10g/oracle/product/10.2.0/oradata/oralife/redo01.log 3 /oracle/10g/oracle/product/10.2.0/oradata/oralife/redo03.log 2 /oracle/10g/oracle/product/10.2.0/oradata/oralife/redo02.log 1 /oracle/10g/oracle/product/10.2.0/oradata/oralife/redo01_add.log 2 /oracle/10g/oracle/product/10.2.0/oradata/oralife/redo02_add.log 3 /oracle/10g/oracle/product/10.2.0/oradata/oralife/redo03_add.log6 rows selected.--查看告警日志文件出现以下信息,意思是找不到重做日志文件,无法对其进行归档,后台进程lgwr处于等待状态Wed Aug 3 21:02:30 2011Thread 1 advanced to log sequence 35 Current log# 3 seq# 35 mem# 0: /oracle/10g/oracle/product/10.2.0/oradata/oralife/redo03.log Current log# 3 seq# 35 mem# 1: /oracle/10g/oracle/product/10.2.0/oradata/oralife/redo03_add.logWed Aug 3 21:02:30 2011Errors in file /oracle/10g/oracle/product/10.2.0/db_1/admin/oralife/bdump/oralife_arc1_3514.trc:ORA-00313: open failed for members of log group 1 of thread 1ORA-00312: online log 1 thread 1: '/oracle/10g/oracle/product/10.2.0/oradata/oralife/redo01_add.log'ORA-27037: unable to obtain file statusLinux Error: 2: No such file or directoryAdditional information: 3ORA-00312: online log 1 thread 1: '/oracle/10g/oracle/product/10.2.0/oradata/oralife/redo01.log'ORA-27037: unable to obtain file statusLinux Error: 2: No such file or directoryAdditional information: 3Wed Aug 3 21:02:30 2011ARC1: Failed to archive thread 1 sequence 34 (0)ARCH: Archival stopped, error occurred. Will continue retryingWed Aug 3 21:02:30 2011ORACLE Instance oralife - Archival ErrorWed Aug 3 21:02:30 2011ORA-16038: log 1 sequence# 34 cannot be archivedORA-00312: online log 1 thread 1: '/oracle/10g/oracle/product/10.2.0/oradata/oralife/redo01.log'ORA-00312: online log 1 thread 1: '/oracle/10g/oracle/product/10.2.0/oradata/oralife/redo01_add.log'Wed Aug 3 21:02:30 2011Errors in file /oracle/10g/oracle/product/10.2.0/db_1/admin/oralife/bdump/oralife_arc1_3514.trc:--清除该日志组以使后台进程lgwr继续工作SQL> alter database clear unarchived logfile group 1;--以上命令会重建日志组1的所有成员,此时后台进程可以继续工作。--因为日志组内容没有被归档,导致过去的数据文件备份不能使用,应该备份数据库。--查看告警日志文件出现:Wed Aug 3 22:04:44 2011WARNING! CLEARING REDO LOG WHICH HAS NOT BEEN ARCHIVED. BACKUPS TAKEN BEFORE 08/03/2011 22:02:45 (CHANGE 874003) CANNOT BE USED FOR RECOVERY.--继续切换日志组,日志组1进入不了current状态,原因是日志组1无法归档,这里所有的操作都是在open状态下。日志信息:Wed Aug 3 22:24:55 2011Errors in file /oracle/10g/oracle/product/10.2.0/db_1/admin/oralife/bdump/oralife_arc1_4803.trc:ORA-00314: log 1 of thread 1, expected sequence# 56 doesn't match 0ORA-00312: online log 1 thread 1: '/oracle/10g/oracle/product/10.2.0/oradata/oralife/redo01_add.log'ORA-00314: log 1 of thread 1, expected sequence# 56 doesn't match 0ORA-00312: online log 1 thread 1: '/oracle/10g/oracle/product/10.2.0/oradata/oralife/redo01.log'Wed Aug 3 22:24:55 2011ARC1: Failed to archive thread 1 sequence 56 (0)--无奈shutdown数据库,然后startupSQL> startupORACLE instance started.Total System Global Area 528482304 bytesFixed Size 1220360 bytesVariable Size 159383800 bytesDatabase Buffers 360710144 bytesRedo Buffers 7168000 bytesDatabase mounted.ORA-00314: log 1 of thread 1, expected sequence# doesn't matchORA-00312: online log 1 thread 1: '/oracle/10g/oracle/product/10.2.0/oradata/oralife/redo01.log'ORA-00312: online log 1 thread 1: '/oracle/10g/oracle/product/10.2.0/oradata/oralife/redo01_add.log'SQL> alter database clear unarchived logfile group 1;Database altered.SQL> alter database open;Database altered.--此时可以任意切换日志组SQL> alter system switch logfile;注意:alter database clear unarchived logfile group n之后要备份数据库。
2)
--在数据库关闭状态下使用rm删除日志组1的所有日志成员(redo01.log,redo01_add.log),来模拟日志组1的所有日志成员全部损坏。--启动数据库。SQL> startupORACLE instance started.Total System Global Area 528482304 bytesFixed Size 1220360 bytesVariable Size 159383800 bytesDatabase Buffers 360710144 bytesRedo Buffers 7168000 bytesDatabase mounted.ORA-00313: open failed for members of log group 1 of thread 1ORA-00312: online log 1 thread 1: '/oracle/10g/oracle/product/10.2.0/oradata/oralife/redo01.log'ORA-00312: online log 1 thread 1: '/oracle/10g/oracle/product/10.2.0/oradata/oralife/redo01_add.log'SQL> select group#,status,archived from v$log; GROUP# STATUS ARC---------- ---------------- --- 1 INACTIVE YES --inactive 3 INACTIVE YES 2 CURRENT NO--添加新日志组,将原来的日志组1删除。SQL> alter database add logfile 2 ('/oracle/10g/oracle/product/10.2.0/oradata/oralife/redo04.log','/oracle/10g/oracle/product/10.2.0/oradata/oralife/redo04_add.log') 3 size 50M;Database altered.SQL> alter database drop logfile group 1;Database altered.SQL> alter database open;Database altered.
current状态日志组的所有日志成员损坏
1)open状态下当前日志组成员全部出现介质失败,后台进程lgwr将事务写入该日志组时,oracle实例会终止。
2)关闭状态下当前日志组全部成员出现介质失败,oracle实例不能打开;因为数据库关闭后,数据文件与控制文件处于完全一致状态,只需使用recover database until cancel执行基于取消的不完全恢复,然后使用resetlogs打开数据库,这时oracle会自动重新建立日志组所有成员。使用resetlogs打开数据库后,应该备份数据文件与控制文件。
2)关闭状态
SQL> select group#,status from v$log; GROUP# STATUS---------- -------------------------------- 1 INACTIVE 2 INACTIVE 3 CURRENTSQL> select group#,status,member from v$logfile; GROUP# STATUS MEMBER---------- -------------- ------------------------------------------------------------------------------- 3 F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO03.LOG 2 F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02.LOG 1 F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01.LOG 1 F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01_ADD_NEW.LOG 2 F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02_ADD.LOG 3 F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO03_ADD.LOG已选择6行。SQL> shutdown immediate数据库已经关闭。已经卸载数据库。ORACLE 例程已经关闭。--手动删除日志组3的所有日志成员(REDO03.LOG,REDO03_ADD.LOG),启动数据库。SQL> startupORACLE 例程已经启动。Total System Global Area 612368384 bytesFixed Size 1250428 bytesVariable Size 293604228 bytesDatabase Buffers 310378496 bytesRedo Buffers 7135232 bytes数据库装载完毕。ORA-00313: 无法打开日志组 3 (用于线程 1) 的成员ORA-00312: 联机日志 3 线程 1: 'F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO03.LOG'ORA-00312: 联机日志 3 线程 1: 'F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO03_ADD.LOG'--基于取消的恢复。SQL> recover database until cancel;完成介质恢复。SQL> alter database open;alter database open*第 1 行出现错误:ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项--使用resetlogs打开数据库,应该备份数据库。SQL> alter database open resetlogs;数据库已更改。1)open状态
SQL> select group#,status,archived from v$log; GROUP# STATUS ARC---------- ---------------- --- 1 CURRENT NO 2 INACTIVE YES 3 INACTIVE YESSQL> create table t (text varchar(1000));表已创建。SQL> insert into t values('ajax');已创建 1 行。SQL> commit;提交完成。--切换日志,使其归档。SQL> alter system switch logfile; 系统已更改。SQL> select group#,status,archived from v$log; GROUP# STATUS ARC---------- ---------------- --- 1 ACTIVE YES 2 CURRENT NO 3 INACTIVE YESSQL> insert into t values('java');已创建 1 行。SQL> commit;提交完成。--切换日志,使其归档。SQL> alter system switch logfile;系统已更改。SQL> select group#,status,archived from v$log; GROUP# STATUS ARC---------- ---------------- --- 1 ACTIVE YES 2 ACTIVE YES 3 CURRENT NO--删除日志组3的所有日志成员。SQL> insert into t values('spring');insert into t values('spring')*第 1 行出现错误:ORA-03113: 通信通道的文件结束--重新连接例程,启动到mount状态。SQL> conn / as sysdba已连接到空闲例程。SQL> startup mount;ORACLE 例程已经启动。Total System Global Area 612368384 bytesFixed Size 1250428 bytesVariable Size 201329540 bytesDatabase Buffers 402653184 bytesRedo Buffers 7135232 bytes数据库装载完毕。--拷贝所有的数据文件备份到目标目录。cp..--基于取消的不完全恢复,先恢复归档日志,然后再cancel。SQL> recover database until cancelORA-00279: 更改 %s (在 %s 生成) 对于线程 %s 是必需的指定日志: {<RET>=suggested | filename | AUTO | CANCEL}autoORA-00279: 更改 %s (在 %s 生成) 对于线程 %s 是必需的ORA-00279: 更改 %s (在 %s 生成) 对于线程 %s 是必需的ORA-00308: 无法打开归档日志 '%s'SQL> recover database until cancelORA-00279: 更改 %s (在 %s 生成) 对于线程 %s 是必需的指定日志: {<RET>=suggested | filename | AUTO | CANCEL}cancel介质恢复已取消。SQL> desc tERROR:ORA-04043: 对象 %s 不存在SQL> select group#,status,archived from v$log; GROUP# STATUS ARC---------- ---------------- --- 1 ACTIVE YES 3 CURRENT NO 2 ACTIVE YES--使用resetlogs打开数据库,备份数据库SQL> alter database open resetlogs;数据库已更改。SQL> desc t; 名称 是否为空? 类型 ----------------------------------------------------------- -------- ---------------- TEXT VARCHAR2(1000)SQL> select * from t;TEXT--------------------------------------------------------------------------------------ajaxjava数据还在,归档日志已经恢复。
如果没有数据库的全备份,也可以使用_allow_resetlogs_corruption隐藏参数进行恢复(不推荐)。
- 基于用户管理的备份与恢复—恢复重做日志
- 基于用户管理的备份与恢复
- 基于用户管理的备份与恢复—noarchivelog模式下的备份与恢复
- 基于用户管理的备份与恢复-控制文件的备份与恢复
- 基于用户管理的备份与恢复-控制文件的备份与恢复
- 【ORACLE备份与恢复】用户管理的:基于scn的数据库不完全恢复
- 【ORACLE备份与恢复】用户管理的:基于时间的数据库不完全恢复
- 【ORACLE备份与恢复】用户管理的:基于取消的数据库不完全恢复
- 用户管理的备份与恢复
- 备份恢复3——用户管理的备份与恢复*
- ARCHIVELOG模式下用户管理的不完全恢复—基于备份控制文件的不完全恢复
- 基于用户管理的备份与恢复-备份其它文件
- 用户管理的备份恢复
- RMAN备份与恢复(8)——基于日志序列号的不完全恢复!
- RMAN备份与恢复—基于日志序列号的不完全恢复
- Oracle备份与恢复总结之三:OS备份/用户管理的备份与恢复
- Oracle备份与恢复总结之三:OS备份/用户管理的备份与恢复
- 我的备份与恢复实验(归档模式下用户管理的不完全恢复,基于时间点的)
- 创建MFC动态连接库
- (小结)pass-by-reference-to-const替换pass-by-value
- rails-手册
- linux重定向及nohup不输出的方法
- 给你的程序在Win7上加个小盾,设置manifest
- 基于用户管理的备份与恢复—恢复重做日志
- Busybox简介及使用
- 给力!简单!易懂!位运算之求集合的所有子集
- OpenCV学习笔记-用鼠标在窗口中画矩形
- ERP系统2011年8月3日更新内容(2)
- 让程序在崩溃时体面的退出之Dump文件
- [转]别听陈奕迅
- JAVA卡与智能卡
- hdu1040快排