在之前的博客我们测试了表空间相关的内容,如下:
DM 达梦数据库 临时表空间 管理说明
https://www.cndba.cn/dave/article/4315DM7 达梦数据库 表空间 管理 说明
https://www.cndba.cn/dave/article/3569DM7 达梦数据库 误删数据文件 恢复方法
https://www.cndba.cn/cndba/dave/article/3570
对于达梦数据库,TEMP 临时表空间是DB自己维护的,我们不用单独管理。 对于业务表空间的数据库,我们可以直接改变其存储路径,比如当磁盘空间不足时,将数据文件转移到其他磁盘目录中。
操作方法有两种:
1)使用SQL,将表空间离线,rename 数据文件路径,在online 表空间。 该方法同Oracle 12c 之前的版本操作一致,但不需要物理移动数据文件。 Oracle 也是到12c 以后才支持在线移动数据文件。
2)停库,移动数据文件,重建控制。 因为数据文件的路径记录在控制文件, 该方法具体操作参考之前的博客:
DM7 达梦数据库 查看并重建控制文件 操作示例
https://www.cndba.cn/dave/article/3574
我们这里演示第一种方法,使用SQL语句来操作。
创建表空间:
[dave@www.cndba.cn ~]$ disql SYSDBA/SYSDBA@127.0.0.1:6236
服务器[127.0.0.1:6236]:处于普通打开状态
登录使用时间 : 3.798(ms)
disql V8
SQL> select tablespace_name, file_name, status from dba_data_files order by 1;
行号 TABLESPACE_NAME FILE_NAME STATUS
---------- --------------- -------------------------------- ---------
1 MAIN /dm/dmdbms/data/cndba/MAIN.DBF AVAILABLE
2 ROLL /dm/dmdbms/data/cndba/ROLL.DBF AVAILABLE
3 SYSTEM /dm/dmdbms/data/cndba/SYSTEM.DBF AVAILABLE
4 TEMP /dm/dmdbms/data/TEMP.DBF AVAILABLE
已用时间: 13.062(毫秒). 执行号:204.
SQL> create tablespace dave datafile '/dm/dmdbms/data/cndba/dave01.DBF' size 32, '/dm/dmdbms/data/cndba/dave02.DBF' size 32;
操作已执行
已用时间: 44.174(毫秒). 执行号:205.
SQL> select tablespace_name, file_name, status from dba_data_files order by 1;
行号 TABLESPACE_NAME FILE_NAME STATUS
---------- --------------- -------------------------------- ---------
1 DAVE /dm/dmdbms/data/cndba/dave01.DBF AVAILABLE
2 DAVE /dm/dmdbms/data/cndba/dave02.DBF AVAILABLE
3 MAIN /dm/dmdbms/data/cndba/MAIN.DBF AVAILABLE
4 ROLL /dm/dmdbms/data/cndba/ROLL.DBF AVAILABLE
5 SYSTEM /dm/dmdbms/data/cndba/SYSTEM.DBF AVAILABLE
6 TEMP /dm/dmdbms/data/TEMP.DBF AVAILABLE
6 rows got
已用时间: 1.171(毫秒). 执行号:206.
SQL>
[dave@www.cndba.cn cndba]$ ls -l /dm/dmdbms/data/cndba/dave0*
-rw-r--r-- 1 dmdba dinstall 33554432 12月 15 21:09 /dm/dmdbms/data/cndba/dave01.DBF
-rw-r--r-- 1 dmdba dinstall 33554432 12月 15 21:09 /dm/dmdbms/data/cndba/dave02.DBF
[dave@www.cndba.cn cndba]$
OFFLINE表空间并移动数据文件位置:
SQL> alter tablespace dave offline;
操作已执行
已用时间: 84.568(毫秒). 执行号:706.
SQL> alter tablespace dave rename datafile '/dm/dmdbms/data/cndba/dave01.DBF' to '/dm/dave01.dbf';
操作已执行
已用时间: 51.262(毫秒). 执行号:707.
SQL> alter tablespace dave rename datafile '/dm/dmdbms/data/cndba/dave02.DBF' to '/dm/dave02.dbf';
操作已执行
已用时间: 46.731(毫秒). 执行号:708.
SQL> alter tablespace dave online;
操作已执行
已用时间: 2.225(毫秒). 执行号:709.
SQL> select tablespace_name, file_name, status from dba_data_files order by 1;
行号 TABLESPACE_NAME FILE_NAME STATUS
---------- --------------- -------------------------------- ---------
1 DAVE /dm/dave01.dbf AVAILABLE
2 DAVE /dm/dave02.dbf AVAILABLE
3 MAIN /dm/dmdbms/data/cndba/MAIN.DBF AVAILABLE
4 ROLL /dm/dmdbms/data/cndba/ROLL.DBF AVAILABLE
5 SYSTEM /dm/dmdbms/data/cndba/SYSTEM.DBF AVAILABLE
6 TEMP /dm/dmdbms/data/TEMP.DBF AVAILABLE
6 rows got
已用时间: 1.422(毫秒). 执行号:710.
SQL>
注意这里的rename 即修改控制文件,也进行物理操作,不再需要单独在操作系统上移动数据文件:
[dave@www.cndba.cn cndba]$ ls -l /dm/dmdbms/data/cndba/dave0*
ls: 无法访问/dm/dmdbms/data/cndba/dave0*: 没有那个文件或目录
[dave@www.cndba.cn cndba]$ ls -l /dm/dave*
-rw-r--r-- 1 dmdba dinstall 33554432 12月 15 21:11 /dm/dave01.dbf
-rw-r--r-- 1 dmdba dinstall 33554432 12月 15 21:11 /dm/dave02.dbf
[dave@www.cndba.cn cndba]$
这里除了TEMP、SYSTEM 、ROLL 三个系统表空间不能移动之外,其他表空间都可以移动:
SQL> alter tablespace SYSTEM offline;
alter tablespace SYSTEM offline;
第1 行附近出现错误[-3409]:表空间[SYSTEM]不能置为脱机状态.
已用时间: 0.298(毫秒). 执行号:0.
SQL> alter tablespace roll offline;
alter tablespace roll offline;
第1 行附近出现错误[-3409]:表空间[ROLL]不能置为脱机状态.
已用时间: 0.318(毫秒). 执行号:0.
SQL> alter tablespace temp offline;
alter tablespace temp offline;
第1 行附近出现错误[-3409]:表空间[TEMP]不能置为脱机状态.
已用时间: 0.252(毫秒). 执行号:0.
SQL>
MAIN表空间进行测试:
SQL> alter tablespace MAIN offline;
操作已执行
已用时间: 86.206(毫秒). 执行号:323.
SQL> alter tablespace MAIN rename datafile '/dm/dmdbms/data/cndba/MAIN.DBF' to '/dm/MAIN.DBF';
操作已执行
已用时间: 155.364(毫秒). 执行号:324.
SQL> alter tablespace MAIN online;
操作已执行
已用时间: 2.917(毫秒). 执行号:325.
SQL>
SQL> select tablespace_name, file_name, status from dba_data_files order by 1;
行号 TABLESPACE_NAME FILE_NAME STATUS
---------- --------------- -------------------------------- ---------
1 DAVE /dm/dave01.dbf AVAILABLE
2 DAVE /dm/dave02.dbf AVAILABLE
3 MAIN /dm/MAIN.DBF AVAILABLE
4 ROLL /dm/dmdbms/data/cndba/ROLL.DBF AVAILABLE
5 SYSTEM /dm/dmdbms/data/cndba/SYSTEM.DBF AVAILABLE
6 TEMP /dm/dmdbms/data/TEMP.DBF AVAILABLE
6 rows got
已用时间: 1.422(毫秒). 执行号:710.
SQL>
[dave@www.cndba.cn cndba]$ ls -l /dm/MAIN*
-rw-r--r-- 1 dmdba dinstall 134217728 12月 15 20:52 /dm/MAIN.DBF
[dave@www.cndba.cn cndba]$
另外需要注意一点,数据文件不能移动到/tmp 目录下,虽然移动到/tmp 下不影响运行,也可以通过dba_data_files查询到路径,但是在操作系统级别通过ls 命令无法查找到文件,这点需要留意。
版权声明:本文为博主原创文章,未经博主允许不得转载。