由于各种原因,有时需要修改数据库数据文件的位置
在达梦数据库中,可以通过以下方式移动表空间的数据文件位置。
磁盘目录如下:
[dmdba@CentOS7 DAMENG]$ df -hl
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 27G 6.9G 21G 26% /
devtmpfs 977M 0 977M 0% /dev
tmpfs 993M 0 993M 0% /dev/shm
tmpfs 993M 9.1M 984M 1% /run
tmpfs 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% /boot
tmpfs 199M 12K 199M 1% /run/user/42
tmpfs 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 aa
2 2 bb
3 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 PERMANENT
2 ROLL 0 UNDO
3 TEMP 0 TEMPORARY
4 MAIN 0 PERMANENT
5 DMTEST 0 PERMANENT
6 DMTEST_IDX 0 PERMANENT
7 HMAIN NULL PERMANENT
7 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 SYSTEM
2 0 /data1/DAMENG/DMTEST_IDX.DBF DMTEST_IDX
3 1 /data1/DAMENG/DMTEST2.DBF DMTEST
4 0 /data1/DAMENG/DMTEST1.DBF DMTEST
5 0 /data1/DAMENG/MAIN.DBF MAIN
6 0 /data1/DAMENG/TEMP.DBF TEMP
7 0 /data1/DAMENG/ROLL.DBF ROLL
7 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 PERMANENT
2 ROLL 0 UNDO
3 TEMP 0 TEMPORARY
4 MAIN 0 PERMANENT
5 DMTEST 1 PERMANENT
6 DMTEST_IDX 0 PERMANENT
7 HMAIN NULL PERMANENT
7 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 SYSTEM
2 0 /data1/DAMENG/DMTEST_IDX.DBF DMTEST_IDX
3 1 /data1/DAMENG/DMTEST2.DBF DMTEST
4 0 /data2/DAMENG/DMTEST1.DBF DMTEST
5 0 /data1/DAMENG/MAIN.DBF MAIN
6 0 /data1/DAMENG/TEMP.DBF TEMP
7 0 /data1/DAMENG/ROLL.DBF ROLL
7 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 PERMANENT
2 ROLL 0 UNDO
3 TEMP 0 TEMPORARY
4 MAIN 0 PERMANENT
5 DMTEST 0 PERMANENT
6 DMTEST_IDX 0 PERMANENT
7 HMAIN NULL PERMANENT
7 rows got
已用时间: 1.012(毫秒). 执行号:911.
4.查看服务器上的数据文件位置是否移动
数据文件已经移动到了/data2/DAMENG/目录下
原/data1/DAMENG/目录下已经只剩DMTEST2.DBF数据文件
5.查看表数据正常
SQL> select * from t1;
行号 ID NAME
---------- ----------- ----
1 1 aa
2 2 bb
3 3 cc
已用时间: 0.634(毫秒). 执行号:401.
1.停止数据库服务
[dmdba@CentOS7 bin]$ ./DmServiceDMSERVER stop
Stopping DmServiceDMSERVER: [ OK ]
2.修改数据库控制文件
(1)将数据库转换控制文件为文本文件
[dmdba@CentOS7 bin]$ ./dmctlcvt TYPE=1 SRC=/data1/DAMENG/dm.ctl DEST=/data1/DAMENG/dmctl.txt
DMCTLCVT V8
convert ctl to txt success!
(2)修改转换后的txt文件
a.打开txt文件可以发现DMTEST1.DBF已经在方法一中修改过了,DMTEST1.DBF和DMTEST2.DBF路径不同,本次修改DMTEST2.DBF的路径
b.修改后的DMTEST2.DBF路径如下
# file path
fil_path=/data2/DAMENG/DMTEST1.DBF
# mirror path
mirror_path=
# file id
fil_id=0
# whether the file is auto extend
autoextend=1
# file create time
fil_create_time=DATETIME '2021-2-21 14:24:53'
# file modify time
fil_modify_time=DATETIME '2021-2-21 15:2:15'
# the max size of file
fil_max_size=0
# next size of file
fil_next_size=0
# file path
fil_path=/data2/DAMENG/DMTEST2.DBF
# mirror path
mirror_path=
# file id
fil_id=1
# whether the file is auto extend
autoextend=1
# file create time
fil_create_time=DATETIME '2021-2-21 14:24:53'
# file modify time
fil_modify_time=DATETIME '2021-2-21 14:24:53'
# the max size of file
fil_max_size=10240
# next size of file
fil_next_size=100
(3)将数据库转换后的txt文本文件转换为控制文件
[dmdba@CentOS7 bin]$ ./dmctlcvt TYPE=2 SRC=/data1/DAMENG/dmctl.txt DEST=/data1/DAMENG/dm.ctl
DMCTLCVT V8
convert txt to ctl success!
3.使用Linux命令修改数据文件物理位置
[dmdba@CentOS7 ~]$ mv /data1/DAMENG/DMTEST2.DBF /data2/DAMENG/
4.启动数据库服务
[dmdba@CentOS7 bin]$ ./DmServiceDMSERVER start
Starting DmServiceDMSERVER: [ OK ]
5.查看表数据正常
SQL> select * from t1;
行号 ID NAME
---------- ----------- ----
1 1 aa
2 2 bb
3 3 cc
已用时间: 0.336(毫秒). 执行号:402.
6.查看表空间信息
a.查询表空间的路径
b.查看表空间类型和状态
注意:临时表空间路径无法在数据库服务启动时修改,无法执行联机脱机操作。在数据库服务停止时,如果要修改临时表空间数据文件的路径,无需修改控制文件,因为在控制文件中并没有保存临时表空间的路径信息。临时表空间的路径信息在dm.ini中修改,在dm.ini中有一个参数为:TEMP_PATH,默认路径为数据库目录下
修改临时表空间路径直接修改dm.ini参数TEMP_PATH,修改完后重启数据库服务即可
欢迎关注我的博客《Jackin's Blog - 知识改变命运》学习分享更多知识