前言

表空间是数据库的逻辑划分,一个表空间只能属于一个数据库。所有的数据库对象都存放在指定的表空间中。但主要存放的是表, 所以称作表空间。

SQL Server数据库与Oracle数据库之间最大的区别要属表空间设计。Oracle数据库开创性地提出了表空间的设计理念,这为Oracle数据库的高性能做出了不可磨灭的贡献。

达梦数据库体系结构方面,DM8也兼容oracle的表空间-数据文件机制。


1 表空间介绍

表空间由一个或者多个数据文件组成。表空间的名称不能超过128个字节,单个表空间最多可以添加256个数据文件【由 TS_FIL_MAX_ID 静态参数限制每个表空间所支持的最大文件个数,范围(2 ~255)】。

在创建 DM 数据库时,会自动创建5个表空间:SYSTEM表空间、ROLL表空间、MAIN 表空间、TEMP表空间和HMAIN表空间。

  • SYSTEM表空间:存放了有关达梦数据库的字典信息,用户不能在SYSTEM表空间创建表和索引。
  • ROLL表空间:完全由DM数据库自动维护,用户无需干预。该表空间用来存放事务运行过程中执行DML操作之前的值,从而为访问该表的其他用户提供表数据的读一致性视图。
  • MAIN表空间:在初始化库的时候,就会自动创建一个大小为128M的数据文件MAIN.DBF。在创建用户时,如果没有指定默认表空间,则系统自动指定 MAIN 表空间为用户默认的表空间。
  • TEMP表空间:完全由DM数据库自动维护。当用户的SQL语句需要磁盘空间来完成某个操作时,DM数据库会从TEMP表空间分配临时段。如创建索引、无法在内存中完成的排序操作、SQL语句中间结果集以及用户创建的临时表等都会使用到 TEMP表空间。
  • HMAIN表空间:属于HTS (HUGE TABLESPACE)表空间,完全由 DM 数据库自动维护,用户无需干涉。当用户在创建 HUGE 表时,未指定 HTS 表空间的情况下,充当默认HTS表空间。

2 表空间操作

① 表空间创建

CREATE TABLESPACE test DATAFILE 'E:\dmdbms\data\DAMENG\test.dbf' SIZE 32 ;

在这里插入图片描述
注意事项

  • 表空间名在数据库中必须唯一,名称最大长度 128 字节;
  • 一个表空间中,数据文件和镜像文件一起不能超过 256 个;
  • 如果全库已经加密,就不再支持表空间加密;
  • SYSTEM 表空间不允许关闭自动扩展,且不允许限制空间大小。
  • 指明新生成的数据文件在操作系统下的路径+新数据文件名。数据文件的存放路径符合 DM 安装路径的规则,且该路径必须是已经存在的;

② 表空间状态修改

用户表空间有联机和脱机两种状态。系统表空间、回滚表空间、重做日志表空间和临时文件表空间不允许脱机。设置表空间状态为脱机状态时,如果该表空间有未提交的事务,则脱机失败报错。脱机后可对表空间的数据进行备份。

修改表空间为脱机状态:

 alter tablespace test offline;

在这里插入图片描述
修改表空间为联机状态:

 alter tablespace test online;

在这里插入图片描述

③ 给表空间增加数据文件,给数据库实例增加日志文件

修改表空间的数据文件大小,只能改大,无法改小。

alter database resize logfile 'd:\dmlog_0.log' to 400;

随着数据库的使用,数据库表空间有时会面临用尽的情况,其本质是该表空间对应的数据文件已达到设置的最大大小,此时只要为该表空间新增新的数据文件即可。
增大表空间容量本质是为其增加新的数据文件或者扩大数据文件大小。

增加数据文件:

alter tablespace ts1 add datafile 'd:\ts1.dbf' size 200;
alter tablespace ts1 resize datafile 'd:\ts1.dbf' size 400;

给表空间test增加200M的数据文件test1.dbf。
在这里插入图片描述
查看表空间当前所有的数据文件及其路径。
在这里插入图片描述
通过路径找到新增的数据文件test1.dbf,大小为200M。
在这里插入图片描述
大数据文件test1.dbf的大小到400M。
在这里插入图片描述
再次查看数据文件test1.dbf,发现大小已经改成了400M。
在这里插入图片描述

增加日志文件:

alter database add logfile 'd:\dmlog_0.log' size 200;
alter database resize logfile 'd:\dmlog_0.log' to 400;

同样地,第一次测试对数据库增加日志文件dmlog_0.log,大小为200M。
第二次执行语句将日志文件dmlog_0.log大小扩大为400M。
在这里插入图片描述
第一次执行语句结果:
在这里插入图片描述
第二次执行语句结果:
在这里插入图片描述

④ 删除表空间

drop tablespace t1;

如果删除信息报错:试图删除用户的缺省表空间。(如果用户设置该表空间为default,则需要先删除表空间依赖的对象用户再删除表空间。)

⑤ 查看表空间

select NAME from v$tablespace;

在这里插入图片描述

3 页大小与表空间

Pagesize可以设置每一页的大小,从而控制每一页显示的数据量,默认值为14。(Pagesize 14 也相当于页大小 8K)
如果设为0,则所有的输出内容为一页并且不显示列标题。

