ITPub博客

首页 > Linux操作系统 > Linux操作系统 > oracle实验记录 (恢复-redo)

oracle实验记录 (恢复-redo)

原创 Linux操作系统 作者:fufuh2o 时间:2009-08-21 17:31:56 0 删除 编辑

几种redofile恢复
SQL> select group#,status from v$log;

    GROUP# STATUS
---------- ----------------
         1 CURRENT
         2 UNUSED
         3 UNUSED
         4 INACTIVE
现在的情况

情况一丢失logfile member
SQL> select group#,status,members from v$log;

    GROUP# STATUS              MEMBERS
---------- ---------------- ----------
         1 CURRENT                   3~
         2 UNUSED                    1
         3 UNUSED                    1
         4 INACTIVE                  2
MEMBER
------------------------------------------------------------

         1
E:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\REDO01.LOG

         1
E:\REDO01_2.LOG

         1
E:\REDO01_3.LOG

SQL> startup force mount
ORACLE instance started.

Total System Global Area  171966464 bytes
Fixed Size                   787988 bytes
Variable Size             145488364 bytes
Database Buffers           25165824 bytes
Redo Buffers                 524288 bytes
Database mounted.
SQL>
SQL>
SQL> select group#,status,members from v$log;


SQL> host del e:\redo01_2.log

SQL> alter database open;~(因为startup force所以 会instance recovery)
SQL> alter database open;~~~~~~~~~~~~~丢失一个member database 可以继续运行 写入alert.log

Database altered.

SQL> select group#,status,members from v$log;

    GROUP# STATUS              MEMBERS
---------- ---------------- ----------
         1 INACTIVE                  3
         2 CURRENT                   1
         3 UNUSED                    1
         4 INACTIVE                  2

    GROUP# STATUS              MEMBERS
---------- ---------------- ----------
         1 CURRENT                   3
         2 UNUSED                    1
         3 UNUSED                    1
         4 INACTIVE                  2

查看alert.log
Beginning crash recovery of 1 threads~~~
Errors in file e:\oracle\product\10.1.0\admin\orcl\udump\orcl_ora_187756.trc:
ORA-00313: open failed for members of log group 1 of thread 1
ORA-00312: online log 1 thread 1: 'E:\REDO01_2.LOG'
ORA-27041: unable to open file
OSD-04002: unable to open file
O/S-Error: (OS 2) 系统找不到指定的文件。

Completed redo application
Fri Aug 21 16:30:54 2009
Completed crash recovery at

Incremental checkpoint up to RBA [0x3.3.0], current log tail at RBA [0x3.3.0]
Fri Aug 21 16:30:57 2009
Errors in file e:\oracle\product\10.1.0\admin\orcl\bdump\orcl_arc1_186560.trc:
ORA-00313: open failed for members of log group 1 of thread 1~~~
会出现警告 在instance recover时 和incrmental checkpoint时候

 


直接drop 这个member也不行 因为不可以drop 活动的
可以切换 然后drop member add member
or switch后
SQL> alter database clear logfile group 1;~~~会自动重新建立

Database altered.


~~~~~~~
非活动的group 中所有member全丢失


SQL> select group#,status,members from v$log;

    GROUP# STATUS              MEMBERS
---------- ---------------- ----------
         1 UNUSED                    3~~~~~~~~~~~~~刚才clear 后重新建立的 还未使用过
         2 INACTIVE                  1
         3 CURRENT                   1
         4 INACTIVE                  2


SQL> select group#,member from v$logfile where group#=2;

    GROUP#
----------
MEMBER
--------------------------------------------------------------------------------

         2
E:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\REDO02.LOG

 

SQL> startup force;
ORACLE instance started.

Total System Global Area  171966464 bytes
Fixed Size                   787988 bytes
Variable Size             145488364 bytes
Database Buffers           25165824 bytes
Redo Buffers                 524288 bytes
Database mounted.
Database opened.
SQL> startup force mount;
ORACLE instance started.

