redo日志丢失的恢复

来源:互联网 发布:郑州水泥熟料生产数据 编辑:程序博客网 时间:2024/05/17 03:35

方法一:用命令清空日志组方法

1 正常关闭数据库

SQL> shutdown

数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。

2 删除所有的重做日志文件

3 启动数据库

SQL> startup

ORACLE 例程已经启动。

Total System Global Area  167772160 bytes

Fixed Size                  1247876 bytes

Variable Size              67110268 bytes

Database Buffers           92274688 bytes

Redo Buffers                7139328 bytes

数据库装载完毕。

ORA-00313: 无法打开日志组 1 (用于线程 1) 的成员

ORA-00312: 联机日志 1 线程 1:

'E:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO01.LOG'

4查看当前日志状态

SQL> select * from v$log;

 

    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS

---------- ---------- ---------- ---------- ---------- --- ---------------

FIRST_CHANGE# FIRST_TIME

------------- --------------

         1          1          0   52428800          1 YES UNUSED

       543031 19-5 -10

 

         3          1          0   52428800          1 YES CLEARING

       519887 18-5 -10

 

         2          1         50   52428800          1 NO  CURRENT

       563367 19-5 -10

 

(1)     由于redo01.log不是当前日志,可以对这类非当前日志直接clear,系统会重新自动生成一个重做日志文件

SQL> alter database clear logfile group 1;

数据库已更改。

5 继续启动数据库

 

SQL> alter database open;

alter database open

*

1 行出现错误:

ORA-00313: 无法打开日志组 2 (用于线程 1) 的成员

ORA-00312: 联机日志 2 线程 1:

'E:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO02.LOG'

(2)     发现redo02.log也得恢复,因为redo02.log是当前重做日志文件,尝试直接clear,失败

SQL> alter database clear logfile group 2;

alter database clear logfile group 2

*

1 行出现错误:

ORA-00350: 日志 2 (实例 orcl 的日志, 线程 1) 需要归档

ORA-00312: 联机日志 2 线程 1:

'E:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO02.LOG'

 

尝试alter database clear unarchived logfile group 2,失败

 

SQL> alter database clear unarchived logfile group 2;

alter database clear unarchived logfile group 2

*

1 行出现错误:

ORA-00313: 无法打开日志组 2 (用于线程 1) 的成员

ORA-00312: 联机日志 2 线程 1:

'E:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO02.LOG'

ORA-27041: 无法打开文件

OSD-04002: 无法打开文件

O/S-Error: (OS 2) 系统找不到指定的文件。

(3)     从有效的备份中拷贝过来一个redo02.log

SQL> alter database clear unarchived logfile group 2;

 

数据库已更改。

 

SQL> alter database open;

 

数据库已更改。

 

结论: (1)非当前(current)未归档日志文件恢复都可以直接alter database clear logfile group n来重新生成,非当前的归档日志文件恢复可以用alter database clear unarchived logfile group n来重新生成;对于当前日志,  归档日志文件恢复必须从有效的备份中复制一个,然后用alter database clear unarchived logfile group n;

 

方法二:用cancel模式恢复数据库

1 关闭数据库

SQL> shutdown

数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。

2 删除所有重做日志文件

SQL> startup

ORACLE 例程已经启动。

 

Total System Global Area  167772160 bytes

Fixed Size                  1247876 bytes

Variable Size              67110268 bytes

Database Buffers           92274688 bytes

Redo Buffers                7139328 bytes

数据库装载完毕。

ORA-00313: 无法打开日志组 1 (用于线程 1) 的成员

ORA-00312: 联机日志 1 线程 1:

'E:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO01.LOG'

3 recover命令

SQL> recover database until cancel;

完成介质恢复。

SQL> alter database open;

alter database open

1 行出现错误:

ORA-01589: 要打开数据库则必须使用 RESETLOGS NORESETLOGS 选项

 

SQL> alter database open resetlogs;

数据库已更改。

resetlogs是根据控制文件让系统自动重新生成重做日志文件,如果noresetlogs的话,就不会重新生成redo,缺少了文件,数据库无法启动。

 

方法三 通过重新生成控制文件来恢复redo

1 关闭数据库

SQL> shutdown

数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。

删除所有重做日志文件

2

SQL> startup

ORACLE 例程已经启动。

 

Total System Global Area  167772160 bytes

Fixed Size                  1247876 bytes

Variable Size              67110268 bytes

Database Buffers           92274688 bytes

Redo Buffers                7139328 bytes

数据库装载完毕。

ORA-00313: 无法打开日志组 1 (用于线程 1) 的成员

ORA-00312: 联机日志 1 线程 1:

'E:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO01.LOG'

3

SQL> alter database backup controlfile to trace;

 

数据库已更改。

4

SQL> shutdown immediate

ORA-01109: 数据库未打开

已经卸载数据库。

ORACLE 例程已经关闭。

5修改备份的控制文件中的脚本,如下,保存在E:/create.sql

STARTUP NOMOUNT

CREATE CONTROLFILE REUSE DATABASE "ORCL" RESETLOGS  ARCHIVELOG

    MAXLOGFILES 16

    MAXLOGMEMBERS 3

    MAXDATAFILES 100

    MAXINSTANCES 8

    MAXLOGHISTORY 292

LOGFILE

  GROUP 1 'E:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO01.LOG'  SIZE 50M,

  GROUP 2 'E:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO02.LOG'  SIZE 50M,

  GROUP 3 'E:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO03.LOG'  SIZE 50M

-- STANDBY LOGFILE

DATAFILE

  'E:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/SYSTEM01.DBF',

  'E:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/UNDOTBS01.DBF',

  'E:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/SYSAUX01.DBF',

  'E:/ORACLE/PRODUCT/10.2.0/ORCL/TEST.DBF'

CHARACTER SET ZHS16GBK

;

6 执行create.sql

SQL> @E:/create.sql

ORACLE 例程已经启动。

 

Total System Global Area  167772160 bytes

Fixed Size                  1247876 bytes

Variable Size              67110268 bytes

Database Buffers           92274688 bytes

Redo Buffers                7139328 bytes

 

控制文件已创建。

7resetlogs打开数据库

SQL> alter database open resetlogs;

数据库已更改。

 

方法四 修改系统参数方法

 

SQL*Plus: Release 10.2.0.1.0 - Production on 星期三 5 19 22:44:14 2010

 

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

 

SQL> conn sys/admin as sysdba

已连接。

SQL> conn test/test

已连接。

SQL> select * from test;

 

        ID

----------

         1

         2

         3

         4

         5

         6

 

已选择6行。

 

SQL> insert into test values(7);

 

已创建 1 行。

 

SQL> commit;

 

提交完成。

 

SQL> conn sys/admin as sysdba

已连接。

SQL> shutdown abort;

ORACLE 例程已经关闭。

1 initorcl.ora里加入_allow_resetlogs_corruption=true

2指定pfile启动数据库到mount

 SQL> startup mount pfile='E:/oracle/product/10.2.0/admin/orcl/pfile/initorcl.ora';

ORACLE 例程已经启动。

 

Total System Global Area  167772160 bytes

Fixed Size                  1247876 bytes

Variable Size              62915964 bytes

Database Buffers           96468992 bytes

Redo Buffers                7139328 bytes

数据库装载完毕。

SQL> alter database open;

alter database open

*

1 行出现错误:

ORA-01589: 要打开数据库则必须使用 RESETLOGS NORESETLOGS 选项

 

 

SQL> alter database open resetlogs;

 

数据库已更改。

3 检验数据是否丢失

 

SQL> select * from test.test;

 

        ID

----------

         1

         2

         3

         4

         5

         6

 

已选择6行。

由于执行了shutdown abort,这时候对数据的修改还没有保存到数据文件中,虽然执行了commit,这个时候数据还在联机日志中,等待CKPT触发数据库写进程将数据写入数据文件,redo被删除后,数据也丢失了。

原创粉丝点击