使用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/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/12020513/viewspace-616168/