mysql建表语句转达梦_达梦(DM)数据库的表空间创建和迁移维护
环境:centos 6, 数据库版本 DM8
在达梦数据库安装好后,运维层面首先面临的就是数据文件的管理,创建表空间和用户,以及维护。对于达梦小白来说,以下操作是需要熟知的:
1.查看当前数据库的数据文件和表空间情况
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
7 rows got
used time: 9.784(ms). Execute id is 7.
2.创建一个用户表空间,但是达梦数据库有个限制,比如我们想创建一个31M的表空间,会怎样呢?
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倍,那么根据我本地的环境检查:
SQL> select page
2 ;
LINEID PAGE
---------- -----------
1 8192
那么也就是说,表空间最小也要有4096*8/1024 ,也就是32MB,那我们实现一下:
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.有了表空间,那么创建测试用户。
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数据库数据文件的位置,是如何实现的呢?
下面我具体实验一下,具体包括业务数据文件,日志文件,系统表空间迁移,回滚表空间迁移,临时表空间迁移,控制文件迁移。
首先是业务数据文件,数据库无需要归档模式,停该表空间上业务先,之后如下操作:
创建一个新目录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数据库的区别。
日志文件呢 ?我们继续进行迁移日志文件操作的演示:
[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环境了,而且需要停库操作。
演示如下:
将控制文件信息转换文本操作:
[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
9 rows got
临时表空间的移动也相对特殊,需要修改参数文件,但是这个参数无法动态修改,为read only状态,只能通过修改dm.ini来实现。
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
9 rows got
used time: 10.151(ms). Execute id is 5.
最后,是控制文件,想必大家都知道了,需要修改dm.ini中的文件位置,并重启数据库。
#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.
至此,数据库表空间维护和迁移介绍完毕,希望对大家认识达梦数据库有所帮助。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)