签到成功

知道了

CNDBA社区CNDBA社区

Linux平台达梦数据库V7之控制文件管理

2020-05-27 15:13 3176 0 原创 DM7
作者: semiter

一 前言

每个 DM 数据库都有一个名为 dm.ctl 的控制文件。控制文件是一个二进制文件,它记录了数据库必要的初始信息,如果控制文件损坏,数据库则无法正常启动。

二 控制文件内容

控制文件位置是在配置文件dm.ini中指定的:
[dmdba@dm3 IESDB]$ cat dm.ini |grep CTL
CTL_PATH = /usr/appsoft/dmdbms/data/IESDB/dm.ctl #ctl file path
CTL_BAK_PATH = /usr/appsoft/dmdbms/data/IESDB/ctl_bak #dm.ctl backup path
CTL_BAK_NUM = 10 #backup number of dm.ctl, allowed to keep one more backup file besides specified number.
RAC_N_CTLS = 10000 #Number Of LBS/GBS ctls
控制文件主要包含以下内容:http://www.cndba.cn/semiter/article/4178http://www.cndba.cn/semiter/article/4178

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

三、控制文件转换

控制文件本身是二进制文件,无法正常查看其具体内容,达梦提供了转换工具dmctlcvt可以将其转换为文本文件,这样就可以方便修改和查看。
Dmctlcvt工具语法:
[dmdba@dm3 IESDB]$ dmctlcvt -h
DMCTLCVT V7.6.0.171-Build(2019.07.02-109059)ENThttp://www.cndba.cn/semiter/article/4178http://www.cndba.cn/semiter/article/4178

http://www.cndba.cn/semiter/article/4178
http://www.cndba.cn/semiter/article/4178

Format:  ./dmctlcvt KEYWORD=value
Note:    ctl file name must be dm.ctl or dmmpp.ctl or dmwatcher.ctl

Keyword             Explanation
---------------------------------------------------------------------------
TYPE                1 convert ctl file(dm.ctl or dmmpp.ctl) to txt file
                    2 convert txt file to ctl file(dm.ctl or dmmpp.ctl)
                    3 convert txt file to ctl file(dmwatcher.ctl), the dest_file_path not include file name
                    4 convert ctl file(dmwatcher.ctl) to txt file
SRC                 Source file
DEST                Destination file
DCR_INI             the path of dmdcr.ini
HELP                Show this help info

Example:
./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
./dmctlcvt TYPE=3 SRC=/opt/dmdbms/data/dameng/dmwatcher.txt DEST=/opt/dmdbms/data/dameng
./dmctlcvt TYPE=4 SRC=/opt/dmdbms/data/dameng/dmwatcher.ctl DEST=/opt/dmdbms/data/dameng/dmwatcher_ctl.txt

从语法中可以看到,TYPE为1或2时,支持控制文件与文本文件的相互转换。
下面我们将控制文件转换为文本文件,并查看一下其具体内容:
1.转换文本文件
[dmdba@dm3 IESDB]$ dmctlcvt TYPE=1 src=/usr/appsoft/dmdbms/data/IESDB/dm.ctl dest=/tmp/dmctl.txt
DMCTLCVT V7.6.0.171-Build(2019.07.02-109059)ENT
convert ctl to txt success!
2.查看文件内容
[dmdba@dm3 IESDB]$ cat /tmp/dmctl.txt

http://www.cndba.cn/semiter/article/4178

##############################################################################
## please do not adjust parameter order, ensure the ctl have no difference ###
##########################################################################
# database name
dbname=IESDB
# server mode
svr_mode=0
#OGUID
oguid=0
# db server version
version=117507755
# database version
db_version=458762
# pseg version
pseg_version=458762
#SGUID
sguid=-1677197550
#NEXT_TS_ID
next_ts_id=6
#RAC_NODES
rac_nodes=0
#NEXT_HTS_ID
next_htsid=1
#TIME_FLAG
time_flag=170
#STARTUP_CNT
startup_cnt=1
#LAST_STARTUP_TIME
last_startup_time=2020-5-26 15:21:53
#DM7_DCT_VERSION
dm7_dct_version=2
#DM8_DCT_VERSION
dm8_dct_version=0
#===============================================
#===============================================
# table space name
ts_name=SYSTEM
 # table space ID
ts_id=0
# table space status
ts_state=0
# table space cache
ts_cache=
# RAC node number
ts_nth=0
# table space create time
ts_create_time=2019-9-21 22:37:7
# table space modify time
ts_modify_time=2019-9-21 22:37:7
# table space encrypt flag
ts_encrypt_flag=0
#-----------------------------------------------
# file path
fil_path=/usr/appsoft/dmdbms/data/IESDB/SYSTEM.DBF
# mirror path
mirror_path=
# file id
fil_id=0
# whether the file is auto extend
autoextend=1
# file create time
fil_create_time=2019-9-21 22:37:7
# file modify time
fil_modify_time=2019-9-21 22:37:7
# the max size of file
fil_max_size=0
# next size of file
fil_next_size=0
#===============================================
# table space name
ts_name=ROLL
 # table space ID
