如果自己搞不定可以找诗檀软件专业ORACLE数据库修复团队成员帮您恢复!
诗檀软件专业数据库修复团队
服务热线 : 13764045638 QQ号:47079569 邮箱:service@parnassusdata.com
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.