RMAN恢复丢失的重做日志文件online redo logfile 

如果自己搞不定可以找诗檀软件专业ORACLE数据库修复团队成员帮您恢复!

诗檀软件专业数据库修复团队

服务热线 : 13764045638    QQ号:47079569    邮箱:[email protected]

 

RMAN备份和从丢失的重做日志文件进行用户管理恢复

在一些情况下,丢失重做日志文件是一个灾难, 因为重做日志文件包含数据库的变化,这意味着丢失了重做日志文件,你会永远丢失那些变化,看这些重做日志丢失的情况,学会恰当地应对。

这是一系列可能的重做日志故障,以及带有每一步骤说明和解释的解决方法。

  • 情景 1:  从丢失的复用重做日志恢复
  • 情景 2:  从丢失的Inactive 群的重做日志恢复
  • 情景 3:  从丢失的Current 群的重做日志恢复
  • 情景 4:  从丢失的Active 群的重做日志恢复

现在一步一步地测试上面的情景。

情景 1:  从丢失的复用重做日志文件恢复

当任何组的复用一个重做日志损坏或不小心删除,LGWR 过程忽略它,将信息写入到唯一可用的重做日志,下面的情景进行了解释,以便更容易理解主要的概念:

  • 为每个重做日志群添加新的重做日志,查询所有的重做日志和他们的状态:

SQL>
select
b.group#, a.status, b.status, b.member
from
v$log a, v$logfile b
where
a.group#=b.group#
order by
1,2;

GROUP#     STATUS           STATUS  MEMBER
———- —————- ——- ——————————–
1 CURRENT                  /u01/oracle/product/10.2.0/db_1/ora
data/testdb/redo01.log
2 INACTIVE                 /u01/oracle/product/10.2.0/db_1/ora
data/testdb/redo02.log
3 ACTIVE                   /u01/oracle/product/10.2.0/db_1/ora
data/testdb/redo03.log

  • 每组添加一个重做日志:

SQL>
alter
database add logfile member ‘/u02/oradata/testdb/redo01.log’
to
group 1;
Database altered.

SQL>
alter
database add logfile member ‘/u02/oradata/testdb/redo02.log’
to
group 2;
Database altered.

SQL>
alter
database add logfile member ‘/u02/oradata/testdb/redo03.log’
to
group 3;
Database altered.

  • 再次查询两个视图,你会看到每个重做日志处于无效状态,因为它们是新创建的。

SQL>
select
b.group#, a.status, b.status, b.member
from
v$log a, v$logfile b
where
a.group#=b.group#
order by
1,2;

GROUP#     STATUS           STATUS  MEMBER
———- —————- ——- ——————————–
1 CURRENT                  /u01/oracle/product/10.2.0/db_1/ora
data/testdb/redo01.log

1 CURRENT          INVALID /u02/oradata/testdb/redo01.log
2 INACTIVE         INVALID /u02/oradata/testdb/redo02.log
2 INACTIVE                 /u01/oracle/product/10.2.0/db_1/ora
data/testdb/redo02.log

3 ACTIVE           INVALID /u02/oradata/testdb/redo03.log
3 ACTIVE                   /u01/oracle/product/10.2.0/db_1/ora
data/testdb/redo03.log

6 rows selected.

  • 执行人工重做日志切换,使这些重做日志可用,再次查询视图:

SQL>
alter
system switch logfile;
System altered.

SQL> /
System altered.

SQL> /
System altered.
SQL>
select
b.group#, a.status, b.status, b.member
from
v$log a, v$logfile b
where
a.group#=b.group#
order by
1,2;

    GROUP# STATUS           STATUS  MEMBER
———- —————- ——- ———————————–
1 CURRENT                  /u01/oracle/product/10.2.0/db_1/ora
data/testdb/redo01.log
1 CURRENT                  /u02/oradata/testdb/redo01.log
2 INACTIVE                 /u02/oradata/testdb/redo02.log
<…..output trimmed ……>
<…..output trimmed ……>

6 rows selected.

  • 删除 OS中的一个重做日志文件,关闭数据库,重启,切换重做日志文件,再次查询视图

SQL>
host rm -rf /u02/oradata/testdb/redo01.log
SQL>
shut
abort
SQL>
startup
SQL>
alter
system switch logfile;
System altered.

SQL>
select
b.group#, a.archived, a.status, b.status, b.member
from
v$log a, v$logfile b
where
a.group#=b.group#
order by
1,2;

    GROUP# ARC STATUS           STATUS  MEMBER
———- — —————- ——- —————————-
1 NO  CURRENT           /u01/oracle/product/10.2.0/db_1/ora
data/testdb/redo01.log
1 NO  CURRENT          INVALID /u02/oradata/testdb/redo01.log
2 NO  INACTIVE                 /u02/oradata/testdb/redo02.log
<……output trimmed ……>
<……output trimmed ……>

6 rows selected.

  • 通过删除并再次创建来重建重做日志,因为该重做日志存在于当前使用的重做日志群,所以,你不能删除它,于是,切换重做日志文件,再次尝试:

SQL>
alter
database drop logfile member ‘/u02/oradata/testdb/redo01.log’;
alter
database drop logfile member ‘/u02/oradata/testdb/redo01.log’
*
ERROR at line 1:
ORA-01609: log 1 is the current log for thread 1 – cannot drop members
ORA-00312: online log 1 thread 1:
‘/u01/ORACLE/product/10.2.0/db_1/oradata/testdb/redo01.log’
ORA-00312: online log 1 thread 1: ‘/u02/oradata/testdb/redo01.log’

SQL>
alter
system switch logfile;
System altered.

SQL>
alter
database drop logfile member ‘/u02/oradata/testdb/redo01.log’;
Database altered.
SQL>

  • 现在添加新的重做日志文件到同一个组:

SQL>
alter
database add logfile member ‘/u02/oradata/testdb/redo01.log’
to
group 1;
Database altered.

SQL>
select
b.group#, a.archived, a.status, b.status, b.member
from
v$log a, v$logfile b
where
a.group#=b.group#
order by
1,2;

    GROUP# ARC STATUS           STATUS  MEMBER
———- — —————- ——- —————————-
1 NO  INACTIVE          /u01/oracle/product/10.2.0/db_1/ora
data/testdb/redo01.log
1 NO  INACTIVE         INVALID /u02/oradata/testdb/redo01.log
<……output trimmed ……>
<……output trimmed ……>

6 rows selected.

  • 执行人工重做日志文件,激活重做日志文件:

SQL>
alter
system switch logfile;
System altered.

SQL>
/
System altered.

SQL>
select
b.group#, a.archived, a.status, b.status, b.member
from
v$log a, v$logfile b
where a.group#=b.group#
order by 1,2;

    GROUP# ARC STATUS           STATUS  MEMBER
———- — —————- ——- —————————-
1 NO  CURRENT           /u01/oracle/product/10.2.0/db_1/ora
data/testdb/redo01.log
1 NO  CURRENT           /u02/oradata/testdb/redo01.log

6 rows selected.


Posted

in

by

Tags:

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *