达梦数据库修改表空间数据文件位置

由于各种原因,有时需要修改数据库数据文件的位置

在达梦数据库中,可以通过以下方式移动表空间的数据文件位置。

 磁盘目录如下:

[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,修改完后重启数据库服务即可

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

保定公民

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值