注册
达梦数据库数据文件迁移方法
专栏/冬日暖阳/ 文章详情 /

达梦数据库数据文件迁移方法

DM_666666 2022/03/04 12327 5 1
摘要 在使用达梦数据库过程中,可能因为数据库磁盘空间规划不合理或新增磁盘等各种原因需要迁移数据文件。实际工作中,多次遇到过这个需求,现在就将具体的操作步骤给大家做一个分享。

一、环境信息

操作系统版本:
image.png
在Linux系统上迁移的操作几乎没有什么差异。
数据库版本:
image.png
针对达梦的多个版本像DM7、DM8迁移的步骤都一样,这里我们用DM8来做演示。

二、数据文件迁移

方法一:数据文件整体迁移

迁移步骤总结如下:
1.停止数据库服务。
2.拷贝达梦数据文件。
3.使用dmctlcvt程序转换控制文件为文本文件,修改文本文件。
4.使用dmctlcvt程序转换文本文件为控制文件。
5.修改dm.ini中数据文件的路径,修改数据库启动服务脚本中dm.ini的路径。
6.启动数据库服务。
7.重命名原来的数据文件,待数据库运行稳定一段时间后再删除。

方法二:数据文件部分迁移

迁移步骤总结如下:
1.表空间脱机
2.迁移数据文件
3.表空间联机

三、数据文件迁移过程

方法一:数据文件整体迁移

1.停止数据库服务

为保证在迁移过程中没有数据写入到数据库和迁移后的数据一致性,迁移之前需要停止数据库服务,也就是说迁移过程中数据库服务是无法使用的。
查看服务器正在运行的数据服务(ps -ef|grep dmserver),查看磁盘使用情况(df -h)
image.png
从上图看出有两个正在运行的达梦数据库实例,其中/home/dmdba/dmdbms/data/ZHPT/dm.ini这个实例的数据是放在根目录下的,没有放在数据盘/dmdata下面,这样如果时间一长数据量增长可能导致根目录空间被撑满,或者如果操作系统出现问题极易造成数据丢失。所以现在的任务就是需要把/home/dmdba/dmdbms/data/ZHPT/dm.ini这个实例的数据文件迁移到/dmdata下面。
迁移之前需要先停止数据库服务
image.png
一般情况下数据库的bin目录下都有停止和启动数据库的脚本,是以DmService开头的一个脚本(或者dm_services脚本),停止成功以后就可以看到原来两个实例现在就剩下一个实例了。

2.拷贝达梦数据文件

将/home/dmdba/dmdbms/data/ZHPT拷贝到/dmdata目录下
image.png
注意:(1)用dmdba用户来拷贝,如果是用root拷贝,拷贝之后要执行chown dmdba:dinstall /dmdata/ZHPT -R,保证拷贝后的/dmdata/ZHPT所有者和所属组是dmdba和dinstall。
(2)同时拷贝的时候要用cp -r递归拷贝。

3.使用dmctlcvt程序转换控制文件为文本文件并修改文本文件

dmctlcvt程序可以实现控制文件和文本文件的相互转换,方便我们对控制文件的修改,./dmctlcvt help可以查看dmctlcvt的使用方法:
image.png
转换控制文件,命令:./dmctlcvt type=1 src=/dmdata/ZHPT/dm.ctl dest=/dmdata/ZHPT/dmctl.txt
image.png
可以看到转换成功以后,就在/dmdata/ZHPT下面生成了dmctl.txt文件
接下来修改dmctl.txt文件,使用vi命令修改:
image.png
主要是修改文件路径,原来的文件是保存在/home/dmdba/dmdbms/data下面,现在需要把路径修改为/dmdata,利用vi命令的替换功能来修改,命令如下::%s+/home/dmdba/dmdbms/data/+/dmdata/+。替换完成后保存退出。
image.png
查看dmctl.txt文件中fil_path是否修改成功:cat dmctl.txt |grep “fil_path”
image.png
我们看到数据文件的路径已经修改成功了。

