闪回数据库测试之一 :关闭闪回的表空间是否可以打开


用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博客 ” ,链接:http://blog.itpub.net/175005/viewspace-246428/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/175005/viewspace-246428/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值