达梦(DM)数据库的表空间创建和迁移维护

达梦(DM)数据库的表空间创建和迁移维护

原创 国内数据库 作者:justin_zh 时间:2020-07-10 22:42:11  122  0

环境:centos 6,  数据库版本 DM8

 

在达梦数据库安装好后,运维层面首先面临的就是数据文件的管理,创建表空间和用户,以及维护。对于达梦小白来说,以下操作是需要熟知的:

1.查看当前数据库的数据文件和表空间情况

1

2

3

4

5

6

7

8

9

10

11

12

13

14

SQL> select file_name,file_id,tablespace_name,status,bytes/1024/1024 MB

2   from dba_data_files 

3   order by tablespace_name,file_id;

LINEID     FILE_NAME                            FILE_ID     TABLESPACE_NAME STATUS    MB                  

---------- ------------------------------------ ----------- --------------- --------- --------------------

1          /u01/dmdbms/data/DAMORG/BOOKSHOP.DBF 0           BOOKSHOP        AVAILABLE 150

2          /u01/dmdbms/data/DAMORG/DMHR.DBF     0           DMHR            AVAILABLE 128

3          /u01/dmdbms/data/DAMORG/MAIN.DBF     0           MAIN            AVAILABLE 128

4          /u01/dmdbms/data/DAMORG/ROLL.DBF     0           ROLL            AVAILABLE 128

5          /u01/dmdbms/data/DAMORG/SYSAWR.DBF   0           SYSAUX          AVAILABLE 128

6          /u01/dmdbms/data/DAMORG/SYSTEM.DBF   0           SYSTEM          AVAILABLE 24

7          /u01/dmdbms/data/DAMORG/TEMP.DBF     0           TEMP            AVAILABLE 10

rows got

used time: 9.784(ms). Execute id is 7.

2.创建一个用户表空间,但是达梦数据库有个限制,比如我们想创建一个31M的表空间,会怎样呢?

1

2

3

4

SQL> create tablespace test_tbs datafile '/u01/dmdbms/data/DAMORG/TEST_TBS.DBF' size 31;

create tablespace test_tbs datafile '/u01/dmdbms/data/DAMORG/TEST_TBS.DBF' size 31;

[-2410]:Error in line: 1

Data file [/u01/dmdbms/data/DAMORG/TEST_TBS.DBF] size is invalid.

  可以看到有报错,原来达梦数据库要求表空间的最小大小为页大小的4096倍,那么根据我本地的环境检查:

1

2

3

4

5

SQL> select page     

2   ;

LINEID     PAGE       

---------- -----------

1          8192

那么也就是说,表空间最小也要有4096*8/1024  ,也就是32MB,那我们实现一下:

1

2

3

4

5

6

7

8

9

10

11

12

13

SQL> create tablespace test_tbs datafile '/u01/dmdbms/data/DAMORG/TEST_TBS.DBF' size 32 autoextend on next 2 maxsize 300,'/u01/dmdbms/data/DAMORG/TEST_TBS_2.DBF' size 32 autoextend on next 2 maxsize 300;

executed successfully

used time: 241.076(ms). Execute id is 11.

SQL> select sf_get_extent_size;

LINEID     SF_GET_EXTENT_SIZE

---------- ------------------

1          16

used time: 0.612(ms). Execute id is 12.

SQL> select 16*8;

LINEID     16*8       

---------- -----------

1          128

used time: 0.461(ms). Execute id is 13.

 上面表空间添加了两个32M数据库文件,单词簇的扩展为2M,最大文件限制为300mb. 同时,贴出了默认的簇扩展单位为16个页的大小,换算为16*8kb=128kb,可以看到默认是比较小的。故而,针对大量的数据更新的表空间,建议修改较大的簇扩展单位,否则会造成性能问题。

 

3.有了表空间,那么创建测试用户。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

SQL> create user dm_test identified by dmabctest123;

executed successfully

