1 背景介绍
达梦数据库分为实例和数据库两部分,实例主要由内存池和缓冲区、哈希区和排序区四大区域组成。数据库由配置文件、控制文件、数据文件等组成,本文主要简述控制文件和数据文件,不对其他体系结构进行讲述。
2 控制文件
达梦数据库实例在启动时会检查控制文件,通过控制文件中的信息查找数据文件的位置,确定表空间的信息,确定数据库的基本信息。确认无误后再打开数据库。
为保证控制文件的正常,数据库会在控制文件修改前对控制文件做一次备份,修改成功后删除备份文件和修改成功后根据dm.ini中的CTL_BAK路径对控制文件再做一次备份。但是裸设备中无法在修改前对控制文件进行备份,CTL_BAK路径无效也无法在控制文件修改成功后完成备份。
控制文件部分信息:
3 数据文件
一个达梦数据文件对应物理存储上的一个后缀为.dbf的物理文件。数据文件的空间用尽后会自动扩展空间,但也可以通过MAXSIZE限制数据文件自动扩展的最终大小,数据文件按照页、簇、段进行管理。数据文件在达梦逻辑存储结构中和表空间有着关联,一个表空间至少拥有一个数据文件。同时数据文件上限下限空间根据数据库页大小而定。
页大小对数据文件的影响
页大小对表空间创建的影响测试
SQL> select para_name,para_value/1024 KB from v$dm_ini where para_name = 'GLOBAL_PAGE_SIZE';
LINEID para_name KB
---------- ---------------- --
1 GLOBAL_PAGE_SIZE 16
SQL> create tablespace test datafile '/dmdata/dmtest3/test01.dbf' size 63;
create tablespace test datafile '/dmdata/dmtest3/test01.dbf' size 63;
[-2410]:Error in line: 1
Data file [/dmdata/dmtest3/test01.dbf] size is invalid.
used time: 0.304(ms). Execute id is 0.
4 数据文件和控制文件的关系
控制文件中记录了数据文件的创建时间,修改时间,位置信息,file_id等信息,每次数据库启动都会读取这些信息,读取后再打开数据库,数据库根据控制文件中的信息来显示数据文件的信息。
通过控制文件修改数据文件位置。
//先停止数据库
# ./dmctlcvt TYPE=1 SRC=/dmdata/dmtest3/dm.ctl DEST=/dmdata/dmtest3/dmctl2.txt
# vi dmctl2.txt
//将test01.dbf数据文件的文件位置修改为改为'/dmdata/dmtest3/data/test01.dbf'。
# mv test01.dbf ./data/test01.dbf
# ./dmctlcvt TYPE=2 SRC=/dmdata/dmtest3/dmctl2.txt DEST=/dmdata/dmtest3/dm.ctl
//启动数据库
查询语句
SQL> select GROUP_ID,id,path,create_time from v$datafile;
未修改前:
修改后:
tip:之前创建test表空间又删除了三次,test表空间ID号一直往上增加,不会选择空出来的最小ID号。即达梦数据库的表空间id号有高水位线概念,会在高水位线上继续往上加一,不会从之前的id号中选择创建表空间。