1情况说明
当遇到磁盘分区不够用的情况时,需要迁移数据文件到新的分区。以下记录数据目录迁移的全步骤。
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 475M 0 475M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 7.7M 479M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/mapper/centos-root 17G 17G 407M 98% /
/dev/sda1 1014M 138M 877M 14% /boot
tmpfs 98M 0 98M 0% /run/user/0
/dev/sdb1 20G 45M 19G 1% /data
[dmdba@localhost bin]$ ps -ef|grep dmserver
dmdba 4950 1 0 01:26 pts/0 00:00:05 /home/dmdba/dmdbms/bin/dmserver /home/dmdba/dmdata/DAMENG/dm.ini -noconsole
dmdba 6625 4457 0 01:59 pts/0 00:00:00 grep --color=auto dmserver
为了验证迁移结果,现在数据库内创建新的表空间,用户,表数据等
-- 新建表空间
create tablespace "TEST" datafile '/home/dmdba/dmdata/DAMENG/TEST.DBF' size 128 autoextend on maxsize 67108863 CACHE = NORMAL;
-- 新建用户
create user "TEST" identified by "TEST@TEST123" default tablespace "TEST" default index tablespace "TEST";
-- 授权
grant "DBA","RESOURCE","PUBLIC","VTI" to "TEST";
-- 建测试表
create table TEST.TESTTABLE (A1 int,A2 varchar2(50));
-- 随便插入几条测试数据
insert into TEST.TESTTABLE(A1,A2) values (1,'第一条数据');
insert into TEST.TESTTABLE(A1,A2) values (2,'第二条数据');
insert into TEST.TESTTABLE(A1,A2) values (3,'第三条数据');
insert into TEST.TESTTABLE(A1,A2) values (4,'第四条数据');
insert into TEST.TESTTABLE(A1,A2) values (5,'第五条数据');
commit;
-- 查询表数据
SQL> select * from TEST.TESTTABLE;
LINEID A1 A2
---------- ----------- ----------
1 1 第一条数据
2 2 第二条数据
3 3 第三条数据
4 4 第四条数据
5 5 第五条数据
used time: 0.951(ms). Execute id is 18.
SQL>
-- 查询表空间路径
SQL> select file_id,file_name,tablespace_name from dba_data_files;
LINEID FILE_ID FILE_NAME TABLESPACE_NAME
---------- ----------- ------------------------------------ ---------------
1 0 /home/dmdba/dmdata/DAMENG/SYSTEM.DBF SYSTEM
2 0 /home/dmdba/dmdata/DAMENG/TEST.DBF TEST
3 0 /home/dmdba/dmdata/DAMENG/MAIN.DBF MAIN
4 0 /home/dmdba/dmdata/DAMENG/TEMP.DBF TEMP
5 0 /home/dmdba/dmdata/DAMENG/ROLL.DBF ROLL
2停止数据库
具体根据实际的服务名停数据库服务
[dmdba@localhost bin]$ ./DmServiceDMSERVER stop
Stopping DmServiceDMSERVER: [ OK ]
3脱机备份
RMAN> BACKUP DATABASE '/home/dmdba/dmdata/DAMENG/dm.ini' FULL TO BACKUP_FILE1 BACKUPSET '/home/dmdba/dmdata/dmbak/backupfull_20210905';
BACKUP DATABASE '/home/dmdba/dmdata/DAMENG/dm.ini' FULL TO BACKUP_FILE1 BACKUPSET '/home/dmdba/dmdata/dmbak/backupfull_20210905';
file dm.key not found, use default license!
checking if the database under system path [/home/dmdba/dmdata/DAMENG] is running...[4].
checking if the database under system path [/home/dmdba/dmdata/DAMENG] is running...[3].
checking if the database under system path [/home/dmdba/dmdata/DAMENG] is running...[2].
checking if the database under system path [/home/dmdba/dmdata/DAMENG] is running...[1].
checking if the database under system path [/home/dmdba/dmdata/DAMENG] is running...[0].
checking if the database under system path [/home/dmdba/dmdata/DAMENG] is running, write dmrman info.
EP[0] max_lsn: 41345
BACKUP DATABASE [DAMENG],execute......
CMD CHECK LSN......
BACKUP DATABASE [DAMENG],collect dbf......
CMD CHECK ......
DBF BACKUP SUBS......
total 2 packages processed...
total 7 packages processed...
total 8 packages processed...
total 9 packages processed...
DBF BACKUP MAIN......
BACKUPSET [/home/dmdba/dmdata/dmbak/backupfull_20210905] END, CODE [0]......
META GENERATING......
total 10 packages processed...
total 10 packages processed!
CMD END.CODE:[0]
backup successfully!
time used: 8029.512(ms)
RMAN> check backupset '/home/dmdba/dmdata/dmbak/backupfull_20210905';
check backupset '/home/dmdba/dmdata/dmbak/backupfull_20210905';
CMD END.CODE:[0]
check backupset successfully.
time used: 3.972(ms)
RMAN>
4把dm.ctl文件转换成文本文件
[dmdba@localhost ~]$ cd /home/dmdba/dmdbms/bin
[dmdba@localhost bin]$ ./dmctlcvt TYPE=1 SRC=/home/dmdba/dmdata/DAMENG/dm.ctl DEST=/home/dmdba/dmdata/DAMENG/dmctl.txt
DMCTLCVT V7.6.1.74-Build(2020.10.22-128627)ENT
convert ctl to txt success!
[dmdba@localhost bin]$
5修改dmctl.txt文件
将文件中存在原来路径的修改为新的存储路径,这里是将/home/dmdba/dmdata 改为/data
-- 修改后执行命令查看是否修改完全,防止遗漏
[dmdba@localhost bin]$ cat /home/dmdba/dmdata/DAMENG/dmctl.txt |grep /home/dmdba/dmdata
[dmdba@localhost bin]$ cat /home/dmdba/dmdata/DAMENG/dmctl.txt |grep /data
fil_path=/data/DAMENG/SYSTEM.DBF
fil_path=/data/DAMENG/ROLL.DBF
fil_path=/data/DAMENG/DAMENG01.log
fil_path=/data/DAMENG/DAMENG02.log
fil_path=/data/DAMENG/MAIN.DBF
fil_path=/data/DAMENG/TEST.DBF
htspath=/data/DAMENG/HMAIN
6更新控制文件
可删除原来的dm.ctl文件或者移除。将修改完的文件文件恢复成新的控制文件
[dmdba@localhost bin]$ mv /home/dmdba/dmdata/DAMENG/dm.ctl /home/dmdba/dmdata/DAMENG/dm.ctl_bak
[dmdba@localhost bin]$ ./dmctlcvt TYPE=2 SRC=/home/dmdba/dmdata/DAMENG/dmctl.txt DEST=/home/dmdba/dmdata/DAMENG/dm.ctl
DMCTLCVT V7.6.1.74-Build(2020.10.22-128627)ENT
convert txt to ctl success!
7修改配置文件
修改dm.ini文件,将配置文件中涉及原路径的参数也修改为新的路径。这里是将/home/dmdba/dmdata 改为/data
[dmdba@localhost bin]$ cat /home/dmdba/dmdata/DAMENG/dm.ini |grep /home/dmdba/dmdata
CTL_PATH = /home/dmdba/dmdata/DAMENG/dm.ctl #ctl file path
CTL_BAK_PATH = /home/dmdba/dmdata/DAMENG/ctl_bak #dm.ctl backup path
SYSTEM_PATH = /home/dmdba/dmdata/DAMENG #system path
CONFIG_PATH = /home/dmdba/dmdata/DAMENG #config path
TEMP_PATH = /home/dmdba/dmdata/DAMENG #temporary file path
BAK_PATH = /home/dmdba/dmdata/DAMENG/bak #backup file path
[dmdba@localhost bin]$ vi /home/dmdba/dmdata/DAMENG/dm.ini
[dmdba@localhost bin]$ cat /home/dmdba/dmdata/DAMENG/dm.ini |grep /home/dmdba/dmdata
[dmdba@localhost bin]$ cat /home/dmdba/dmdata/DAMENG/dm.ini |grep /data
CTL_PATH = /data/DAMENG/dm.ctl #ctl file path
CTL_BAK_PATH = /data/DAMENG/ctl_bak #dm.ctl backup path
SYSTEM_PATH = /data/DAMENG #system path
CONFIG_PATH = /data/DAMENG #config path
TEMP_PATH = /data/DAMENG #temporary file path
BAK_PATH = /data/DAMENG/bak #backup file path
[dmdba@localhost bin]$
8复制目录到新的路径下
修改完后将原路径下的整个文件复制到新的目录下,注意权限问题
cp -r /home/dmdba/dmdata/DAMENG /data/.
9修改服务启动脚本
可以重新注册服务,也可以修改服务启动脚本
[dmdba@localhost ~]$ vi /home/dmdba/dmdbms/bin/DmServiceDMSERVER
-- 将INI_PATH参数路径改成现在的路径
[dmdba@localhost ~]$ cat /home/dmdba/dmdbms/bin/DmServiceDMSERVER |grep /data
INI_PATH="/data/DAMENG/dm.ini"
10重启数据库,验证数据
[dmdba@localhost bin]$ ./DmServiceDMSERVER start
Starting DmServiceDMSERVER: [ OK ]
[dmdba@localhost bin]$ ./disql SYSDBA/SYSDBA
Server[LOCALHOST:5236]:mode is normal, state is open
login used time: 26.322(ms)
disql V7.6.1.74-Build(2020.10.22-128627)ENT
SQL> select * from TEST.TESTTABLE;
LINEID A1 A2
---------- ----------- ----------
1 1 第一条数据
2 2 第二条数据
3 3 第三条数据
4 4 第四条数据
5 5 第五条数据
used time: 8.621(ms). Execute id is 3.
SQL> select file_id,file_name,tablespace_name from dba_data_files;
LINEID FILE_ID FILE_NAME TABLESPACE_NAME
---------- ----------- ----------------------- ---------------
1 0 /data/DAMENG/SYSTEM.DBF SYSTEM
2 0 /data/DAMENG/TEST.DBF TEST
3 0 /data/DAMENG/MAIN.DBF MAIN
4 0 /data/DAMENG/TEMP.DBF TEMP
5 0 /data/DAMENG/ROLL.DBF ROLL
used time: 84.452(ms). Execute id is 4.
达梦技术社区:https://eco.dameng.com