used time: 25.712(ms). Execute id is 14.

SQL> alter user dm_test identified by "dmtest123" default tablespace test_tbs;

executed successfully

used time: 19.666(ms). Execute id is 16.

SQL> grant  create table to dm_test;

executed successfully

used time: 8.990(ms). Execute id is 17.

SQL> grant select on dmhr.city to dm_test;

executed successfully

used time: 10.241(ms). Execute id is 18.

SQL> conn dm_test/dmtest123 

Server[LOCALHOST:5236]:mode is normal, state is open

login used time: 3.326(ms)

SQL> create table mytable as select from dmhr.city;

executed successfully

used time: 34.005(ms). Execute id is 19.

SQL> select from mytable;

LINEID     CITY_ID CITY_NAME REGION_ID  

---------- ------- --------- -----------

1          BJ      北京    1

2          SJZ     石家庄 1

3          SH      上海    2

4          NJ      南京    2

5          GZ      广州    3

6          HK      海口    3

7          WH      武汉    4

8          CS      长沙    4

9          SY      沈阳    5

10         XA      西安    6

11         CD      成都    7

11 rows got

used time: 1.096(ms). Execute id is 20.

SQL> select TABLE_NAME , TABLESPACE_NAME  from user_tables;

LINEID     TABLE_NAME TABLESPACE_NAME

---------- ---------- ---------------

1          MYTABLE    TEST_TBS

used time: 60.026(ms). Execute id is 22.

  以上操作比较简单,创建用户,赋权并创建表,最后检查确认。

 

4.完成了基本操作,那么日常中还涉及到更换存储,也就是更改DM数据库数据文件的位置,是如何实现的呢?

   下面我具体实验一下,具体包括业务数据文件,日志文件,系统表空间迁移,回滚表空间迁移,临时表空间迁移,控制文件迁移。

 

首先是业务数据文件,数据库无需要归档模式,停该表空间上业务先,之后如下操作:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

创建一个新目录NEWLOC,假定为迁移后的目录,我们迁移部分业务数据到上面来模拟。

[dmdba@dm8serv data]$ mkdir NEWLOC

[dmdba@dm8serv data]$ pwd

/u01/dmdbms/data

[dmdba@dm8serv data]$ cd N*

[dmdba@dm8serv NEWLOC]$ pwd

/u01/dmdbms/data/NEWLOC

[dmdba@dm8serv NEWLOC]$ disql sysdba/adminabc123

修改数据库为非归档模式,其实归档模式也一样的。

Server[LOCALHOST:5236]:mode is normal, state is open

login used time: 3.170(ms)

disql V8

SQL> alter database mount;

executed successfully

used time: 00:00:01.807. Execute id is 0.

SQL> alter database noarchivelog;

executed successfully

used time: 39.900(ms). Execute id is 0.

SQL> alter database open;

executed successfully

used time: 00:00:01.763. Execute id is 0.

停该表空间上的业务操作后,执行:

SQL> alter tablespace TEST_TBS offline;

executed successfully

used time: 147.375(ms). Execute id is 25.

SQL> select dm_test.mytable;

select dm_test.mytable;

[-2207]:Error in line: 1

Member access [DM_TEST.MYTABLE] unresolved.

used time: 0.701(ms). Execute id is 0.

SQL> alter tablespace TEST_TBS rename datafile '/u01/dmdbms/data/DAMORG/TEST_TBS.DBF' to '/u01/dmdbms/data/NEWLOC/TEST_TBS.DBF';

executed successfully

used time: 138.737(ms). Execute id is 26.

SQL> alter tablespace TEST_TBS rename datafile '/u01/dmdbms/data/DAMORG/TEST_TBS_2.DDBF' to '/u01/dmdbms/data/NEWLOC/TEST_TBS_2.DBF'

executed successfully

used time: 551.366(ms). Execute id is 29.

SQL> alter tablespace test_tbs online;

executed successfully

used time: 37.490(ms). Execute id is 30.

