1. 达梦控制文件定义
参考官方文档,达梦控制文件定义如下:
每个 DM 数据库都有一个名为 dm.ctl 的控制文件。控制文件是一个二进制文件,它记 录了数据库必要的初始信息,其中主要包含以下内容:
1. 数据库名称;
2. 数据库服务器模式;
3. OGUID 唯一标识;
4. 数据库服务器版本;
5. 数据文件版本;
6. 数据库的启动次数;
7. 数据库最近一次启动时间;
8. 表空间信息,包括表空间名,表空间物理文件路径等,记录了所有数据库中使用的 表空间,数组的方式保存起来;
9. 控制文件校验码,校验码由数据库服务器在每次修改控制文件后计算生成,保证控 制文件合法性,防止文件损坏及手工修改。
在服务器运行期间,执行表空间的 DDL 等操作后,服务器内部需要同步修改控制文件内 容。如果在修改过程中服务器故障,可能会导致控制文件损坏,为了避免出现这种情况,在 修改控制文件时系统内部会执行备份操作。备份策略如下:
策略一 :在修改 dm.ctl 之前,先执行一次备份,确定 dm.ctl 修改成功后,再将 备份删除,如果 dm.ctl 修改失败或中途出现故障,则保留备份文件。
策略二 :在修改 dm.ctl 成功之后,根据 dm.ini 中指定的 CTL_BAK_PATH/CTL_BAK_NUM 对最新的 dm.ctl 执行备份,如果用户指定的 CTL_BAK_PATH 是非法路径,则不再生成备份文件,在路径有效的情况下,生成备份文件时 根据指定的 CTL_BAK_NUM 判断是否删除老的备份文件。
注意:
1. 如果 dm.ctl 文件存放在裸设备上,则【策略一】不会生效。
2. 如果指定的 CTL_BAK_PATH 是无效路径,则【策略二】也不会生效。
3. 如果【策略一】和【策略二】的条件都满足,则都会生效执行,否则只执行满足条 件的备份策略,如果都不满足,则不会再生成备份文件4。
4. 如果是初始化新库,在初始化完成后,会在“SYSTEM_PATH/CTL_BAK”路径下对 原始的 dm.ctl 执行一次备份。
2. 创建表空间测试
注:测试环境为单机测试库。
查看dm.ini备份配置
查看当前备份控制文件信息
通过管理工具新建一个测试表空间
对比新老控制文件备份
通过文件时间可以看出,当执行创建表空间DDL时,会删除四个最早的控制文件,然后新建四个当前时间节点的控制文件。
3. 控制文件分析
将新建的控制文件通过dmctlcvt工具转换为文本文件对比分析
通过关键字查询可以看出,并不是所有的控制文件都包含完整的创建表空间后的数据信息。
4. 删除表空间测试
通过管理工具删除测试表空间
可以看出删除表空间只删除了一个控制文件并且新增了一个控制文件。
4. 小结
1. 不同的DDL所触发的控制文件数量变化不同,当CTL_BAK_NUM=10时,创建表空间会引起4个控制文件的删除与劲增。规则同远近时间相关。
2. 不是所有的备份控制文件都可用于数据库恢复,如果是过程控制文件,用于恢复会导致数据库异常。
更多达梦相关技术文档可访问
达梦数据库 - 新一代大型通用关系型数据库 | 达梦云适配中心