达梦数据库产品注重向下兼容性,虽然版本不断地更新升级,但在绝大多数情况下,使用高版本的执行码启动低版本的数据库时,会自动执行一系列更新升级动作,对于 DMDSC,用户只需要保证集群中所有节点之前是正常退出的即可。
在数据库升降级操作前,建议先进行数据备份。
需要注意的是,DM 进行的两项较大的功能改进,使得 DMDSC 在跨这两个版本进行升级时需要进行额外的升级操作,下面进行详细的说明。
18.1 日志格式升级
从 V8.1.1.15 版本开始,DM 对 REDO 日志格式进行了升级,与老的日志格式不兼容,因此要求数据库在执行升级操作前,必须是使用之前版本的执行码执行正常退出后的库,以此来保证所有数据都已经刷盘,否则使用新版本的执行码启动数据库时,无法根据老的 REDO 日志对故障重启的数据库执行重做 REDO 日志、归档文件修复等动作,无法正常完成数据库升级。
18.1.1 版本说明
支持 DM7、DM8 老版本的库升级到 V8.1.1.15 或更高的数据库版本。
DM8 老版本的库正常退出后,允许直接启动升级到 V8.1.1.15 或者更高版本的 DM8,但必须要严格遵守 18.1.2 节中的升级步骤。
DM7 老版本的库,针对不同版本有一些升级限制,具体说明如下:
● V7.1.6.11 之后的版本(包括 V7.1.6.11)
允许直接启动升级到 V8.1.1.15 或者更高版本的 DM8,同样也需要严格遵守升级步骤。
● 低于 V7.1.6.11 的版本
需要先升级到 V7.6.0.183 或者更高版本的 DM7,对日志版本号进行升级,然后才允许升级到 V8.1.1.15 或者更高版本的 DM8。需要注意的是,V7.1.5.125 以及更低版本的库,如果打开了日志加密,则不再支持升级到 V8.1.1.15 或更高的数据库版本。
低于 V7.1.6.11 的版本需要升级两次,这两次版本升级的步骤是完全相同的,“升级到 V7.6.0.183 或者更高版本的 DM7”的步骤可以参考下文中描述的升级步骤,只是将升级步骤中的版本号替换为“V7.6.0.183 或者更高版本的 DM7”。
18.1.2 升级步骤
只有当 DMDSC 中所有节点都是 OK 状态时才允许升级。存在故障节点的情况下,OK 状态节点启动升级时会报错。由于 DSC 集群的特殊启动流程,对故障节点无法正常报错退出,因此需要用户保证升级前所有节点都处于 OK 状态并正常退出(包括 DMSERVER、DMASMSVR 和 DMCSS)。
由于升级后老的归档日志文件不再可用,因此必须在执行升级前先将归档日志文件全部从归档目录中移走,避免升级后再次降级时,误判归档日志文件不连续。
需要注意的是,DM7 和 DM8 的 DCR Disk 和 Voting Disk 格式不兼容,如果 DM7 的库升级到 DM8,在执行升级之前,需要先重新初始化 DCR 和 Voting Disk 磁盘(注意,对于需要执行两次升级的 DM7 版本,第一次升级还是 DM7 内的版本升级,不需要执行这个操作)。
使用 DMASMCMD 工具,执行如下命令完成初始化,执行时需要根据实际环境修改路径:
DM7 执行码(升级前的版本)执行:
export dcrdisk 'F:\dmdsc\asmdisks\dmdcr.asm' to ' F:\dmdsc\data\dmdcr_cfg.ini'
DM8 执行码(V8.1.1.15 或者更高版本)执行:
create dcrdisk 'F:\dmdsc\asmdisks\dmdcr.asm' 'dcr'
create votedisk 'F:\dmdsc\asmdisks\dmvtdsk.asm' 'vtd'
init dcrdisk 'F:\dmdsc\asmdisks\dmdcr.asm' from 'F:\dmdsc\data\dmdcr_cfg.ini' identified by 'DCRpsd_123'
init votedisk 'F:\dmdsc\asmdisks\dmvtdsk.asm' from 'F:\dmdsc\data\dmdcr_cfg.ini'
然后使用 V8.1.1.15 或者更高版本执行码依次启动 DMCSS、DMASMSVR 和 DMSERVER 即可,在启动过程中会自动完成系统表和动态视图等字典信息的升级。
DSC 集群可以正常启动到 OPEN 状态,就表示升级成功。升级成功的情况下,一定是可以查到 SYSOPENHISTORY 系统表的,可通过查询此系统表确认升级结果。
18.2 回滚管理段升级
DM 从 V8.1.1.101 版本开始支持回滚管理段,用于存放事务信息,在系统故障重启或者 DSC 故障处理时,通过扫描回滚管理段收集事务信息,以达到缩减事务收集时长的目的。
此版本增加了一个建库参数(PSEG_MGR_FLAG)表示是否仅使用回滚管理段记录事务信息,取值 0、1,默认为 0。取值含义说明如下:
● 0:除了使用回滚管理段记录事务信息外,在事务的首个回滚页上也记录事务信息。
● 1:仅使用回滚管理段记录事务信息,事务的首个回滚页上不再记录。
老版本的库升级时,一律采用 PSEG_MGR_FLAG=0 的方式进行升级,老版本库在升级时会自动创建回滚管理段,升级成功后,不允许再使用老执行码启动升级后的库。
18.2.1 版本说明
具体的升级版本限制说明如下:
● 升级前的老版本库是 DM8,版本号等于或者高于 V8.1.1.15
老版本库已支持升级后的日志格式,本次升级仅需要升级回滚管理段。
● 升级前的老版本库是 DM8,版本号低于 V8.1.1.15;或者升级前的老版本库是 DM7
老版本库不支持升级后的日志格式,本次升级需要先升级日志格式,再升级回滚管理段。
对这个版本范围的老版本库,升级前首先需要满足“18.1 日志格式升级”的各项升级条件,然后还要满足回滚管理段的升级条件才能升级。
18.2.2 升级步骤
回滚管理段的升级必须满足以下两个条件:
(1) 升级前不存在故障节点,并且所有节点均正常退出。
(2) 老版本库如果是新初始化库,则必须用老执行码正常启动过并正常退出,才允许升级。
如果老版本库已支持升级后的日志格式(版本号等于或者高于 V8.1.1.15),在满足这上述条件的前提下,直接使用 V8.1.1.101 或者更高版本的执行码按照 DMCSS、DMASMSVR、DMSERVER 的顺序启动老版本库到 OPEN 状态即可完成升级。
如果老库还未支持升级后的日志格式,则需要同时满足日志格式和回滚管理段的升级条件。具体执行升级时,要根据老版本库当前的版本号,按照“18.1 日志格式升级”中的步骤进行升级,只需要将其中的 V8.1.1.15 替换为 V8.1.1.101 即可,V8.1.1.101 可以同时完成日志格式和回滚管理段的升级。
18.3 HUGE 表空间升级
18.3.1 版本说明
从 V8.1.2.101 版本开始,DM 对 HUGE 表空间进行了升级改造。本节中低版本是指 V8.1.2.101 之前的库,高版本是指 V8.1.2.101 或更高的版本。
不使用 HUGE 表的用户可以不用升级 HUGE 表空间。需要特别注意的是,升级后将不支持继续使用低版本库下所创建的 HUGE 表。若用户库中已有正在使用的 HUGE 表,建议谨慎升级。自定义混合表空间由用户可根据自己需要创建。本章升级对象为 MAIN 系统混合表空间。
高版本与低版本之间的差异如下:
● 用户自定义混合表空间
在低版本中,表空间分为普通表空间和 HUGE 表空间。
从高版本中,对 HUGE 表空间进行了升级改造,废除了 HUGE 表空间的概念,取而代之的是混合表空间的概念。在高版本中,表空间分为普通表空间和混合表空间。
使用 <HUGE 路径子句 > 创建的表空间为混合表空间,未使用 <HUGE 路径子句 > 创建的表空间即为普通表空间。普通表空间只能存储普通表(非 HUGE 表);而混合表空间既可以存储普通表又可以存储 HUGE 表。HUGE 数据文件存储在 <HUGE 路径子句 > 指定的路径中,普通(非 HUGE)数据文件存储在 < 数据文件子句 > 指定的路径中。HUGE 表对应的辅助表为普通表,因此,HUGE 辅助表数据存在 < 数据文件子句 > 指定的路径中。
若创建 HUGE 表使用自定义的混合表空间,则需要用户先创建一个混合表空间。自定义混合表空间创建方法参考《DM8_SQL 语言使用手册》CREATE TABLESPACE 语法。
例 创建 HUGE 表 T1,使用自定义的混合表空间 TS1。
CREATE TABLESPACE TS1 DATAFILE 'd:\TS1.dbf' SIZE 128 WITH HUGE PATH 'D:\TS1\HUGE1';
CREATE HUGE TABLE T1(C1 INT, C2 INT)STORAGE(ON TS1);
● 系统 MAIN 表空间
在低版本中,普通表用户默认表空间 MIAN 为一个普通表空间。HUGE 表默认表空间 HMAIN 为一个 HUGE 表空间。
在高版本中,取消了 HMAIN 表空间。普通表和 HUGE 表用户默认表空间统一为 MAIN 表空间,MAIN 为一个混合表空间。
例 创建 HUGE 表 T2,缺省使用系统默认的 MAIN 混合表空间。
CREATE HUGE TABLE T2(C1 INT, C2 INT) ;
18.3.2 升级步骤
有两种升级 MAIN 表空间的方式:联机升级和脱机升级。
● 联机方式升级
联机方式通过执行相关 SQL 语句完成。
若创建 HUGE 表使用默认的 MAIN 表空间,则需要升级 MAIN 表空间为混合表空间。参考《DM8_SQL 语言使用手册》使用 ALTER TABLESPACE ……<HUGE 路径子句 > 为 MAIN 表空间添加 HUGE 路径,即可升级为混合表空间。
例 为 MAIN 表空间增加 HUGE PATH。不可和其他表空间公用一个绝对路径。
ALTER TABLESPACE MAIN ADD HUGE PATH 'D:\dmdbms\data\DAMENG\TS1\HUGE1';
● 脱机方式升级
脱机方式通过直接修改控制文件的方式完成。
使用高版本的各软件均能够正常读取老库中的控制文件。因此,单节点库升级也可通过直接修改控制文件中的内容来实现。
升级步骤:
(1)正常退出节点,备份控制文件。
(2)使用高版本的 ctlcvt 工具,将控制文件转化为文本文件。
./dmctlcvt TYPE=1 SRC=/data/dmserver/dm.ctl DEST=/data/dmserver/dmctl.txt
(3)检查文本文件,升级 MAIN 普通表空间为混合表空间。在 MAIN 表空间的描述信息区域,在 MAIN 表空间数据文件描述的尾部,结束标志符号“#===”之前,追加 HUGE 路径(#huge path)的相关描述,并修改时间信息。HUGE 路径为 DM 系统目录下的 HMAIN 目录。此外,低版本中 HUGE 表空间描述“# HUGE table space”内容可保留也可删除,对高版本无影响。
例 升级 MAIN 表空间。假定 HUGE 路径为/data/DAMENG/HMAIN。增加的 HUGE 路径为黑体字部分。
……
#===============================================
# table space name
ts_name=MAIN
……
#-----------------------------------------------
# file path
fil_path=/data/DAMENG/MAIN.DBF
……
#-----------------------------------------------
# file path
#MAIN表空间的所有数据文件,均位于huge path的描述之前
……
#-----------------------------------------------
# huge path
huge_path=/data/DAMENG/HMAIN
# huge path create time
huge_create_time=DATETIME '2022-1-13 17:29:14'
# huge path modify time
huge_modify_time=DATETIME '2022-1-13 17:29:14'
#===============================================
……
(4)通过高版本的 ctlcvt 工具,将文本文件重新转换回控制文件。
./dmctlcvt TYPE=2 SRC=/data/dmserver/dmctl.txt DEST=/data/dmserver/dm.ctl
(5)重启服务器。可通过 V$HUGE_TABLESPACE 检查是否包含 MAIN 表空间。成功查询到 MAIN 表空间的 HUGE PATH,即 HMAIN 目录,则升级完成。
SQL> SELECT NAME,PATHNAME FROM V$HUGE_TABLESPACE WHERE NAME='MAIN';
行号 NAME PATHNAME
---------- ---- ---------------------------
1 MAIN /data/DAMENG/HMAIN
(4)通过高版本的 ctlcvt 工具,将文本文件重新转换回控制文件。
./dmctlcvt TYPE=2 SRC=/data/dmserver/dmctl.txt DEST=/data/dmserver/dm.ctl
(5)重启服务器。可通过 V$HUGE_TABLESPACE 检查是否包含 MAIN 表空间。成功查询到 MAIN 表空间的 HUGE PATH,即 HMAIN 目录,则升级完成。
SQL> SELECT NAME,PATHNAME FROM V$HUGE_TABLESPACE WHERE NAME='MAIN';
行号 NAME PATHNAME
---------- ---- ---------------------------
1 MAIN /data/DAMENG/HMAIN