适用于:
Oracle Server - Enterprise Edition - Version: 10.1.0.2 to 11.1.0.7 - Release: 10.1 to 11.1
Information in this document applies to any platform.
症状:
为了阻止生成不必要的闪回日志,一个或多个表空间的闪回功能被关闭。
现在有一个需要要“FLASHBACK DATABASE”到之前的一些时间点来恢复一些由于错误执行批处理作业产生的错误的数据更新。
但是,FLASHBACK DATABASE不会工作,如果任何的表空间闪回功能是关闭的话。它将产生如下错误:
SQL> flashback database to scn 8517809201835 ;
flashback database to scn 8517809201835
*
ERROR at line 1:
ORA-38753: Cannot flashback data file 8; no flashback log data.
ORA-01110: data file 8: '/home/oracle/nish01.dbf'
当查询相应表空间的数据文件的时候,我们发现闪回功能已经被关闭了(column flashback_on = NO):
SQL> select a.file#, a.name file_name, b.ts#, b.name ts_name, b.flashback_on from v$datafile a, v$tablespace b where a.ts#=b.ts# ;
FILE# FILE_NAME TS# TS_NAME FLA
---------- -------------------------------------------------- ---------- ------------------- ---
1 /u01/app/oracle/oradata/d10gr2/system01.dbf 0 SYSTEM YES
2 /u01/app/oracle/oradata/d10gr2/undotbs01.dbf 1 UNDOTBS1 YES
3 /u01/app/oracle/oradata/d10gr2/sysaux01.dbf 2 SYSAUX YES
4 /u01/app/oracle/oradata/d10gr2/users01.dbf 4 USERS YES
5 /u01/app/oracle/oradata/d10gr2/10g_isc_corr.dbf 5 ISC_CORR YES
6 /home/oracle/tbs02.dbf 6 TBS YES
7 /home/oracle/tbs01.dbf 6 TBS YES
8 /home/oracle/nish01.dbf 7 NISH NO 9 /u01/app/oracle/oradata/d10gr2/streams_tbs.dbf 9 STREAMS_TBS YES
9 rows selected.
如果我们试着打开表空间的闪回功能,仍就出现相同的错误:
SQL> alter tablespace nish flashback on ;
Tablespace altered.
SQL> flashback database to scn 8517809201835 ;
flashback database to scn 8517809201835
*
ERROR at line 1:
ORA-38753: Cannot flashback data file 8; no flashback log data.
ORA-01110: data file 8: '/home/oracle/nish01.dbf'
再次,如果我们将该数据文件离线,我们不可以让它回来当在FLASHBACK DATABASE开启OPEN RESETLOGS。
SQL> alter database datafile 8 offline ;
Database altered.
SQL> flashback database to scn 8517809201835 ;
flashback database to scn 8517809201835
*
ERROR at line 1:
ORA-38795: warning: FLASHBACK succeeded but OPEN RESETLOGS would get error below
ORA-01245: offline file 8 will be lost if RESETLOGS is done
ORA-01110: data file 6: '/home/oracle/nish01.dbf'
执行TSPITR(表空间的恢复时间点)需要更长的时间,如果有多个表空间要恢复
原因
主要原因是由于要闪回到之前时间点的数据文件的闪回日志不可用。
Error: ORA-38753
记录:不能闪回数据文件%s;没有闪回日志数据。
原因:尝试执行FLASHBACK DATABASE失败因为文件没有足够的闪回日志数据覆盖闪回的时间。要么是文件没有启用闪回功能,要么就是闪回功能在要闪回的一些时间是关闭状态的。
http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statement...
"flashback_mode_clause”
下面是内部的一个测试案例来达到相同的效果。在这个测试案例中,'NISH'表空间闪回功能是关闭的,它下面的数据文件是'/home/oracle/nish01.dbf'.
NOTE:289285.1 - OERR: ORA-38753 Cannot flashback data file %s; no flashback log data.
NOTE:304712.1 - Error During Flashback Database Ora-38753
* Oracle Database Products > Oracle Database > Oracle Database > Oracle Server - Enterprise Edition
ORA-38795; ORA-942; ORA-38753; ORA-280; ORA-1245; ORA-279; ORA-1110; ORA-289; ORA-278