oracle實驗記錄 (恢復-使用resetlogs open前備份恢復)

fufuh2o發表於2009-10-09



使用resetlogs前的 備份恢復db


SQL> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE    10.2.0.1.0      Production
TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production

 


SQL> select tablespace_name from dba_tablespaces;

TABLESPACE_NAME
------------------------------
SYSTEM
UNDOTBS1
SYSAUX
TEMP
USERS
EXAMPLE
XHTEST
XHTR
OUTLINE_TS
SMALLTS

已選擇10行。
SQL> select name from v$database;

NAME
---------
XH

SQL> select file_name from dba_data_files;

FILE_NAME
--------------------------------------------------------------------------------
D:\XHDATAFILE\XHTEST.DBF
D:\ORACLE\PRODUCT\10.2.0\ORADATA\XH\EXAMPLE01.DBF
D:\ORACLE\PRODUCT\10.2.0\ORADATA\XH\USERS01.DBF
D:\ORACLE\PRODUCT\10.2.0\ORADATA\XH\SYSAUX01.DBF
D:\ORACLE\PRODUCT\10.2.0\ORADATA\XH\UNDOTBS01.DBF
D:\ORACLE\PRODUCT\10.2.0\ORADATA\XH\SYSTEM01.DBF
D:\XHDATAFILE\XHTR.DBF
D:\XHDATAFILE\OUTLINE.DBF
D:\XHDATAFILE\SMALLFILE.DBF


SQL> select name from v$controlfile;

NAME
--------------------------------------------------------------------------------
D:\ORACLE\PRODUCT\10.2.0\ORADATA\XH\CONTROL01.CTL
D:\ORACLE\PRODUCT\10.2.0\ORADATA\XH\CONTROL02.CTL
D:\ORACLE\PRODUCT\10.2.0\ORADATA\XH\CONTROL03.CTL

SQL> alter database begin backup;

資料庫已更改。

SQL> @ D:\restore\backupscript.txt~~~~~~~~~~備份資料檔案
已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

SQL> alter database end backup;

資料庫已更改。

SQL> @ D:\restore\backupctl.txt~~~~~~~~~~備份控制檔案
已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

SQL> select count(*) from v$archived_log;

  COUNT(*)
----------
        54


SQL> conn tr/a123
已連線。
SQL> select count(*) from t1;

  COUNT(*)
----------
      1000

SQL> desc t1;
 名稱                                      是否為空? 型別
 ----------------------------------------- -------- ----------------------------
 A                                                  NUMBER(38)
 B                                                  NUMBER(38)

SQL> select current_scn from v$database;

CURRENT_SCN
-----------
    1512972

SQL>


SQL> truncate table t1;~~~~恢復到truncate 前

表被截斷。

SQL> select current_scn from v$database;

CURRENT_SCN
-----------
    1513151

 

SQL> alter system switch logfile;

系統已更改。

SQL> select count(*) from t1;

  COUNT(*)
----------
         0

SQL> select count(*) from v$archived_log;

  COUNT(*)
----------
        55
SQL> shutdown immediate;
ORA-01031: 許可權不足
SQL> conn / as sysdba
已連線。
SQL> shutdown immediate;


SQL> @ d:\restore\restoredbf.txt
已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

SQL> startup mount
ORACLE 例程已經啟動。

Total System Global Area  612368384 bytes
Fixed Size                  1250428 bytes
Variable Size             264244100 bytes
Database Buffers          339738624 bytes
Redo Buffers                7135232 bytes
資料庫裝載完畢。


SQL> recover database until change 1512972;
完成介質恢復。
SQL> alter database open resetlogs;

資料庫已更改。

SQL> conn tr/a123
已連線。
SQL> select count(*) from t1;

  COUNT(*)
----------
      1000

SQL> select current_scn from v$database;

CURRENT_SCN
-----------
    1513262

SQL> insert into t1 values(1,2);

已建立 1 行。

SQL> commit;

提交完成。

SQL> select count(*) from t1;

  COUNT(*)
----------
      1001

SQL> select count(*) from v$archived_log;

  COUNT(*)
----------
        56

SQL> alter system switch logfile;

系統已更改。

SQL> alter system checkpoint;

系統已更改。

SQL> select count(*) from v$archived_log;

  COUNT(*)
----------
        57

SQL> @ D:\restore\backupctl2.txt~~~~~~~~~備份一下當前控制檔案(resetlogs open後控制檔案)
已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

