本文的环境为Linux 11.2.0.4 单机 + 物理dg ,通过将物理dg临时转换为逻辑dg ,然后利用sql apply来降低升级过程中的停机时间,主要步骤如下
1. 生产库创建强制闪回点
2. 将物理dg转换为逻辑dg
3. 将逻辑dg升级至12c,数据和生产同步
4. 第一次主备切换,逻辑dg变为生产,接管业务
5. 原生产闪回至逻辑dg升级开始的时候
6. 用12c软件将原生产库启动到mount,并转换为物理standby,同步数据
7.
第二次主备切换
从以上过程可以看出,停机时间仅仅在于第一步创建强制闪回点的时间和两次dg切换的时间,如果不需要切换回原生产主机,则只需要第一次切换就行。
生产库创建闪回点
SQL> STARTUP MOUNT;
SQL> CREATE RESTORE POINT pre_upgrade GUARANTEE FLASHBACK DATABASE;
需要提前设置好闪回空间
为了回退需要,还要备份控制文件和 redo
[oracle@backup ~]$ cp /oracle/ora11204/oradata/orcl/*.ctl /oracle/ora11204/oradata/orcl/redo* /oracle/ora11204/bak/
为了使用 sql apply ,主库必须运行在最大可用或者最大性能模式。
SQL> alter database set standby database to maximize availability;
SQL> ALTER DATABASE OPEN;
SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY, UNIQUE INDEX) COLUMNS;
SQL> alter system set log_archive_dest_3='LOCATION=/oracle/ora11204/arch/std VALID_FOR=(STANDBY_LOGFILES,STANDBY_ROLE)';
SQL> alter system set log_archive_dest_state_3=enable;
SELECT DISTINCT OWNER, TABLE_NAME FROM DBA_LOGSTDBY_UNSUPPORTED;
(会列出业务用户不支持的表)
--SELECT * FROM DBA_LOGSTDBY_EDS_SUPPORTED;
查看数据库中不支持的内部用户:
SQL>
备注:
在生产库上通过如下命令捕捉不受 sql apply 支持的事务,记录到DBA_LOGSTDBY_EVENTS 表中。
SQL> ', DBMS_LOGSTDBY.MAX_EVENTS);
SQL> EXECUTE DBMS_LOGSTDBY.APPLY_SET('RECORD_UNSUPPORTED_OPERATIONS', 'TRUE');
从主库上获取备库所需的数据字典信息 (可在备库启动到 mount 状态执行)
sql> exec dbms_logstdby.build
logmnr 根据这个将 redo 转换为逻辑 dg 的 sql
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/23732248/viewspace-2887206/ ,如需转载,请注明出处,否则将追究法律责任。