修改表空间数据文件位置
由于各种原因,有时需要修改数据库数据文件的数据文件位置,在达梦数据库中,可以通过以下方式移动表空间的数据文件位置。
磁盘目录如下:
[dmdba@CentOS7 DAMENG]$ df -hl文件系统 容量 已用 可用 已用% 挂载点/dev/mapper/centos-root 27G 6.9G 21G 26%devtmpfs 977M 0 977M 0% devtmpfs 993M 0 993M 0% dev/shmtmpfs 993M 9.1M 984M 1% runtmpfs 993M 0 993M 0% sys/fs/cgroup/dev/sdc1 9.8G 37M 9.2G 1% data2/dev/sdb1 9.8G 5.0G 4.3G 54% data1/dev/sda1 1014M 161M 854M 16% boottmpfs 199M 12K 199M 1% run/user/42tmpfs 199M 0 199M 0% run/user/0
创建表空间:
SQL> CREATE TABLESPACE "DMTEST" DATAFILE '/data1/DAMENG/DMTEST1.DBF' SIZE 128 AUTOEXTEND ON NEXT 100 MAXSIZE 10240, '/data1/DAMENG/DMTEST2.DBF' SIZE 128 AUTOEXTEND ON NEXT 100 MAXSIZE 10240 CACHE = NORMAL;操作已执行已用时间: 48.318(毫秒). 执行号:603.SQL> CREATE TABLESPACE "DMTEST_IDX" DATAFILE '/data1/DAMENG/DMTEST_IDX.DBF' SIZE 128 AUTOEXTEND ON NEXT 100 MAXSIZE 10240 CACHE = NORMAL;操作已执行已用时间: 30.889(毫秒). 执行号:604.
创建用户,并指定默认表空间
SQL> CREATE USER "DMUSER" IDENTIFIED BY "Dameng123" LIMIT FAILED_LOGIN_ATTEMPS 3, PASSWORD_LOCK_TIME 1, PASSWORD_GRACE_TIME 10 DEFAULT TABLESPACE "DMTEST" DEFAULT INDEX TABLESPACE "DMTEST_IDX";操作已执行已用时间: 22.630(毫秒). 执行号:608.SQL> GRANT "PUBLIC","RESOURCE","VTI" TO "DMUSER";操作已执行已用时间: 4.031(毫秒). 执行号:609.
切换为"DMUSER"用户,创建测试表,插入数据
SQL> conn DMUSER/Dameng123;服务器[LOCALHOST:5236]:处于普通打开状态登录使用时间 : 3.305(ms)SQL> select user;行号 USER()---------- ------1 DMUSER已用时间: 3.300(毫秒). 执行号:700.SQL> create table t1 (id int,name varchar2(10));操作已执行已用时间: 23.471(毫秒). 执行号:610.SQL> insert into t1 values (1,'aa');影响行数 1已用时间: 1.078(毫秒). 执行号:611.SQL> insert into t1 values (2,'bb');影响行数 1已用时间: 0.719(毫秒). 执行号:612.SQL> insert into t1 values (3,'cc');影响行数 1已用时间: 0.877(毫秒). 执行号:613.SQL> commit;操作已执行已用时间: 15.812(毫秒). 执行号:614.SQL> select * from t1;行号 ID NAME---------- ----------- ----1 1 aa2 2 bb3 3 cc已用时间: 1.418(毫秒). 执行号:615.
✦方法一(数据库运行时)✦
1.将表空间脱机
(1)查看表空间信息
a.查看表空间类型和状态(STATUS为0时是联机状态,为1时是脱机状态)
SQL> select tablespace_name,status,contents from dba_tablespaces;行号 TABLESPACE_NAME STATUS CONTENTS---------- --------------- ----------- ---------1 SYSTEM 0 PERMANENT2 ROLL 0 UNDO3 TEMP 0 TEMPORARY4 MAIN 0 PERMANENT5 DMTEST 0 PERMANENT6 DMTEST_IDX 0 PERMANENT7 HMAIN NULL PERMANENT7 rows got已用时间: 2.579(毫秒). 执行号:902.
b.查询表空间的路径
SQL> select file_id,file_name,tablespace_name from dba_data_files;行号 FILE_ID FILE_NAME TABLESPACE_NAME---------- ----------- ---------------------------- ---------------1 0 data1/DAMENG/SYSTEM.DBF SYSTEM2 0 data1/DAMENG/DMTEST_IDX.DBF DMTEST_IDX3 1 data1/DAMENG/DMTEST2.DBF DMTEST4 0 data1/DAMENG/DMTEST1.DBF DMTEST5 0 data1/DAMENG/MAIN.DBF MAIN6 0 data1/DAMENG/TEMP.DBF TEMP7 0 data1/DAMENG/ROLL.DBF ROLL7 rows got已用时间: 160.184(毫秒). 执行号:903.
(2)当有事务未提交时,将表空间脱机时会报以下错误
SQL> ALTER TABLESPACE "DMTEST" OFFLINE;ALTER TABLESPACE "DMTEST" OFFLINE;[-6407]:锁超时.已用时间: 00:00:12.020. 执行号:0.
(3)确保当前用户有修改表空间的权限,否则会报以下错误
SQL> ALTER TABLESPACE "DMTEST" OFFLINE;ALTER TABLESPACE "DMTEST" OFFLINE;第1 行附近出现错误[-5566]:没有修改表空间权限.已用时间: 0.809(毫秒). 执行号:0.
(4)正常执行表空间脱机操作
SQL> ALTER TABLESPACE "DMTEST" OFFLINE;操作已执行已用时间: 115.977(毫秒). 执行号:904.SQL> select tablespace_name,status,contents from dba_tablespaces;行号 TABLESPACE_NAME STATUS CONTENTS---------- --------------- ----------- ---------1 SYSTEM 0 PERMANENT2 ROLL 0 UNDO3 TEMP 0 TEMPORARY4 MAIN 0 PERMANENT5 DMTEST 1 PERMANENT6 DMTEST_IDX 0 PERMANENT7 HMAIN NULL PERMANENT7 rows got已用时间: 2.267(毫秒). 执行号:905.
2.修改表空间路径
SQL> alter tablespace "DMTEST" rename datafile '/data1/DAMENG/DMTEST1.DBF' to '/data2/DAMENG/DMTEST1.DBF';操作已执行已用时间: 00:00:03.706. 执行号:906.SQL> select file_id,file_name,tablespace_name from dba_data_files;行号 FILE_ID FILE_NAME TABLESPACE_NAME---------- ----------- ---------------------------- ---------------1 0 data1/DAMENG/SYSTEM.DBF SYSTEM2 0 data1/DAMENG/DMTEST_IDX.DBF DMTEST_IDX3 1 /data1/DAMENG/DMTEST2.DBF DMTEST4 0 /data2/DAMENG/DMTEST1.DBF DMTEST5 0 /data1/DAMENG/MAIN.DBF MAIN6 0 /data1/DAMENG/TEMP.DBF TEMP7 0 /data1/DAMENG/ROLL.DBF ROLL7 rows got已用时间: 11.366(毫秒). 执行号:907.
3.将表空间联机
SQL> ALTER TABLESPACE "DMTEST" ONLINE;操作已执行已用时间: 29.277(毫秒). 执行号:910.SQL> select tablespace_name,status,contents from dba_tablespaces;行号 TABLESPACE_NAME STATUS CONTENTS---------- --------------- ----------- ---------1 SYSTEM 0 PERMANENT2 ROLL 0 UNDO3 TEMP 0 TEMPORARY4 MAIN 0 PERMANENT5 DMTEST 0 PERMANENT6 DMTEST_IDX 0 PERMANENT7 HMAIN NULL PERMANENT7 rows got已用时间: 1.012(毫秒). 执行号:911.
4.查看服务器上的数据文件位置是否移动
数据文件已经移动到了/data2/DAMENG/目录下