SQL> insert into t1 values(1,1);

已建立 1 行。

SQL> commit;

提交完成。

SQL> select count(*) from v$archived_log;

  COUNT(*)
----------
        57

SQL> select count(*) from t1;

  COUNT(*)
----------
      1002

SQL> alter system switch logfile;

系統已更改。

SQL> alter system checkpoint;

系統已更改。

SQL> select count(*) from v$archived_log;

  COUNT(*)
----------
        57
SQL> conn / as sysdba
已連線。
SQL> shutdown immediate;
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL> @ d:\resotre\restoredbf.txt
SP2-0310: 無法開啟檔案 "d:\resotre\restoredbf.txt"
SQL> @ d:\restore\restoredbf.txt~~~~~~~~~~~~~~~~~~~~~~~~轉儲resetlog前備份
已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

SQL> startup mount
ORACLE 例程已經啟動。

Total System Global Area  612368384 bytes
Fixed Size                  1250428 bytes
Variable Size             264244100 bytes
Database Buffers          339738624 bytes
Redo Buffers                7135232 bytes
資料庫裝載完畢。

SQL> recover database;
ORA-00279: 更改 1511692 (在 10/09/2009 09:56:10 生成) 對於執行緒 1 是必需的
ORA-00289: 建議:
D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\XH\ARCHIVELOG\2009_10_09\O1_MF_1_64
_%U_.ARC
ORA-00280: 更改 1511692 (用於執行緒 1) 在序列 #64 中


指定日誌: {=suggested | filename | AUTO | CANCEL}
auto
已應用的日誌。
完成介質恢復。
SQL> alter database open;


SQL> select count(*) from tr.t1;

  COUNT(*)
----------
      1002


SQL> select current_scn from v$database;

CURRENT_SCN
-----------
    1513957

SQL> truncate table tr.t1;

表被截斷。

SQL> select count(*) from tr.t1;

  COUNT(*)
----------
         0

SQL> select count(*) from v$archived_log;

  COUNT(*)
----------
        58

 


SQL> alter system switch logfile;

系統已更改。

SQL> select count(*) from v$archived_log;

  COUNT(*)
----------
        59

SQL> shutdown immediate;
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL> startup mount
ORACLE 例程已經啟動。

Total System Global Area  612368384 bytes
Fixed Size                  1250428 bytes
Variable Size             268438404 bytes
Database Buffers          335544320 bytes
Redo Buffers                7135232 bytes
資料庫裝載完畢。
SQL> @ d:\restore\restoredbf.txt
已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

SQL> recover database until change 1513957;
ORA-00279: 更改 1511692 (在 10/09/2009 09:56:10 生成) 對於執行緒 1 是必需的
ORA-00289: 建議:
D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\XH\ARCHIVELOG\2009_10_09\O1_MF_1_64
_%U_.ARC
ORA-00280: 更改 1511692 (用於執行緒 1) 在序列 #64 中


指定日誌: {=suggested | filename | AUTO | CANCEL}
auto
ORA-00279: 更改 1512986 (在 10/09/2009 10:23:08 生成) 對於執行緒 1 是必需的
ORA-00289: 建議:
D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\XH\ARCHIVELOG\2009_10_09\O1_MF_1_1_
%U_.ARC
ORA-00280: 更改 1512986 (用於執行緒 1) 在序列 #1 中
ORA-00278: 此恢復不再需要日誌檔案
'D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\XH\ARCHIVELOG\2009_10_09\O1_MF_1_6
4_5DX77P7T_.ARC'


已應用的日誌。
完成介質恢復。
SQL> alter database open resetlogs;

資料庫已更改。

SQL> select count(*) from tr.t1
  2  ;

  COUNT(*)
----------
      1002


以上這些跟正常恢復沒區別


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


清除下環境~ 實驗恢復到resetlogs前

 

SQL> select count(*) from tr.t1;

  COUNT(*)
----------
      1001


SQL> alter system switch logfile;

系統已更改。

SQL> alter system checkpoint;

系統已更改。

SQL> alter database begin backup
  2  ;

資料庫已更改。

SQL> @ D:\restore\backupscript.txt
已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

SQL> alter database end backup;

資料庫已更改。

SQL> @ D:\restore\backupctl.txt
已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

SQL> select count(*) from v$archived_log;

  COUNT(*)
----------
        52

SQL> select count(*) from tr.t1;

  COUNT(*)
----------
      1001

