首页 > 数据库 > 数据库开发技术 > 备份恢复的一个有趣现象!
SQL> alter tablespace users offline;
表空间已更改。
SQL> select * from t2;
select * from t2
*
第 1 行出现错误:
ORA-00376: 此时无法读取文件 4
ORA-01110: 数据文件 4: 'C:ORADATATESTUSERS01.DBF'
--备份表空间users对应的数据文件
SQL> alter tablespace users online;
表空间已更改。
SQL> select group#,sequence#,archived,status,first_change# from v$log;
GROUP# SEQUENCE# ARC STATUS FIRST_CHANGE#
---------- ---------- --- ---------------- -------------
1 2 NO CURRENT 1642560
2 1 YES INACTIVE 1622353
3 0 YES UNUSED 0
SQL> select * from t2;
ID SCN
---------- ----------
1 1620921
2 1621173
3 1621242
4 1621256
5 1621264
6 1621271
7 1621279
已选择7行。
SQL> insert into t2 values(8,dbms_flashback.get_system_change_number);
已创建 1 行。
SQL> commit;
提交完成。
SQL> alter system switch logfile;
系统已更改。
SQL> select group#,sequence#,archived,status,first_change# from v$log;
GROUP# SEQUENCE# ARC STATUS FIRST_CHANGE#
---------- ---------- --- ---------------- -------------
1 2 YES ACTIVE 1642560
2 1 YES INACTIVE 1622353
3 3 NO CURRENT 1643048
SQL> insert into t2 values(8,dbms_flashback.get_system_change_number);
已创建 1 行。
SQL> commit;
提交完成。
SQL> alter system switch logfile;
系统已更改。
SQL> select group#,sequence#,archived,status,first_change# from v$log;
GROUP# SEQUENCE# ARC STATUS FIRST_CHANGE#
---------- ---------- --- ---------------- -------------
1 2 YES ACTIVE 1642560
2 4 NO CURRENT 1643054
3 3 YES ACTIVE 1643048
SQL> insert into t2 values(8,dbms_flashback.get_system_change_number);
已创建 1 行。
SQL> commit;
提交完成。
SQL> alter system switch logfile;
系统已更改。
SQL> select group#,sequence#,archived,status,first_change# from v$log;
GROUP# SEQUENCE# ARC STATUS FIRST_CHANGE#
---------- ---------- --- ---------------- -------------
1 5 NO CURRENT 1643061
2 4 YES ACTIVE 1643054
3 3 YES ACTIVE 1643048
SQL> select *from t2;
ID SCN
---------- ----------
8 1643041
8 1643050
8 1643055
1 1620921
2 1621173
3 1621242
4 1621256
5 1621264
6 1621271
7 1621279
已选择10行。
SQL> insert into t2 values(8,dbms_flashback.get_system_change_number);
已创建 1 行。
SQL> commit;
提交完成。
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
--删除users表空间对应的数据文件,把users表空间对应的备份数据文件拷贝回来
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 167772160 bytes
Fixed Size 1247900 bytes
Variable Size 62915940 bytes
Database Buffers 100663296 bytes
Redo Buffers 2945024 bytes
数据库装载完毕。
ORA-01113: 文件 4 需要介质恢复
ORA-01110: 数据文件 4: 'C:ORADATATESTUSERS01.DBF'
SQL> select file#,checkpoint_change# from v$datafile;
FILE# CHECKPOINT_CHANGE#
---------- ------------------
1 1643411
2 1643411
3 1643411
4 1643411
SQL> select file#,checkpoint_change# from v$datafile_header;
FILE# CHECKPOINT_CHANGE#
---------- ------------------
1 1643411
2 1643411
3 1643411
4 1642934
--=========================================
打开另一个session:
C:>sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on 星期三 5月 27 09:15:42 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> select file#,offline_change#,online_change# from v$datafile;
FILE# OFFLINE_CHANGE# ONLINE_CHANGE#
---------- --------------- --------------
1 1622352 1622353
2 1622352 1622353
3 1622352 1622353
4 1642934 1642997
SQL>
从下面的恢复我们发现恢复的起点是1642997(online时的change#),为什么不是offline时
的change#=1642934,是因为tablespace user online时发生了checkpoint,所以恢复时的
起点是online时的checkpoint_change#
--====================================================
SQL> recover datafile 4;
ORA-00279: 更改 1642997 (在 05/27/2009 09:07:26 生成) 对于线程 1 是必需的
ORA-00289: 建议:
E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2009_05_27O1_MF_1_
2_%U_.ARC
ORA-00280: 更改 1642997 (用于线程 1) 在序列 #2 中
指定日志: {
已应用的日志。
完成介质恢复。
--恢复时为什么只提示了sequence#=2的归档日值,而没有提示sequence#
为3,4的归档日值,是因为当完全恢复时如果联机日志和归档日志都存在时
会使用联机日志,根本就不会去使用归档日志,可以把联机日志暂时隐藏起来观察;
当不完全恢复时会使用归档日值而不会使用联机日志(如果联机日值
和归档日值都存在的话,根本就不会尝试去使用联机日志)
SQL> archive log list;
数据库日志模式 存档模式
自动存档 启用
存档终点 USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列 3
下一个存档日志序列 5
当前日志序列 5
SQL> select group#,sequence#,archived,status,first_change# from v$log;
GROUP# SEQUENCE# ARC STATUS FIRST_CHANGE#
---------- ---------- --- ---------------- -------------
1 5 NO CURRENT 1643061
3 3 YES INACTIVE 1643048
2 4 YES INACTIVE 1643054
SQL> select sequence#,first_change#,next_change# from v$archived_log;
SEQUENCE# FIRST_CHANGE# NEXT_CHANGE#
---------- ------------- ------------
19 1615055 1615659
20 1615659 1616045
21 1616045 1620246
1 1622353 1642560
2 1642560 1643048
3 1643048 1643054
4 1643054 1643061
已选择7行。
SQL> alter database open;
数据库已更改。
SQL>
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/19602/viewspace-1022503/ ,如需转载,请注明出处,否则将追究法律责任。