暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

达梦数据库控制文件内容及管理建议

原创 始于脚下 2021-11-30
1626

达梦数据库控制文件是二进制文件,可以通过达梦自带的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目录下最新(从文件名称很容易看出来,文件名称中间有时间戳)的控制文件进行恢复。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论