SQL> select current_scn from v$database;

CURRENT_SCN
-----------
    1555232

SQL> truncate table tr.t1;

表被截斷。

SQL> select current_scn from v$database;

CURRENT_SCN
-----------
    1555987

SQL> select count(*) from tr.t1;

  COUNT(*)
----------
         0

SQL> select current_scn from v$database;

CURRENT_SCN
-----------
    1555993

 

SQL> startup mount;
ORACLE 例程已經啟動。

Total System Global Area  612368384 bytes
Fixed Size                  1250428 bytes
Variable Size             293604228 bytes
Database Buffers          310378496 bytes
Redo Buffers                7135232 bytes
資料庫裝載完畢。
SQL> recover database until change 1555232;
完成介質恢復。

SQL> alter database open resetlogs;

資料庫已更改。

SQL> select current_scn from v$database;

CURRENT_SCN
-----------
    1555527

SQL> select count(*) from tr.t1;

  COUNT(*)
----------
      1001

SQL> insert into tr.t1 values(1,1);

已建立 1 行。

SQL> commit;

提交完成。

 


SQL> alter system switch logfile;

系統已更改。

SQL> alter system switch logfile;

系統已更改。

SQL> alter system checkpoint;

系統已更改。

SQL> select count(*) from v$archived_log;

  COUNT(*)
----------
        55

SQL> insert into tr.t1 values(1,1);

已建立 1 行。

SQL> commit;

提交完成。

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

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

SQL> select count(*) from tr.t1;

  COUNT(*)
----------
      1003


~~~~~~再來一次使用resetlogS前備份恢復DB


SQL> shutdown immediate;
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL> @ d:\restore\restoredbf.txt
已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

SQL> startup
ORACLE 例程已經啟動。

Total System Global Area  612368384 bytes
Fixed Size                  1250428 bytes
Variable Size             293604228 bytes
Database Buffers          310378496 bytes
Redo Buffers                7135232 bytes
資料庫裝載完畢。
ORA-01190: 控制檔案或資料檔案 1 來自最後一個 RESETLOGS 之前~~~~~可以看出用的是老備份resetlogs前的備份
ORA-01110: 資料檔案 1: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\XH\SYSTEM01.DBF'


SQL> recover database;
ORA-00279: 更改 1555044 (在 10/09/2009 15:02:06 生成) 對於執行緒 1 是必需的
ORA-00289: 建議:
D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\XH\ARCHIVELOG\2009_10_09\O1_MF_1_2_
%U_.ARC
ORA-00280: 更改 1555044 (用於執行緒 1) 在序列 #2 中


指定日誌: {=suggested | filename | AUTO | CANCEL}
auto
已應用的日誌。
完成介質恢復。

SQL> alter database open;

資料庫已更改。

SQL> select count(*) from tr.t1;

  COUNT(*)
----------
      1003

SQL> select current_scn from v$database;

CURRENT_SCN
-----------
    1556213

SQL> select count(*) from v$archived_log;

  COUNT(*)
----------
        55

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

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

 

 

現在要求恢復到resetlogs前的時間點

SQL> shutdown immediate;
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL> @ d:\restore\restoredbf.txt
已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。
SQL> recover database until change 1555232;
ORA-00283: 恢復會話因錯誤而取消
ORA-19907: 恢復時間或 SCN 不屬於已恢復的原型


SQL> recover database until change 1555231;
ORA-00283: 恢復會話因錯誤而取消
ORA-19907: 恢復時間或 SCN 不屬於已恢復的原型


SQL> recover database until change 1555987;
ORA-00279: 更改 1555044 (在 10/09/2009 15:02:06 生成) 對於執行緒 1 是必需的
ORA-00289: 建議:
D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\XH\ARCHIVELOG\2009_10_09\O1_MF_1_2_
%U_.ARC
ORA-00280: 更改 1555044 (用於執行緒 1) 在序列 #2 中


指定日誌: {=suggested | filename | AUTO | CANCEL}
auto
已應用的日誌。
完成介質恢復。

SQL> alter database open resetlogs;

資料庫已更改。

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

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

SQL> select count(*) from v$archived_log;

  COUNT(*)
----------
        56

SQL> select current_scn from v$database;

CURRENT_SCN
-----------
    1556253

SQL> select count(*) from tr.t1;

  COUNT(*)
----------
      1003~~~~~~~~~~~~~~~~~~~~~恢復到最新了,而不是 scn 1555987這個時候,這個時候為 TR.T1為0 rows


