一 说明
1.1 概述
本文的环境为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切换的时间,如果不需要切换回原生产主机,则只需要第一次切换就行。
二 生产端前期准备
2.1 生产创建回退方案
生产库创建闪回点
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;
2.2 生产开启附加日志
SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY, UNIQUE INDEX) COLUMNS;
2.3 dg 端设置一个额外的目录存放逻辑dg 产生的归档
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;
2.4 主库检查包含不受sql apply 支持的数据类型的表
SELECT DISTINCT OWNER, TABLE_NAME FROM DBA_LOGSTDBY_UNSUPPORTED;
(会列出业务用户不支持的表)
--SELECT * FROM DBA_LOGSTDBY_EDS_SUPPORTED;
查看数据库中不支持的内部用户:
SQL> SELECT OWNER FROM DBA_LOGSTDBY_SKIP WHERE STATEMENT_OPT = 'INTERNAL SCHEMA';
备注:
在生产库上通过如下命令捕捉不受 sql apply 支持的事务,记录到DBA_LOGSTDBY_EVENTS 表中。
SQL> EXECUTE DBMS_LOGSTDBY.APPLY_SET( ' MAX_EVENTS_RECORDED', DBMS_LOGSTDBY.MAX_EVENTS);
SQL> EXECUTE DBMS_LOGSTDBY.APPLY_SET('RECORD_UNSUPPORTED_OPERATIONS', 'TRUE');
2.5 生成sql apply 需要的数据字典
从主库上获取备库所需的数据字典信息 (可在备库启动到 mount 状态执行)
sql> exec dbms_logstdby.build
logmnr 根据这个将 redo 转换为逻辑 dg 的 sql