SQL> select from dm_test.mytable;

LINEID     CITY_ID CITY_NAME REGION_ID  

---------- ------- --------- -----------

1          BJ      北京    1

2          SJZ     石家庄 1

3          SH      上海    2

4          NJ      南京    2

5          GZ      广州    3

6          HK      海口    3

7          WH      武汉    4

8          CS      长沙    4

9          SY      沈阳    5

10         XA      西安    6

11         CD      成都    7

11 rows got

used time: 0.829(ms). Execute id is 31.

上述就是在线迁移数据库业务表空间的过程,注意不需要手工移动文件,DM数据库会自动进行先拷贝,然后校验,最后删除源文件的操作。这里需要注意和ORACLE数据库的区别。

 

日志文件呢 ?我们继续进行迁移日志文件操作的演示:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

[dmdba@dm8serv DAMORG]$ disql sysdba/adminabc123

Server[LOCALHOST:5236]:mode is normal, state is open

login used time: 4.119(ms)

disql V8

查看原有路径和大小

SQL> select group_id,file_id, path, rlog_size/1024/1024 MB from v$rlogfile;

LINEID     GROUP_ID    FILE_ID     PATH                                 MB                  

---------- ----------- ----------- ------------------------------------ --------------------

1          2           0           /u01/dmdbms/data/DAMORG/DAMORG01.log 256

2          2           1           /u01/dmdbms/data/DAMORG/DAMORG02.log 256

used time: 1.138(ms). Execute id is 34.

SQL> 

创建目录,模拟移动位置

[dmdba@dm8serv DAMORG]$ mkdir REDO

[dmdba@dm8serv DAMORG]$ cd REDO

[dmdba@dm8serv REDO]$ ls

[dmdba@dm8serv REDO]$ pwd

/u01/dmdbms/data/DAMORG/REDO

修改日志文件需要改数据库到mount模式,在MOUNT模式下通过如下命令修改

[dmdba@dm8serv REDO]$ disql sysdba/adminabc123

Server[LOCALHOST:5236]:mode is normal, state is open

login used time: 3.132(ms)

disql V8

SQL> alter database mount

2   ;

executed successfully

used time: 00:00:01.780. Execute id is 0.

SQL> alter database rename logfile '/u01/dmdbms/data/DAMORG/DAMORG01.log' to '/u01/dmdbms/data/DAMORG/REDO/DAMORG01.log';

executed successfully

used time: 00:00:02.871. Execute id is 36.

SQL> alter database rename logfile '/u01/dmdbms/data/DAMORG/DAMORG02.log' to '/u01/dmdbms/data/DAMORG/REDO/DAMORG02.log';

executed successfully

used time: 00:00:01.121. Execute id is 37.

SQL> alter database open;

executed successfully

used time: 00:00:01.748. Execute id is 0.

校验一下结果:

SQL> select group_id,file_id, path, rlog_size/1024/1024 MB from v$rlogfile;

LINEID     GROUP_ID    FILE_ID     PATH                                      MB                  

---------- ----------- ----------- ----------------------------------------- --------------------

1          2           0           /u01/dmdbms/data/DAMORG/REDO/DAMORG01.log 256

2          2           1           /u01/dmdbms/data/DAMORG/REDO/DAMORG02.log 256

used time: 0.948(ms). Execute id is 38.

校验完毕。

 

如果我们需要修改SYSTEM,ROLL表空间呢,这个就相对麻烦了,不能只依赖disql环境了,而且需要停库操作。

演示如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

将控制文件信息转换文本操作:

[dmdba@dm8serv DAMORG]$ dmctlcvt type=1 src=/u01/dmdbms/data/DAMORG/dm.ctl dest=/u01/dmdbms/data/DAMORG/dmcontrol.txt

DMCTLCVT V8

convert ctl to txt success!

修改文本中相关的内容:

[dmdba@dm8serv DAMORG]$ vi  dmcontrol.txt 

