达梦表空间管理注意事项总结
1、达梦数据库表空间添加数据文件或者创建表空间时指定数据文件大小时,size(resize)关键字指定的文件大小数字不可以带单位,需要全部换算成MB对应的大小,比如size 100GB就是不合法的,size 100指大小为100MB,如果添加1GB的数据文件,需要写成size 1024。
SQL> create tablespace dm_dba datafile 'C:\dmdbms\data\DAMENG\dm_dba01.dbf' size 100M;
create tablespace dm_dba datafile 'C:\dmdbms\data\DAMENG\dm_dba01.dbf' size 100M;
create tablespace dm_dba datafile 'C:\dmdbms\data\DAMENG\dm_dba01.dbf' size 100M;
*
第 1 行, 第 114 列[M]附近出现错误[-2007]:
语法分析出错.
已用时间: 0.244(毫秒). 执行号:0.
SQL> create tablespace dm_dba datafile 'C:\dmdbms\data\DAMENG\dm_dba01.dbf' size 1GB;
create tablespace dm_dba datafile 'C:\dmdbms\data\DAMENG\dm_dba01.dbf' size 1GB;
create tablespace dm_dba datafile 'C:\dmdbms\data\DAMENG\dm_dba01.dbf' size 1GB; *
第 1 行, 第 113 列[GB]附近出现错误[-2007]:
语法分析出错.
已用时间: 0.480(毫秒). 执行号:0.
SQL> create tablespace dm_dba datafile 'C:\dmdbms\data\DAMENG\dm_dba01.dbf' size 100MB;
create tablespace dm_dba datafile 'C:\dmdbms\data\DAMENG\dm_dba01.dbf' size 100MB;
create tablespace dm_dba datafile 'C:\dmdbms\data\DAMENG\dm_dba01.dbf' size 100MB;
*
第 1 行, 第 115 列[MB]附近出现错误[-2007]:
语法分析出错.
已用时间: 0.360(毫秒). 执行号:0.
SQL> create tablespace dm_dba datafile 'C:\dmdbms\data\DAMENG\dm_dba01.dbf' size 100KB;
create tablespace dm_dba datafile 'C:\dmdbms\data\DAMENG\dm_dba01.dbf' size 100KB;
create tablespace dm_dba datafile 'C:\dmdbms\data\DAMENG\dm_dba01.dbf' size 100KB;
*
第 1 行, 第 115 列[KB]附近出现错误[-2007]:
语法分析出错.
已用时间: 0.219(毫秒). 执行号:0.
SQL> create tablespace dm_dba datafile 'C:\dmdbms\data\DAMENG\dm_dba01.dbf' size 100;
操作已执行
已用时间: 78.939(毫秒). 执行号:7.
SQL> select file_name,bytes/1024/1024 from dba_data_files where file_name like '%dm_dba%';
行号 FILE_NAME BYTES/1024/1024
---------- ---------------------------------- --------------------
1 C:\dmdbms\data\DAMENG\dm_dba01.dbf 100
已用时间: 16.934(毫秒). 执行号:8.
SQL>
以上过程可以清晰的看到,在达梦数据库中,size(resize)后的数字带任何单位都是不符合规范的,大小数字的默认单位为MB,其他大小单位只能换算成MB来进行处理。
2、达梦数据库表空间的单个数据文件的最小与最大大小依赖于数据库初始化时页的大小,单个文件的最小值为页大小乘以4096,最大值为页大小乘以2147483647。
SQL> select para_name,para_value from v$dm_ini where para_name = 'GLOBAL_PAGE_SIZE';
行号 PARA_NAME PARA_VALUE
---------- ---------------- ----------
1 GLOBAL_PAGE_SIZE 8192
已用时间: 17.564(毫秒). 执行号:4.
SQL> select para_name,para_value from v$dm_ini where para_name = 'GLOBAL_EXTENT_SIZE';
行号 PARA_NAME PARA_VALUE
---------- ------------------ ----------
1 GLOBAL_EXTENT_SIZE 16
已用时间: 3.351(毫秒). 执行号:5.
SQL> create tablespace dm_tbs datafile 'C:\dmdbms\data\DAMENG\dm_tbs01.dbf' size 31;
create tablespace dm_tbs datafile 'C:\dmdbms\data\DAMENG\dm_tbs01.dbf' size 31;
第1 行附近出现错误[-2410]:数据文件[C:\dmdbms\data\DAMENG\dm_tbs01.dbf]大小无效.
已用时间: 2.566(毫秒). 执行号:0.
SQL> create tablespace dm_tbs datafile 'C:\dmdbms\data\DAMENG\dm_tbs01.dbf' size 32;
操作已执行
已用时间: 102.853(毫秒). 执行号:6.
SQL>
从以上过程可以看出,数据文件大小小于32MB时,会提示文件大小无效,因为此处页大小8KB,所以数据文件最小大小为8KB乘以4096等于32MB。单个文件的最大大小同理。
3、达梦数据库的数据文件,可以配置自动扩展属性,但是有范围限制,自动扩展的范围为1-2048,单位为MB,若不指定自动扩展大小,缺省为1MB。如果不指定autoextend子句,系统默认是开启自动扩展的。
SQL> select file_name,autoextensible,increment_by from dba_data_files where tablespace_name like 'DM_%';
行号 FILE_NAME AUTOEXTENSIBLE INCREMENT_BY
---------- -------------------------- -------------- ------------
1 C:\dmdbms\data\DAMENG\DMHR.DBF YES 0
2 C:\dmdbms\data\DAMENG\dm_dba01.dbf YES 0
3 C:\dmdbms\data\DAMENG\dm_tbs01.dbf YES 0
已用时间: 4.138(毫秒). 执行号:12.
SQL> alter tablespace dm_tbs datafile 'C:\dmdbms\data\DAMENG\dm_tbs01.dbf' autoextend on next 10;
操作已执行
已用时间: 21.822(毫秒). 执行号:13.
SQL>
SQL> alter tablespace dm_dba datafile 'C:\dmdbms\data\DAMENG\dm_dba01.dbf' autoextend on next 2049;
alter tablespace dm_dba datafile 'C:\dmdbms\data\DAMENG\dm_dba01.dbf' autoextend on next 2049;
第1 行附近出现错误[-2409]:数据文件[C:\dmdbms\data\DAMENG\dm_dba01.dbf]的NEXT值无效,必须小于等于2048.
已用时间: 0.762(毫秒). 执行号:0.
SQL> alter tablespace dm_dba datafile 'C:\dmdbms\data\DAMENG\dm_dba01.dbf' autoextend on next 2048;
操作已执行
已用时间: 18.471(毫秒). 执行号:14.
SQL> select file_name,autoextensible,increment_by from dba_data_files where tablespace_name like 'DM_%';
行号 FILE_NAME AUTOEXTENSIBLE INCREMENT_BY
---------- ---------------------------- -------------- ------------
1 C:\dmdbms\data\DAMENG\DMHR.DBF YES 0
2 C:\dmdbms\data\DAMENG\dm_dba01.dbf YES 2048
3 C:\dmdbms\data\DAMENG\dm_tbs01.dbf YES 10
已用时间: 1.627(毫秒). 执行号:15.
SQL>
4、system,roll,temp不能进行offline操作的,也就是不能在数据库联机状态下进行数据文件存储位置变更操作,而其他表空间是可以进行offline操作的。
SQL> alter tablespace system offline;
alter tablespace system offline;
第1 行附近出现错误[-3409]:表空间[SYSTEM]不能置为脱机状态.
已用时间: 0.436(毫秒). 执行号:0.
SQL> alter tablespace roll offline;
alter tablespace roll offline;
第1 行附近出现错误[-3409]:表空间[ROLL]不能置为脱机状态.
已用时间: 0.376(毫秒). 执行号:0.
SQL> alter tablespace temp offline;
alter tablespace temp offline;
第1 行附近出现错误[-3409]:表空间[TEMP]不能置为脱机状态.
已用时间: 0.623(毫秒). 执行号:0.
SQL> alter tablespace main offline;
操作已执行
已用时间: 109.541(毫秒). 执行号:18.
SQL> alter tablespace dm_tbs offline;
操作已执行
已用时间: 102.130(毫秒). 执行号:19.
SQL>
5、达梦数据库表空间的名称不能超过128个字节。表空间的名字超过128个字节就会提示标识长度非法的信息。其实这个限制也是可以从dba_tablespaces中tablespace_name列的长度可以看出,超过128个字节后是无法将表空间信息记录到数据库数据字典中的。
SQL> create tablespace dm_12888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888 datafile 'C:\dmdbms\dm_128.dbf' size 10;
create tablespace dm_1288888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888 datafile 'C:\dmdbms\dm_128.dbf' size 10;
第 1 行, 第 571 列[dm_128888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888]附近出现错误[-2051]:
标示符长度非法.
已用时间: 0.260(毫秒). 执行号:0.
SQL>
6、单个表空间最多可以添加256个数据文件。这个可以从TS_MAX_ID和TS_FIL_MAX_ID这两个参数的值来确定。TS_FIL_MAX_ID:限制每个表空间所支持的最大文件个数,范围(2 ~255);TS_MAX_ID:限制系统所支持的最大表空间ID,有效值范围(5 ~ 65517),与系统实际最大ID比较,取最大值。
SQL> select para_name,para_value,description from v$dm_ini where para_name in ('TS_MAX_ID','TS_FIL_MAX_ID');
行号 PARA_NAME PARA_VALUE DESCRIPTION
----- ------------- ---------- --------------------------------------------
1 TS_MAX_ID 8192 Maximum ID value for tablespaces in database
2 TS_FIL_MAX_ID 255 Maximum ID value for files in tablespace
已用时间: 3.344(毫秒). 执行号:24.
SQL>