暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

【干货攻略】修改表空间数据文件位置

达梦大学 2021-03-17
633


修改表空间数据文件位置



由于各种原因,有时需要修改数据库数据文件的数据文件位置,在达梦数据库中,可以通过以下方式移动表空间的数据文件位置。


磁盘目录如下:

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

                                        以上是本次干货攻略的分享内容,希望能给大家带来帮助,谢谢。


                                         >>>>>>>>>>>> THE END <<<<<<<<<<<<


                                        内容丨胡泽群

                                        编辑丨大大

                                        校对丨林夕

                                        文章转载自达梦大学,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                        评论