Total System Global Area  171966464 bytes
Fixed Size                   787988 bytes
Variable Size             145488364 bytes
Database Buffers           25165824 bytes
Redo Buffers                 524288 bytes
Database mounted.
SQL> host del E:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\REDO02.LOG;

SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-00313: open failed for members of log group 2 of thread 1
ORA-00312: online log 2 thread 1:
'E:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\REDO02.LOG'

SQL> alter database clear logfile group 2;  (open 时候丢失也可以用这个 如果要归档unarchived, 另外可以drop group ,add group)

Database altered.
SQL> alter database open;

Database altered.


~~~~~~~~~~情况3 当前current日志丢失 这个需要不完全恢复了~理由很简单 current中 有未写入datafile 的drity buffer,也有写入datafile未commit的 总之 datafile不一致


SQL> select group#,status,members from v$log;

    GROUP# STATUS              MEMBERS
---------- ---------------- ----------
         1 INACTIVE                  3
         2 CURRENT                   1
         3 INACTIVE                  1
         4 INACTIVE                  2

SQL> startup force mount;
ORACLE instance started.

Total System Global Area  171966464 bytes
Fixed Size                   787988 bytes
Variable Size             145488364 bytes
Database Buffers           25165824 bytes
Redo Buffers                 524288 bytes

SQL> select group#,status,members from v$log;

    GROUP# STATUS              MEMBERS
---------- ---------------- ----------
         1 INACTIVE                  3
         2 CURRENT                   1
         3 INACTIVE                  1
         4 INACTIVE                  2

SQL> host del E:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\REDO02.LOG;

SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-00313: open failed for members of log group 2 of thread 1
ORA-00312: online log 2 thread 1:
'E:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\REDO02.LOG'
ORA-27041: unable to open file
OSD-04002: unable to open file
O/S-Error: (OS 2) 系统找不到指定的文件。


SQL> alter database  clear unarchived logfile group 2;
alter database  clear unarchived logfile group 2
*
ERROR at line 1:
ORA-01624: log 2 needed for crash recovery of instance orcl (thread 1)
ORA-00312: online log 2 thread 1:
'E:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\REDO02.LOG'


SQL> alter database  drop logfile group 2;
alter database  drop logfile group 2
*
ERROR at line 1:
ORA-01623: log 2 is current log for instance orcl (thread 1) - cannot drop         ~以上是模拟一下这种情况force后需要crash recovery但 current logfile删除了
ORA-00312: online log 2 thread 1:                                                     不允许clear,不允许drop
'E:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\REDO02.LOG'


LIST BACKUP
  File LV Type Ckp SCN    Ckp Time   Name
  ---- -- ---- ---------- ---------- ----
  1       Full 7688214    21-8月 -09 E:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\SYSTE
M01.DBF
  2       Full 7688214    21-8月 -09 E:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\UNDOT
BS01.DBF
  3       Full 7688214    21-8月 -09 E:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\SYSAU
X01.DBF
  4       Full 7688214    21-8月 -09 E:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\USERS
01.DBF
  5       Full 7688214    21-8月 -09 E:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\EXAMP
LE01.DBF
  10      Full 7688214    21-8月 -09 D:\TEST.DBF

 

RMAN> restore database;

Starting restore at 21-8月 -09
using target database controlfile instead of recovery catalog~~~~~~~~~~~~~~~
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=158 devtype=DISK
restoring datafile 00001 to E:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\SYSTEM01.DBF
restoring datafile 00002 to E:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\UNDOTBS01.DBF
restoring datafile 00003 to E:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\SYSAUX01.DBF
restoring datafile 00004 to E:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\USERS01.DBF
restoring datafile 00005 to E:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\EXAMPLE01.DBF
restoring datafile 00010 to D:\TEST.DBF
channel ORA_DISK_1: restore complete
Finished restore at 21-8月 -09

SQL> revover database ;~~~~~~~~~不能完全恢复


ORA-00283: recovery session canceled due to errors
ORA-00313: open failed for members of log group 2 of thread 1
ORA-00312: online log 2 thread 1:
'E:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\REDO02.LOG'
ORA-27041: unable to open file
OSD-04002: unable to open file
O/S-Error: (OS 2) 系统找不到指定的文件。


