标签:ensure init include add sof 个数 启动 system pac
一 前言每个 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 $pecified number.
RAC_N_CTLS = 10000 #Number Of LBS/GBS ctls
控制文件主要包含以下内容:
控制文件校验码,校验码由数据库服务器在每次修改控制文件后计算生成,保证控制文件合法性,防止文件损坏及手工修改。
控制文件本身是二进制文件,无法正常查看其具体内容,达梦提供了转换工具dmctlcvt可以将其转换为文本文件,这样就可以方便修改和查看。
Dmctlcvt工具语法:
[dmdba@dm3 IESDB]$ dmctlcvt -h
DMCTLCVT V7.6.0.171-Build(2019.07.02-109059)ENT
Format: ./dmctlcvt KEYWORD=value
Note: ctl file name must be dm.ctl or dmmpp.ctl or dmwatcher.ctl
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 succes$!
2.查看文件内容
[dmdba@dm3 IESDB]$ cat /tmp/dmctl.txt
##############################################################################
##########################################################################
dbname=IESDB
svr_mode=0
#OGUID
oguid=0
version=117507755
db_version=458762
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
#===============================================
#===============================================
ts_name=SYSTEM
ts_id=0
t$_state=0
ts_cache=
ts_nth=0
ts_create_time=2019-9-21 22:37:7
ts_modify_time=2019-9-21 22:37:7
ts_encrypt_flag=0
#-----------------------------------------------
fil_path=/usr/appsoft/dmdbms/data/IESDB/SYSTEM.DBF
mirror_path=
fil_id=0
autoextend=1
fil_create_time=2019-9-21 22:37:7
fil_modify_time=2019-9-21 22:37:7
fil_max_size=0
fil_next_size=0
#===============================================
ts_name=ROLL
ts_id=1
t$_state=0
ts_cache=
ts_nth=0
ts_create_time=2019-9-21 22:37:7
ts_modify_time=2019-9-21 22:37:7
ts_encrypt_flag=0
#-----------------------------------------------
fil_path=/usr/appsoft/dmdbms/data/IESDB/ROLL.DBF
mirror_path=
fil_id=0
autoextend=1
fil_create_time=2019-9-21 22:37:7
fil_modify_time=2019-9-21 22:37:7
fil_max_size=0
fil_next_size=0
#===============================================
ts_name=RLOG
ts_id=2
t$_state=0
ts_cache=
ts_nth=0
ts_create_time=2019-9-21 22:37:7
ts_modify_time=2019-9-21 22:37:7
ts_encrypt_flag=0
#-----------------------------------------------
fil_path=/usr/appsoft/dmdbms/data/IESDB/IESDB01.log
mirror_path=
fil_id=0
autoextend=1
fil_create_time=2019-9-21 22:37:7
fil_modify_time=2019-9-21 22:37:7
fil_max_size=0
fil_next_size=0
fil_path=/usr/appsoft/dmdbms/data/IESDB/IESDB02.log
mirror_path=
fil_id=1
autoextend=1
fil_create_time=2019-9-21 22:37:7
fil_modify_time=2019-9-21 22:37:7
fil_max_size=0
fil_next_size=0
#===============================================
ts_name=MAIN
ts_id=4
t$_state=0
ts_cache=
ts_nth=0
ts_create_time=2019-9-21 22:37:8
ts_modify_time=2019-9-21 22:37:8
ts_encrypt_flag=0
#-----------------------------------------------
fil_path=/usr/appsoft/dmdbms/data/IESDB/MAIN.DBF
mirror_path=
fil_id=0
autoextend=1
fil_create_time=2019-9-21 22:37:8
fil_modify_time=2019-9-21 22:37:8
fil_max_size=0
fil_next_size=0
#===============================================
ts_name=SEMITER
ts_id=5
t$_state=0
ts_cache=NORMAL
ts_nth=0
ts_create_time=2020-5-26 14:58:40
ts_modify_time=2020-5-26 14:58:49
ts_encrypt_flag=0
#-----------------------------------------------
fil_path=/usr/appsoft/dmdbms/data/IESDB/semiter01.dbf
mirror_path=
fil_id=0
autoextend=1
fil_create_time=2020-5-26 14:58:40
fil_modify_time=2020-5-26 14:58:40
fil_max_size=0
fil_next_size=0
fil_path=/usr/appsoft/dmdbms/data/semiter02.dbf
mirror_path=
fil_id=1
autoextend=1
fil_create_time=2020-5-26 14:58:49
fil_modify_time=2020-5-26 14:58:49
fil_max_size=0
fil_next_size=0
#===============================================
htsname=HMAIN
htsid=0
#HUGE table space share flag
htsflag=0
hts_create_time=2019-9-21 22:37:8
hts_modify_time=2019-9-21 22:37:8
htspath=/usr/appsoft/dmdbms/data/IESDB/HMAIN
#===============================================
我们可以根据控制文件的内容进行修改,并重建控制文件以完成实际修改。在数据库关闭状态下,我们可以将数据文件移动到其它位置,再修改控制文件中数据文件的路径,然后重建控制文件,来完成数据文件路径的更换。
其实,基本上涉及到路径修改的,都可以通过重建控制文件的方式来完成。
在oracle数据库中,即使控制文件损坏了,可以通过重建的方式来进行恢复,但达梦数据库如果控制文件损坏了,经过实验无法通过这种方式进行恢复;只能通过重建实例,必须相同环境的实例,包括数据库版本、操作系统版本、各种文件路径等。
创建如下表空间及用户用于数据文件迁移测试。 表空间: 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, pas$word_lock_time unlimited, pas$word_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_space |
---|
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.
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 succes$!
[dmdba@dm3 TEST]$ pwd
/usr/appsoft/dmdbms/data/TEST
[dmdba@dm3 TEST]$ mv semiter02.dbf ../
[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 succe$s!
[dmdba@dm3 IESDB]$
[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的路径已经更改,至此我们就完成了达梦数据库下数据文件路径的修改。
标签:ensure init include add sof 个数 启动 system pac
原文地址:https://blog.51cto.com/semiter/2498974