用TEST表空间的EMP2表进行测试:
SQL>select table_name,tablespace_name from user_tables;
TABLE_NAME TABLESPACE_NAME
------------------------------ ------------------------------
DEPT USERS
BONUS USERS
SALGRADE USERS
SYS_TEMP_FBT
EMP2 TEST
EMP USERS
已选择6行。
SQL> select count(*) from scott.emp2;
COUNT(*)
----------
458753
SQL> delete from scott.emp2 where rownum<20000;
已删除19999行。
SQL> select current_scn from v$database;
CURRENT_SCN
-----------
863079
SQL> commit;
提交完成。
SQL> select current_scn from v$database;
CURRENT_SCN
-----------
863085
SQL>
SQL> select count(*) from scott.emp2;
COUNT(*)
----------
438754
SQL> insert into scott.emp2 select * from scott.emp;
已创建15行。
SQL> commit;
提交完成。
SQL> select * from v$tablespace;
TS# NAME INC BIG FLA ENC
---------- -------------------- --- --- --- ---
0 SYSTEM YES NO YES
1 UNDOTBS1 YES NO YES
2 SYSAUX YES NO YES
4 USERS YES NO YES
3 TEMP NO NO YES
6 EXAMPLE YES NO YES
7 TEST YES NO YES
已选择7行。
SQL> alter tablespace test flashback off;
表空间已更改。
关闭这个表空间的闪回功能,在数据库闪回时不做闪回.
SQL> select * from v$tablespace;
TS# NAME INC BIG FLA ENC
---------- -------------------- --- --- --- ---
0 SYSTEM YES NO YES
1 UNDOTBS1 YES NO YES
2 SYSAUX YES NO YES
4 USERS YES NO YES
3 TEMP NO NO YES
6 EXAMPLE YES NO YES
7 TEST YES NO NO
已选择7行。
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL>
SQL> startup mount
ORACLE 例程已经启动。
Total System Global Area 612368384 bytes
Fixed Size 1298184 bytes
Variable Size 209715448 bytes
Database Buffers 398458880 bytes
Redo Buffers 2895872 bytes
数据库装载完毕。
SQL> select flashback_on from v$database;
FLASHBACK_ON
------------------
YES
SQL> flashback database to scn 863085;
flashback database to scn 863085
*
第 1 行出现错误:
ORA-38753: 无法闪回数据文件 6; 没有闪回日志数据。
ORA-01110: 数据文件 6: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\DEVDB\TEST.DBF'
因为已经关闭了表空间的闪回功能,而不能对这个数据文件进行闪回.
SQL> alter tablespace test offline;
alter tablespace test offline
*
第 1 行出现错误:
ORA-01109: 数据库未打开
SQL> alter database open;
数据库已更改。
SQL> alter tablespace test offline;
表空间已更改。
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> flashback database to scn 863085;
flashback database to scn 863085
*
第 1 行出现错误:
ORA-38795: 警告: FLASHBACK 成功但 OPEN RESETLOGS 将出现如下错误
ORA-01245: RESETLOGS 完成时脱机文件 6 将丢失
ORA-01110: 数据文件 6: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\DEVDB\TEST.DBF'
闪回数据库已经完成,但数据库打开以后这个 datafile将丢失.
SQL> alter database open read only;
alter database open read only
*
第 1 行出现错误:
ORA-16004: 备份数据库需要恢复
ORA-01245: RESETLOGS 完成时脱机文件 6 将丢失
ORA-01110: 数据文件 6: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\DEVDB\TEST.DBF'
SQL> alter database open;
alter database open
*
第 1 行出现错误:
ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项
SQL> recover datafile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\DEVDB\TEST.DBF';
ORA-00283: 恢复会话因错误而取消
ORA-38798: 无法执行部分数据库恢复
ORA-38797: 在闪回数据库后, 需要执行完全数据库恢复
SQL> recover database;
完成介质恢复。
实际这步相当于取消了闪回数据库的操作,是否可以让一个datafile保持当前数据,而其他的datafile回到以前的呢?
SQL> alter database open;
数据库已更改。
SQL> select * from v$tablespace;
TS# NAME INC BIG FLA ENC
---------- -------------------- --- --- --- ---
0 SYSTEM YES NO YES
1 UNDOTBS1 YES NO YES
2 SYSAUX YES NO YES
4 USERS YES NO YES
3 TEMP NO NO YES
6 EXAMPLE YES NO YES
7 TEST YES NO NO
已选择7行。
SQL> select count(*) from scott.emp2;
select count(*) from scott.emp2
*
第 1 行出现错误:
ORA-00376: 此时无法读取文件 6
ORA-01110: 数据文件 6: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\DEVDB\TEST.DBF'
SQL> alter tablespace test online;
表空间已更改。
SQL> select count(*) from scott.emp2;
COUNT(*)
----------
438769
可以看出,闪回以后,可以继续做介质恢复以达到需要恢复的点,但是没有办法准确查看数据,除非可以正常的read only,
如果我们不关闭那个datafile 的闪回是不是就可以看数据的状态呢?
SQL> alter tablespace test flashback on;
alter tablespace test flashback on
*
第 1 行出现错误:
ORA-01126: 数据库必须已装载到此实例并且不在任何实例中打开
SQL>
SQL> select * from v$tablespace;
TS# NAME INC BIG FLA ENC
---------- -------------------- --- --- --- ---
0 SYSTEM YES NO YES
1 UNDOTBS1 YES NO YES
2 SYSAUX YES NO YES
4 USERS YES NO YES
3 TEMP NO NO YES
6 EXAMPLE YES NO YES
7 TEST YES NO NO
已选择7行。
SQL> select * from v$tablespace;
TS# NAME INC BIG FLA ENC
---------- ------------------------------ --- --- --- ---
0 SYSTEM YES NO YES
1 UNDOTBS1 YES NO YES
2 SYSAUX YES NO YES
4 USERS YES NO YES
3 TEMP NO NO YES
6 EXAMPLE YES NO YES
7 TEST YES NO NO
已选择7行。
SQL> alter tablespace users flashback off;
表空间已更改。
SQL> alter tablespace users flashback on;
alter tablespace users flashback on
*
第 1 行出现错误:
ORA-01126: 数据库必须已装载到此实例并且不在任何实例中打开
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount
ORACLE 例程已经启动。
Total System Global Area 612368384 bytes
Fixed Size 1298184 bytes
Variable Size 209715448 bytes
Database Buffers 398458880 bytes
Redo Buffers 2895872 bytes
数据库装载完毕。
SQL> select * from v$tablespace;
TS# NAME INC BIG FLA ENC
---------- ------------------------------ --- --- --- ---
0 SYSTEM YES NO YES
1 UNDOTBS1 YES NO YES
2 SYSAUX YES NO YES
4 USERS YES NO NO
3 TEMP NO NO YES
6 EXAMPLE YES NO YES
7 TEST YES NO NO
已选择7行。
SQL> alter database flashback off;
数据库已更改。
这时删除了之前所有的闪回日志.
SQL> select * from v$tablespace;
TS# NAME INC BIG FLA ENC
---------- ------------------------------ --- --- --- ---
0 SYSTEM YES NO YES
1 UNDOTBS1 YES NO YES
2 SYSAUX YES NO YES
4 USERS YES NO NO
3 TEMP NO NO YES
6 EXAMPLE YES NO YES
7 TEST YES NO NO
已选择7行。
SQL> alter database flashback on;
数据库已更改。
SQL> select * from v$tablespace;
TS# NAME INC BIG FLA ENC
---------- ------------------------------ --- --- --- ---
0 SYSTEM YES NO YES
1 UNDOTBS1 YES NO YES
2 SYSAUX YES NO YES
4 USERS YES NO NO
3 TEMP NO NO YES
6 EXAMPLE YES NO YES
7 TEST YES NO NO
已选择7行。
SQL> alter tablespace test flashback on;
表空间已更改。
SQL> alter tablespace users flashback on;
表空间已更改。
SQL>
SQL> startup mount
ORACLE 例程已经启动。
Total System Global Area 612368384 bytes
Fixed Size 1298184 bytes
Variable Size 209715448 bytes
Database Buffers 398458880 bytes
Redo Buffers 2895872 bytes
数据库装载完毕。
SQL>
SQL>
SQL> flashback database to scn 863085;
flashback database to scn 863085
*
第 1 行出现错误:
ORA-38753: 无法闪回数据文件 4; 没有闪回日志数据。
ORA-01110: 数据文件 4: '+DISK_GROUP1/devdb/datafile/users.259.651578003'
因为中间修改过闪回属性,闪回日志已经删除,已经不能闪回到之前.
总结:从测试看,关闭闪回的表空间,在整个数据库闪回以后,不能进行打开,只能恢复整个数据库才能打开,那之前已经闪回的数据又恢复到当前.而且闪回之后,如果有数据文件需要恢复,是不能read only的
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/175005/viewspace-246428/ ,如需转载,请注明出处,否则将追究法律责任。