ORA-01112: media recovery not started


SQL> recover database until cancel;~~~能应用到哪算哪
ORA-00279: change 7770598 generated at 08/21/2009 17:01:10 needed for thread 1
ORA-00289: suggestion :
E:\ORACLE\PRODUCT\10.1.0\FLASH_RECOVERY_AREA\XHTEST\ARCHIVELOG\2009_08_21\O1_MF_

1_6_%U_.ARC
ORA-00280: change 7770598 for thread 1 is in sequence #6


Specify log: {=suggested | filename | AUTO | CANCEL}
auto
SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
------------------
           7770599~~~~~~~~~~~~~~~~~~~~来自controlfile

SQL> select checkpoint_change# from v$datafile;

CHECKPOINT_CHANGE#
------------------
           7770599
           7770599
           7770599~~~~~~~~~~~~~~~~~~~~来自controlfile
           7770599
           7770599
           7770599

6 rows selected.

SQL> select checkpoint_change# from v$datafile_header;

CHECKPOINT_CHANGE#
------------------
           7770598
           7770598
           7770598  ~~~~~~~~~~~~~~~~~~~~来自datafile
           7770598
           7770598
           7770598

6 rows selected.


SQL> ALTER DATABASE OPEN RESETLOGS;

Database altered.

SQL> select checkpoint_change# from v$datafile;

CHECKPOINT_CHANGE#
------------------
           7770600
           7770600
           7770600
           7770600
           7770600
           7770600

6 rows selected.

SQL> select checkpoint_change# from v$datafile_header;

CHECKPOINT_CHANGE#
------------------
           7770600
           7770600
           7770600
           7770600
           7770600
           7770600

6 rows selected.

SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
------------------
           7770600
SQL> select group#,status,members from v$log;

    GROUP# STATUS              MEMBERS
---------- ---------------- ----------
         1 UNUSED                    3~~~~~~~~~~~~~~~~~resetlogs时候都重新建立了
         2 CURRENT                   1
         3 UNUSED                    1
         4 UNUSED                    2


不完全恢复 应用到最后可以应用的archivedlog后,后面的数据都将丢失.


~~~~~~~~~~~~~~~~~~~
情况4 没有备份的情况下 丢失 current redo file;

SQL> archive log list;
数据库日志模式            存档模式
自动存档             启用
存档终点            f:\archivelog
最早的联机日志序列     61
下一个存档日志序列   62
当前日志序列           62
SQL> select group#,status from v$log;

    GROUP# STATUS
---------- ----------------
         1 CURRENT
         2 INACTIVE
         3 UNUSED

SQL> select group#,status from v$log;

    GROUP# STATUS
---------- ----------------
         1 CURRENT
         2 INACTIVE
         3 UNUSED

SQL> conn xh/a831115
已连接。
SQL> show user
USER 为 "XH"
SQL> select * from test;

A
----------
bbb

SQL> insert into test values('aaa');

已创建 1 行。

SQL> select * from test;

A
----------
bbb
aaa

SQL> shutdown abort
ORA-01031: 权限不足
SQL> conn / as sysdba
已连接。
SQL> shutdown abort
ORACLE 例程已经关闭。
SQL> host del F:\oracle\product\10.2.0\oradata\xhtest\redo01.log;

SQL> startup
ORA-32004: obsolete and/or deprecated parameter(s) specified
ORACLE 例程已经启动。

Total System Global Area  289406976 bytes
Fixed Size                  1248576 bytes
Variable Size              79692480 bytes
Database Buffers          201326592 bytes
Redo Buffers                7139328 bytes
数据库装载完毕。
ORA-00313: 无法打开日志组 1 (用于线程 1) 的成员
ORA-00312: 联机日志 1 线程 1:
'F:\ORACLE\PRODUCT\10.2.0\ORADATA\XHTEST\REDO01.LOG'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。

 