ts_id=1
# table space status
ts_state=0
# table space cache
ts_cache=
# RAC node number
ts_nth=0
# table space create time
ts_create_time=2019-9-21 22:37:7
# table space modify time
ts_modify_time=2019-9-21 22:37:7
# table space encrypt flag
ts_encrypt_flag=0
#-----------------------------------------------
# file path
fil_path=/usr/appsoft/dmdbms/data/IESDB/ROLL.DBF
# mirror path
mirror_path=
# file id
fil_id=0
# whether the file is auto extend
autoextend=1
# file create time
fil_create_time=2019-9-21 22:37:7
# file modify time
fil_modify_time=2019-9-21 22:37:7
# the max size of file
fil_max_size=0
# next size of file
fil_next_size=0
#===============================================
# table space name
ts_name=RLOG
 # table space ID
ts_id=2
# table space status
ts_state=0
# table space cache
ts_cache=
# RAC node number
ts_nth=0
# table space create time
ts_create_time=2019-9-21 22:37:7
# table space modify time
ts_modify_time=2019-9-21 22:37:7
# table space encrypt flag
ts_encrypt_flag=0
#-----------------------------------------------
# file path
fil_path=/usr/appsoft/dmdbms/data/IESDB/IESDB01.log
# mirror path
mirror_path=
# file id
fil_id=0
# whether the file is auto extend
autoextend=1
# file create time
fil_create_time=2019-9-21 22:37:7
# file modify time
fil_modify_time=2019-9-21 22:37:7
# the max size of file
fil_max_size=0
# next size of file
fil_next_size=0

# file path
fil_path=/usr/appsoft/dmdbms/data/IESDB/IESDB02.log
# mirror path
mirror_path=
# file id
fil_id=1
# whether the file is auto extend
autoextend=1
# file create time
fil_create_time=2019-9-21 22:37:7
# file modify time
fil_modify_time=2019-9-21 22:37:7
# the max size of file
fil_max_size=0
# next size of file
fil_next_size=0
#===============================================
# table space name
ts_name=MAIN
 # table space ID
ts_id=4
# table space status
ts_state=0
# table space cache
ts_cache=
# RAC node number
ts_nth=0
# table space create time
ts_create_time=2019-9-21 22:37:8
# table space modify time
ts_modify_time=2019-9-21 22:37:8
# table space encrypt flag
ts_encrypt_flag=0
#-----------------------------------------------
# file path
fil_path=/usr/appsoft/dmdbms/data/IESDB/MAIN.DBF
# mirror path
mirror_path=
# file id
fil_id=0
# whether the file is auto extend
autoextend=1
# file create time
fil_create_time=2019-9-21 22:37:8
# file modify time
fil_modify_time=2019-9-21 22:37:8
# the max size of file
fil_max_size=0
# next size of file
fil_next_size=0
#===============================================
# table space name
ts_name=SEMITER
 # table space ID
ts_id=5
# table space status
ts_state=0
# table space cache
ts_cache=NORMAL
# RAC node number
ts_nth=0
# table space create time
ts_create_time=2020-5-26 14:58:40
# table space modify time
ts_modify_time=2020-5-26 14:58:49
# table space encrypt flag
ts_encrypt_flag=0
#-----------------------------------------------
# file path
fil_path=/usr/appsoft/dmdbms/data/IESDB/semiter01.dbf
# mirror path
mirror_path=
# file id
fil_id=0
# whether the file is auto extend
autoextend=1
# file create time
fil_create_time=2020-5-26 14:58:40
# file modify time
fil_modify_time=2020-5-26 14:58:40
# the max size of file
fil_max_size=0
# next size of file
fil_next_size=0

# file path
fil_path=/usr/appsoft/dmdbms/data/semiter02.dbf
# mirror path
mirror_path=
# file id
fil_id=1
# whether the file is auto extend
autoextend=1
# file create time
fil_create_time=2020-5-26 14:58:49
# file modify time
fil_modify_time=2020-5-26 14:58:49
# the max size of file
fil_max_size=0
# next size of file
fil_next_size=0
#===============================================
# HUGE table space name
htsname=HMAIN
# HUGE table space id
htsid=0
#HUGE table space share flag
htsflag=0
# HUGE table space create time
hts_create_time=2019-9-21 22:37:8
# HUGE table space modify time
hts_modify_time=2019-9-21 22:37:8
# HUGE table space path
htspath=/usr/appsoft/dmdbms/data/IESDB/HMAIN
#===============================================

四 重建控制文件

