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

Can I use Data Guard to sync only data (not DB structure) between a primary and a staging schema

我的版本需要应用程序服务器停机长达 4 小时,以防止用户在执行各种脚本(包括对 table 结构的更改)时向 Oracle 12c 数据库添加任何新数据。

Data Guard 可以用在这样的场景中吗:

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

这仅用于计划发布

您可以为此使用 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 环境时强烈推荐使用它。