SQL> alter database clear logfile group 1;
alter database clear logfile group 1
*
第 1 行出现错误:
ORA-01624: 日志 1 是紧急恢复实例 xhtest (线程 1) 所必需的
ORA-00312: 联机日志 1 线程 1:
'F:\ORACLE\PRODUCT\10.2.0\ORADATA\XHTEST\REDO01.LOG'


SQL> alter database drop logfile group 1;
alter database drop logfile group 1
*
第 1 行出现错误:
ORA-01623: 日志 1 是实例 xhtest (线程 1) 的当前日志 - 无法删除
ORA-00312: 联机日志 1 线程 1:
'F:\ORACLE\PRODUCT\10.2.0\ORADATA\XHTEST\REDO01.LOG'


因为是current log file,drop clear都不行(因为是abort关闭的 需要instance recovery)
此时只能 不完全恢复,但现在情况是 没有备份


SQL> recover database;
ORA-00283: 恢复会话因错误而取消
ORA-00313: 无法打开日志组 1 (用于线程 1) 的成员
ORA-00312: 联机日志 1 线程 1:
'F:\ORACLE\PRODUCT\10.2.0\ORADATA\XHTEST\REDO01.LOG'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。

current log file丢失 完全恢复是不行的.


SQL> recover database until cancel;
ORA-00279: 更改 4714463 (在 10/22/2009 14:04:13 生成) 对于线程 1 是必需的
ORA-00289: 建议: F:\ARCHIVELOG\ARC00062_0700761652.001
ORA-00280: 更改 4714463 (用于线程 1) 在序列 #62 中


指定日志: {=suggested | filename | AUTO | CANCEL}
auto
ORA-00308: 无法打开归档日志 'F:\ARCHIVELOG\ARC00062_0700761652.001'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。


ORA-00308: 无法打开归档日志 'F:\ARCHIVELOG\ARC00062_0700761652.001'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。


ORA-01547: 警告: RECOVER 成功但 OPEN RESETLOGS 将出现如下错误
ORA-01194: 文件 1 需要更多的恢复来保持一致性
ORA-01110: 数据文件 1: 'F:\ORACLE\PRODUCT\10.2.0\ORADATA\XHTEST\SYSTEM01.DBF'

SQL> alter database open resetlogs;
alter database open resetlogs
*
第 1 行出现错误:
ORA-01194: 文件 1 需要更多的恢复来保持一致性
ORA-01110: 数据文件 1: 'F:\ORACLE\PRODUCT\10.2.0\ORADATA\XHTEST\SYSTEM01.DBF'

由于没有备份 不完全恢复 是进行不 了的,会有错误 ,用的是最近最新的datafile

 

此时只能尝试使用隐藏参数来强制open resetlogs database

set linesize 132
column name format a30
column value format a25
select
  x.ksppinm  name,
  y.ksppstvl  value,
  y.ksppstdf  isdefault,
  decode(bitand(y.ksppstvf,7),1,'MODIFIED',4,'SYSTEM_MOD','FALSE')  ismod,
  decode(bitand(y.ksppstvf,2),2,'TRUE','FALSE')  isadj,x. KSPPDESC
from
  sys.x$ksppi x,
  sys.x$ksppcv y
where
  x.inst_id = userenv('Instance') and
  y.inst_id = userenv('Instance') and
  x.indx = y.indx and
  x.ksppinm like '%_&par%'
order by  
  translate(x.ksppinm, ' _', ' ')
/


输入 par 的值:  allow_resetlogs_corruption
原值   14:   x.ksppinm like '%_&par%'
新值   14:   x.ksppinm like '%_allow_resetlogs_corruption%'

NAME                           VALUE                     ISDEFAULT ISMOD      IS
ADJ
------------------------------ ------------------------- --------- ---------- --
---
KSPPDESC
--------------------------------------------------------------------------------
----------------------------------------------------
_allow_resetlogs_corruption    FALSE                     TRUE      FALSE      FA
LSE
allow resetlogs even if it will cause corruption

这将让oracle 忽略scn的不匹配,强制resetlogs open 然后强制同步数据文件 控制文件,redo

 

SQL> alter system set "_allow_resetlogs_corruption"=true  scope=spfile;

