Skip to content

DM 升级流程

升级类型

1. 小版本升级

定义:在同一主版本内进行的升级,如从 DM 8.1.1.100 升级到 DM 8.1.1.200。

特点

  • 升级风险相对较低
  • 通常只需要应用补丁或执行小版本升级脚本
  • 升级时间较短,对业务影响小

适用场景

  • 获取最新的 bug 修复和性能改进
  • 满足安全合规要求
  • 无需重大功能变更的场景

2. 大版本升级

定义:跨主版本的升级,如从 DM 7 升级到 DM 8。

特点

  • 升级风险相对较高
  • 需要执行完整的升级流程
  • 可能涉及数据结构变化和兼容性问题
  • 升级时间较长,对业务影响较大

适用场景

  • 获取新功能和重大性能改进
  • 原版本不再支持或维护
  • 业务需求需要新功能支持

升级准备

1. 升级规划

操作说明

  • 制定详细的升级计划,包括升级目标、范围、时间、人员、风险评估等
  • 确定升级方式和路径
  • 制定回滚计划,确保在升级失败时能够快速恢复

升级计划内容

  • 升级目标版本和升级路径
  • 升级时间窗口,避开业务高峰期
  • 升级人员分工和职责
  • 升级步骤和操作流程
  • 风险评估和应对措施
  • 回滚计划和操作步骤
  • 测试和验证计划

2. 环境准备

操作说明

  • 准备升级所需的硬件和软件环境
  • 下载并验证升级包的完整性
  • 配置升级环境,确保满足升级要求

硬件要求

  • 服务器配置应满足目标版本的最低要求
  • 足够的磁盘空间用于备份和升级操作
  • 稳定的网络连接

软件要求

  • 目标版本的 DM 数据库安装包
  • 升级工具和脚本
  • 操作系统和依赖库满足目标版本要求
  • 备份工具和存储空间

升级包验证

bash
# 验证升级包的完整性
md5sum dm8_20230101_x86_rh7_64.iso
# 比较输出的 MD5 值与官方发布的 MD5 值是否一致

3. 数据备份

操作说明

  • 在升级前,对数据库进行完整备份
  • 备份内容包括数据文件、日志文件、配置文件等
  • 备份数据应存储在安全可靠的位置

备份方法

  • 使用 DM 提供的备份工具(如 DMRMAN)进行备份
  • 执行全量备份和日志备份
  • 验证备份数据的完整性和可用性

备份命令示例

bash
# 使用 DMRMAN 执行全量备份
./dmrman CTLSTMT="BACKUP DATABASE '/dm/data/DAMENG/dm.ini' FULL TO 'upgrade_backup' BACKUPSET '/dm/backup/upgrade_backup'"

# 执行日志备份
./dmrman CTLSTMT="BACKUP LOG FROM DATABASE '/dm/data/DAMENG/dm.ini' TO 'upgrade_log_backup' BACKUPSET '/dm/backup/upgrade_log_backup'"

# 备份配置文件
cp /dm/data/DAMENG/dm.ini /dm/backup/
dcp /dm/data/DAMENG/dmmal.ini /dm/backup/
dcp /dm/data/DAMENG/dmarch.ini /dm/backup/

4. 升级前检查

操作说明

  • 在升级前,执行升级前检查,确保数据库环境满足升级要求
  • 检查内容包括数据库状态、数据完整性、配置参数等
  • 解决检查中发现的问题,确保升级顺利进行

检查内容

  • 数据库实例状态是否正常
  • 数据是否完整,有无损坏
  • 配置参数是否符合升级要求
  • 系统资源是否充足
  • 依赖组件是否满足要求

检查命令示例

sql
-- 检查数据库实例状态
SELECT INSTANCE_NAME, STATUS$ FROM V$INSTANCE;

-- 检查数据完整性
DBMS_DATABASE_CHECKSUM();

-- 检查数据库版本
SELECT * FROM V$VERSION;

-- 检查无效对象
SELECT OWNER, OBJECT_NAME, OBJECT_TYPE FROM DBA_OBJECTS WHERE STATUS = 'INVALID';

升级实施步骤

1. 停止数据库服务

操作说明

  • 在升级前,停止数据库服务和相关进程
  • 确保所有用户连接已断开
  • 停止所有依赖于数据库的应用程序

停止命令示例

bash
# 停止数据库服务
./DmServiceDMSERVER stop

# 停止监听服务
./DmAPService stop

# 停止其他相关服务(如 DMASM、DMDataWatch 等)
./DmServiceDMASM stop

2. 执行升级操作

操作说明

  • 根据升级类型和版本,选择合适的升级方式
  • 严格按照升级脚本和操作手册执行升级
  • 记录升级过程中的日志和输出

升级方式

小版本升级

补丁升级

bash
# 使用 dmrpm 工具应用补丁
./dmrpm -i dm8_20230101_patch.iso

脚本升级

bash
# 执行小版本升级脚本
./dmupgradectl update db /dm/data/DAMENG

大版本升级

1. 安装目标版本

bash
# 安装目标版本的 DM 数据库
./DMInstall.bin -i