初始化页大小的选择不仅影响表空间数据文件的大小选择,也会对表中每个字段及每条记录产生限制,如下表所示:

数据库页大小每个字符类型字段实际最大长度(字节)每行记录最大字段外其他字段总长度(字节)表空间单个数据文件最小 (MB)/最大 (MB)
4 KB1938204716/8388608
8 KB3878409532/16777216
16 KB8000819564/33554432
32 KB818816176128/67108864

单个文件的最小值为页大小乘以4096,最大值为页大小乘以2147483647 (即:2^31-1=2147483647)

相关参数

  • EXTENT_SIZE数据文件使用的簇大小(16),可选值:16、 32、 64,单位:页
#查看数据文件使用的簇大小
select para_name, para_value from v$dm_ini where para_name = 'GLOBAL_EXTENT_SIZE';  
  • PAGE_SIZE数据页大小 (8),可选值: 4、 8、 16、 32,单位:KB
#查看数据页大小
select para_name, para_value fromv$dm_ini where para_name = 'GLOBAL_PAGE_SIZE';
  • TS_MAX_ID:限制系统所支持的最大表空间 ID,有效值范围(512 ~ 65517)。默认值为:8192。静态参数。
  • TS_FIL_MAX_ID:限制每个表空间所支持的最大文件个数,有效值范围(2 ~ 255)。静态参数。

在DM数据库中,页大小可以为 4K、 8K、 16K 和32K,用户在创建数据库时可以根据实际情况选择需要的页大小, 默认大小为 8KB,该参数值在数据库初始化完成后,是无法进行更改的,只能重新初始化数据库进行更改。

初始化页大小的选择对表空间数据文件的大小,对表中字段的长度,表里的每行记录的最大值都有一个限制。

DM 要求数据文件的大小要大于页大小的 4096 倍,小于页大小的 2的31次方-1 倍。

达梦数据库是以簇为最小的物理单元,为数据库分配物理存储空间,簇大小可以设置为16或者32,默认为16,每个簇的大小=页大小x页数(簇大小参数设置的值),所以页大小设置越大,数据文件的物理大小就会越大,在系统运行时,每次从磁盘调入内存的数据单位也就越大,磁盘的IO量也就越大,所以在规划数据库前期,需要慎重考虑数据库页大小及簇大小的选择。

4 页大小对表空间的影响测试

① 查看数据库版本和对应数据库页大小
打开达梦数据库文件夹下的SQL交互式查询工具,连接数据库并进行查询。
在这里插入图片描述
在这里插入图片描述

打开达梦数据库文件夹下的DM管理工具,右键点击左侧登陆用户(如LOCALHOST(SYSDBA)),打开管理服务器。
在这里插入图片描述
创建新表test,插入20条数据,方便后续测试。
在这里插入图片描述
查看表内数据,可见pagesize为14情况下,数据输出达到14行就分页了。
在这里插入图片描述
调整pagesize的值到30,重新查看test表内数据,发现分页消失了。
在这里插入图片描述

② 页大小对表空间的影响测试
数据库页大小为8K时,表空间最小大小为32MB,小于32MB无法成功创建表空间

create tablespace test1 datafile 'e:\dmdbms\data\DAMENG\test1.dbf' SIZE 31;
#(执行失败,报错信息:大小无效)
create tablespace test1 datafile 'e:\dmdbms\data\DAMENG\test1.dbf' SIZE 32;
#(执行成功)
create tablespace test2 datafile 'e:\dmdbms\data\DAMENG\test2.dbf' SIZE 64;
#(执行成功)
create tablespace test2 datafile 'e:\dmdbms\data\DAMENG\test2.dbf' SIZE 63;
#(执行失败,报错信息:表空间test2已存在)
create tablespace test3 datafile 'e:\dmdbms\data\DAMENG\test3.dbf' SIZE 63;
#(执行成功)

在这里插入图片描述
在这里插入图片描述

总结:
DM 表空间数据文件的大小,最小值不能低于页大小的 4096 倍;(根本原因在于页大小限制的是单个数据文件的最小大小,因为每个表空间至少需要包含一个数据文件,所以也就对表空间的大小形成了限制)
查看表格,可知最大值不能高于页大小的 231 -1 (页大小如果是 8K ,大小约为 32M ~ 16T );
无需遵守倍增。

③ 页大小对表的字段大小的影响测试(数据页大小为8K)
在这里插入图片描述
varchar2最大长度为32767。
页大小为8K的情况下,每个字符类型字段实际最大长度为3878。
照理说,应该创建不成功,但是此处成功了。。

④ 页大小对表的单条记录最大长度的影响测试

页大小为8K的情况下,每行记录最大字段外其他字段总长度(字节)为4095。

创建新测试表t2:
在这里插入图片描述
尝试插入数据:
在这里插入图片描述
虽然创建可以成功,但是插入数据不成功,会报错记录超长。


总结

本文简单介绍了达梦数据库中的表空间及其实操方法。如果文中有误,欢迎指出,大家共同交流进步!

更多达梦技术资讯,请访问达梦技术社区:
达梦数据库 - 新一代大型通用关系型数据库 | 达梦云适配中心
https://eco.dameng.com/

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