【问题标题】:Can I use Data Guard to sync only data (not DB structure) between a primary and a staging schema我可以使用 Data Guard 在主模式和暂存模式之间仅同步数据(而不是数据库结构)吗
【发布时间】:2017-05-31 18:34:39
【问题描述】:

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

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

  1. 在暂存区复制当前生产模式
  2. 用户继续在生产环境中工作
  3. 在暂存数据库中运行各种脚本,包括对 表结构
  4. 在某些时候,使用数据保护来“推送”所有更改的数据 生产环境到暂存环境
  5. 此时,暂存环境变为生产环境 环境

这仅用于计划发布

【问题讨论】:

  • 备用数据库“吃”归档日志,其中包括 DDL 和 DML。因此,您不能将 DG 用于此目的。您应该查看 Oracle“基于版本的重新定义”。 Oracle Goldengate 可能是另一种选择。

标签: oracle oracle12c dataguard


【解决方案1】:

您可以为此使用 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 环境时使用。

【讨论】:

    猜你喜欢
    • 2019-05-11
    • 2010-10-01
    • 2010-12-24
    • 1970-01-01
    • 2015-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-10
    相关资源
    最近更新 更多