Falshback Database 实验

一、简单的

(1)检查是否启用了flash recover area

SQL> conn sys/ymhas sysdba;

已连接。

SQL> showparameter db_recover

 

NAME                                 TYPE        VALUE

----------------------------------------------- ----------------

db_recovery_file_dest                string      D:\oracle\produc

                                                _recovery_area

db_recovery_file_dest_size           big integer 5000M

 

(2)检查是启用了归档

SQL> archive loglist

数据库日志模式            存档模式

自动存档             启用

存档终点            USE_DB_RECOVERY_FILE_DEST

最早的联机日志序列     119

下一个存档日志序列   121

当前日志序列           121

 

(3)检查是否启用了flashback database 和 force logging

SQL> selectflashback_on,force_logging from v$database;

 

FLASHBACK_ON       FOR

---------------------

YES                NO

 

(4)查询当前的SCN

SQL> selectdbms_flashback.get_system_change_number from dual;

 

GET_SYSTEM_CHANGE_NUMBER

------------------------

                 1051174

 

(5)模拟误操作

SQL> connscott/tiger

已连接。

SQL> drop tableflash_tbl purge;

 

表已删除。

 

SQL> drop tabledept purge;

 

表已删除。

 

SQL>

 

SQL> conn sys/ymhas sysdba;

已连接。

SQL> shutdownimmediate;

数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。

SQL> startupmount;

ORACLE 例程已经启动。

 

Total System GlobalArea  612368384 bytes

Fixed Size                  1250428 bytes

Variable Size             264244100 bytes

Database Buffers          339738624 bytes

Redo Buffers                7135232 bytes

数据库装载完毕。

 

SQL> flashbackdatabase to scn  1051174;

 

闪回完成。========》全库闪回时可以闪回sys用户的表。

 

SQL> alterdatabase open;

alter database open

*

第 1 行出现错误:

ORA-01589:要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项

=========》为何flashback回来的库需要resetlogs??因为控制文件也被flashback了吗

 

 

SQL> alterdatabase open resetlogs;

 

数据库已更改。

 

 

SQL> select * fromscott.flash_tbl;

 

        ID VL

----------------------------------------

       201 A1

       202 B1

         7 PK_DEPT

         8 PK_DEPT

         9 PK_DEPT

 

 

 

二、可能丢数据的。

 

SQL> show user

USER 为"SYS"

SQL> selectdbms_flashback.get_system_change_number from dual;

 

GET_SYSTEM_CHANGE_NUMBER

------------------------

                 1051804

 

SQL> create table scott.s_test(a int);========》在要恢复的SCN后的数据

 

表已创建。

 

SQL> insert intoscott.s_test values(1);

 

已创建 1 行。

 

SQL> commit;

 

提交完成。

 

 

SQL> drop table scott.dept;=======》删除一张之前的表

 

表已删除。

 

SQL> shutdownimmediate;

数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。

SQL> startupmount;

ORACLE 例程已经启动。

 

Total System GlobalArea  612368384 bytes

Fixed Size                  1250428 bytes

Variable Size             272632708 bytes

Database Buffers          331350016 bytes

Redo Buffers                7135232 bytes

数据库装载完毕。

SQL> flashback database to scn 1051804;==========mount状态下闪回

 

闪回完成。

 

SQL> alter database open read only;====》如果用resetlogs,那么恢复点之后创建的

 scott.s_test(a int);就会彻底丢失,因此以只读方式打开。

 

数据库已更改。

 

SQL> select *  fromscott.dept;======》删除的表存在了

 

    DEPTNO DNAME          LOC

------------------------ -------------

        10 ACCOUNTING     NEW YORK

        20 RESEARCH       DALLAS

        30 SALES          CHICAGO

        40 OPERATIONS     BOSTON

 

SQL> select *  fromscott.s_test;======》后面新建的表不存在,因为重做日志没有应用

select *  from scott.s_test

                     *

第 1 行出现错误:

ORA-00942: 表或视图不存在

 

 

SQL> host exp scott/tiger tables=dept file=d:/dept.dmp===》将被删除的dept表的数据导出

 

连接到: Oracle Database10g Enterprise Edition Release 10.2.0.1.0 - Production

With thePartitioning, OLAP and Data Mining options

已导出 ZHS16GBK 字符集和AL16UTF16 NCHAR 字符集

 

即将导出指定的表通过常规路径...

. . 正在导出表                            DEPT导出了           4 行

成功终止导出, 没有出现警告。

 

SQL> recover database;=====》介质恢复,要重启到mount

ORA-00283: 恢复会话因错误而取消

ORA-01124: 无法恢复数据文件 1- 文件在使用中或在恢复中

ORA-01110: 数据文件 1:'D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\SYSTEM01.DBF'

 

 

SQL> shutdownimmediate;

数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。

SQL> startupmount;

ORACLE 例程已经启动。

 

Total System GlobalArea  612368384 bytes

Fixed Size                  1250428 bytes

Variable Size             272632708 bytes

Database Buffers          331350016 bytes

Redo Buffers                7135232 bytes

数据库装载完毕。

SQL> recover database; ===========》介质恢复

完成介质恢复。

SQL> alter database open;========》正常打开

 

数据库已更改。

 

SQL> select *  fromscott.dept;=======》因为重做日志被应用,所以该表又被删除了

select *  from scott.dept

                     *

第 1 行出现错误:

ORA-00942: 表或视图不存在

 

 

SQL> select * from scott.s_test;=======》因为重做日志被应用,所以该表又被创建了

         A

----------

         1

 

SQL>host imp scott/tiger tables=dept file=d:/dept.dmp=======》讲dept.dmp导入

 

Import: Release10.2.0.1.0 - Production on 星期六 7月 30 11:49:19 2011

 

Copyright (c) 1982,2005, Oracle.  All rights reserved.

 

 

连接到: Oracle Database10g Enterprise Edition Release 10.2.0.1.0 - Production

With thePartitioning, OLAP and Data Mining options

 

经由常规路径由EXPORT:V10.02.01 创建的导出文件

已经完成 ZHS16GBK 字符集和AL16UTF16 NCHAR 字符集中的导入

. 正在将 SCOTT 的对象导入到SCOTT

. 正在将 SCOTT 的对象导入到SCOTT

. . 正在导入表                         "DEPT"导入了           4 行

成功终止导入, 没有出现警告。

 

SQL> select *  from scott.dept;

 

    DEPTNO DNAME          LOC

------------------------ -------------

        10 ACCOUNTING     NEW YORK

        20 RESEARCH       DALLAS

        30 SALES          CHICAGO

        40 OPERATIONS     BOSTON

 

SQL>

 

===========》这样处理数据就不会丢失了

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值