oracle實驗記錄 (恢復-redo)

fufuh2o發表於2009-08-21

幾種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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章