4.使用dmctlcvt程序转换文本文件为控制文件

上面已经将dmctl.txt中的文件路径修改成功了,接下来要做的就是将dmctl.txt转换成dm.ctl,同样使用dmctlcvt程序,命令如下:./dmctlcvt type=2 src=/dmdata/ZHPT/dmctl.txt dest=/dmdata/ZHPT/dm.ctl
image.png

5.修改dm.ini中数据文件的路径,修改数据库启动服务脚本中dm.ini的路径

以上步骤已经完成了dm.ctl的修改,接下来就要修改dm.ini和启动脚本了。用vi命令修改新路径/dmdata/ZHPT下面的dm.ini,替换命令:%s+/home/dmdba/dmdbms/data/+/dmdata/+
image.png
修改启动脚本/home/dmdba/dmdbms/bin/DmServiceZHPT(如果是SM专用平台则修改dm_services.ini,对应的启动脚本是dm_services),修改INI_PATH
image.png

6.启动数据库服务

image.png
从上面可以看出,数据的路径已经更改到/dmdata/ZHPT。致此,数据文件路径的修改已经完成。

7.重命名原来的数据文件,待数据库运行稳定一段时间后再删除

这时为了避免两个同样名称的数据文件混淆,将原路径下的数据文件目录重新命名,待数据库稳定运行一段时间后再删除。
image.png

方法二:数据文件部分迁移

方法一是实现全部数据文件迁移,现在来看看部分数据文件的迁移怎么做呢?前面的全部数据文件迁移是用操作系统命令cp拷贝实现的,部分数据文件迁移则依赖数据库的命令来实现。这种方式必须是表空间处于脱机(offline)状态下才能实现,达梦数据库中SYSTEM、TEMP、ROLL等表空间是不能置为脱机状态的,只有MAIN和自己创建的表空间可以脱机,所以在迁移的时候就只能迁移MAIN和自己创建的表空间,至于SYSTEM、TEMP、ROLL等表空间是不能通过这种方式迁移的,这就是为什么叫部分迁移的原因。所以可以看出,我们在前期规划数据的时候就一定要规划好数据文件的路径。

1.表空间脱机

查看表空间以及表空间状态:select tablespace_name,file_name,status from dba_data_files order by tablespace_name,file_name;
image.png
这里ZHPT就是我们自己创建的供业务使用的表空间,现在要对这个表空间的文件进行迁移。联机状态下是不允许迁移数据文件的:
image.png
先把这个表空间脱机:alter tablespace ZHPT offline;
image.png

2.迁移数据文件

同样也是迁移到/dmdata/ZHPT,前提是我们先要创建这个目录,接下来就逐个迁移数据文件
alter tablespace ZHPT rename datafile ‘/home/dmdba/dmdbms/data/ZHPT/ZHPT01.DBF’ to ‘/dmdata/ZHPT/ZHPT01.DBF’;依次修改执行。这里我们只是更改数据文件的位置,没有重命名数据文件,当然也可以重命名。
image.png
迁移完成后再次查看数据文件,ZHPT表空间对应的数据文件的位置已经修改成功了。
image.png

3.表空间联机

把表空间状态更改成联机状态
image.png
经过上面三个步骤就成功迁移了ZHPT表空间的数据文件了。
可以看出,表空间在联机状态下是不允许做数据文件迁移的,在执行alter tablespace ZHPT rename datafile ‘/home/dmdba/dmdbms/data/ZHPT/ZHPT01.DBF’ to ‘/dmdata/ZHPT/ZHPT01.DBF’;后数据文件是不需要外部方式拷贝或者移动数据文件的,系统会自动将原来的数据文件移动到新的位置并完成重命名。
总结:在迁移规划的时候就尽量将数据文件路径和空间规划好,避免后面做迁移,如果必须做迁移,我们推荐使用方法一进行数据文件整体迁移,这样所有文件都在同一个路径下,方便管理。

更多资讯请上达梦技术社区了解:https://eco.dameng.com

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服