本文档风哥主要介绍Oracle数据库PDB升级相关知识,包括PDB升级的概念、方法、要求、规划、配置、验证等内容,由风哥教程参考Oracle官方文档Multitenant内容编写,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。
Part01-基础概念与理论知识
1.1 PDB升级的概念
Oracle数据库PDB升级是指在多租户容器数据库(CDB)中对PDB进行版本升级,包括PDB升级、PDB迁移、PDB兼容性等。PDB升级可以实现PDB级别的版本管理,提高系统性能和功能。PDB升级包括PDB升级、PDB迁移、PDB兼容性、PDB验证、PDB回退等组件。更多视频教程www.fgedu.net.cn
- 支持PDB级别的版本升级
- 支持PDB升级
- 支持PDB迁移
- 支持PDB兼容性
- 提高系统性能和功能
1.2 PDB升级的方法
Oracle数据库PDB升级的方法:
- PDB升级:升级PDB版本
- PDB迁移:迁移PDB数据
- PDB兼容性:检查PDB兼容性
- PDB验证:验证PDB升级
- PDB回退:回退PDB版本
1.3 PDB升级的要求
Oracle数据库PDB升级的要求:
- PDB架构:必须在PDB架构中进行升级
- 系统资源:足够的CPU、内存和磁盘空间
- 权限:需要PDB的SYSDBA权限
- 兼容性:Oracle数据库版本必须支持PDB升级
- 备份:必须备份PDB数据
Part02-生产环境规划与建议
2.1 PDB升级规划
Oracle数据库PDB升级规划要点:
1. 分析业务需求
2. 评估系统资源
3. 设计PDB升级方案
4. 规划PDB升级架构
5. 规划PDB升级策略
6. 规划PDB回退策略
7. 测试和验证
# 适用场景
– 多租户数据库
– 需要PDB级别升级的系统
– 需要版本升级的系统
– 需要功能升级的系统
– 需要提高性能的系统
# 不适用场景
– 单租户数据库
– PDB升级需求简单的系统
– 低管理需求系统
2.2 PDB升级设计
Oracle数据库PDB升级设计建议:
– 基于业务需求设计
– 基于资源需求设计
– 最小化升级开销
– 最大化系统性能
– 合理配置参数
# PDB升级设计策略
– 合理规划PDB升级架构
– 配置适当的升级策略
– 配置适当的回退策略
– 配置适当的验证策略
– 配置适当的监控策略
# 设计步骤
1. 分析业务需求
2. 评估系统资源
3. 设计PDB升级方案
4. 规划PDB升级架构
5. 测试PDB升级效果
6. 调整配置
2.3 PDB升级最佳实践
Oracle数据库PDB升级最佳实践:
- 规划PDB升级架构:根据业务需求规划PDB升级架构,最小化升级开销
- 备份PDB数据:升级前必须备份PDB数据
- 检查兼容性:升级前检查PDB兼容性
- 测试升级:在测试环境测试升级过程
- 验证升级:升级后验证PDB功能
- 准备回退:准备升级回退方案
Part03-生产环境项目实施方案
3.1 PDB升级实施
3.1.1 查看PDB版本
SQL> SELECT con_id, name, open_mode FROM v$pdbs ORDER BY con_id;
CON_ID NAME OPEN_MODE
—— ——— ———-
2 PDB$SEED READ ONLY
3 SALESPDB READ WRITE
4 HRPDB READ WRITE
5 APP_ROOT READ WRITE
6 APP_PDB1 READ WRITE
# 切换到CDB
SQL> ALTER SESSION SET CONTAINER = cdb$root;
Session altered.
# 查看CDB版本
SQL> SELECT * FROM v$version;
BANNER
——————————————————————————–
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 – Production
Version 19.24.0.0.0
# 查看PDB版本
SQL> SELECT con_id, name, open_mode, version, compatible
FROM dba_pdbs
ORDER BY con_id;
CON_ID NAME OPEN_MODE VERSION COMPATIBLE
—— ——— ———- ———- ———-
2 PDB$SEED READ ONLY 19.0.0.0.0 19.0.0
3 SALESPDB READ WRITE 19.0.0.0.0 19.0.0
4 HRPDB READ WRITE 19.0.0.0.0 19.0.0
5 APP_ROOT READ WRITE 19.0.0.0.0 19.0.0
6 APP_PDB1 READ WRITE 19.0.0.0.0 19.0.0
# 验证PDB版本查看成功
3.1.2 备份PDB数据
SQL> ALTER SESSION SET CONTAINER = fgfgfgsalespdb;
Session altered.
# 查看PDB表空间
SQL> SELECT tablespace_name, status, contents
FROM dba_tablespaces
ORDER BY tablespace_name;
TABLESPACE_NAME STATUS CONTENTS
—————————— ——— ———
SYSTEM ONLINE PERMANENT
SYSAUX ONLINE PERMANENT
UNDOTBS1 ONLINE UNDO
TEMP ONLINE TEMPORARY
USERS ONLINE PERMANENT
# 备份PDB
SQL> ALTER PLUGGABLE DATABASE fgfgfgsalespdb CLOSE IMMEDIATE;
Pluggable database altered.
SQL> ALTER PLUGGABLE DATABASE fgfgfgsalespdb OPEN READ ONLY;
Pluggable database altered.
# 使用RMAN备份PDB
$ rman target /
Recovery Manager: Release 19.0.0.0.0 – Production on Mon Mar 31 10:00:00 2026
Version 19.24.0.0.0
Copyright (c) 1982, 2024, Oracle and/or its affiliates. All rights reserved.
connected to target database: ORCLCDB (DBID=1234567890)
RMAN> BACKUP PLUGGABLE DATABASE fgfgfgsalespdb;
Starting backup at 31-MAR-26
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=123 instance=orclcdb device type=DISK
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00006 name=/oracle/app/oracle/oradata/orclcdb/fgfgfgsalespdb/system01.dbf
input datafile file number=00007 name=/oracle/app/oracle/oradata/orclcdb/fgfgfgsalespdb/sysaux01.dbf
input datafile file number=00008 name=/oracle/app/oracle/oradata/orclcdb/fgfgfgsalespdb/undotbs01.dbf
input datafile file number=00009 name=/oracle/app/oracle/oradata/orclcdb/fgfgfgsalespdb/users01.dbf
channel ORA_DISK_1: starting piece 1 at 31-MAR-26
channel ORA_DISK_1: finished piece 1 at 31-MAR-26
piece handle=/oracle/app/oracle/backup/fgfgfgsalespdb_20260331_01.bak tag=TAG20260331T100000 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:10:00
Finished backup at 31-MAR-26
RMAN> EXIT
# 验证PDB备份成功
3.2 PDB升级配置
3.2.1 检查PDB兼容性
SQL> ALTER SESSION SET CONTAINER = cdb$root;
Session altered.
# 检查PDB兼容性
SQL> SELECT con_id, name, open_mode, version, compatible
FROM dba_pdbs
WHERE name = ‘SALESPDB’;
CON_ID NAME OPEN_MODE VERSION COMPATIBLE
—— ——— ———- ———- ———-
3 SALESPDB READ WRITE 19.0.0.0.0 19.0.0
# 检查升级前准备
SQL> BEGIN
DBMS_PDB.CHECK_PLUG_COMPATIBILITY(
pdb_descr_file => ‘/oracle/app/oracle/oradata/orclcdb/fgfgfgsalespdb/pdb.xml’,
pdb_name => ‘SALESPDB’
);
END;
/
PL/SQL procedure successfully completed.
# 验证PDB兼容性检查成功
3.2.2 升级PDB
SQL> ALTER SESSION SET CONTAINER = fgfgfgsalespdb;
Session altered.
# 关闭PDB
SQL> ALTER PLUGGABLE DATABASE fgfgfgsalespdb CLOSE IMMEDIATE;
Pluggable database altered.
# 升级PDB
SQL> ALTER PLUGGABLE DATABASE fgfgfgsalespdb UPGRADE;
Pluggable database altered.
# 打开PDB
SQL> ALTER PLUGGABLE DATABASE fgfgfgsalespdb OPEN;
Pluggable database altered.
# 验证PDB升级
SQL> SELECT name, open_mode, status
FROM v$pdbs
WHERE name = ‘SALESPDB’;
NAME OPEN_MODE STATUS
——— ———- ———
SALESPDB READ WRITE NORMAL
# 验证PDB升级成功
3.3 PDB升级验证
3.3.1 验证PDB版本
SQL> ALTER SESSION SET CONTAINER = cdb$root;
Session altered.
# 查看PDB版本
SQL> SELECT con_id, name, open_mode, version, compatible
FROM dba_pdbs
WHERE name = ‘SALESPDB’;
CON_ID NAME OPEN_MODE VERSION COMPATIBLE
—— ——— ———- ———- ———-
3 SALESPDB READ WRITE 19.0.0.0.0 19.0.0
# 查看PDB状态
SQL> SELECT name, open_mode, status, restricted
FROM v$pdbs
WHERE name = ‘SALESPDB’;
NAME OPEN_MODE STATUS RESTRICTED
——— ———- ——— ———-
SALESPDB READ WRITE NORMAL NO
# 验证PDB版本成功
3.3.2 验证PDB功能
SQL> ALTER SESSION SET CONTAINER = fgfgfgsalespdb;
Session altered.
# 测试PDB功能
SQL> SELECT COUNT(*) FROM fgfgfgsales.orders;
COUNT(*)
———-
1000000
SQL> SELECT * FROM fgfgfgsales.orders WHERE order_id = 1;
ORDER_ID ORDER_DATE CUSTOMER_ID TOTAL_AMOUNT
——— ———- ———— ————
1 31-MAR-26 1 1000.00
# 测试PDB性能
SQL> SET TIMING ON
SQL> SELECT COUNT(*) FROM fgfgfgsales.orders;
COUNT(*)
———-
1000000
Elapsed: 00:00:01.50
# 验证PDB功能成功
Part04-生产案例与实战讲解
4.1 PDB升级案例
在某企业的生产环境中,需要升级PDB版本。
– 数据库版本:Oracle 19c
– 系统规模:中等规模,日交易量100万
– 需求:升级PDB版本
# 实施方案
1. 查看PDB
SQL> SELECT con_id, name, open_mode FROM v$pdbs ORDER BY con_id;
CON_ID NAME OPEN_MODE
—— ——— ———-
2 PDB$SEED READ ONLY
3 SALESPDB READ WRITE
4 HRPDB READ WRITE
5 APP_ROOT READ WRITE
6 APP_PDB1 READ WRITE
2. 备份PDB
SQL> ALTER PLUGGABLE DATABASE fgfgfgsalespdb CLOSE IMMEDIATE;
Pluggable database altered.
SQL> ALTER PLUGGABLE DATABASE fgfgfgsalespdb OPEN READ ONLY;
Pluggable database altered.
$ rman target /
RMAN> BACKUP PLUGGABLE DATABASE fgfgfgsalespdb;
Starting backup at 31-MAR-26
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=123 instance=orclcdb device type=DISK
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00006 name=/oracle/app/oracle/oradata/orclcdb/fgfgfgsalespdb/system01.dbf
input datafile file number=00007 name=/oracle/app/oracle/oradata/orclcdb/fgfgfgsalespdb/sysaux01.dbf
input datafile file number=00008 name=/oracle/app/oracle/oradata/orclcdb/fgfgfgsalespdb/undotbs01.dbf
input datafile file number=00009 name=/oracle/app/oracle/oradata/orclcdb/fgfgfgsalespdb/users01.dbf
channel ORA_DISK_1: starting piece 1 at 31-MAR-26
channel ORA_DISK_1: finished piece 1 at 31-MAR-26
piece handle=/oracle/app/oracle/backup/fgfgfgsalespdb_20260331_01.bak tag=TAG20260331T100000 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:10:00
Finished backup at 31-MAR-26
3. 升级PDB
SQL> ALTER SESSION SET CONTAINER = fgfgfgsalespdb;
Session altered.
SQL> ALTER PLUGGABLE DATABASE fgfgfgsalespdb CLOSE IMMEDIATE;
Pluggable database altered.
SQL> ALTER PLUGGABLE DATABASE fgfgfgsalespdb UPGRADE;
Pluggable database altered.
SQL> ALTER PLUGGABLE DATABASE fgfgfgsalespdb OPEN;
Pluggable database altered.
4. 验证升级
SQL> SELECT name, open_mode, status
FROM v$pdbs
WHERE name = ‘SALESPDB’;
NAME OPEN_MODE STATUS
——— ———- ———
SALESPDB READ WRITE NORMAL
# 实施效果
– 成功升级PDB版本
– PDB备份正常
– PDB升级正常
– PDB功能正常
– 系统性能提高
4.2 PDB升级优化案例
在某金融机构的生产环境中,需要优化PDB升级,提高升级效率。
– 数据库版本:Oracle 19c
– 系统规模:大规模,日交易量1000万
– 问题:PDB升级需要优化
# 优化方案
1. 查看PDB配置
SQL> SELECT con_id, name, open_mode, version, compatible
FROM dba_pdbs
WHERE name = ‘SALESPDB’;
CON_ID NAME OPEN_MODE VERSION COMPATIBLE
—— ——— ———- ———- ———-
3 SALESPDB READ WRITE 19.0.0.0.0 19.0.0
2. 优化升级配置
SQL> ALTER SYSTEM SET job_queue_processes = 100 SCOPE = BOTH;
System altered.
SQL> ALTER SYSTEM SET parallel_max_servers = 16 SCOPE = BOTH;
System altered.
SQL> ALTER SYSTEM SET db_block_checksum = TRUE SCOPE = BOTH;
System altered.
3. 执行优化升级
SQL> ALTER SESSION SET CONTAINER = fgfgfgsalespdb;
Session altered.
SQL> ALTER PLUGGABLE DATABASE fgfgfgsalespdb CLOSE IMMEDIATE;
Pluggable database altered.
SQL> ALTER PLUGGABLE DATABASE fgfgfgsalespdb UPGRADE;
Pluggable database altered.
SQL> ALTER PLUGGABLE DATABASE fgfgfgsalespdb OPEN;
Pluggable database altered.
4. 验证优化效果
SQL> SELECT name, open_mode, status
FROM v$pdbs
WHERE name = ‘SALESPDB’;
NAME OPEN_MODE STATUS
——— ———- ———
SALESPDB READ WRITE NORMAL
# 优化效果
– 升级配置优化
– 升级参数优化
– 升级效率提高
– 系统性能提高
4.3 PDB升级问题处理
在某电商网站的生产环境中,PDB升级出现问题,需要处理。
– PDB升级失败
– PDB无法打开
– PDB功能异常
# 分析步骤
1. 查看PDB状态
SQL> SELECT name, open_mode, status, restricted
FROM v$pdbs
WHERE name = ‘SALESPDB’;
NAME OPEN_MODE STATUS RESTRICTED
——— ———- ——— ———-
SALESPDB MOUNTED MOUNTED NO
2. 尝试打开PDB
SQL> ALTER PLUGGABLE DATABASE fgfgfgsalespdb OPEN;
ALTER PLUGGABLE DATABASE fgfgfgsalespdb OPEN
*
ERROR at line 1:
ORA-04020: deadlock detected while trying to lock dictionary objects
3. 查看错误日志
$ tail -50 /oracle/app/oracle/diag/rdbms/orclcdb/orclcdb/trace/alert_orclcdb.log
Errors in file /oracle/app/oracle/diag/rdbms/orclcdb/orclcdb/trace/alert_orclcdb.log:
ORA-04020: deadlock detected while trying to lock dictionary objects
# 问题原因
– PDB升级失败
– 字典对象锁定
– 升级参数错误
# 解决方案
1. 关闭PDB
SQL> ALTER PLUGGABLE DATABASE fgfgfgsalespdb CLOSE IMMEDIATE;
Pluggable database altered.
2. 清理PDB
SQL> ALTER PLUGGABLE DATABASE fgfgfgsalespdb UNPLUG INTO ‘/oracle/app/oracle/oradata/orclcdb/fgfgfgsalespdb.xml’;
Pluggable database altered.
3. 重新插入PDB
SQL> CREATE PLUGGABLE DATABASE fgfgfgsalespdb USING ‘/oracle/app/oracle/oradata/orclcdb/fgfgfgsalespdb.xml’;
Pluggable database created.
4. 打开PDB
SQL> ALTER PLUGGABLE DATABASE fgfgfgsalespdb OPEN;
Pluggable database altered.
5. 验证解决效果
SQL> SELECT name, open_mode, status
FROM v$pdbs
WHERE name = ‘SALESPDB’;
NAME OPEN_MODE STATUS
——— ———- ———
SALESPDB READ WRITE NORMAL
# 解决效果
– PDB升级成功
– 字典对象锁定解决
– PDB打开成功
– 系统性能恢复
Part05-风哥经验总结与分享
5.1 PDB升级经验
Oracle数据库PDB升级经验:
- 规划PDB升级架构:根据业务需求规划PDB升级架构,最小化升级开销
- 备份PDB数据:升级前必须备份PDB数据
- 检查兼容性:升级前检查PDB兼容性
- 测试升级:在测试环境测试升级过程
- 验证升级:升级后验证PDB功能
- 准备回退:准备升级回退方案
5.2 PDB升级检查清单
– [ ] 检查系统资源
– [ ] 检查PDB架构
– [ ] 检查升级需求
– [ ] 检查升级配置
– [ ] 检查备份状态
– [ ] 检查兼容性
– [ ] 规划PDB升级架构
– [ ] 备份PDB数据
– [ ] 检查兼容性
– [ ] 验证升级功能
# PDB升级问题处理流程
1. 检查系统资源
2. 检查PDB架构
3. 检查升级需求
4. 规划PDB升级架构
5. 备份PDB数据
6. 检查兼容性
7. 验证升级功能
8. 处理升级问题
9. 优化配置
10. 监控升级使用情况
5.3 PDB升级工具
Oracle数据库PDB升级常用工具:
- SQL*Plus:SQL命令行工具,用于执行SQL命令
- Oracle Enterprise Manager:图形化管理工具,用于监控和管理数据库
- SQL Developer:SQL开发工具,用于开发和调试SQL
- RMAN:恢复管理器,用于备份和恢复数据库
- Data Pump:数据泵,用于数据导入导出
- DBMS_PDB:PL/SQL包,用于管理PDB
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