系统已更改。

SQL> startup force
ORA-32004: obsolete and/or deprecated parameter(s) specified
ORACLE 例程已经启动。

Total System Global Area  289406976 bytes
Fixed Size                  1248576 bytes
Variable Size              79692480 bytes
Database Buffers          201326592 bytes
Redo Buffers                7139328 bytes
数据库装载完毕。
ORA-00313: 无法打开日志组 1 (用于线程 1) 的成员
ORA-00312: 联机日志 1 线程 1: 'F:\ORACLE\PRODUCT\10.2.0\ORADATA\XHTEST\REDO01.LO
G'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。


SQL> recover database until cancel;
ORA-00279: 更改 4714463 (在 10/22/2009 14:04:13 生成) 对于线程 1 是必需的
ORA-00289: 建议: F:\ARCHIVELOG\ARC00062_0700761652.001
ORA-00280: 更改 4714463 (用于线程 1) 在序列 #62 中


指定日志: {=suggested | filename | AUTO | CANCEL}
auto
ORA-00308: 无法打开归档日志 'F:\ARCHIVELOG\ARC00062_0700761652.001'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。


ORA-00308: 无法打开归档日志 'F:\ARCHIVELOG\ARC00062_0700761652.001'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。


ORA-01547: 警告: RECOVER 成功但 OPEN RESETLOGS 将出现如下错误
ORA-01194: 文件 1 需要更多的恢复来保持一致性
ORA-01110: 数据文件 1: 'F:\ORACLE\PRODUCT\10.2.0\ORADATA\XHTEST\SYSTEM01.DBF'

 


SQL> alter database open resetlogs;

需要很长 时间 有可能会话超时

第 1 行出现错误:
ORA-03113: 通信通道的文件结束


SQL> exit
从 Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options 断开

C:\>sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 10月 22 15:11:06 2009

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

已连接到空闲例程。

SQL> startup
ORA-32004: obsolete and/or deprecated parameter(s) specified
ORACLE 例程已经启动。

Total System Global Area  289406976 bytes
Fixed Size                  1248576 bytes
Variable Size              79692480 bytes
Database Buffers          201326592 bytes
Redo Buffers                7139328 bytes
数据库装载完毕。
数据库已经打开。
SQL> conn xh/a831115
已连接。
SQL> select * from test;

A
----------
bbb

看到 会丢失数据,aaa数据丢失了,因为数据在current log file中。

 

 

SQL> archive log list;
数据库日志模式            存档模式
自动存档             启用
存档终点            f:\archivelog
最早的联机日志序列     1
下一个存档日志序列   2
当前日志序列           2

 

SQL> select group#,status from v$log;

    GROUP# STATUS
---------- ----------------
         1 INACTIVE
         2 CURRENT~~~~~~~~
         3 UNUSED

SQL> conn xh/a831115
已连接。
SQL> show user
USER 为 "XH"
SQL> select * from test;

A
----------
bbb

SQL> insert into test values('aaa');

已创建 1 行。

SQL> select * from test;

A
----------
bbb
aaa

SQL> commit;

提交完成。


SQL> conn / as sysdba
已连接。
SQL> shutdown abort
ORACLE 例程已经关闭。
SQL> host del F:\oracle\product\10.2.0\oradata\xhtest\redo02.log;

SQL> startup
ORA-32004: obsolete and/or deprecated parameter(s) specified
ORACLE 例程已经启动。

Total System Global Area  289406976 bytes
Fixed Size                  1248576 bytes
Variable Size              79692480 bytes
Database Buffers          201326592 bytes
Redo Buffers                7139328 bytes
数据库装载完毕。
ORA-00313: 无法打开日志组 2 (用于线程 1) 的成员
ORA-00312: 联机日志 2 线程 1:
'F:\ORACLE\PRODUCT\10.2.0\ORADATA\XHTEST\REDO02.LOG'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。


SQL> recover database until cancel;
ORA-00279: 更改 4734470 (在 10/22/2009 15:11:16 生成) 对于线程 1 是必需的
ORA-00289: 建议: F:\ARCHIVELOG\ARC00002_0700931062.001
ORA-00280: 更改 4734470 (用于线程 1) 在序列 #2 中


