• Oracle 闪回归档(Flashback Database)


    cmd
    --管理员身份打开
    sqlplus / as sysdba
    --管理数据库
    shu immediate;
    --独占方式开始
    startup mount
    --修改日期模式
    alter database archivelog;
    
    --开始DB闪回
    alter database flashback on;
    
    --开启数据库
    alter database open;
    
    --查看数据库的归档模式及闪回是否启用
    select log_mode,open_mode,flashback_on from v$database;
    ARCHIVELOG   READ WRITE NO             --FLASHBACK_ON为NO,则表示闪回特性尚未启用
    
    --she设置闪回参数
    
    alter SYSTEM set db_recovery_file_dest_size=500M;
    alter system set db_recovery_file_dest='D:appflashdb'
    alter system set db_flashback_retention_target=30; --设定保留时间为半小时 --查看闪回参数
    show parameter db_recovery ;
    -- 查看数据库运行状态
    select status from v$instance;
    -- 给T_USER赋予所有权限
    grant all privileges to T_USER
    ----查看闪回 select * from v$flashback_database_stat; --查看sga中分配的闪回空间大小 select * from v$sgastat where name like 'flashback%';

       

    闪回测试

    常用指令

    --查看闪回支持的时间
    SELECT
        Begin_time,--闪回最早支持时间
        end_time,--闪回最晚支持时间
        flashback_data,--闪回的数据大小
        db_data,--数据库大小
        redo_data --,--操作记录大小
        estimated_flashback_size --    
    FROM
        v$flashback_database_stat;
        
        2018-02-23 09:28:34    
        2018-02-23 09:50:46    
        827392    
        1253376    
        386560
        
    -- 查看闪回占用空间大小
    SELECT
        * 
    FROM
        v$sgastat 
    WHERE
        name LIKE 'flashback%';
        
    --查看闪回记录
    SELECT
        oldest_flashback_scn ,--允许返回的最早的SCN
        oldest_flashback_time ,--允许返回的最早的时间点
        retention_target ,
        flashback_size / 1024 / 1024 flhbck_siz,
        estimated_flashback_size / 1024 / 1024 est_flhbck_size
    FROM
        v$flashback_database_log;
        
        
        1095821    
        2018-02-23 08:35:05    
        1    
        11.71875    
        0

    dbflashback.bat

    echo 进入sqlplus
    sqlplus / as sysdba @dbflashback.sql

    dbflashback.sql

    shutdown immediate;
    startup mount;
    flashback database to timestamp  to_timestamp('2018-02-23 10:29:00','yyyy-mm-dd hh24:mi:ss');
    alter database open resetlogs;
    quit;

    查询表历史资料

        SELECT a."ID",a."Name" from "TUser"  AS OF TIMESTAMP  to_timestamp('2018-02-23 11:30:04','yyyy-mm-dd hh24:mi:ss')  a;

    遇到的问题:

    1.ORA-01139: RESETLOGS 选项仅在不完全数据库恢复后有效

    alter database open; --启动数据库

    2.ORA-01466: 无法读取数据 - 表定义已更改

    如果查询表历史资料的时间戳,在table的结构(目前发信删除字段有影响,添加字段没有影响,查询出来资料新增字段值为Null)改变之后,则回报ORA-01466异常。

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

    1.使用sqlplus实现闪回

            可以接受一个时间标记或一个系统改变号实参

            sqlplus几种常用的闪回数据库方法

                FLASHBACK [STANDBY] DATABASE [<database_name>]  TO [BEFORE] SCN <system_change_number>   --基于SCN闪回

                FLASHBACK [STANDBY] DATABASE [<database_name>]  TO [BEFORE] TIMESTMP <system_timestamp_value>--基于时间戳闪回

                FLASHBACK [STANDBY] DATABASE [<database_name>]  TO [BEFORE] RESTORE POINT <restore_point_name>--基于时点闪回

            如下面的示例:

                SQL> flashback database to timestamp('2010-10-24 13:04:30','yyyy-mm-dd hh24:mi:ss');

                SQL> flashback database to scn 918987;

                SQL> flashback database ro restore point b1_load;

           

            a.基于时间戳闪回

                SQL> select count(1) from usr1.tb1;   --查询用户usr1下表tb1中的记录数

     

                  COUNT(1)

                ----------

                    404944

               

                SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') tm from dual;  --获得系统当前的时间

     

                TM

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

                2010-10-24 13:04:30

     

                SQL> drop user usr1 cascade;     --删除帐户usr1,同时帐户usr1下的所有对象将被删除

     

                SQL> conn scott/tiger;           --使用scott 帐户登陆

     

                SQL> create table tb_emp as select * from emp;  --新创建表tb_emp

     

                SQL> shutdown immediate;        --关系系统

     

                SQL> startup mount ;             --重新到mount状态

     

                SQL> flashback database to timestamp  --实施闪回

                  2  to_timestamp('2010-10-24 13:04:30','yyyy-mm-dd hh24:mi:ss') ;         

               

                SQL> alter database open resetlogs;

               

                SQL> select count(1) from usr1.tb1;    --帐户usr1及其对象tb1被成功闪回

     

                  COUNT(1)

                ----------

                    404944

     

                SQL> select count(1) from scott.tb_emp;   --闪回成功后,在闪回点之后修改的数据全部丢失

                select count(1) from scott.tb_emp

                                           *

                ERROR at line 1:

                ORA-00942: table or view does not exist        

               

            b.基于SCN号闪回        

                SQL> select current_scn from v$database;   --获得当前的SCN号

     

                CURRENT_SCN

                -----------

                    918987

     

                SQL> drop table usr1.tb1;   --删除用户usr1下的表tb1

           

                SQL> alter system checkpoint;    --手动执行检查点

     

                SQL>  select file#,checkpoint_change# from v$datafile;

     

                     FILE# CHECKPOINT_CHANGE#

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

                         5             921478

     

                SQL> shutdown abort;   

               

                SQL> startup mount;

     

                SQL> flashback database to scn 918987;

     

                SQL> select count(1) from usr1.tb1;

     

                  COUNT(1)

                ----------

                    404944

     

            c.基于时点闪回

                SQL> create table t(id int,col varchar2(20));   --创建表t

     

                SQL> insert into t values(1,'ABC');

     

                SQL> insert into t values(2,'DEF');

     

                SQL> commit;

     

                SQL> create restore point bef_damage;    --创建闪回点

     

                SQL> insert into t values(3,'GHI');

     

                SQL> select ora_rowscn,id,col from t;   --查看表t的记录

     

                ORA_ROWSCN         ID COL

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

                   1874406          1 ABC

                   1874406          2 DEF

                   1874406          3 GHI          

           

                SQL> shutdown immediate;

               

                SQL> startup mount exclusive;

               

                SQL> flashback database to restore point bef_damage;  --实施时点闪回

               

                SQL> alter database open resetlogs;

               

                SQL> select * from t;   --闪回成功后,闪回点之后的数据丢失

     

                        ID COL

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

                         1 ABC

                         2 DEF

                         

        2.使用RMAN进行flashback database

            使用RMAN进行闪回数据库的几种常用办法

                RMAN> flashback database to scn=918987;

                RMAN> flashback database to sequence=85  thread=1;

            SQL> create table scott.tb_emp as select * from scott.emp;

     

            SQL> select count(1) from scott.tb_emp;

     

              COUNT(1)

            ----------

                    14

     

            SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') tm from dual;

     

            TM

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

            2010-10-24 13:59:38

     

            SQL> drop table scott.tb_emp;

     

            SQL> shutdown abort;

       

            SQL> startup mount;

     

            RMAN>  flashback database

            2> to time="to_date('2010-10-24 13:59:00','yyyy-mm-dd hh24:mi:ss')";

     

            SQL> select count(1) from scott.tb_emp;

     

              COUNT(1)

            ----------

                    14

     

            查询视图:v$recovery_file_dest将显示闪回区的使用情况

            SQL> select name,space_limit/1024/1024 sp_limt

              2   ,space_used/1024/1024 sp_usd,space_reclaimable/1024/1024 sp_recl,

              3  number_of_files num_fils from v$recovery_file_dest;

     

            NAME                                             SP_LIMT     SP_USD    SP_RECL   NUM_FILS

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

            /u01/app/oracle/flash_recovery_area                 2048 472.070313 380.671875         18

     

            可以将某些表空间排除在闪回之外

     

            SQL> alter tablespace users flashback off;

     

            SQL> select name,flashback_on from v$tablespace where ts#=4;

     

            NAME            FLA

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

            USERS           NO

     

            如果需要对上述表空间启用闪回功能,则需要在mount模式下对该表空间进行开启该功能。

     

     http://blog.csdn.net/leshami/article/details/6100429

  • 相关阅读:
    Angular.js为什么如此火呢?
    Javascript实现页面跳转的几种方式
    Bootstrap:弹出框和提示框效果以及代码展示
    Bootstrap模态框(modal)垂直居中
    JS倒计时跳转页面
    复选框、单选框与文字对齐问题
    RFC/IEC/ISO
    shell
    websocket programming in python
    产品固件(系统)升级——curl/wget
  • 原文地址:https://www.cnblogs.com/chuancheng/p/8459811.html
Copyright © 2020-2023  润新知