##############################################################################

## please do not adjust parameter order, ensure the ctl have no difference ###

##########################################################################

......

fil_path=/u01/dmdbms/data/NEWLOC/SYSTEM.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 '2020-6-17 15:20:18'

# file modify time

fil_modify_time=DATETIME '2020-6-17 15:20:18'

# the max size of file

fil_max_size=0

next size of file

fil_next_size=0

#===============================================

table space name

ts_name=ROLL

 table space ID

ts_id=1

table space status

ts_state=0

table space cache

ts_cache=

# DSC node number

ts_nth=0

table space create time

ts_create_time=DATETIME '2020-6-17 15:20:18'

table space modify time

ts_modify_time=DATETIME '2020-6-17 15:20:18'

table space encrypt flag

ts_encrypt_flag=0

table space copy num

ts_copy_num=0

table space region size flag

ts_size_flag=0

#-----------------------------------------------

# file path

fil_path=/u01/dmdbms/data/ROLL.DBF

..........

将修改fil_path后的dmcontrol.txt转换为一个新的文件

[dmdba@dm8serv DAMORG]$ dmctlcvt type=2 src=/u01/dmdbms/data/DAMORG/dmcontrol.txt dest=/u01/dmdbms/data/DAMORG/dmnew.ctl

DMCTLCVT V8

convert txt to ctl success!

关闭数据库,替换原有的控制文件,名称修改为dm.ctl

手工复制文件

[dmdba@dm8serv NEWLOC]$ mv ROLL.DBF /u01/dmdbms/data/

[dmdba@dm8serv DAMORG]$ mv SYSTEM.DBF /u01/dmdbms/data/NEWLOC/

启动DM数据库

[root@dm8serv ~]# service DmServiceDAMNEW start

Starting DmServiceDAMNEW:                                  [ OK ]

[root@dm8serv ~]# 

检查是否移动到了新的位置:

[root@dm8serv ~]# su - dmdba

[dmdba@dm8serv ~]$ disql sysdba/adminabc123

Server[LOCALHOST:5236]:mode is normal, state is open

login used time: 22.138(ms)

disql V8

SQL> select file_name,file_id,tablespace_name,status,bytes/1024/1024 MB

2   from dba_data_files 

3   order by tablespace_name,file_id;

LINEID     FILE_NAME                              FILE_ID     TABLESPACE_NAME STATUS    MB                  

---------- -------------------------------------- ----------- --------------- --------- --------------------

1          /u01/dmdbms/data/DAMORG/BOOKSHOP.DBF   0           BOOKSHOP        AVAILABLE 150

2          /u01/dmdbms/data/DAMORG/DMHR.DBF       0           DMHR            AVAILABLE 128

3          /u01/dmdbms/data/DAMORG/MAIN.DBF       0           MAIN            AVAILABLE 128

4          /u01/dmdbms/data/ROLL.DBF              0           ROLL            AVAILABLE 128

5          /u01/dmdbms/data/DAMORG/SYSAWR.DBF     0           SYSAUX          AVAILABLE 128

6          /u01/dmdbms/data/NEWLOC/SYSTEM.DBF     0           SYSTEM          AVAILABLE 24

7          /u01/dmdbms/data/DAMORG/TEMP.DBF       0           TEMP            AVAILABLE 10

8          /u01/dmdbms/data/NEWLOC/TEST_TBS.DBF   0           TEST_TBS        AVAILABLE 32

9          /u01/dmdbms/data/NEWLOC/TEST_TBS_2.DBF 1           TEST_TBS        AVAILABLE 32

rows got

 临时表空间的移动也相对特殊,需要修改参数文件,但是这个参数无法动态修改,为read only状态,只能通过修改dm.ini来实现。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

SQL> select para_name,para_value,PARA_TYPE from v$dm_ini where para_name like 'TEMP%';

LINEID     PARA_NAME        PARA_VALUE              PARA_TYPE

