• oracle数据库flashback系列--闪回数据库在dataguard中的使用


    很多人在学习flashback database这个oracle技术的时候,都会有一个疑问,就是如果我只有一个数据库作为生产库的话,是否有这样的业务需求导致我们要把数据库闪回到以前的时间点?以及这样做是否值得(当前时间点和闪回目的时间点中间的所有操作将丢失)?

    其实抛开这个问题的讨论,在oracle的dataguard环境配置中,对于故障切换后产生故障的主机从新回到dataguard环境,以及处于测试的目的我们人为的激活了备库,flashback database都可以提供非常好的选择。

    下面的例子描述了这样一个场景:

    用户需要一个和生产系统一样或者类似的测试环境,但是单纯的搭建一个环境显然是不值得的,对于部署了dataguard环境的生产系统来说,我们可以选择把备库临时激活,以读写的方式打开,用于测试的需要,等测试结束后,把备库通过flashback database技术闪回到激活之前的时间点,从新的加入到dataguard配置环境中。

    第1步:准备要被激活的物理备数据库。

    1.检查数据库的flashback database模式和闪回日志存放的目录。

    SQL> select flashback_on from v$database;

    FLASHBACK_ON

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

    YES

    SQL> show parameter db_recovery_file

    NAME TYPE VALUE

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

    db_recovery_file_dest string /u01/app/oracle/flash_recovery_area

    db_recovery_file_dest_size    big     integer     2G

    2.由于备库在应用日志,所以要取消日志应用,并创建一个激活之前的还原点。

    SQL> select process,status from v$managed_standby;

    PROCESS   STATUS

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

    ARCH     CONNECTED

    ARCH     CLOSING

    MRP0     WAIT_FOR_LOG

    RFS       IDLE

    RFS       IDLE

    RFS       IDLE

    6 rows selected.

    SQL> recover managed standby database cancel;

    SQL> create restore point test_scn guarantee flashback database;

    Restore point created.

    第2步:准备主数据库

    1.当前实例执行日志切换

    在主数据库上,切换日志使得还原点(在步骤 1 中创建)的 SCN 将在物理备数据库上被归档:

    SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;

    当使用备重做日志文件时,这个步骤是必须的以确保数据库能被正确地闪回到还原点。

    ALTER SYSTEM SWITCH LOGFILE对单实例数据库或RAC中的当前实例执行日志切换,

    ALTER SYSTEM ARCHIVE LOG CURRENT会对数据库中的所有实例执行日志切换,

    2.延迟指向将被激活的备日志归档目的地。

    SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=DEFER;

    System altered.

    SQL> show parameter log_archive_dest_state_2

    NAME                  TYPE       VALUE

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

    log_archive_dest_state_2   string      DEFER

    第3步:激活物理备数据库。

    在物理备数据库上,执行下述步骤:

    1.激活物理备数据库并打开到open状态:

    SQL> ALTER DATABASE ACTIVATE STANDBY DATABASE;

    2.开库

    SQL> ALTER DATABASE OPEN;

    第4步:使用激活的数据库用于报表或测试。

    一旦备数据库已经被激活,你能运行报表工具或执行其它测试并激活几天甚至几周,独立于主数据库。

    警告:当数据库被激活时,它不从主数据库接收重做数据库并不能提供灾难保护。建议至少有两个物理备数据库参与配置,使得主数据库保持对数据丢失的保护。

    第5步: 恢复激活的数据库回到物理备数据库。

    在你完成测试之后,你需要重新与主数据库同步激活的数据库。在激活的数据库上执行

    下面语句以快速闪回它到保障的还原点并将它重新与主数据库同步:

    SQL> shutdown immediate

    Database closed.

    Database dismounted.

    ORACLE instance shut down.

    SQL> startup mount

    ORACLE instance started.

    Total System Global Area 314572800 bytes

    Fixed Size 1219160 bytes

    Variable Size 75498920 bytes

    Database Buffers 234881024 bytes

    Redo Buffers 2973696 bytes

    Database mounted.

    SQL> flashback database to restore point test_scn;

    Flashback complete.

    SQL> alter database convert to physical standby;

    Database altered.

    SQL> select status from v$instance;

    STATUS

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

    STARTED

    SQL> shutdown immediate

    ORA-01507: database not mounted

    ORACLE instance shut down.

    SQL> startup mount

    ORACLE instance started.

    Total System Global Area 314572800 bytes

    Fixed Size 1219160 bytes

    Variable Size 75498920 bytes

    Database Buffers 234881024 bytes

    Redo Buffers 2973696 bytes

    Database mounted.

    SQL> recover managed standby database disconnect;

    Media recovery complete.

    6:重新允许归档到物理备数据库目的地。

    在主数据库上,执行下面语句来重新允许归档到物理备数据库:

    SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE;

    第7步:测试dataguard环境工作正常

    1.在主库删除表空间usertest,并切换日志

    SQL> select name from v$datafile;

    NAME

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

    /u01/app/oracle/oradata/db01/system01.dbf

    /u01/app/oracle/oradata/db01/undotbs01.dbf

    /u01/app/oracle/oradata/db01/sysaux01.dbf

    /u01/app/oracle/oradata/db01/users01.dbf

    /u01/app/oracle/oradata/db01/example01.dbf

    /u01/app/oracle/oradata/db01/usertest01.dbf

    6 rows selected.

    SQL> drop tablespace usertest including contents and datafiles;

    Tablespace dropped.

    SQL> alter system switch logfile;

    System altered.

    2.在备库观察日志操作是否正确应用,下面的查询可以看到文件应经被删除,说明主库的日志应用到备库。

    SQL> select name from v$datafile;

    NAME

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

    /u01/app/oracle/oradata/db01/system01.dbf

    /u01/app/oracle/oradata/db01/undotbs01.dbf

    /u01/app/oracle/oradata/db01/sysaux01.dbf

    /u01/app/oracle/oradata/db01/users01.dbf

    /u01/app/oracle/oradata/db01/example01.dbf

  • 相关阅读:
    【测试人生】UE4大世界游戏寻路效果自动化测试
    windows计划任务的配置文件
    uniapp+vue基于Android的图书馆借阅系统qb4y3-nodejs-php-pyton
    maven以及配置
    使用qemu运行risc-v ubuntu
    【MySQL】数据库服务器硬件优化与实战详解(调优篇)(实战篇)(MySQL专栏启动)
    学习java的第四十二天,GUI编程的基础认知
    【设计模式】原型模式:猴头,我叫你一声你敢答应吗?
    2022年世界大学声誉排名(完整版)
    计组笔记 数据表示与运算 校验码部分
  • 原文地址:https://blog.csdn.net/weixin_49889731/article/details/133878645