外观
Oracle 升级步骤
升级的基本概念
升级的定义
- 数据库升级:将 Oracle 数据库从一个版本升级到另一个版本的过程
- 版本升级:从较低版本升级到较高版本,如 11g 到 12c
- 补丁集升级:在同一主版本内应用补丁集,如 12.1.0.1 到 12.1.0.2
- RU/RUR 应用:应用 Release Update 或 Release Update Revision
- 升级路径:从源版本到目标版本的升级路径
升级的重要性
- 功能增强:获取新版本的新功能和增强
- 性能优化:新版本通常包含性能优化
- 安全补丁:修复安全漏洞
- 支持延续:获得 Oracle 的技术支持
- 合规要求:满足行业合规要求
升级前的准备工作
1. 升级规划
目标版本选择
- 版本评估:评估目标版本的特性和兼容性
- 升级路径:确认从当前版本到目标版本的升级路径
- 补丁策略:确定目标版本的补丁级别
- 支持状态:确认目标版本的支持状态
升级时间规划
- 升级窗口:确定合适的升级窗口,最小化业务影响
- 回滚时间:预留足够的回滚时间
- 验证时间:预留足够的验证时间
- 通知时间:提前通知相关方
2. 环境准备
硬件检查
- 系统要求:验证硬件是否满足目标版本要求
- 存储空间:确保有足够的存储空间
- 内存要求:验证内存是否满足要求
- CPU 要求:验证 CPU 是否满足要求
软件检查
- 操作系统版本:验证操作系统版本兼容性
- 补丁要求:应用必要的操作系统补丁
- 依赖软件:验证依赖软件的兼容性
- 认证状态:确认环境是否在 Oracle 认证列表中
3. 数据库准备
健康检查
- 数据库状态:确保数据库处于健康状态
- 数据文件:检查数据文件完整性
- 表空间:检查表空间使用情况
- 无效对象:检查并修复无效对象
- 数据库链接:检查数据库链接状态
备份策略
- 完整备份:在升级前执行完整备份
- 备份验证:验证备份的完整性和可用性
- 归档日志:确保所有归档日志可用
- 控制文件:备份控制文件
- 参数文件:备份参数文件
4. 升级工具准备
OUI/runInstaller
- 下载安装程序:下载目标版本的安装程序
- 验证安装程序:验证安装程序的完整性
- 安装介质:准备安装介质,如 DVD 或下载文件
DBUA (Database Upgrade Assistant)
- 工具位置:确认 DBUA 工具的位置
- 工具版本:使用目标版本的 DBUA
- 参数配置:准备 DBUA 的配置参数
手动升级脚本
- 准备脚本:准备手动升级所需的脚本
- 脚本验证:验证脚本的正确性
- 执行权限:确保脚本有执行权限
5. 测试准备
测试环境
- 环境搭建:搭建与生产环境相似的测试环境
- 数据同步:将生产数据同步到测试环境
- 应用部署:在测试环境部署应用
测试计划
- 测试场景:制定详细的测试场景
- 测试用例:准备测试用例
- 测试工具:准备测试工具
- 测试人员:安排测试人员
升级的执行过程
1. 预升级步骤
运行预升级脚本
执行预升级脚本
bash# 运行预升级脚本 cd $ORACLE_HOME/rdbms/admin sqlplus / as sysdba @preupgrd.sql分析预升级报告
bash# 查看预升级报告 cat preupgrade.log解决预升级问题
- 按照预升级报告的建议解决问题
- 修复无效对象
- 调整参数设置
- 解决空间问题
清理和优化
清理临时表空间
sql-- 清理临时表空间 ALTER TABLESPACE temp ADD TEMPFILE '新文件路径' SIZE 100M; ALTER TABLESPACE temp DROP TEMPFILE '旧文件路径';收集统计信息
sql-- 收集字典统计信息 EXEC DBMS_STATS.GATHER_DICTIONARY_STATS; -- 收集固定对象统计信息 EXEC DBMS_STATS.GATHER_FIXED_OBJECTS_STATS;检查并修复数据字典
sql-- 运行数据字典检查 @?/rdbms/admin/utlrp.sql
2. 升级执行
使用 DBUA 升级
启动 DBUA
bash# 启动 DBUA dbua按照向导执行
- 选择要升级的数据库
- 确认升级选项
- 配置目标版本参数
- 开始升级过程
监控升级过程
- 监控 DBUA 界面的进度
- 检查升级日志
- 处理可能出现的错误
手动升级
安装目标版本软件
bash# 安装目标版本软件 ./runInstaller准备升级
sql-- 关闭数据库 SHUTDOWN IMMEDIATE; -- 启动到升级模式 STARTUP UPGRADE;执行升级脚本
sql-- 执行升级脚本 @?/rdbms/admin/catupgrd.sql完成升级
sql-- 关闭数据库 SHUTDOWN IMMEDIATE; -- 启动数据库 STARTUP; -- 运行编译脚本 @?/rdbms/admin/utlrp.sql
3. 后升级步骤
编译无效对象
sql
-- 编译无效对象
@?/rdbms/admin/utlrp.sql
-- 检查无效对象
SELECT object_name, object_type FROM dba_objects WHERE status = 'INVALID';升级时间 zone 文件
sql
-- 升级时间 zone 文件
@?/rdbms/admin/utltz_upg_sql.sq
@?/rdbms/admin/utltz_upg_sql.plb更新网络配置
- 监听器配置:更新 listener.ora 文件
- 服务名配置:更新 tnsnames.ora 文件
- 网络参数:调整网络相关参数
调整初始化参数
sql
-- 检查并调整初始化参数
SELECT name, value, isdefault FROM v$parameter;
-- 根据目标版本要求调整参数
ALTER SYSTEM SET parameter_name = value SCOPE=SPFILE;升级后的验证
1. 数据库验证
基本状态检查
sql
-- 检查数据库版本
SELECT * FROM v$version;
-- 检查数据库状态
SELECT status FROM v$instance;
-- 检查数据文件状态
SELECT name, status FROM v$datafile;
-- 检查表空间状态
SELECT tablespace_name, status FROM dba_tablespaces;组件验证
sql
-- 检查组件状态
SELECT comp_id, comp_name, status FROM dba_registry;
-- 检查数据库字典
SELECT count(*) FROM dba_objects;2. 应用验证
连接测试
- 应用连接:测试应用能否正常连接
- 用户连接:测试用户能否正常连接
- 工具连接:测试管理工具能否正常连接
功能测试
- 核心功能:测试应用核心功能
- 业务流程:测试完整业务流程
- 报表功能:测试报表生成
- 批处理:测试批处理作业
性能测试
- 响应时间:测试应用响应时间
- 吞吐量:测试系统吞吐量
- 资源使用:监控系统资源使用
- 对比测试:与升级前性能对比
3. 系统验证
存储检查
- 表空间使用:检查表空间使用情况
- 数据文件大小:检查数据文件大小
- 备份状态:检查备份是否正常
网络检查
- 监听器状态:检查监听器状态
- 网络连接:检查网络连接状态
- 延迟测试:测试网络延迟
安全检查
- 权限状态:检查用户权限
- 审计状态:检查审计配置
- 密码策略:检查密码策略
升级的回滚策略
1. 回滚准备
回滚计划
- 触发条件:定义回滚的触发条件
- 回滚步骤:详细的回滚步骤
- 回滚时间:预计回滚所需时间
- 回滚团队:回滚执行团队
回滚资源
- 备份可用性:确保备份可用
- 回滚脚本:准备回滚脚本
- 回滚工具:准备回滚工具
- 回滚验证:准备回滚验证计划
2. 回滚执行
数据库回滚
停止应用:停止所有应用连接
关闭数据库:
sqlSHUTDOWN IMMEDIATE;恢复数据库:
- 使用升级前的备份恢复数据库
- 应用归档日志到升级前的时间点
启动数据库:
sqlSTARTUP;
配置回滚
- 网络配置:恢复网络配置文件
- 参数文件:恢复参数文件
- 环境变量:恢复环境变量设置
- 脚本文件:恢复脚本文件
3. 回滚验证
- 数据库状态:验证数据库状态
- 应用功能:验证应用功能
- 用户访问:验证用户访问
- 系统性能:验证系统性能
升级的最佳实践
准备阶段最佳实践
- 充分测试:在测试环境中充分测试升级过程
- 详细规划:制定详细的升级计划
- 备份验证:验证备份的完整性和可用性
- 文档完善:准备详细的升级文档
- 团队培训:对升级团队进行培训
执行阶段最佳实践
- 严格按照计划执行:遵循预定的升级计划
- 详细记录:记录升级过程中的每一步
- 实时监控:实时监控升级过程
- 及时沟通:及时与相关方沟通升级进度
- 准备应急方案:准备升级失败的应急方案
验证阶段最佳实践
- 全面验证:进行全面的验证
- 逐级验证:从数据库到应用逐级验证
- 用户参与:邀请用户参与验证
- 持续监控:升级后持续监控系统状态
- 性能基准:建立性能基准,用于对比
后续阶段最佳实践
- 升级总结:总结升级经验教训
- 文档更新:更新数据库文档
- 知识共享:分享升级经验
- 性能优化:根据升级后的情况进行性能优化
- 定期检查:定期检查升级后的系统状态
常见升级场景
场景 1:从 11g 升级到 12c
- 升级路径:11.2.0.x 到 12.1.0.x 或 12.2.0.x
- 注意事项:
- 检查 12c 特定的参数
- 注意多租户架构的影响
- 应用必要的补丁
- 升级方法:推荐使用 DBUA
场景 2:从 12c 升级到 19c
- 升级路径:12.1.0.x 或 12.2.0.x 到 19c
- 注意事项:
- 检查 19c 特定的功能和参数
- 注意废弃的特性
- 应用最新的 RU
- 升级方法:使用 DBUA 或手动升级
场景 3:应用 RU/RUR
- 准备工作:
- 阅读补丁说明
- 确认补丁兼容性
- 执行预补丁脚本
- 应用过程:
- 停止数据库
- 应用补丁
- 启动数据库
- 运行后补丁脚本
- 验证步骤:
- 检查补丁状态
- 验证数据库功能
- 监控性能
版本差异
11g vs 12c
- 多租户架构:12c 引入了多租户架构
- PDB/CDB:12c 支持可插拔数据库
- 新特性:12c 引入了许多新特性,如 JSON 支持、In-Memory 选项
- 参数变化:许多参数默认值和行为发生变化
- 升级工具:12c 的 DBUA 增强了功能
12c vs 19c
- 功能增强:19c 增强了许多 12c 的特性
- 性能优化:19c 包含更多性能优化
- 安全增强:19c 增强了安全特性
- 云集成:19c 优化了云环境下的功能
- 简化管理:19c 简化了数据库管理
常见问题(FAQ)
Q1: 选择 DBUA 还是手动升级?
A1: 升级方法的选择:
- DBUA:
- 优点:自动化程度高,操作简单,减少人为错误
- 适用场景:大多数升级场景,特别是对升级过程不熟悉的情况
- 手动升级:
- 优点:更灵活,可控制每一步,适合复杂环境
- 适用场景:复杂的数据库环境,需要特殊配置的情况
- 建议:对于大多数情况,推荐使用 DBUA,特别是第一次升级时
Q2: 升级需要多长时间?
A2: 升级时间的影响因素:
- 数据库大小:数据库越大,升级时间越长
- 硬件性能:硬件性能越好,升级时间越短
- 升级路径:不同的升级路径所需时间不同
- 并行度:手动升级时可以调整并行度
- 估计方法:在测试环境中进行计时,作为参考
Q3: 升级过程中遇到错误怎么办?
A3: 处理升级错误的方法:
- 查看错误日志:详细分析错误日志
- 搜索知识库:在 Oracle 知识库中搜索错误信息
- 应用补丁:如果是已知问题,应用相应的补丁
- 回滚操作:如果错误严重,执行回滚
- 寻求支持:必要时寻求 Oracle 技术支持
Q4: 升级后性能下降怎么办?
A4: 处理升级后性能下降的方法:
- 收集统计信息:重新收集数据库统计信息
- 检查参数:检查并调整初始化参数
- 分析执行计划:检查 SQL 执行计划的变化
- 优化 SQL:优化性能下降的 SQL 语句
- 监控资源:监控系统资源使用情况
- 对比测试:与升级前的性能进行对比
Q5: 如何最小化升级对业务的影响?
A5: 最小化升级影响的方法:
- 选择合适的升级窗口:选择业务低峰期
- 充分的准备:在测试环境中充分测试
- 快速回滚:准备快速回滚方案
- 分批升级:如果可能,分批升级
- 应用维护:提前通知应用维护窗口
- 监控预警:升级后加强监控
Q6: 升级后需要做哪些后续工作?
A6: 升级后的后续工作:
- 备份数据库:升级后立即执行完整备份
- 更新文档:更新数据库文档,包括版本信息
- 培训用户:培训用户使用新特性
- 性能调优:根据升级后的情况进行性能调优
- 监控加强:加强对升级后系统的监控
- 经验总结:总结升级经验,为未来升级做准备
