一 前言
在实际生产环境中,可能存在数据磁盘空间不足的情况,一般情况下,我们会通过增加新的磁盘来解决,当新磁盘增加完毕后,需要将原数据文件迁移一部分到新磁盘空间,以释放原数据磁盘的空间,本文主要阐述此种情况下数据文件的移动。
二 环境描述
操作系统版本: [dmdba@dm3 ~]$ cat /etc/redhat-release Red Hat Enterprise Linux Server release 6.0 (Santiago) 数据库版本: [dmdba@dm3 ~]$ 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 tablespace_name, 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 =d.group_id and ='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.关闭数据库实例: [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 succe$$!
4.3 拷贝数据文件到新的路径
[dmdba@dm3 TEST]$ pwd
/usr/appsoft/dmdbms/data/TEST
[dmdba@dm3 TEST]$ mv semiter02.dbf ../
4.4 修改文本文件中数据文件路径到新路径并重建控制文件
[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$$!
[dmdba@dm3 IESDB]$
4.5 启动数据库并进行验证
[dmdba@dm3 IESDB]$ /etc/init.d/DmServiceIESDB start
Starting DmServiceIESDB:                                   [ OK ]
SQL> select  tablespace_name, 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 =d.group_id and ='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的路径已经更改,至此我们就完成了达梦数据库下数据文件路径的修改。
 
 
                     
            
        













 
                    

 
                 
                    