指定日志: {=suggested | filename | AUTO | CANCEL}
auto
ORA-00308: 无法打开归档日志 'F:\ARCHIVELOG\ARC00002_0700931062.001'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。


ORA-00308: 无法打开归档日志 'F:\ARCHIVELOG\ARC00002_0700931062.001'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。


ORA-01547: 警告: RECOVER 成功但 OPEN RESETLOGS 将出现如下错误
ORA-01194: 文件 1 需要更多的恢复来保持一致性
ORA-01110: 数据文件 1: 'F:\ORACLE\PRODUCT\10.2.0\ORADATA\XHTEST\SYSTEM01.DBF'


SQL> alter database open resetlogs;
SQL> conn xh/a831115
已连接。
SQL> select * from test;

A
----------
bbb

commit了 还是丢了


继续实验一次 这次 让dirty block写入datafile
SQL> insert into test values('aaa');

已创建 1 行。

SQL> select * from test;

A
----------
bbb
aaa

SQL> commit;

提交完成。

SQL> select group#,status from v$log;

    GROUP# STATUS
---------- ----------------
         1 INACTIVE
         2 INACTIVE
         3 CURRENT

SQL> alter system flush buffer_cache;启动dbwn将dirty block写入datafile


系统已更改。

SQL> conn / as sysdba
已连接。
SQL> shutdown abort
ORACLE 例程已经关闭。
SQL> host del F:\oracle\product\10.2.0\oradata\xhtest\redo03.log;

SQL> startup
ORA-32004: obsolete and/or deprecated parameter(s) specified
ORACLE 例程已经启动。

Total System Global Area  289406976 bytes
Fixed Size                  1248576 bytes
Variable Size              79692480 bytes
Database Buffers          201326592 bytes
Redo Buffers                7139328 bytes
数据库装载完毕。
ORA-00313: 无法打开日志组 3 (用于线程 1) 的成员
ORA-00312: 联机日志 3 线程 1:
'F:\ORACLE\PRODUCT\10.2.0\ORADATA\XHTEST\REDO03.LOG'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。


SQL> recover database until cancel;
ORA-00279: 更改 4775285 (在 10/22/2009 15:29:45 生成) 对于线程 1 是必需的
ORA-00289: 建议: F:\ARCHIVELOG\ARC00003_0700931997.001
ORA-00280: 更改 4775285 (用于线程 1) 在序列 #3 中


指定日志: {=suggested | filename | AUTO | CANCEL}
auto
ORA-00308: 无法打开归档日志 'F:\ARCHIVELOG\ARC00003_0700931997.001'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。


ORA-00308: 无法打开归档日志 'F:\ARCHIVELOG\ARC00003_0700931997.001'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。


ORA-01547: 警告: RECOVER 成功但 OPEN RESETLOGS 将出现如下错误
ORA-01194: 文件 1 需要更多的恢复来保持一致性
ORA-01110: 数据文件 1: 'F:\ORACLE\PRODUCT\10.2.0\ORADATA\XHTEST\SYSTEM01.DBF'

 

 

SQL> alter database open resetlogs;

数据库已更改。

SQL> conn xh/a831115
已连接。
SQL> select * from test;

A
----------
bbb
aaa~~~~~~~~~~~~~~~~~数据没丢

 

总结:如果curren redo log 丢失 那么 没提交的 数据肯定是要丢失,提交的数据 如果没有写入datafile也将丢失(commit 不代表 dbwn启动 将 数据写入datafile,他们之间没有触发关系),原因 由于是abort 所以没有产生 full checkpoint (将触发dbwr将dirty block写入 datafile),而abort后 需要instance recovery 应用current log file 将已COMMIT or 未commit的 dirty block都先写到datafile中 由于curreng log file 丢失 所以 无法instance recovery 造成未写入数据文件的已经提交的数据丢失.

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12020513/viewspace-612885/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-06-26

  • 博文量
    182
  • 访问量
    426928