我是否可以使用Data Guard仅在主模式和暂存模式之间同步数据(而不是DB结构)

时间:2017-01-16 20:34:07

标签: oracle oracle12c dataguard

我的发布需要最多4个小时的应用程序服务器停机时间,以防止用户在Oracle 12c数据库中添加任何新数据,同时执行各种脚本(包括对表结构的更改)。

可以在这样的场景中使用数据保护:

  1. 在暂存区域中复制当前生产模式
  2. 用户继续在生产环境中工作
  3. 在登台数据库中运行各种脚本,包括对其的更改 表结构
  4. 在某些时候,使用数据保护“推送”所有数据 生产环境到临时环境
  5. 此时,登台环境成为生产环境 环境
  6. 这仅用于计划发布

1 个答案:

答案 0 :(得分:0)

您可以为此使用Data Guard逻辑备用。

警告

逻辑Data Guard备用设置远比典型的物理备用设置复杂,特别是在谈论您想要进行的更改类型时,并在主要备用数据库和备用数据库之间保持分离。因此,在开始管理逻辑备用数据库之前,我至少会非常熟悉管理物理备用数据库。

1)创建Data Guard物理备用数据库。

2)将物理备用数据库转换为逻辑备用数据库:

--STANDBY 
alter database recover managed standby database cancel;

--PRIMARY
execute dbms_logstdby.build;

--STANDBY
alter database recover to logical standby keep identity;
alter database open;
alter database start logical standby apply immediate;

3)在整个架构上跳过DDL:

--STANDBY
EXECUTE DBMS_LOGSTDBY.SKIP(STMT => 'SCHEMA DDL', -
     schema_name => 'HR', -
     table_name => '%', -
     proc_name => null);

您也可以跳过特定对象的DDL或DML,但我认为在您的情况下,架构级别更合适。 DBMS_LOGSTDBY非常强大,您可以从docs了解。

4)当您只需将更改推送到备用数据库而不影响主数据库时,您可以禁用该会话的保护模式:

--STANDBY
alter session disable guard;
--Make your changes
alter session enable guard;

5)当您准备好上线时,请执行Data Guard切换,您可以从docs读取该切换。此文档特定于使用Data Guard代理,在管理Data Guard环境时强烈建议使用该代理。