我们可以根据控制文件的内容进行修改,并重建控制文件以完成实际修改。在数据库关闭状态下,我们可以将数据文件移动到其它位置,再修改控制文件中数据文件的路径,然后重建控制文件,来完成数据文件路径的更换。
其实,基本上涉及到路径修改的,都可以通过重建控制文件的方式来完成。
在oracle数据库中,即使控制文件损坏了,可以通过重建的方式来进行恢复,但达梦数据库如果控制文件损坏了,经过实验无法通过这种方式进行恢复;只能通过重建实例,必须相同环境的实例,包括数据库版本、操作系统版本、各种文件路径等。

http://www.cndba.cn/semiter/article/4178
http://www.cndba.cn/semiter/article/4178

4.1 创建测试环境

创建如下表空间及用户用于数据文件迁移测试。
表空间:
create tablespace “SEMITER” datafile ‘/usr/appsoft/dmdbms/data/TEST/semiter01.dbf’ size 128 CACHE = NORMAL;
表空间扩展:
alter tablespace “SEMITER” add datafile ‘/usr/appsoft/dmdbms/data/TEST/semiter02.dbf’ size 128;
用户:
create user “SEMITER” identified by “semiter123” default tablespace “SEMITER”;
角色与权限:
grant “DBA”,”PUBLIC”,”RESOURCE” to “SEMITER”;
alter user “SEMITER” limit failed_login_attemps unlimited, password_lock_time unlimited, password_grace_time unlimited;
表空间SEMITER中有两个数据文件,semiter01.dbf和semiter02.dbf,我们将迁移semiter02.dbf到新的目录/usr/appsoft/dmdbms/data下。
迁移前数据文件路径如下:
SQL> select t.name tablespace_name,t.id file_id,d.path file_name,d.total_size*SF_GET_PAGE_SIZE()/1024/1024||’M’ total_space from v$tablespace t, v$datafile d where t.id=d.group_id and t.name=’SEMITER’;
行号 tablespace_name file_id file_name total_spacehttp://www.cndba.cn/semiter/article/4178

---------- --------------- ----------- -------------------------------------------- -----------
1          SEMITER         5           /usr/appsoft/dmdbms/data/TEST/semiter02.dbf 128M
2          SEMITER         5           /usr/appsoft/dmdbms/data/TEST/semiter01.dbf 128M
已用时间: 2.918(毫秒). 执行号:19.

4.2 关闭实例并转换控制文件为文本文件

1.关闭数据库实例:
[root@dm3 data]# /etc/init.d/DmServiceTEST stop
Stopping DmServiceTEST:                                   [ OK ]
2.转换控制文件
[dmdba@dm3 usr]$ dmctlcvt type=1 src=/usr/appsoft/dmdbms/data/TEST/dm.ctl dest=/tmp/semiter.txt
DMCTLCVT V7.6.0.171-Build(2019.07.02-109059)ENT
convert ctl to txt success!

4.3 拷贝数据文件到新的路径

[dmdba@dm3 TEST]$ pwd
/usr/appsoft/dmdbms/data/TEST
[dmdba@dm3 TEST]$ mv semiter02.dbf ../

4.4 修改文本文件中数据文件路径到新路径并重建控制文件

[dmdba@dm3 IESDB]$ cat /tmp/semiter.txt |grep semiter02.dbf
fil_path=/usr/appsoft/dmdbms/data/semiter02.dbf

[dmdba@dm3 IESDB]$ dmctlcvt type=2 src=/tmp/semiter.txt dest=/usr/appsoft/dmdbms/data/IESDB/dm.ctl
DMCTLCVT V7.6.0.171-Build(2019.07.02-109059)ENT
convert txt to ctl success!
[dmdba@dm3 IESDB]$

4.5 启动数据库并进行验证

[dmdba@dm3 IESDB]$ /etc/init.d/DmServiceIESDB start
Starting DmServiceIESDB:                                   [ OK ]

SQL> select t.name tablespace_name,t.id file_id,d.path file_name,d.total_size*SF_GET_PAGE_SIZE()/1024/1024||'M' total_space from v$tablespace t, v$datafile d where t.id=d.group_id and t.name='SEMITER';

行号     tablespace_name file_id     file_name                                    total_space
---------- --------------- ----------- -------------------------------------------- -----------
1          SEMITER         5           /usr/appsoft/dmdbms/data/semiter02.dbf       128M
2          SEMITER         5           /usr/appsoft/dmdbms/data/IESDB/semiter01.dbf 128M
已用时间: 9.828(毫秒). 执行号:4.

从上面的输出中可以明显看到,semiter02.dbf的路径已经更改,至此我们就完成了达梦数据库下数据文件路径的修改。

版权声明:本文为博主原创文章,未经博主允许不得转载。

DM7 达梦 控制文件

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
semiter

semiter

关注
  • 20
    原创
  • 0
    翻译
  • 0
    转载
  • 2
    评论
  • 访问:79016次
  • 积分:110
  • 等级:初级会员
  • 排名:第28名
精华文章
    热门文章
      Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

      AI QQ群