一、前言
由于近期数据库存在一些漏洞,为了修复已知漏洞需要对数据库进行版本升级,如升级到8.1.3.26版本需要升级到Pack51,如升级到8.1.4.80版本需要升级到Pack24及以上版本。
本升级手册以一主一备一监视器的集群架构作为示例,展示升级到8.1.3.26 Pack51版本。
二、升级步骤
2.1 检查当前数据库版本
SQL> SELECT ID_CODE();
2.2 检查会话
SQL> SELECT * FROM V$SESSIONS WHERE STATE = 'ACTIVE';
2.3 备份数据库[热备]
SQL> BACKUP DATABASE FULL BACKUPSET '/dmbak/FULL_20251010_2003';
2.4 停止集群
# 关闭确认监视器
cd $DM_HOME/bin
./DmMonitorServiceMonitor stop
# 停止守护进程
备库:
./DmWatcherServiceDMDB02 stop
主库:
./DmWatcherServiceDMDB01 stop
# 停止数据库服务
主库:
./disql
SQL> CHECKPOINT(100);
SQL> SHUTDOWN IMMEDIATE;
SQL> EXIT;
备库:
./disql
SQL> CHECKPOINT(100);
SQL> SHUTDOWN IMMEDIATE;
SQL> EXIT;
# 停止AP服务[主/备/监视器]
./DmAPService stop
2.5 备份数据目录
# 主/备库执行:
cd /data/dmdata
cp -r DMDB/ DMDB_版本号
2.6 备份归档文件
# 主/备库执行:
mkdir -p /data/dmarch_版本号
mv /data/dmarch/* /data/dmarch_版本号
2.7 备份旧版本bin目录
# 所有节点执行:
cd $DM_HOME
mv bin bin_版本号
2.8 升级主库
# 安装新版数据库软件
# root 挂载
mount -o loop /dmsoft/dm8_20250813_x86_kylin10_sp1_64.iso /mnt/
# dmdba 安装
cd /mnt/
./DMInstall -i
# 安装在其他目录下/data/dmdbms_新版本号,例如:/data/dmdbms_3_26_pack51
# 不要覆盖/etc/dm_svc.conf文件
# 安装过程中程序会自动将新版本目录配置到环境变量中,需要手动取出
vi ~/.bash_profile
# 去掉新版本目录
source ~/.bash_profile
# 拷贝新的bin目录到原版本目录中
cd $DM_HOME
cp -r /data/dmdbms_3_26_pack51/bin ./
# 将原bin目录中的服务拷贝到新的bin目录中
cp bin_版本号/DmServiceDMDB01 bin/
cp bin_版本号/DmWatcherServiceDMDB01 bin/
cp bin_版本号/DmAPService bin/
# 生产环境如有key也需要一并拷贝
cp bin_版本号/dm.key bin/
2.9 升级备库
# 安装新版数据库软件
# root 挂载
mount -o loop /dmsoft/dm8_20250813_x86_kylin10_sp1_64.iso /mnt/
# dmdba 安装
cd /mnt/
./DMInstall -i
# 安装在其他目录下/data/dmdbms_新版本号,例如:/data/dmdbms_3_26_pack51
# 不要覆盖/etc/dm_svc.conf文件
# 安装过程中程序会自动将新版本目录配置到环境变量中,需要手动取出
vi ~/.bash_profile
# 去掉新版本目录
source ~/.bash_profile
# 拷贝新的bin目录到原版本目录中
cd $DM_HOME
cp -r /data/dmdbms_3_26_pack51/bin ./
# 将原bin目录中的服务拷贝到新的bin目录中
cp bin_版本号/DmServiceDMDB02 bin/
cp bin_版本号/DmWatcherServiceDMDB02 bin/
cp bin_版本号/DmAPService bin/
# 生产环境如有key也需要一并拷贝
cp bin_版本号/dm.key bin/
2.10 升级监视器
# 安装新版数据库软件
# root 挂载
mount -o loop /dmsoft/dm8_20250813_x86_kylin10_sp1_64.iso /mnt/
# dmdba 安装
cd /mnt/
./DMInstall -i
# 安装在其他目录下/data/dmdbms_新版本号,例如:/data/dmdbms_3_26_pack51
# 不要覆盖/etc/dm_svc.conf文件
# 安装过程中程序会自动将新版本目录配置到环境变量中,需要手动取出
vi ~/.bash_profile
# 去掉新版本目录
source ~/.bash_profile
# 拷贝新的bin目录到原版本目录中
cd $DM_HOME
cp -r /data/dmdbms_3_26_pack51/bin ./
# 将原bin目录中的服务拷贝到新的bin目录中
cp bin_版本号/DmMonitorServiceMonitor bin/
cp bin_版本号/DmAPService bin/
# 如果dmmonitor.ini和dmmonitor_noc.ini放在bin目录中也需要拷贝
cp bin_版本号/dmmonitor*.ini bin/
# 生产环境如有key也需要一并拷贝
cp bin_版本号/dm.key bin/
2.11 启动AP服务
# 主/备库执行(监视器启动与否均可)
cd $DM_HOME/bin
./DmAPService start
2.12 启动集群
# 主库服务
cd $DM_HOME/bin
./DmServiceDMDB01 start
# 备库服务
cd $DM_HOME/bin
./DmServiceDMDB02 start
# 主库守护
./DmWatcherServiceDMDB01 start
# 备库守护
./DmWatcherServiceDMDB02 start
# 监视器
cd $DM_HOME/bin
./DmMonitorServiceMonitor start
三、验证
登录非确认监视器检查集群状态
cd $DM_HOME/bin
./dmmonitor ./dmmonitor_noc.ini
show/show global info
检查数据库版本
SQL> SELECT ID_CODE();
检查数据库授权
SQL> SELECT EXPIRED_DATE FROM V$LICENSE;
四、收尾工作
4.1 重建系统包和自建存储过程包
升级版本后需要重建系统包和自建的存储过程包,才能保证原服务的正常运行。
SP_CREATE_SYSTEM_PACKAGES(0);
SP_CREATE_SYSTEM_PACKAGES(1);
SP_CREATE_SYSTEM_VIEWS(0);
SP_CREATE_SYSTEM_VIEWS(1);
另外,自建的存储过程包也需要重建。
如果重建系统包失败,检查 COMPATIBLE_MODE 为 2(兼容 Oracle),则需执行如下 SQL:
SP_SET_PARA_VALUE(2,'ORA_DATE_FMT',1);
重启集群后重建系统包,系统包重建后修改 ORA_DATE_FMT 项的值为原值:
SP_SET_PARA_VALUE(2,'ORA_DATE_FMT',0);
再次重启集群生效。
4.2 检查相关参数
SELECT *
FROM V$DM_INI
WHERE PARA_NAME IN ( 'BAK_SAFE_CHECK',
'LOG_FILE_POSTFIX_NAME',
'ENABLE_MONITOR_BP',
'MONITOR_INDEX_FLAG',
'SVR_LOG_PLN_STR',
'GDB_THREAD_INFO',
'CORE_DUMP_FLAG',
'ORA_DATE_FMT',
'COMPATIBLE_MODE');
4.3 重建函数索引
函数索引失效问题,查询系统中是否有函数索引 (失败重建)
通过如下 SQL 查询,如果结果集有内容,则说明查询到的函数索引需要重建
SELECT * FROM ALL_IND_COLUMNS WHERE COLUMN_POSITION = -1;
重建索引SQL:
ALTER INDEX SCHNAME.INDNAME REBUILD;
注:另外也可以使用 DM 管理工具查看函数索引,将灰色的函数索引右键 —— 重建即可。
4.4 归档日志文件名问题
如后缀不为 “.log” 则修改参数:
SP_SET_PARA_STRING_VALUE(1,'LOG_FILE_POSTFIX_NAME','log');
如没有则忽略此条。
4.5 关闭绑定参数信息监控
SP_SET_PARA_VALUE(1,'ENABLE_MONITOR_BP',0);
4.6 结果集显示相关参数
SP_SET_PARA_VALUE(1,'SLCT_OPT_FLAG',0);
4.7 备份安全检查
SP_SET_PARA_VALUE(1,'BAK_SAFE_CHECK',7);
4.8 禁用索引监控
SP_SET_PARA_VALUE(1,'MONITOR_INDEX_FLAG',2);
4.9 是否在 SQL 日志中记录当前 SQL 的计划
SP_SET_PARA_VALUE(1,'SVR_LOG_PLN_STR',0);
且在 dm.ini 配置文件中添加 SVR_LOG_PLN_STR=0。
4.10 halt 时强制记录堆栈到日志文件
SP_SET_PARA_VALUE(2,'GDB_THREAD_INFO',1);
4.11 记录 CORE SQL 到单独文件
SP_SET_PARA_VALUE(1,'CORE_DUMP_FLAG',1);
4.12 4.80 版本需要临时调整 BEXP_CALC_ST_FLAG
针对哪些过滤条件的选择率基于动态采样调整
SP_SET_PARA_VALUE(1,'BEXP_CALC_ST_FLAG',0);
4.13 禁用 UTL_TCP 系统包
call SP_CREATE_SYSTEM_PACKAGES(0,'UTL_TCP');
注意
以下参数先查后改
SELECT * FROM V$DM_INI WHERE PARA_name like '%BEXP_CALC_ST_FLAG%' UNION ALL
SELECT * FROM V$DM_INI WHERE PARA_name like '%BATCH_PARAM_OPT%'UNION ALL
SELECT * FROM V$DM_INI WHERE PARA_name like '%HASH_JOIN_LOOP%'UNION ALL
SELECT * FROM V$DM_INI WHERE PARA_name like '%OPERATION_NEW_MOTION%';
如下参数需要在 dm.ini 中追加(在线修改重启失效)
BEXP_CALC_ST_FLAG = 0
BATCH_PARAM_OPT = 0
HASH_JOIN_LOOP_TIMES = 1
OPERATION_NEW_MOTION = 0
HASH_JOIN_LOOP = 1 ##查不到不追加
4.14 更新应用驱动
建议升级后替换应用驱动,否则可能报网络通信异常。
8.1.4.80_P8 版本驱动调整了关于查询中别名的使用方法,导致原有 SQL 别名获取不到,建议更换 8.1.4.143 驱动进行测试。
【dmdba 用户】
应用 JDBC 驱动 jar 包需要更新至 8.1.3.26 版本数据库对应的驱动 jar 包,【数据库 JDBC 驱动目录,/home/dmdba/dmdbms/drivers/jdbc】,将以下 jar 包拷贝到应用服务器驱动 jar 目录进行替换。如下命令可用与查看驱动版本。
[dmdba@dm ~]$ java -jar /home/dmdba/dmdbms/drivers/jdbc/DmJdbcDriver18.jar
Dameng JDBC Driver V8.1.3.26-Build(2023.06.30-18027-)
另外,如果使用 Hibernate 框架,也需要更新对应的方言包。
【dmdba 用户】
从新版本数据库【Hibernate 方言包目录示例,/home/dmdba/dmdbms/drivers/jdbc/dialect】目录选取对应版本的方言包在应用中替换相关方言包。
4.15 注意事项
若升级的版本为 8.1.3.26 及以后的版本,数据库升级后需注意慢 SQL,因 8.1.3.26 版本后 CBO 做了调整。
五、回退方案
5.1 概述
由于会对原环境数据和软件进行保留,因此当出现异常情况下,进行还原操作即可完成回退。
5.2 回退触发条件
- 环境升级后,数据库服务异常,短时间内无法解决。
- 达梦数据库提供服务后,无法承担系统并发压力,造成业务缓慢。
- 达梦数据库提供服务后,整体环境异常,无法继续提供服务。
5.3 操作步骤
5.3.1 操作流程
- 停止数据库服务
- 将原备份的 bin 恢复,并启动数据库
- 回退应用驱动版本
- 验证应用服务,查看系统状态
5.3.2 回退成功验证
修复完成后,应用厂商对数据和功能进行验证,所有验证通过后,证明回退成功。