达梦数据库控制文件是二进制文件,可以通过达梦自带的dmctlcvt工具转换为文本文件,dmctlcvt工具一般在达梦安装目录的bin目录下。如下所示,我们将达梦数据库转换为文本文件看看达梦控制文件的内容。
E:\dmdbms\bin>dmctlcvt type=1 src=E:\dmdbms\data\DAMENG\dm.ctl dest=E:\dmdbms\dmctl.txt
DMCTLCVT V8
convert ctl to txt success!
E:\dmdbms\bin>
复制
如果不知道达梦数据库控制文件存放在什么地方,可以通过如下命令查询。
SQL> select para_name,para_value from v$dm_ini where para_name='CTL_PATH';
行号 PARA_NAME PARA_VALUE
---------- --------- ----------------------------
1 CTL_PATH E:\dmdbms\data\DAMENG\dm.ctl
已用时间: 5.711(毫秒). 执行号:7.
SQL>
复制
如下是我们打开转换后的控制文件文本文件。

我们可以看到,控制文件中记录了达梦数据库的一些基本信息,主要包含:
1、数据库名称
2、数据库服务器模式
3、OGUID唯一标识
4、数据库服务器版本
5、数据文件版本
6、数据库自初始以来启动的次数
7、数据库最近一次启动的时间
8、表空间信息
9、控制文件校验码,校验码由数据库服务器在每次修改控制文件后计算生成,保证控制文件合法性,防止文件损坏及手工修改
达梦数据库控制文件的副本是由CTL_BAK_PATH和CTL_BAK_NUM两个参数决定的,CTL_BAK_PATH参数指定达梦数据库副本的位置,CTL_BAK_NUM参数指定控制文件副本数量,两个参数对应的值如下所示。
SQL> select para_name,para_value from v$dm_ini where para_name='CTL_BAK_PATH';
行号 PARA_NAME PARA_VALUE
---------- ------------ -----------------------------
1 CTL_BAK_PATH E:\dmdbms\data\DAMENG\ctl_bak
已用时间: 4.532(毫秒). 执行号:8.
SQL> select para_name,para_value from v$dm_ini where para_name='CTL_BAK_NUM';
行号 PARA_NAME PARA_VALUE
---------- ----------- ----------
1 CTL_BAK_NUM 10
已用时间: 5.309(毫秒). 执行号:9.
SQL> exit
复制
我们切换到CTL_BAK_PATH参数指定的目录下,可以看到11个以.ctl结尾的文件,这里也就说明了达梦数据库在做控制文件副本的时候,实际的副本数量比参数CTL_BAK_PATH设置的值多1个。

我们现在将控制文件的副本之一dm_20211117082903_819000.ctl通过dmctlcvt工具转换成文本文件,来对比一下该副本与当前控制文件的内容。
E:\dmdbms\bin>dmctlcvt type=1 src=E:\dmdbms\data\DAMENG\ctl_bak\dm_20211117082903_819000.ctl dest=E:\dmdbms\dmctl_bak.txt
DMCTLCVT V8
convert ctl to txt success!
E:\dmdbms\bin>
复制
如下我们打开两个控制文件,截取部分内容。

由此我们可以看出,达梦数据库控制文件的副本方式并不是跟Oracle一样是镜像副本,达梦数据库的控制文件副本是以备份的方式存在的,既然是备份方式,那就有备份策略的,达梦数据库控制文件备份策略如下:
策略一:在修改dm.ctl之前,先执行一次备份,确定dm.ctl修改成功后,再将备份删除,如果dm.ctl修改失败或中途出现故障,则保留备份文件。
策略二:在修改dm.ctl成功之后,根据dm.ini中指定的CTL_BAK_PATH/CTL_BAK_NUM对最新的dm.ctl执行备份,生成备份文件时根据指定的 CTL_BAK_NUM 判断是否删除老的备份文件。
注意:
1、如果dm.ctl文件存放在裸设备上,则【策略一】不会生效。
2、如果指定的CTL_BAK_PATH是非法路径,则【策略二】不会生效。
3、如果【策略一】和【策略二】的条件都满足,则都会生效执行,否则只执行满足条件的备份策略,如果都不满足,则不会再生成备份文件。
4、如果是初始化新库,在初始化完成后,会在“SYSTEM_PATH/CTL_BAK”路径下对原始的dm.ctl执行一次备份。
建议:我们在对达梦数据库控制文件进行管理时,必须要配置CTL_BAK_PATH/CTL_BAK_NUM参数,且CTL_BAK_PATH不要指向裸设备,在控制文件损坏时,要以CTL_BAK_PATH目录下最新(从文件名称很容易看出来,文件名称中间有时间戳)的控制文件进行恢复。
文章被以下合辑收录
评论
