一、表空间管理
1.1 DM 逻辑存储架构
DM 数据库为数据库中的所有对象分配逻辑空间,并存放在数据文件中。在 DM 数据库
内 部,所有的数据文件组合在一起被划分到一个或者多个表空间中,所有的数据库内部对
象都 存放在这些表空间中。同时,表空间被进一步划分为段、簇和页(也称块)。通过这
种细分,可以使得 DM 数据库能够更加高效地控制磁盘空间的利用率。
在 DM8 中存储的层次结构如下:
- 数据库由一个或多个表空间组成;
- 每个表空间由一个或多个数据文件组成;
- 每个数据文件由一个或多个簇组成;
- 段是簇的上级逻辑单元,一个段可以跨多个数据文件;
- 簇由磁盘上连续的页组成,一个簇总是在一个数据文件中;
- 页是数据库中最小的分配单元,也是数据库中使用的最小的 IO 单元
1.2、表空间
在创建 DM 数据库时,会自动创建 5 个表空间:SYSTEM 表空间、ROLL 表空间、MAIN
表空间、TEMP 表空间和 HMAIN 表空间。
- SYSTEM 表空间存放了有关 DM 数据库的字典信息,用户不能在 SYSTEM 表空间
创建表和索引。 - ROLL 表空间完全由 DM 数据库自动维护,用户无需干预。该表空间用来存放事务
运行过程中执行 DML 操作之前的值,从而为访问该表的其他用户提供表数据的读一致性视
图。 - MAIN 表空间在初始化库的时候,就会自动创建一个大小为 128M 的数据文件
MAIN.DBF。在创建用户时,如果没有指定默认表空间,则系统自动指定 MAIN 表空间为
用户默认的表空间。 - TEMP 表空间完全由 DM 数据库自动维护。当用户的 SQL 语句需要磁盘空间来完
成某个操作时,DM 数据库会从 TEMP 表空间分配临时段。如创建索引、无法在内存中完
成的排序操作、SQL 语句中间结果集以及用户创建的临时表等都会使用到 TEMP 表空间。 - HMAIN 表空间属于 HTS 表空间,完全由 DM 数据库自动维护,用户无需干涉。
当用户在创建 HUGE 表时,未指定 HTS 表空间的情况下,充当默认 HTS 表空间。
1.3、表空间使用常用语法
1.3.1、语法格式
CREATE TABLESPACE <表空间名> <数据文件子句>[<数据页缓冲池子句>][<存储加密子句>]
<数据文件子句> ::= DATAFILE <文件说明项>{,<文件说明项>}
<文件说明项> ::= <文件路径> [ MIRROR <文件路径>] SIZE <文件大小>[<自动扩展子句>]
<自动扩展子句> ::= AUTOEXTEND <ON [<每次扩展大小子句>][<最大大小子句> |OFF>
<每次扩展大小子句> ::= NEXT <扩展大小>
<最大大小子句> ::= MAXSIZE <文件最大大小>
<数据页缓冲池子句> ::= CACHE = <缓冲池名>
<存储加密子句> ::= ENCRYPT WITH <加密算法> [[BY] <加密密码>]
1.3.2、注意事项
在创建表空间时,通常只需要指定表空间名称,数据文件路径、数据文件大小、其他属
性。有几点需要注意:
- 单个表空间的数据文件数量不能超过 256 个
- 达梦数据库最多支持 65535 个表空间
- 数据文件的单位是 MB,在创建的时候只需要写数字。不需要额外添加单位。数据文
件大小取决于页大小。
数据库页大小 | 每个字符类型字段实际最大长度(字节) | 每行记录最大字段外其他字段总长度(字节) | 表空间单个数据文件 最小/最大(MB) |
---|---|---|---|
4KB | 1938 | 2047 | 16/8388608 |
8KB | 3878 | 4095 | 32/16777216 |
16KB | 8000 | 8195 | 64/33554432 |
32KB | 8188 | 16176 | 128/67108864 |
1.3.3、创建表空间
SQL> create tablespace test datafile '+DMDATA/data/dsc/test.dbf' size 512;
操作已执行
已用时间: 00:00:03.122. 执行号:932.
SQL> select file_name, tablespace_name, status, autoextensible from dba_data_files
where tablespace_name='TEST';
行号 FILE_NAME TABLESPACE_NAME STATUS AUTOEXTENSIBLE
---------- ------------------------- --------------- --------- --------------
1 +DMDATA/data/dsc/test.dbf TEST AVAILABLE YES
已用时间: 4.082(毫秒). 执行号:933.
--创建表空间指定两个数据文件
SQL> create tablespace test1 datafile '+DMDATA/data/dsc/test1_01.dbf' size
256,'+DMDATA/data/dsc/test1_02.dbf' size 256;
操作已执行
已用时间: 00:00:07.732. 执行号:934.
SQL>
SQL> select file_name, tablespace_name, status, autoextensible from dba_data_files
where tablespace_name='TEST1';
行号 FILE_NAME TABLESPACE_NAME STATUS AUTOEXTENSIBLE
---------- ----------------------------- --------------- --------- --------------
1 +DMDATA/data/dsc/test1_01.dbf TEST1 AVAILABLE YES
2 +DMDATA/data/dsc/test1_02.dbf TEST1 AVAILABLE YES
已用时间: 2.341(毫秒). 执行号:935.
1.3.4、扩展表空间
扩展表空间有两种方法:(1)、增加数据文件(2)、resize 原数据文件大小
例:扩展表空间 TEST
--resize 数据文件
SQL> alter tablespace test resize datafile '+DMDATA/data/dsc/test.dbf' to 500;
操作已执行
已用时间: 00:00:02.357. 执行号:936.
--增加数据文件
SQL> alter tablespace test add datafile '+DMDATA/data/dsc/test_02.dbf' size 256;
操作已执行
已用时间: 00:00:03.276. 执行号:937.
--查询表空间情况
SQL> select file_name, tablespace_name, BYTES/1024/1024 "Size (MB)", status,
autoextensible from dba_data_files where tablespace_name='TEST';
行 号 FILE_NAME TABLESPACE_NAME Size (MB)
STATUS AUTOEXTENSIBLE
---------- ---------------------------- --------------- --------------------
--------- --------------
1 +DMDATA/data/dsc/test.dbf TEST 500
AVAILABLE YES
2 +DMDATA/data/dsc/test_02.dbf TEST 256
AVAILABLE YES
已用时间: 5.102(毫秒). 执行号:939.
SQL>
1.3.5、修改数据文件扩展属性
表空间默认是自动扩展的,用户可以修改表空间的相应属性。
(1)是否开启自动扩展属性 autoextend
(2)每次扩展的大小,取值范围 0~2048 单位 MB
(3)数据文件最大大小,maxsize <文件限制大小> 单位 MB
--关闭自动扩展
SQL> alter tablespace test datafile '+DMDATA/data/dsc/test.dbf' autoextend off;
操作已执行
已用时间: 122.623(毫秒). 执行号:940.
SQL>
--开启自动扩展并设置最大限制
SQL> alter tablespace test datafile '+DMDATA/data/dsc/test_02.dbf' autoextend on
next 10 maxsize 10240;
操作已执行
已用时间: 186.332(毫秒). 执行号:941.
SQL>
--查询数据文件自动扩展信息
SQL> select file_name, tablespace_name, BYTES/1024/1024 "Size (MB)", status,
autoextensible, INCREMENT_BY, MAXBYTES/1024/1024 "MaxSize(MB)" from dba_data_files where tablespace_name='TEST';
行 号 FILE_NAME TABLESPACE_NAME Size (MB)
STATUS AUTOEXTENSIBLE INCREMENT_BY MaxSize(MB)
---------- ---------------------------- --------------- --------------------
--------- -------------- ------------ -----------
1 +DMDATA/data/dsc/test.dbf TEST 500
AVAILABLE NO 0 0
2 +DMDATA/data/dsc/test_02.dbf TEST 256
AVAILABLE YES 10 10240
已用时间: 2.341(毫秒). 执行号:943.
1.3.6、修改表空间名以及移动数据文件
--在线修改表空间名称
SQL> alter tablespace test rename to test3;
操作已执行
已用时间: 232.025(毫秒). 执行号:944.
--查询表空间信息
SQL> select file_name, tablespace_name, BYTES/1024/1024 "Size (MB)", status,
autoextensible, INCREMENT_BY, MAXBYTES/1024/1024 "MaxSize(MB)" from
dba_data_files where tablespace_name='TEST3';
行 号 FILE_NAME TABLESPACE_NAME Size (MB)
STATUS AUTOEXTENSIBLE INCREMENT_BY MaxSize(MB)
---------- ---------------------------- --------------- -------------------- --------- -------------- ------------ -----------
1 +DMDATA/data/dsc/test.dbf TEST3 500
AVAILABLE NO 0 0
2 +DMDATA/data/dsc/test_02.dbf TEST3 256
AVAILABLE YES 10 10240
已用时间: 4.232(毫秒). 执行号:945.
SQL>
--RENAME 数据文件位置,自动帮你移动不需要人为手动
SQL> alter tablespace test3 offline;
操作已执行
已用时间: 173.767(毫秒). 执行号:946.
SQL>
SQL> alter tablespace test3 rename datafile '+DMDATA/data/dsc/test.dbf' to
'+DMDATA/data/dsc/test3_01.dbf';
操作已执行
已用时间: 00:00:05.531. 执行号:947.
SQL>
SQL> alter tablespace test3 rename datafile '+DMDATA/data/dsc/test_02.dbf' to
'+DMDATA/data/dsc/test3_02.dbf';
操作已执行
已用时间: 00:00:02.654. 执行号:948.
SQL>
SQL> alter tablespace test3 online;
操作已执行
已用时间: 157.354(毫秒). 执行号:949.
SQL>
SQL> select file_name, tablespace_name, BYTES/1024/1024 "Size (MB)", status,
autoextensible, INCREMENT_BY, MAXBYTES/1024/1024 "MaxSize(MB)" from
dba_data_files where tablespace_name='TEST3';
行 号 FILE_NAME TABLESPACE_NAME Size (MB)
STATUS AUTOEXTENSIBLE INCREMENT_BY MaxSize(MB)
---------- ----------------------------- --------------- --------------------
--------- -------------- ------------ -----------
1 +DMDATA/data/dsc/test3_01.dbf TEST3 500
AVAILABLE NO 0 0
2 +DMDATA/data/dsc/test3_02.dbf TEST3 256
AVAILABLE YES 10 10240
已用时间: 3.654(毫秒). 执行号:950.