ITPub博客

首页 > 数据库 > Oracle > Oracle的快照standby

Oracle的快照standby

原创 Oracle 作者:skzhuga 时间:2018-10-24 12:11:27 0 删除 编辑

众所周知,Oracle的standby数据库有三种模式:物理standby数据库、逻辑standby数据库和快照standby数据库。在这里主要讲述快照standby数据库的特点,数据库版本为11gR2。


一、快照standby数据库的特点

快照standby数据库有如下特点:

1、能在读写模式打开,是完全可更新的standby数据库

2、从主数据库接收相关日志,但不应用

3、当转换为物理standby数据库时,首先会抛弃所有之前的更新,然后应用接收到的redo数据

4、不能作为switchver或者failover的目标。在执行角色转换之前,必须首先转换为物理standby数据库

5、在最大保护Data Guard配置中,快照standby数据库不能是唯一的standby数据库。

注意:使用Flashback Database技术的任何操作都是不可逆的,Flashback Database将阻止一个快照standby转换为物理standby


二、快照standby数据库的搭建

1、物理standby数据库搭建

快照standby数据库由物理standby数据库转换而来。因此首先搭建物理standby数据库,过程略。

2、将物理standby数据库转换为快照standby数据库

1)主库上查看目的地的数据库模式、恢复模式和保护模式

SQL> select dest_id,database_mode,recovery_mode,protection_mode from v$archive_dest_status where dest_id = 2;


   DEST_ID DATABASE_MODE   RECOVERY_MODE           PROTECTION_MODE

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

         2 OPEN_READ-ONLY  MANAGED REAL TIME APPLY MAXIMUM PERFORMANCE


可看到standby数据库以只读方式打开,在最高可用性级别实时应用redo   

2)停止物理standby数据库的Redo Apply

SQL> alter database recover managed standby database cancel;


Database altered.

3)如果物理standby数据库是RAC,则只保留一个实例,其他关闭。本环境中物理standby数据库是单实例。

4)确保闪回恢复区被配置

SQL> show parameter db_recover

NAME                                 TYPE        VALUE

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

db_recovery_file_dest                string      /opt/app/oracle/fast_recovery_area

db_recovery_file_dest_size           big integer 4182M

否则在转换时会报错:

ORA-38784: Cannot create restore point 'SNAPSHOT_STANDBY_REQUIRED_10/24/2018 10:41:21'.

ORA-38786: Recovery area is not enabled.

5)将物理standby数据库转换为快照standby数据库

备库上执行:

SQL> alter database convert to snapshot standby;


Database altered.

可看到数据库创建了一个还原点:

SQL> select name,storage_size from v$restore_point;


NAME                                            STORAGE_SIZE

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

SNAPSHOT_STANDBY_REQUIRED_10/24/2018 10:43:28     1073741824

此时数据库处于mounted状态:

SQL> select name,

  2  database_role,

  3  switchover_status,

  4  open_mode,

  5  protection_mode

  6  from v$database;


NAME                 DATABASE_ROLE        SWITCHOVER_STATUS              OPEN_MODE            PROTECTION_MODE

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

BDDEV2               SNAPSHOT STANDBY     NOT ALLOWED                    MOUNTED              MAXIMUM PERFORMANCE

6)打开备库

SQL> select name,

  2  database_role,

  3  switchover_status,

  4  open_mode,

  5  protection_mode

  6  from v$database;

此时备库已转换完成:

NAME                 DATABASE_ROLE        SWITCHOVER_STATUS              OPEN_MODE            PROTECTION_MODE

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

BDDEV2               SNAPSHOT STANDBY     NOT ALLOWED                    READ WRITE           MAXIMUM PERFORMANCE

三、快照standby转换为物理standby

1.将备库重启到mount模式

SQL> startup force mount

ORACLE instance started.

2.备库执行语句,转换为物理standby

SQL> alter database convert to physical standby;


Database altered.

转换后数据库被卸载,需要重启

3.重启数据库

SQL> startup force;

ORACLE instance started.

4.恢复redo应用

SQL> alter database recover managed standby database using current logfile disconnect;

Database altered.

SQL> select name,

  2  database_role,

  3  switchover_status,

  4  open_mode,

  5  protection_mode

  6  from v$database;

NAME                 DATABASE_ROLE        SWITCHOVER_STATUS              OPEN_MODE            PROTECTION_MODE

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

BDDEV2               PHYSICAL STANDBY     RECOVERY NEEDED                READ ONLY            MAXIMUM PERFORMANCE

四、快照standby数据库测试

1.测试是否可读写

1)对表scott.tb_test进行更新:

SQL> delete from scott.tb_test where object_id = 20;


1 row deleted.

2)删除表scott.tb_test:

SQL> drop table scott.tb_test purge;


Table dropped.

此时表scott.tb_test在备库中已经不存在了,但在主库中还存在

3)创建新表

SQL> create table scott.tb_test2(id int);


Table created.

2.测试是否能接收日志且不应用

主库:

SQL> archive log list

Database log mode              Archive Mode

Automatic archival             Enabled

Archive destination            /opt/app/oracle/archivelog/

Oldest online log sequence     77

Next log sequence to archive   79

Current log sequence           79

可看到主库当前日志序号为79

备库:

SQL> SELECT PROCESS,

  2  PID,

  3  STATUS,

  4  SEQUENCE#,

  5  DELAY_MINS 

  6  FROM V$MANAGED_STANDBY;

PROCESS                               PID STATUS                SEQUENCE# DELAY_MINS

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

ARCH                                25422 CLOSING                      78          0

ARCH                                25425 CONNECTED                     0          0

ARCH                                25427 CLOSING                      76          0

ARCH                                25429 CLOSING                      77          0

RFS                                 26020 IDLE                          0          0

RFS                                 26023 IDLE                          0          0

RFS                                 26026 IDLE                         79          0

可看到备库RFS进程正在接收的redo序号也为79,因此备库此时可以接收日志;备库中MRP进程没有启动,因此可断定此时日志没有应用


3.将快照standby转换为物理standby,看scott.tb_test是否能恢复

按照三中的步骤,将快照standby转换为物理standby,此时查看备库中是否有scott.tb_test:

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


  COUNT(1)

----------

     86415

查看之前在备库建的表scott.tb_test2还是否存在:

SQL> desc scott.tb_test2

ERROR:

ORA-04043: object scott.tb_test2 does not exist

综上,说明快照standby转换到物理standby时,会抛弃在快照standby状态时所做的更改。


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31544156/viewspace-2217333/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2018-06-28

  • 博文量
    25
  • 访问量
    36333