Oracle升级新姿势:用PDB刷新实现升级迁移

来源:这里教程网 时间:2026-03-03 23:19:28 作者:

传统的 Oracle 数据库升级往往意味着数小时的业务停机、复杂的回退计划和忐忑的运维团队。 Oracle 12.2 引入的可刷新 PDB 特性,通过 PDB 刷新( Refreshable PDB )技术,企业可以在几乎零停机的情况下完成数据库升级,实现“飞行中换引擎”般的平滑过渡。

这种基于 “源 - 目标”架构的升级方式,不仅大幅缩短业务影响时间,还提供了完整的回退机制和预升级测试能力。

什么是 PDB 刷新升级

PDB 刷新升级的核心思想是分离与同步。它在目标 CDB 中创建一个源 PDB 的“镜像”,通过持续同步机制保持两者数据一致,最终通过简单切换完成升级。

整个过程分为三个阶段:初始创建、增量同步和最终切换。初始创建阶段,源 PDB 被以只读方式克隆到目标 CDB ;增量同步阶段,源 PDB 的更改通过重做日志持续同步到目标;最终切换阶段,业务连接从源 PDB 转向已升级的目标 PDB

与传统升级方式相比, PDB 刷新提供了多重优势。几乎零停机时间是最大亮点,业务仅在最终切换的几分钟内受影响。完整的回退保障让升级更安心,如遇到问题可立即切回源 PDB 。预升级验证成为可能,可在目标环境充分测试后再决定切换。

环境准备:升级前的必要检查

以下是必须满足的先决条件和检查要点:

版本兼容性是首要考虑。源 CDB 可以是 12.2 或更高版本,目标 CDB 必须是 19c 或更高版本。两个 CDB 必须运行在相同字节序的平台上。例如,从 19c 升级到 23c 是典型场景。

网络与存储配置需要精心规划。源和目标 CDB 之间必须建立数据库链接,确保网络延迟稳定在合理范围。共享存储或相应配置必须到位,以支持克隆操作。

参数与设置检查不可忽视。源 PDB 必须 undo 本地启用,归档模式必须启用并确保归档日志可访问。

以下是关键的环境检查脚本:

-- 数据库版本:
select * from v$version;
 
-- 检查源PDB状态
SELECT name, open_mode, undo_option
FROM v$pdbs
WHERE name = 'SOURCE_PDB';
 
-- 验证归档模式
archive log list;
 
-- 字节序平台兼容
select db.name,db.platform_id,db.platform_name,os.endian_format from v$database db,v$transportable_platform os where db.platform_id=os.platform_id;
 
-- 评估升级准备状态
EXECUTE dbms_preup.run_preup_checks;

存储空间评估同样重要。需要确保目标 CDB 有足够空间容纳源 PDB 的完整克隆,并预留额外的空间用于升级过程中的临时需求。一般建议预留源 PDB 大小 150% 的空间。

PDB 刷新升级具体步骤

以下是基于真实案例的 PDB 刷新升级完整流程,从 19c 升级到 23c 版本:

第一步:目标 CDB 环境搭建

在目标服务器上安装 Oracle 23c 软件,创建新的 CDB 容器数据库:

CREATE DATABASE TARGET_CDB
...
ENABLE PLUGGABLE DATABASE
FILE_NAME_CONVERT = ('/u01/app/oracle/oradata/SOURCE_CDB/',
                     '/u01/app/oracle/oradata/TARGET_CDB/');

第二步:创建数据库链接

在目标 CDB 中创建指向源 PDB 的数据库链接:

-- 在目标CDB中执行
CREATE DATABASE LINK source_link
CONNECT TO system IDENTIFIED BY password
USING '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)
       (HOST=source_host)(PORT=1521))
       (CONNECT_DATA=(SERVICE_NAME=SOURCE_PDB)))';

第三步:创建可刷新 PDB

在目标 CDB 中创建源 PDB 的可刷新克隆:

CREATE PLUGGABLE DATABASE target_pdb FROM source_pdb@source_link
REFRESH MODE EVERY 60 MINUTES;

初始创建完成后,目标 PDB 处于同步就绪状态,开始接收源 PDB 的变更。

第四步:启动定期刷新

根据业务容忍度设置刷新频率,通常为 15-60 分钟:

ALTER PLUGGABLE DATABASE target_pdb REFRESH MODE EVERY 30 MINUTES;

刷新过程中,源 PDB 保持完全可读写,业务不受任何影响。

第五步:预升级测试与验证

在最终切换前,可在目标 PDB 上进行全面测试:

-- 打开目标PDB进行测试
ALTER PLUGGABLE DATABASE target_pdb OPEN READ ONLY;
 
-- 运行应用测试套件
-- 检查性能与兼容性
-- 验证数据完整性
 
-- 测试完成后关闭
ALTER PLUGGABLE DATABASE target_pdb CLOSE;

第六步:最终刷新与切换

安排维护窗口,执行最终手动刷新并切换业务:

-- 执行最终手动刷新,确保数据完全同步
ALTER PLUGGABLE DATABASE target_pdb REFRESH;
 
-- 关闭源PDB,停止业务写入
ALTER PLUGGABLE DATABASE source_pdb CLOSE IMMEDIATE;
 
-- 执行最后一次刷新
ALTER PLUGGABLE DATABASE target_pdb REFRESH;
 
-- 打开目标PDB,指向业务连接
ALTER PLUGGABLE DATABASE target_pdb OPEN UPGRADE;
 
-- 运行升级脚本
@?/rdbms/admin/utlu23i.sql
@?/rdbms/admin/catctl.pl -n 8 -l /tmp catupgrd.sql
 
-- 完成升级后正常打开
ALTER PLUGGABLE DATABASE target_pdb OPEN;

第七步:回退准备与清理

为确保安全,保留源 PDB 一段时间作为回退保障:

-- 保持源PDB一周,确保升级稳定
-- 一周后确认升级成功,清理源PDB
DROP PLUGGABLE DATABASE source_pdb INCLUDING DATAFILES;

避坑指南:常见问题与解决方案

在实际操作中,以下几个问题需要特别注意:

刷新延迟问题是最常见的挑战。如果网络不稳定或源系统负载过高,可能导致刷新延迟。解决方案是监控刷新间隔,调整刷新频率以适应网络条件。可使用以下查询监控刷新状态:

SELECT pdb_name, refresh_mode, refresh_interval,
       last_refresh_scn, last_refresh_date
FROM dba_pdbs
WHERE refresh_mode IS NOT NULL;

存储空间不足是另一个常见问题。克隆操作需要额外空间,特别是在初始创建阶段。建议提前规划存储,监控表空间使用情况:

SELECT tablespace_name, round(SUM(bytes)/1024/1024/1024, 2) size_gb,
       round(SUM(maxbytes)/1024/1024/1024, 2) max_size_gb
FROM dba_data_files
GROUP BY tablespace_name;

性能影响管理至关重要。刷新操作会消耗源系统和网络资源。建议在业务低峰期执行初始克隆,并监控系统性能指标。如果发现性能影响过大,可以调整刷新间隔或优化网络配置。

兼容性问题预防不容忽视。某些特性或对象可能无法通过刷新同步。建议使用预升级检查工具提前识别问题:

-- 运行预升级检查
@?/rdbms/admin/preupgrd.sql
-- 查看检查结果
SELECT * FROM preupg_results;

随着 Oracle 多租户架构的普及, PDB 刷新升级正成为企业数据库升级的首选方案。它代表了数据库运维的新范式——从“计划性中断”转向“持续可用”,从“高风险操作”转向“可控可回退的流程”。

 

 

 

相关推荐