原/data1/DAMENG/目录下已经只剩DMTEST2.DBF数据文件

5.查看表数据正常
SQL> select * from t1;行号 ID NAME---------- ----------- ----1 1 aa2 2 bb3 3 cc已用时间: 0.634(毫秒). 执行号:401.
☆方法二(停止数据库服务时)☆
1.停止数据库服务
[dmdba@CentOS7 bin]$ ./DmServiceDMSERVER stopStopping DmServiceDMSERVER: [ OK ]
2.修改数据库控制文件
(1)将数据库转换控制文件为文本文件
[dmdba@CentOS7 bin]$ ./dmctlcvt TYPE=1 SRC=/data1/DAMENG/dm.ctl DEST=/data1/DAMENG/dmctl.txtDMCTLCVT V8convert ctl to txt success!
(2)修改转换后的txt文件
a.打开txt文件可以发现DMTEST1.DBF已经在方法一中修改过了,DMTEST1.DBF和DMTEST2.DBF路径不同,本次修改DMTEST2.DBF的路径

b.修改后的DMTEST2.DBF路径如下

# file pathfil_path=/data2/DAMENG/DMTEST1.DBF# mirror pathmirror_path=# file idfil_id=0# whether the file is auto extendautoextend=1# file create timefil_create_time=DATETIME '2021-2-21 14:24:53'# file modify timefil_modify_time=DATETIME '2021-2-21 15:2:15'# the max size of filefil_max_size=0# next size of filefil_next_size=0# file pathfil_path=/data2/DAMENG/DMTEST2.DBF# mirror pathmirror_path=# file idfil_id=1# whether the file is auto extendautoextend=1# file create timefil_create_time=DATETIME '2021-2-21 14:24:53'# file modify timefil_modify_time=DATETIME '2021-2-21 14:24:53'# the max size of filefil_max_size=10240# next size of filefil_next_size=100
(3)将数据库转换后的txt文本文件转换为控制文件
[dmdba@CentOS7 bin]$ ./dmctlcvt TYPE=2 SRC=/data1/DAMENG/dmctl.txt DEST=/data1/DAMENG/dm.ctlDMCTLCVT V8convert txt to ctl success!
3.使用Linux命令修改数据文件物理位置
[dmdba@CentOS7 ~]$ mv /data1/DAMENG/DMTEST2.DBF /data2/DAMENG/
4.启动数据库服务
[dmdba@CentOS7 bin]$ ./DmServiceDMSERVER startStarting DmServiceDMSERVER: [ OK ]
5.查看表数据正常
SQL> select * from t1;行号 ID NAME---------- ----------- ----1 1 aa2 2 bb3 3 cc已用时间: 0.336(毫秒). 执行号:402.
6.查看表空间信息
a.查询表空间的路径

b.查看表空间类型和状态

注意:临时表空间路径无法在数据库服务启动时修改,无法执行联机脱机操作。在数据库服务停止时,如果要修改临时表空间数据文件的路径,无需修改控制文件,因为在控制文件中并没有保存临时表空间的路径信息。临时表空间的路径信息在dm.ini中修改,在dm.ini中有一个参数为:TEMP_PATH,默认路径为数据库目录下

修改临时表空间路径直接修改dm.ini参数TEMP_PATH,修改完后重启数据库服务即可。
以上是本次干货攻略的分享内容,希望能给大家带来帮助,谢谢。
>>>>>>>>>>>> THE END <<<<<<<<<<<<





内容丨胡泽群
编辑丨大大
校对丨林夕





