ITPub博客

首页 > Linux操作系统 > Linux操作系统 > oracle实验记录 (恢复-使用resetlogs open前备份恢复)

oracle实验记录 (恢复-使用resetlogs open前备份恢复)

原创 Linux操作系统 作者:fufuh2o 时间:2009-10-09 16:00:32 0 删除 编辑



使用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/,如需转载,请注明出处,否则将追究法律责任。

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

注册时间:2009-06-26

  • 博文量
    182
  • 访问量
    427814