我的版本需要应用程序服务器长达 4 小时的停机时间,以防止用户在执行包括更改表结构在内的各种脚本时在 Oracle 12c 数据库中添加任何新数据。
可以在这样的场景中使用数据保护:
- 在暂存区复制当前的生产模式
- 用户在生产环境中继续他们的工作
- 在暂存数据库中运行各种脚本,包括对表结构的更改
- 在某个时候,使用数据保护将生产环境中更改的所有数据“推送”到暂存环境
- 至此,暂存环境变成了生产环境
这仅用于计划发布
您可以为此使用 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 环境时使用。