Oracle的快照standby

来源:这里教程网 时间:2026-03-03 12:08:03 作者:

众所周知,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状态时所做的更改。

相关推荐