达梦数据库布局和存储管理,全部参照官方文档。

  1. 规划数据库结构时需要考虑如何管理数据库中的相关文件,具体包括:表空间的管理、数据文件的管理、重做日志文件的管理、回滚表空间的管理和控制文件的管理。
  2. 表空间的管理操作需要DM服务器处于打开状态。创建表空间时需要指定表空间名和其拥有的数据文件列表。理论上最多允许拥有65535个表空间,但用户允许创建的表空间的ID取值范围为0~32767,超过32767的只允许系统使用,ID由系统自动分配,且不能重复使用,即使删除掉已有的表空间,也无法重复使用ID,也就是说只要创建32768次表空间后,用户将无法再创建表空间。
  3. 表空间通过数据文件来扩展,表空间的大小等于构成该表空间的所有数据文件的大小之和。所以要扩展表空间可以通过添加新的数据文件或扩展表空间中已有的数据文件来实现。
  4. 删除表空间时,只可以删除用户创建的表空间,且只能删除未使用过的表空间(即表空间下有表或索引的时候,需要先删掉这些表或索引)。删除表空间时会同时删除磁盘上对应的数据文件。
  5. 修改表空间名:ALTER TABLESPACE TS_NAME RENAME TO TS_NAME1;
  6. 修改表空间状态:ALTER TABLESPACE TS_NAME ONLINE|OFFLINE; 用户表空间有联机和脱机两种状态,系统表空间、回滚表空间、重做日志表空间和临时表空间不允许脱机。设置表空间状态为脱机状态时,若表空间有未提交的事务,则脱机失败报错。脱机后可对表空间的数据进行备份。MPP环境下,可能发现节点间的表空间状态不一致的情况,此时无论执行ONLINE还是OFFLINE都会报错,需要用户以LOCAL方式登陆实例,并执行SP_SET_SESSION_LOCAL_TYPE(1),使得该会话可以执行DDL操作,再执行ONLINE或OFFLINE即可。
  7. 修改表空间数据缓冲区:ALTER TABLESPACE TS_NAME CACHE=”KEEP|NORMAL”; 用户表空间可以切换使用的数据缓冲区,系统表空间、回滚表空间、重做日志表空间和临时文件表空间不允许修改数据缓冲区。可以使用的数据缓冲区有NORMAL和KEEP,表空间修改成功后,并不会立即生效,而是需要重启服务器。缓冲池名KEEP是DM的保留字,使用时需要加双引号。
  8. 查询表空间与数据文件的对应关系:用表空间ID关联V$TABLESPACE和V$DATAFILE查询。
  9. Linux操作系统中,被进程打开的文件仍可以在OS中删除,因此存在DM数据文件被误删的风险。若数据文件被删除,DM系统能够及时检测出来,并立刻停止对其继续使用并通知用户。ini参数FIL_CHECK_INTERVAL的值指定DM系统检查数据文件是否仍然存在的时间间隔,将其设置为0表示不进行检查(默认为0)。系统一旦检测出某个表空间内的数据文件被删除,则与该表空间所有的操作都将会失败,并报错该表空间内有数据文件被删除。
  10. Linux系统中被删除的文件,只要其句柄没有被关闭,可以在/proc/<pid>/fd中找到其对应的文件副本。其中<pid>指的是打开该文件的进程id。失效文件的恢复方案如下:调用系统过程SP_TABLESPACE_PREPARE_RECOVER(‘TS_NAME’);准备进行恢复;若使用过程中DM报错表空间数据文件被删除,通过操作系统的ps命令找到当前dmserver的PID;使用操作系统ls命令查看被删除文件对应的副本:ls /proc/<pid>/fd -l会发现被删除的文件后有(deleted)字样;使用操作系统cp命令将文件复制到原位置;复制成功后,调用系统过程SP_TABLESPACE_RECOVER(‘TS_NAME’);完成表空间失效文件的恢复。注意,要保证数据文件正确恢复,需要保证在SP_TABLESPACE_PREPARE_RECOVER()后进行数据文件的复制。
  11. 管理数据文件的操作需要DM服务器处于打开状态。可以在用户表空间中添加数据文件,添加的数据文件大小最小为4096*页大小。语法:ALTER TABLESPACE TS_NAME ADD DATAFILE ‘数据文件路径+名称’ SIZE XX; 一个表空间中,数据文件和镜像文件一起不能超过256个。
  12. 扩展数据文件大小:ALTER TABLESPACE TS_NAME RESIZE DATAFILE ‘带扩展数据文件路径+名称’ TO XX;
  13. 执行数据文件的扩展属性:AUTOEXTEND OFF|ON [NEXT <文件扩展大小>] [MAXSIZE <文件限制大小>]; 创建表空间时可以指定文件的扩展属性,在表空间中添加数据文件时也可以指定文件的扩展属性,也可以修改表空间中已存在的数据文件的扩展属性,如:ALTER TABLESPACE TS_NAME DATAFILE ‘’ AUTOEXTEND ON;
  14. 修改数据文件的路径(待修改的数据文件所在的表空间必须处于脱机状态且只可修改用户创建的表空间中文件的路径):ALTER TABLESPACE TS_NAME RENAME DATAFILE ‘’ TO ‘’;
  15. 在服务器打开状态下,可以添加新的重做日志文件,添加的重做日志文件大小最小为4096*页大小。如:ALTER DATABASE ADD LOGFILE ‘’ SIZE XX;
  16. 扩展重做日志文件:ALTER DATABASE RESIZE LOGFILE ‘’ TO XX;
  17. 回滚空间的管理和用户表空间的管理基本是一致的,区别是回滚空间的空间名固定为ROLL,不可修改。可增加和扩展回滚空间中的回滚文件,设置回滚空间的扩展属性。
  18. 由于修改表空间数据文件路径需要先将表空间置为脱机,而ROLL表空间不能置为脱机。回滚文件的路径记录在控制文件dm.ctl里面,可以使用dmctlcvt工具在服务器关闭状态下对控制文件进行修改,从而达到修改ROLL表空间数据文件路径的目的。这种修改文件路径的方法也可以用于重做日志文件、系统表空间文件等路径的修改。
  19. 可以在dm.ini中通过设置CTL_PATH配置参数的值来指定控制文件的路径,缺省控制文件在数据目录下。
  20. TEMP表空间文件的路径也可以直接修改dm.ini文件中的TEMP_PATH。