使用resetlogs 前備份控制檔案


SQL> shutdown immediate;
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL> @ d:\restore\restoredbf.txt
已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

SQL> @ d:\restore\restorectl.txt
已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

 

 


SQL> startup mount
ORACLE 例程已經啟動。

Total System Global Area  612368384 bytes
Fixed Size                  1250428 bytes
Variable Size             297798532 bytes
Database Buffers          306184192 bytes
Redo Buffers                7135232 bytes
資料庫裝載完畢。
SQL> recover database until change 1555232;
ORA-00283: 恢復會話因錯誤而取消
ORA-00314: 日誌 1 (用於執行緒 1) 要求的序號 2 與 0 不匹配
ORA-00312: 聯機日誌 1 執行緒 1: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\XH\REDO01.LOG'

 

SQL> recover database until change 1555232 using backup controlfile;
ORA-00279: 更改 1555044 (在 10/09/2009 15:02:06 生成) 對於執行緒 1 是必需的
ORA-00289: 建議:
D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\XH\ARCHIVELOG\2009_10_09\O1_MF_1_2_
%U_.ARC
ORA-00280: 更改 1555044 (用於執行緒 1) 在序列 #2 中


指定日誌: {=suggested | filename | AUTO | CANCEL}
auto
ORA-00283: 恢復會話因錯誤而取消
ORA-19906: 在恢復過程中更改了恢復目標原型


ORA-01112: 未啟動介質恢復


SQL> recover database until change 1555231 using backup controlfile;
ORA-00283: 恢復會話因錯誤而取消
ORA-19907: 恢復時間或 SCN 不屬於已恢復的原型


SQL> recover database until change 1555987 using backup controlfile;
ORA-00279: 更改 1555044 (在 10/09/2009 15:02:06 生成) 對於執行緒 1 是必需的
ORA-00289: 建議:
D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\XH\ARCHIVELOG\2009_10_09\O1_MF_1_2_
%U_.ARC
ORA-00280: 更改 1555044 (用於執行緒 1) 在序列 #2 中


指定日誌: {=suggested | filename | AUTO | CANCEL}
auto
ORA-00279: 更改 1555247 (在 10/09/2009 15:19:52 生成) 對於執行緒 1 是必需的
ORA-00289: 建議:
D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\XH\ARCHIVELOG\2009_10_09\O1_MF_1_1_
%U_.ARC
ORA-00280: 更改 1555247 (用於執行緒 1) 在序列 #1 中


ORA-00279: 更改 1555538 (在 10/09/2009 15:20:41 生成) 對於執行緒 1 是必需的
ORA-00289: 建議:
D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\XH\ARCHIVELOG\2009_10_09\O1_MF_1_2_
%U_.ARC
ORA-00280: 更改 1555538 (用於執行緒 1) 在序列 #2 中
ORA-00278: 此恢復不再需要日誌檔案
'D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\XH\ARCHIVELOG\2009_10_09\O1_MF_1_1
_5DXS2B2X_.ARC'


ORA-00279: 更改 1555540 (在 10/09/2009 15:20:45 生成) 對於執行緒 1 是必需的
ORA-00289: 建議:
D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\XH\ARCHIVELOG\2009_10_09\O1_MF_1_3_
%U_.ARC
ORA-00280: 更改 1555540 (用於執行緒 1) 在序列 #3 中
ORA-00278: 此恢復不再需要日誌檔案
'D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\XH\ARCHIVELOG\2009_10_09\O1_MF_1_2
_5DXS2JBQ_.ARC'


已應用的日誌。
完成介質恢復。
SQL> alter database open resetlogs;

資料庫已更改。

SQL> select count(*) from tr.t1;

  COUNT(*)
----------
      1003

SQL> select current_scn from v$database;

CURRENT_SCN
-----------
    1556217

SQL> select count(*) from v$archived_log;

  COUNT(*)
----------
        56

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

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

SQL>~~~~~~~~~~~~~~~~~~~~還是沒有恢復到  scn 1555987這個時刻,恢復到了最新

所以10g要恢復到resetlogs open 前時間點 需要用rman 跨越多個DB,並且手動恢復時候 不能指定上次resetlogs 不完全恢復到的時間點 (例中為1555232 (包含1555232之前的都不行))

 

 

 

 

 

 

 

 

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12020513/viewspace-616168/,如需轉載,請註明出處,否則將追究法律責任。

相關文章