我的发布需要最多4个小时的应用程序服务器停机时间,以防止用户在Oracle 12c数据库中添加任何新数据,同时执行各种脚本(包括对表结构的更改)。
可以在这样的场景中使用数据保护:
这仅用于计划发布
答案 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环境时强烈建议使用该代理。