• Oracle FlashBack


    从oracle 9i开始,Oracle将闪回(Flashback)引入数据库中,闪回可以简化用户数据的恢复,不用从逻辑备份和物理备份中恢复过来。

    Flashback支行的恢复级别包括下列几种:

    事务闪回:对表进行了insert,update,delete操作,已经commit了,发现弄错了,需要恢复到某个commit操作之前的数据,则需要撤销刚才的某个操作。

    行级闪回:对表进行insert,update,delete操作,需要恢复到时某个时间点。

    表级闪回:错误的drop table操作,需要表和表中的数据。

    数据库级闪回:错误地对整个数据库导入很多表数据,需要将整个数据库恢复到过去的时间点。

    但它也有某些限制:

    1. Flashback Database 不能解决Media Failure, 这种错误RMAN恢复仍是唯一选择
    2. 如果删除了数据文件或者利用Shrink技术缩小数据文件大小,这时不能用Flashback Database技术回退到改变之前的状态,这时候就必须先利用RMAN把删除之前或者缩小之前的文件备份restore 出来, 然后利用Flashback Database 执行剩下的Flashback Datbase。
    3. 如果控制文件是从备份中恢复出来的,或者是重建的控制文件,也不能使用Flashback Database。
    4. 使用Flashback Database锁能恢复到的最早的SCN, 取决与Flashback Log中记录的最早SCN。

    以下几种drop不会将相关对象放进RecycleBin:
    drop tablespace:会将RecycleBin中所有属于该tablespace的对象清除
    drop user:会将RecycleBin中所有属于该用户的对象清除
    drop cluster:会将RecycleBin中所有属于该cluster的成员对象清除
    drop type:会将RecycleBin中所有依赖该type的对象清除

    Flashback 不支持sys用户. system表空间下的对象,也不能从回收站里拿到。故使用SYS 或者SYSTEM用户登陆时, show recyclebin 为空。

    配置Flash Recovery Area

    启用Flash Recovery Area:
    SQL>ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE=20G SCOPE=BOTH;
    SQL>ALTER SYSTEM SET DB_RECOVERY_FILE_DEST='/DBA/FB' SCOPE=BOTH;
    禁用Flash Recovery Area:
    SQL>ALTER SYSTEM SET DB_RECOVERY_FILE_DEST='' ;

    检查flash recovery area的使用情况: SQL> select * from v$flash_recovery_area_usage;

    计算flash recovery area已经占用的空间: SQL> select sum(percent_space_used)*3/100 from v$flash_recovery_area_usage;

    删除flash recovery area中不必要的备份来释放flash recovery area空间来解决这个问题: (1). delete obsolete; (2). crosscheck backupset; delete expired backupset;

    启动Flashback功能
    SQL> alter database flashback on;

    设置初始化参数:DB_FLASHBACK_RETENTION_TARGET:
    SQL>alter system set db_flashback_retention_target=1440 scope=both;
    该参数用来控制flashback log 数据保留的时间,或者说,你希望flashback database 能够恢复的最早的时间点。默认值是1440,单位是minute,即24 小时,需要注意的是该参数虽然未直接指定flash recovery area大小,但却受其制约,举个例子假如数据库每天有10%左右的数据变动的话,如果该初始化参数值设置为1440,则flash recovery area 的大小至少要是当前数据库实际容量的10%,如果该初始化参数设置为2880,则flash recovery area 的大小就至少是数据库所占容量的20%

    查看当前用户是否具有Flashback的权限:

    SQL> select * from session_privs where privilege like 'FLASHBACK%';

    Flashback Database

    实际是对数据库的一个不完全恢复操作,因为需要关闭数据库重启到mount状态。

    1. 执行恢复:分timestamp 或者SCN两种
    SQL> Flashback database to timestamp to_timestamp('09-10-14 14:37:05','yy-mm-dd hh24:mi:ss');
    或者:
    SQL> Flashback database to scn 947921;
    2. SQL> alter database open resetlogs;

    从Oracle 10g 开始, 每个表空间都会有一个叫作回收站的逻辑区域,当用户执行drop命令时, 被删除的表和表的关联对象( 包括索引, 约束,触发器,LOB段,LOB index 段) 不会被物理删除, 这些对象先转移到回收站中,这就给用户提供了一个恢复的可能。
    初始化参数recyclebin 用于控制是否启用recyclebin功能,缺省是ON, 可以使用OFF关闭。

    禁用后删除的对象将直接删除,不会写到Recycle中,当然在删除时,指定purge 参数,表也将直接删除,不会写到recyclebin中。SQL> drop table name purge;

    查看回收站:

    SQL>select * from recyclebin order by droptime desc;

    Flashback table

    SQL> flashback table emp to before drop; --可选参数:rename to XXX;

    Flashback Query

    要通过flashback query 查询undo 中的撤销数据,最简单的方式只需要在标准查询语句的表名后面跟上as of timestamp(基于时间)或as of scn(基于scn)即可

    1、As of timestamp 的示例:

    SQL> alter session set nls_date_format='YYYY-MM-DD hh24:mi:ss';

    假设当前距离删除数据已经有5 分钟左右的话:

    SQL> select * from A as of timestamp sysdate-5/1440;

    或者:
    SQL>select * from A as of timestamp to_timestamp('2009-10-15 19:04:16','YYYY-MM-DD hh24:mi:ss');

    用Flashback Query恢复之前的数据:
    SQL>Insert into A select * from A as of timestamp to_timestamp('2009-10-15 19:04:16','YYYY-MM-DD hh24:mi:ss');

    2. As of scn 示例

    查看SCN:

    SELECT dbms_flashback.get_system_change_number FROM dual;

    SELECT CURRENT_SCN FROM V$DATABASE;

    用Flashback Query恢复之前的数据:
    SQL> insert into A select * from A as of scn 1095782;

    如果想要对表进行flashback,必须允许表的row movement

    Alter table table_name enable row movement; --or disable

    恢复刚才删除的一条数据

    查询flashback_transaction_query

    select undo_sql from flashback_transaction_query where table_name='EMP';

    找出相关的语句并执行。

  • 相关阅读:
    POJ 1659 Frogs' Neighborhood(度序列构图)
    poj1236
    poj1236
    有向图求强连通分量
    有向图求强连通分量
    zoj 2532(Internship )找割边
    zoj 2532(Internship )找割边
    Expedition POJ
    2016年第七届蓝桥杯C/C++ B组国赛 —— 第四题:机器人塔
    2016年第七届蓝桥杯C/C++ B组国赛 —— 第四题:机器人塔
  • 原文地址:https://www.cnblogs.com/landexia/p/2678075.html
Copyright © 2020-2023  润新知