注册
达梦8控制文件管理
专栏/培训园地/ 文章详情 /

达梦8控制文件管理

IT_Girl 2024/08/21 1079 1 0
摘要

本文主要围绕控制文件进行介绍,具体介绍内容如下所示:
image.png

1 控制文件的内容

控制文件是数据库中的核心文件,是一个二进制的小文件,主要记录如下内容:

  • 数据库名称;
  • 数据库服务器模式;
  • OGUID 唯一标识;
  • 数据库服务器版本;
  • 数据文件版本;
  • 数据库的启动次数;
  • 数据库最近一次启动时间;
  • 表空间信息,包括表空间名,表空间物理文件路径等,记录了所有数据库中使用的表空间,数组的方式保存起来;
  • 控制文件校验码,校验码由数据库服务器在每次修改控制文件后计算生成,保证控制文件合法性,防止文件损坏及手工修改。

2 控制文件的备份策略

一旦对控制文件的内容进行修改之后,需要即时通过备份的方式来保护控制文件。在达梦 8 数据库中有主要有两个备份策略:

  • 策略一
    修改 dm.ctl 之前,先执行一次备份,确定 dm.ctl 修改成功后,再将备份删除,如果 dm.ctl 修改失败或中途出现故障,则保留备份文件。
  • 策略二
    在修改 dm.ctl 成功之后,根据 dm.ini 中指定的 CTL_BAK_PATH/CTL_BAK_NUM 对最新的 dm.ctl 执行备份,如果用户指定的 CTL_BAK_PATH 是非法路径,则不再生成备份文件,在路径有效的情况下,生成备份文件时根据指定的 CTL_BAK_NUM 判断是否删除老的备份文件

3 控制文件的维护

image.png

3.1 查看控制文件内容

达梦 8 数据库中提供了dmctlcvt 工具可以将控制文件的内容转储出来。

DMCTLCVT V8
version: 03134284172-20240321-222308-20093
格式: ./dmctlcvt KEYWORD=value
注意: 控制文件名称必须指定为dm.ctl、dmmpp.ctl、dss.ctl
关键字              说明
--------------------------------------------------------------------------------
TYPE                1 转换控制文件为文本文件(源文件路径中控制文件名称必须是dm.ctl或dmmpp.ctl或dss.ctl)
                   2 转换文本文件为控制文件(目标文件路径中控制文件名称必须是dm.ctl或dmmpp.ctl或dss.ctl)
SRC                 源文件路径
DEST                目标文件路径
DCR_INI             dmdcr.ini文件路径
HELP                打印帮助信息
示例:
./dmctlcvt TYPE=1 SRC=/opt/dmdbms/data/dameng/dm.ctl DEST=/opt/dmdbms/data/dameng/dmctl.txt
./dmctlcvt TYPE=2 SRC=/opt/dmdbms/data/dameng/dmctl.txt DEST=/opt/dmdbms/data/dameng/dm.ctl

将控制文件转储成文本:

[dmdba@dba DAMENG]$ dmctlcvt TYPE=1 SRC=/dm8/data/DAMENG/dm.ctl DEST=/home/dmdba/dmctl.txt
DMCTLCVT V8

image.png
查看控制文件的文本文件:

[dmdba@dba ~]$ more /home/dmdba/dmctl.txt

这里面内容较多,只截取了一部分:
image.png

3.2 查看控制文件备份

通过查看参数的方式来查看控制文件的备份:

SQL> show parameter ctl_bak
行号     PARA_NAME    PARA_VALUE              
---------- ------------ ------------------------
1          CTL_BAK_PATH /dm8/data/DAMENG/ctl_bak
2          CTL_BAK_NUM  10

image.png
通过以上信息可以知道,控制文件的备份会存放到/dm8/data/DAMENG/ctl_bak目录下,且保留最近的10个备份。
从物理目录下查看:

[dmdba@dba DAMENG]$ cd /dm8/data/DAMENG/ctl_bak/
[dmdba@dba ctl_bak]$ ll 
总用量 88
-rw-r--r-- 1 dmdba dinstall 6656  6月 26 15:12 dm_20240626151231_176873.ctl
-rw-r--r-- 1 dmdba dinstall 6656  6月 26 16:42 dm_20240626164251_272823.ctl
-rw-r--r-- 1 dmdba dinstall 7168  6月 26 16:42 dm_20240626164251_276004.ctl
-rw-r--r-- 1 dmdba dinstall 7168  6月 26 16:42 dm_20240626164251_278852.ctl
-rw-r--r-- 1 dmdba dinstall 7168  6月 26 16:42 dm_20240626164251_280779.ctl
-rw-r--r-- 1 dmdba dinstall 7168  6月 26 16:42 dm_20240626164251_285660.ctl
-rw-r--r-- 1 dmdba dinstall 7168  6月 28 10:05 dm_20240628100543_571181.ctl
-rw-r--r-- 1 dmdba dinstall 7680  6月 28 10:05 dm_20240628100543_573226.ctl
-rw-r--r-- 1 dmdba dinstall 7680  6月 28 10:05 dm_20240628100543_578331.ctl
-rw-r--r-- 1 dmdba dinstall 7680  6月 28 10:05 dm_20240628100543_580101.ctl
-rw-r--r-- 1 dmdba dinstall 7680  6月 28 10:05 dm_20240628100543_589343.ctl