2. 执行升级工具

bash
# 使用 dmu 工具执行大版本升级
./dmu -type db -db-type dm7 -src-path /dm7/data/DAMENG -dst-path /dm8/data/DAMENG -src-log /dm7/data/DAMENG/arch -dst-log /dm8/data/DAMENG/arch

3. 执行升级脚本

bash
# 执行大版本升级脚本
./dmupgradectl update db /dm8/data/DAMENG

3. 启动数据库服务

操作说明

  • 升级完成后,启动数据库服务和相关进程
  • 检查数据库实例状态,确保启动正常

启动命令示例

bash
# 启动数据库服务
./DmServiceDMSERVER start

# 启动监听服务
./DmAPService start

# 启动其他相关服务
./DmServiceDMASM start

4. 升级后检查

操作说明

  • 升级完成后,执行升级后检查,确保数据库升级成功
  • 检查内容包括数据库状态、版本信息、数据完整性等
  • 解决检查中发现的问题

检查内容

  • 数据库实例状态是否正常
  • 数据库版本是否已升级到目标版本
  • 数据是否完整,有无损坏
  • 无效对象是否已重新编译
  • 配置参数是否需要调整

检查命令示例

sql
-- 检查数据库实例状态
SELECT INSTANCE_NAME, STATUS$ FROM V$INSTANCE;

-- 检查数据库版本
SELECT * FROM V$VERSION;

-- 检查数据完整性
DBMS_DATABASE_CHECKSUM();

-- 重新编译无效对象
EXEC DBMS_UTILITY.COMPILE_SCHEMA('SYSDBA');

-- 检查无效对象
SELECT OWNER, OBJECT_NAME, OBJECT_TYPE FROM DBA_OBJECTS WHERE STATUS = 'INVALID';

升级验证

1. 功能验证

操作说明

  • 验证数据库的基本功能是否正常
  • 验证业务功能是否正常运行
  • 验证新功能是否可用

验证内容

  • 数据库连接和基本操作
  • SQL 语句执行
  • 存储过程和函数执行
  • 触发器和约束
  • 业务应用功能
  • 新功能验证

验证方法

  • 使用 DM 管理工具执行基本操作
  • 运行业务应用程序,验证功能正确性
  • 执行新功能相关的测试用例

2. 性能验证

操作说明

  • 验证数据库性能是否符合预期
  • 比较升级前后的性能指标
  • 识别和解决性能问题

验证内容

  • 响应时间
  • 吞吐量
  • CPU 和内存使用率
  • IO 性能
  • 并发处理能力

验证方法

  • 执行性能测试脚本
  • 监控系统性能指标
  • 比较升级前后的 AWR 报告
  • 使用性能诊断工具进行分析

3. 兼容性验证

操作说明

  • 验证数据库与应用程序的兼容性
  • 验证数据库与第三方工具的兼容性
  • 识别和解决兼容性问题

验证内容

  • 应用程序连接和操作
  • SQL 语法兼容性
  • 存储过程和函数兼容性
  • 第三方工具连接和操作

验证方法

  • 运行应用程序,验证兼容性
  • 执行应用程序相关的 SQL 语句
  • 测试第三方工具的连接和操作

升级回滚

操作说明

  • 当升级过程中出现严重问题时,执行回滚操作
  • 按照回滚计划逐步恢复系统状态
  • 回滚后,验证系统是否恢复正常
  • 记录回滚原因和过程,编写回滚报告

回滚触发条件

  • 升级过程中出现无法解决的错误
  • 升级后数据库无法正常启动
  • 升级后数据损坏或丢失
  • 升级后业务功能异常
  • 升级后性能严重下降

回滚步骤

1. 停止数据库服务

bash
# 停止数据库服务和相关进程
./DmServiceDMSERVER stop
./DmAPService stop

2. 恢复数据备份

