欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

达梦数据库之数据文件迁移

程序员文章站 2022-06-03 11:50:44
...

一 前言
在实际生产环境中,可能存在数据磁盘空间不足的情况,一般情况下,我们会通过增加新的磁盘来解决,当新磁盘增加完毕后,需要将原数据文件迁移一部分到新磁盘空间,以释放原数据磁盘的空间,本文主要阐述此种情况下数据文件的移动。

二 环境描述
操作系统版本:
[[email protected] ~]$ cat /etc/redhat-release
Red Hat Enterprise Linux Server release 6.0 (Santiago)
数据库版本:
[[email protected] ~]$ disql sysdba/SYSDBA

服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间: 60.654(毫秒)
disql V7.6.0.171-Build(2019.07.02-109059)ENT

SQL> select * from v$version;

行号 BANNER


1 DM Database Server x64 V7.6.0.171-Build(2019.07.02-109059)ENT
2 DB Version: 0x7000a
已用时间: 55.167(毫秒). 执行号:5.

三 数据文件迁移步骤
1、关闭数据库服务并通过dmctlcvt转换控制文件为文本文件;
2、拷贝数据文件到新的路径;
3、修改控制文件中数据文件的路径到新的路径并重建控制文件;
4、启动数据库服务
注意:如果是用户表空间的所有数据文件都更换了位置,也需要同时修改dm.ini中的数据文件的路径!!!

四 数据文件迁移过程
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, pa$$word_lock_time unlimited, pa$$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.
SQL>
4.2 关闭实例并转换控制文件为文本文件
1.关闭数据库实例:
[[email protected] data]# /etc/init.d/DmServiceTEST stop
Stopping DmServiceTEST: [ OK ]
2.转换控制文件
[[email protected] 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 succe$$!

4.3 拷贝数据文件到新的路径
[[email protected] TEST]$ pwd
/usr/appsoft/dmdbms/data/TEST
[[email protected] TEST]$ mv semiter02.dbf …/
4.4 修改文本文件中数据文件路径到新路径并重建控制文件
[[email protected] IESDB]$ cat /tmp/semiter.txt |grep semiter02.dbf
fil_path=/usr/appsoft/dmdbms/data/semiter02.dbf

[[email protected] 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$![dmdba@dm3IESDB]! [[email protected] IESDB]
4.5 启动数据库并进行验证
[[email protected] IESDB]$ /etc/init.d/DmServiceDM1 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 vtablespacet,vtablespace t, vdatafile 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的路径已经更改,至此我们就完成了达梦数据库下数据文件路径的修改。

相关标签: 数据库