image.png
通过以上可以看出,实际上要比10个要多,也就是有11个。

3.3 修改控制文件验证备份机制

模拟修改控制文件:创建表空间

SQL> create tablespace tbs datafile '/dm8/data/DAMENG/tbs.dbf' size 50;
操作已执行
已用时间: 30.580(毫秒). 执行号:2602.

image.png
查看备份
image.png
image.png
通过以上可以看出来在修改了控制文件之后,会自动备份。

3.4 利用备份恢复控制文件

3.4.1 模拟删除达梦控制文件

[dmdba@dba DAMENG]$ pwd
/dm8/data/DAMENG
[dmdba@dba DAMENG]$ ll dm.ctl 
-rw-r--r-- 1 dmdba dinstall 8704  6月 28 13:57 dm.ctl
[dmdba@dba DAMENG]$ rm -f dm.ctl 
[dmdba@dba DAMENG]$ ll dm.ctl
ls: 无法访问 'dm.ctl': 没有那个文件或目录

image.png

3.4.2 重启数据库服务识别故障

[dmdba@dba DAMENG]$ DmServiceDMSERVER stop
Stopping DmServiceDMSERVER:                                [ OK ]
[dmdba@dba DAMENG]$ DmServiceDMSERVER start
Starting DmServiceDMSERVER:                                [ FAILED ]

image.png
查看日志:
[dmdba@dba log]$ tail -100f /dm8/log/dm_DMSERVER_202406.log
image.png

3.4.3 解决故障

将备份拷贝回来

[dmdba@dba ctl_bak]$ cp dm_20240628135728_858373.ctl ../dm.ctl
[dmdba@dba ctl_bak]$ ll /dm8/data/DAMENG/dm.ctl 
-rw-r--r-- 1 dmdba dinstall 8704  6月 28 14:57 /dm8/data/DAMENG/dm.ctl

image.png
重启服务并查看数据库的状态为open:

[dmdba@dba ctl_bak]$ DmServiceDMSERVER start
Starting DmServiceDMSERVER:                                [ OK ]
[dmdba@dba ctl_bak]$ disql sysdba/SYSDBA

服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 18.858(ms)
disql V8
SQL> select status$ from v$instance;

行号     STATUS$
---------- -------
1          OPEN

已用时间: 1.231(毫秒). 执行号:501.

image.png

3.5 利用控制文件修改数据文件位置

需求场景:将tbs.dbf文件移动到/homd/dmdba/dbf目录下。

3.5.1 查看当前数据文件tbs.dbf位置

SQL>  select file_name from dba_data_files where file_name like '%tbs.dbf%';

行号     FILE_NAME               
---------- ------------------------
1          /dm8/data/DAMENG/tbs.dbf

image.png

3.5.2 停数据库服务

SQL> shutdown immediate;
操作已执行
已用时间: 0.312(毫秒). 执行号:0.

image.png

3.5.3 转储控制文件为文本并修改

[dmdba@dba DAMENG]$ dmctlcvt TYPE=1 SRC=/dm8/data/DAMENG/dm.ctl DEST=/home/dmdba/dmctlnew.txt
DMCTLCVT V8
convert ctl to txt success!

image.png

[dmdba@dba DAMENG]$ cd
[dmdba@dba ~]$ mkdir dbf
### 3.5.4 修改tbs.dbf文件的路径
[dmdba@dba ~]$ cat dmctlnew.txt | grep tbs.dbf
fil_path=/home/dmdba/dbf/tbs.dbf

image.png

3.5.5 转储修改后的控制文件为二进制

备份原控制文件

[dmdba@dba DAMENG]$ cp dm.ctl dm.ctl.bak
[dmdba@dba DAMENG]$ dmctlcvt TYPE=2 SRC=/home/dmdba/dmctlnew.txt DEST=/dm8/data/DAMENG/dm.ctl
DMCTLCVT V8
convert txt to ctl success!

image.png

3.5.6 将tbs.dbf文件移动到对应的位置

[dmdba@dba DAMENG]$ mv tbs.dbf /home/dmdba/dbf/

image.png

3.5.7 启动数据库服务

[dmdba@dba DAMENG]$ DmServiceDMSERVER start
Starting DmServiceDMSERVER:                                [ OK ]

image.png

3.5.8 验证数据文件最新位置

SQL> select file_name from dba_data_files where file_name like '%tbs.dbf%';
行号     FILE_NAME              
---------- -----------------------
1          /home/dmdba/dbf/tbs.dbf

image.png

注:虽然可以通过修改控制文件的方式,迁移数据文件,但是不推荐这样操作。
更多内容请参考:
https://eco.dameng.com/document/dm/zh-cn/start/

至此结束!

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服