bash
# 恢复数据文件和配置文件
cp -r /dm/backup/upgrade_backup/* /dm/data/DAMENG/

# 恢复日志文件
cp -r /dm/backup/upgrade_log_backup/* /dm/data/DAMENG/arch/

3. 恢复数据库服务

bash
# 启动数据库服务和相关进程
./DmServiceDMSERVER start
./DmAPService start

4. 验证回滚结果

sql
-- 检查数据库实例状态
SELECT INSTANCE_NAME, STATUS$ FROM V$INSTANCE;

-- 检查数据库版本
SELECT * FROM V$VERSION;

-- 验证业务功能
-- 执行业务应用程序,验证功能正确性

升级后优化

1. 统计信息更新

操作说明

  • 升级后,更新数据库统计信息,确保查询优化器能够生成高效的执行计划
  • 对所有表和索引收集统计信息

更新命令示例

sql
-- 更新所有表的统计信息
EXEC DBMS_STATS.GATHER_DATABASE_STATS();

-- 更新特定表的统计信息
EXEC DBMS_STATS.GATHER_TABLE_STATS('SYSDBA', 'TABLE_NAME');

-- 更新特定索引的统计信息
EXEC DBMS_STATS.GATHER_INDEX_STATS('SYSDBA', 'INDEX_NAME');

2. 配置参数调整

操作说明

  • 根据目标版本的要求和最佳实践,调整数据库配置参数
  • 优化内存、CPU、IO 等资源的使用
  • 启用新功能相关的参数

关键参数调整

  • 内存参数(如 MEMORY_POOL、BUFFER)
  • 并发参数(如 MAX_SESSIONS、THREAD_POOL_SIZE)
  • IO 参数(如 IO_THR_GRP_SIZE、IO_THR_NUM)
  • 新功能相关参数

3. 无效对象处理

操作说明

  • 重新编译升级过程中产生的无效对象
  • 确保所有对象状态正常

处理命令示例

sql
-- 重新编译所有无效对象
EXEC DBMS_UTILITY.COMPILE_SCHEMA('SYSDBA');

-- 检查无效对象
SELECT OWNER, OBJECT_NAME, OBJECT_TYPE FROM DBA_OBJECTS WHERE STATUS = 'INVALID';

4. 应用程序适配

操作说明

  • 根据目标版本的变化,调整应用程序
  • 解决兼容性问题
  • 优化应用程序,充分利用新功能

适配内容

  • SQL 语法调整
  • 存储过程和函数修改
  • 连接配置调整
  • 新功能集成

升级最佳实践

1. 充分测试

  • 在测试环境中模拟升级过程,验证升级方案的可行性
  • 测试升级过程中的各种场景,包括正常升级、异常处理和回滚
  • 测试升级后的功能、性能和兼容性

2. 制定详细计划

  • 制定详细的升级计划,包括升级步骤、时间、人员、风险评估等
  • 确保所有升级人员了解自己的职责和操作流程
  • 制定回滚计划,确保在升级失败时能够快速恢复

3. 备份数据

  • 在升级前,对数据库进行完整备份
  • 备份所有重要的数据和配置文件
  • 验证备份数据的完整性和可用性
  • 将备份存储在安全可靠的位置

4. 选择合适的升级时间

  • 选择业务低峰期进行升级,减少对业务的影响
  • 确保升级时间窗口足够,能够完成升级和验证
  • 提前通知相关业务部门和用户

5. 监控升级过程

  • 在升级过程中,密切监控系统状态和资源使用情况
  • 记录升级过程中的日志和输出
  • 及时处理升级过程中出现的问题

6. 验证升级结果

  • 升级完成后,进行全面的测试和验证
  • 验证数据库的功能、性能和兼容性
  • 确保业务应用程序能够正常运行

7. 文档记录

  • 详细记录升级过程中的所有操作和事件
  • 记录升级前后的配置和版本信息
  • 编写升级总结报告,包括升级结果、问题和经验教训

升级的版本差异

升级类型升级特点注意事项
DM 7 到 DM 8大版本升级,涉及数据结构和功能变化需要使用 dmu 工具进行升级,注意兼容性问题
DM 8 小版本升级同一主版本内升级,风险较低注意补丁的适用版本和顺序
DM 8.1 升级增强了并行处理和分布式功能注意新功能的配置和使用

常见问题(FAQ)

Q1: 升级需要多长时间?

A1: 升级时间取决于数据库大小、升级类型、硬件配置等因素。小版本升级通常需要几分钟到几小时,大版本升级可能需要几小时到几天。在升级前,应根据实际情况进行评估,预留足够的升级时间窗口。

Q2: 升级过程中数据库无法启动怎么办?

A2: 如果升级过程中数据库无法启动,应采取以下措施:

  • 查看数据库日志,分析无法启动的原因
  • 尝试使用救援模式启动数据库
  • 如果无法解决,执行回滚操作,恢复到升级前的状态
  • 联系达梦技术支持,寻求帮助

Q3: 升级后性能下降怎么办?

A3: 升级后性能下降,应采取以下措施:

  • 更新统计信息,确保查询优化器能够生成高效的执行计划
  • 调整数据库配置参数,优化资源使用
  • 分析 SQL 执行计划,优化低效查询
  • 检查系统资源使用情况,确保资源充足
  • 联系达梦技术支持,寻求性能优化建议

Q4: 如何处理升级过程中的兼容性问题?

A4: 处理升级过程中的兼容性问题,应采取以下措施:

  • 在升级前,使用兼容性检查工具检查潜在的兼容性问题
  • 针对发现的问题,修改应用程序或 SQL 语句
  • 升级后,测试应用程序的兼容性,及时解决发现的问题
  • 利用数据库提供的兼容性模式,暂时兼容旧版本的语法和行为

Q5: 升级后需要做哪些后续工作?

A5: 升级后需要做以下后续工作:

  • 更新统计信息
  • 调整配置参数
  • 重新编译无效对象
  • 测试和验证功能、性能和兼容性
  • 更新应用程序,适配新功能
  • 编写升级总结报告
  • 对相关人员进行培训,了解新功能和变化

在升级过程中,应密切关注系统状态,及时处理出现的问题,并做好回滚准备,确保在升级失败时能够快速恢复。升级完成后,还需要进行后续的优化和维护工作,确保数据库系统的稳定运行和性能优化。