---------- ---------------- ----------------------- ---------

1          TEMP_PATH        /u01/dmdbms/data/DAMORG READ ONLY

2          TEMP_SIZE        10                      IN FILE

3          TEMP_SPACE_LIMIT 0                       SYS

used time: 9.587(ms). Execute id is 8.

                 

[root@dm8serv ~]# service DmServiceDAMNEW stop

Stopping DmServiceDAMNEW:                                  [ OK ]

[dmdba@dm8serv DAMORG]$ vi dm.ini

#file location of dm.ctl

                CTL_PATH                        = /u01/dmdbms/data/DAMORG/dm.ctl     #ctl file path

                CTL_BAK_PATH                    = /u01/dmdbms/data/DAMORG/ctl_bak    #dm.ctl backup path

                CTL_BAK_NUM                     = 10                       #backup number of dm.ctl, allowed to keep one more backup file besides specified number.

                SYSTEM_PATH                     = /u01/dmdbms/data/DAMORG            #system path

                CONFIG_PATH                     = /u01/dmdbms/data/DAMORG            #config path

                TEMP_PATH                       = /u01/dmdbms/data/NEWLOC            #temporary file path

                BAK_PATH                        = /u01/dmdbms/data/DAMORG/bak        #backup file path

                 

                 

进入到dm.ini文件,用编辑器修改 TEMP_PATH的路径,重启数据库后,会在新路径下自动创建临时表空间数据文件的。

[root@dm8serv ~]# service DmServiceDAMNEW start

Starting DmServiceDAMNEW:                                  [ OK ]

检查确认:

[root@dm8serv ~]# su - dmdba

[dmdba@dm8serv ~]$ disql sysdba/adminabc123

Server[LOCALHOST:5236]:mode is normal, state is open

login used time: 3.709(ms)

disql V8

SQL> select file_name,file_id,tablespace_name,status,bytes/1024/1024 MB

2   from dba_data_files 

3   order by tablespace_name,file_id;

LINEID     FILE_NAME                              FILE_ID     TABLESPACE_NAME STATUS    MB                  

---------- -------------------------------------- ----------- --------------- --------- --------------------

1          /u01/dmdbms/data/DAMORG/BOOKSHOP.DBF   0           BOOKSHOP        AVAILABLE 150

2          /u01/dmdbms/data/DAMORG/DMHR.DBF       0           DMHR            AVAILABLE 128

3          /u01/dmdbms/data/DAMORG/MAIN.DBF       0           MAIN            AVAILABLE 128

4          /u01/dmdbms/data/ROLL.DBF              0           ROLL            AVAILABLE 128

5          /u01/dmdbms/data/DAMORG/SYSAWR.DBF     0           SYSAUX          AVAILABLE 128

6          /u01/dmdbms/data/NEWLOC/SYSTEM.DBF     0           SYSTEM          AVAILABLE 24

7          /u01/dmdbms/data/NEWLOC/TEMP.DBF       0           TEMP            AVAILABLE 10

8          /u01/dmdbms/data/NEWLOC/TEST_TBS.DBF   0           TEST_TBS        AVAILABLE 32

9          /u01/dmdbms/data/NEWLOC/TEST_TBS_2.DBF 1           TEST_TBS        AVAILABLE 32

rows got

used time: 10.151(ms). Execute id is 5.

 

最后,是控制文件,想必大家都知道了,需要修改dm.ini中的文件位置,并重启数据库。

1

2

3

4

#file location of dm.ctl

                CTL_PATH                        = /dm8/data/dmdb/dm.ctl     #ctl file path

                CTL_BAK_PATH                    = /dm8/data/dmdb/ctl_bak    #dm.ctl backup path

                CTL_BAK_NUM                     = 10                       #backup number of dm.ctl, allowed to keep one more backup file besides specified number.

至此,数据库表空间维护和迁移介绍完毕,希望对大家认识达梦数据库有所帮助。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值