在实际使用中,经常会遇到创建的数据文件路径不对,或者目录空间分配不合理等原因,需要将某个数据文件(.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的访问权限)
切到root用户执行 chown -R dmdba:dinstall /data2
(注意:生产环境修改目录权限需谨慎操作,以免影响正在运行的其他程序):
确认新目录权限无误后,再查看当前的实例信息:
默认创建的数据文件位于实例dm.ini所在的目录下,可以使用命令 ps -ef |grep dm.ini
找到数据库进程,确认实例路径位于 /data/DAMENG
进入实例路径,找到需要迁移的文件TBS_DATA01.dbf 和控制文件 dm.ctl ,为后续迁移做准备
数据文件迁移需要在停机状态下进行,达梦数据库的关闭方式通常在dmdbms/bin目录下有一个服务启停脚本,名称为 DmServiceXXXXXX
停止数据库命令:
/home/dmdba/dmdbms/bin/DmServiceDMSERVER stop
更改前对数据库进行备份
为了数据安全,操作前先进行备份,防止以外情况需要恢复
./dmrman
RMAN> BACKUP DATABASE '/data/DAMENG/dm.ini' full to "DB_ FULL_20260622" BACKUPSET '/data2/DB_ FULL_20260622';
数据文件的位置记录等关键信息都在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
2、修改导出的文件
将dmctl.txt 文件中TBS_DATA01.dbf相关路径手动修改为新的存储路径
可以先查一下,有多少内容需要被修改的 cat /data/dmctl.txt |grep "TBS_DATA01.dbf"
使用 vi dmctl.txt 进行修改即可:
提示:因为这里只有一个文件需要改 图方便就手动编辑,如果要修改的文件较多,可以采用通配符批量修改,
示例 :%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
上述dm.ctl覆盖完成后,将物理文件 TBS_DATA01.dbf 移动到/data2目录下:
这里为了防止传输中断导致文件损坏,没有使用mv命令;
等cp复制完以后,旧文件可以删掉。
登录客户端,可以看到该数据文件已指向新路径:
该方法可以针对指定的数据文件进行路径变更,操作前需要先关闭数据库,并做好备份。
然后通过dmctlcvt TYPE=1命令将控制文件转成文本进行编辑。
将需要修改的路径在文本中编辑好以后,并检查无误,再次使用dmctlcvt TYPE=2转回dm.ctl ,最后记得手动将物理文件移动到指定路径下,启动数据库即可。
文章
阅读量
获赞
