注册
达梦数据文件路径迁移实现方法
培训园地/ 文章详情 /

达梦数据文件路径迁移实现方法

zhangly 2026/06/30 413 0 0

背景说明

在实际使用中,经常会遇到创建的数据文件路径不对,或者目录空间分配不合理等原因,需要将某个数据文件(.dbf文件)移动至指定目录中,本文介绍如何通过修改dm.ctl,结合拷贝数据文件的方式对文件进行迁移。

创建测试用户和表空间,用于后续迁移测试
--1.创建用户专属的表空间 TBS_DATA,单位mb,这里是初始大小512MB,自增长单位128MB,最大2G;
create tablespace TBS_DATA datafile 'TBS_DATA01.dbf' size 512 autoextend on next 128 maxsize 2048;

--2.创建业务用户USER01,密码dameng123,指定默认表空间为TBS_DATA,语句如下:
create user "USER01" identified by "dameng123" DEFAULT TABLESPACE TBS_DATA DEFAULT INDEX TABLESPACE TBS_DATA;

--3.使用SYSDBA给业务用户USER01授权
grant RESOURCE,PUBLIC,VTI,SOI,SVI to USER01;

确认迁移信息

需要将 TBS_DATA01.dbf 迁移至 /data2目录下,首先检查新目录权限是否正确
(这里看到新目录权限为root,需要改为dmdba:dinstall,因为数据库实例进程是用dmdba用户控制的,没有root的访问权限)
1目录权限.png

切到root用户执行 chown -R dmdba:dinstall /data2
(注意:生产环境修改目录权限需谨慎操作,以免影响正在运行的其他程序):
2更改权限.png

确认新目录权限无误后,再查看当前的实例信息:
默认创建的数据文件位于实例dm.ini所在的目录下,可以使用命令 ps -ef |grep dm.ini
找到数据库进程,确认实例路径位于 /data/DAMENG
3 看进程.png

进入实例路径,找到需要迁移的文件TBS_DATA01.dbf 和控制文件 dm.ctl ,为后续迁移做准备
4 确认文件.png

关闭数据库实例进程

数据文件迁移需要在停机状态下进行,达梦数据库的关闭方式通常在dmdbms/bin目录下有一个服务启停脚本,名称为 DmServiceXXXXXX
5 关闭实例.png

停止数据库命令:
/home/dmdba/dmdbms/bin/DmServiceDMSERVER stop
6 关闭.png

更改前对数据库进行备份
为了数据安全,操作前先进行备份,防止以外情况需要恢复
./dmrman
RMAN> BACKUP DATABASE '/data/DAMENG/dm.ini' full to "DB_ FULL_20260622" BACKUPSET '/data2/DB_ FULL_20260622';
7 备份.png

修改控制文件dm.ctl

数据文件的位置记录等关键信息都在dm.ctl中,该文件无法直接编辑,需要用dmctlcvt工具转换为文本进行编辑:

1、导出控制文件
进入到数据库的安装路径的bin目录,这里安装路径是 /home/dmdba/dmdbms
 
把dm.ctl文件转换成文本文件,文件存放于 /data/dmctl.txt
(不同环境请根据数据文件的路径自行调整)

./dmctlcvt TYPE=1 SRC=/data/DAMENG/dm.ctl DEST=/data/dmctl.txt
 8 转换导出.png
2、修改导出的文件

将dmctl.txt 文件中TBS_DATA01.dbf相关路径手动修改为新的存储路径

可以先查一下,有多少内容需要被修改的 cat /data/dmctl.txt |grep "TBS_DATA01.dbf"
 9 确认修改范围.png

使用 vi dmctl.txt 进行修改即可:
10 修改内容.png

提示:因为这里只有一个文件需要改 图方便就手动编辑,如果要修改的文件较多,可以采用通配符批量修改,
示例 :%s/well/good/g 替换所有 well 为 good
将/data/ 改为 /data2/,其中\表示转义符
:%s//data///data2//g

3、导入控制文件
将dm.txt编辑完成后,先重命名原来的dm.ctl文件,
并将修改完的文件文件恢复成新的控制文件:

/home/dmdba/dmdbms/bin/dmctlcvt TYPE=2 SRC=/data/dmctl.txt DEST=/data/DAMENG/dm.ctl
11 转回ctl.png

移动物理文件

上述dm.ctl覆盖完成后,将物理文件 TBS_DATA01.dbf 移动到/data2目录下:
12手动cp.png
这里为了防止传输中断导致文件损坏,没有使用mv命令;
等cp复制完以后,旧文件可以删掉。

完成后启动数据库实例

13启动实例.png
登录客户端,可以看到该数据文件已指向新路径:
14客户端.png

总结

该方法可以针对指定的数据文件进行路径变更,操作前需要先关闭数据库,并做好备份。
然后通过dmctlcvt TYPE=1命令将控制文件转成文本进行编辑。
将需要修改的路径在文本中编辑好以后,并检查无误,再次使用dmctlcvt TYPE=2转回dm.ctl ,最后记得手动将物理文件移动到指定路径下,启动数据库即可。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服