本文包含DM8系统管理员手册的第十四章:数据库布局和存储管理
文章目录
规划数据库结构时需要考虑如何管理数据库中的相关文件,每个表空间存储什么数据,在表空间中创建几个多大的数据文件,以及数据文件存储的位置等
一、管理表空间(服务器处于打开状态)
1.1 创建表空间
- 创建表空间时需要指定表空间名和其拥有的数据文件列表
比如创建名为bookshop的表空间,并指定该空间上拥有 2 个数据文件,每个数据文件的大小为 128M。CREATE TABLESPACE bookshop DATAFILE 'd:\bookshop1.dbf' SIZE 128, 'd:\bookshop2.dbf' SIZE 128;
- 理论最多允许有65535个表空间,但用户允许创建的表空间ID取值范围0~32767,超过32767只允许系统使用,ID由系统自动分配,ID不能重复使用,即使删除掉已有表空间,也无法重复使用已用 ID 号,也就是说只要创建 32768 次表空间后,用户将无法再创建表空间
1.2 扩展表空间
表空间通过数据文件来扩展,表空间的大小等于构成该表空间的所有数据文件的大小之和。所以要扩展表空间可以通过添加新的数据文件或者扩展表空间中已有的数据文件完成
1.3 删除表空间
只可以删除用户创建的表空间并且只能删除未使用过的表空间。删除表空间时会删除其拥有的所有数据文件。
1.4 修改表空间名
比如可修改bookshop表空间名为books:
ALTER TABLESPACE bookshop RENAME TO books;
1.5 修改表空间状态
- 用户表空间有联机和脱机两种状态
- 系统(SYSTEM)表空间、回滚(ROLL)表空间、重做日志表空间(RLOG)和临时(TEMP)表空间不允许脱机
- 设置表空间状态为脱机状态时,如果该表空间有未提交的事务,则脱机失败报错
- 脱机后可对表空间的数据进行备份。
例 1 修改 bookshop 表空间状态为脱机
ALTER TABLESPACE bookshop OFFLINE;
例 2 修改 bookshop 表空间状态为联机
ALTER TABLESPACE bookshop ONLINE;
注意:DM MPP环境下,可能发现节点间的表空间不一致情况,例如:EP01为ONLINE状态,EP02为OFFLINE状态,这个时候,无论执行ONLINE还是OFFLINE都是报错,需要用户介入,才可以解决问题。
用户LOCAL方式登录实例,并执行SP_SET_SESSION_LOCAL_TYPE(1),使得该会话可以执行DDL操作,再执行ONLINE或者OFFLINE即可
1.6 修改表空间数据缓冲区
- 用户表空间可以切换使用的数据缓冲区
- 系统(SYSTEM)表空间、回滚(ROLL)表空间、重做日志表空间(RLOG)和临时(TEMP)表空间不允许修改数据缓冲区。
- 可以使用的数据缓冲区有NORMAL和KEEP
- 表空间修改成功后,并不会立即生效,而是需要服务器重启
- 缓冲池名KEEP是达梦的保留关键字,使用时必须加双引号
例 将 bookshop 表空间绑定到 KEEP 缓冲区
ALTER TABLESPACE bookshop CACHE= "KEEP";
1.7 查询表空间与数据文件对应关系
- 可以通过查询动态视图
V$TABLESPACE
得到系统中除RLOG表空间外其他所有表空间的信息,通过查询动态视图V$DATAFILE
得到系统中所有数据文件的信息。将两个动态视图以表空间ID为连接条件,通过以下查询可以得到表空间上对应的数据文件
SELECT ts.NAME, df.PATH FROM V$TABLESPACE AS ts, V$DATAFILE AS df WHERE ts.ID = df.GROUP_ID;
1.8表空间文件失效检查
- LINUX操作系统中,被进程打开的文件仍可以在OS系统中被删除,因此存在DM数据文件可能被误删的风险
- 如果数据文件被删除,DM 系统能够及时检测出来,并立刻停止对其继续使用并通知用户
- 自动:在dm.ini中参数FIL_CHECK_INTERVAL的值指定DM系统检查数据文件是否仍存
在的时间间隔。将其设为 0 表示不进行检查 - 手动:也可以通过系统过程 SP_FILE_SYS_CHECK()来手动的进行检查
- 系统一旦检测出某个表空间内的数据文件被删除,则与该表空间所有的操作都将会失败,并报错该表空间内有数据文件被删除
1.9 表空间失效文件恢复
- LINUX系统中被删除的文件,只要其句柄没有被关闭,可以在
/proc/<pid>/fd
中找到其对应的文件副本。其中指打开该文件的进程id - 利用该方法,结合 OS 命令,DM 提供失效文件的恢复方案如下:
- 调用系统过程
SP_TABLESPACE_PREPARE_RECOVER(表空间名称)
准备进行恢复; - 如果使用过程中DM报错表空间数据文件被删除,通过操作系统的ps命令找到当前dmserver的PID:
ps -ef|grep dmserver
; - 使用操作系统ll命令查看被删除文件对应的副本:
ll /proc/<PID>/fd
,会发现被删除的文件后有(deleted)字样; - 使用操作系统的cp命令将文件复制到原位置:
cp 源路径 目的路径
; - 复制成功后,调用系统过程
SP_TABLESPACE_RECOVER(表空间名称)
完成表空间失效文件的恢复。
- 调用系统过程
- 注意,要保证数据文件正确修复,需要保证在SP_TABLESPACE_PREPARE_RECOVER后进行数据文件的复制
二、管理数据文件(DM服务器打开状态)
2.1 添加数据文件
添加的数据文件大小最小为 4096页大小,如页大小为 8K,则可添加的文件最小值为 40968k=32M。比如在 bookshop 表空间中添加大小为 64M 的数据文件。
ALTER TABLESPACE bookshop ADD DATAFILE 'd:\book.dbf' SIZE 64;
一个表空间中,数据文件和镜像文件一起不能超过256个
2.2 删除数据文件
- 比如删除bookshop表空间中的一个名为book.dbf 的数据文件。
ALTER TABLESPACE bookshop DROP DATAFILE 'd:\book.dbf';
- 删除表空间中数据文件时必须遵守文件 ID 从大到小的原则。先从具有最大文件 ID 的数据文件开始,且表空间中文件 ID 为零的数据文件不能被删除
2.3 扩展数据文件的大小
比如扩展bookshop表空间中数据文件book.dbf大小至128M。
ALTER TABLESPACE bookshop RESIZE DATAFILE 'd:\book.dbf' TO 128;
2.4 缩减数据文件的大小
比如将bookshop表空间中数据文件book.dbf大小缩减至32M。
ALTER TABLESPACE bookshop RESIZE DATAFILE 'd:\book.dbf' TO 32;
2.5 指定数据文件的扩展属性
- 可以指定数据文件是否可以扩展,每次扩展的空间大小以及数据文件可扩展到的最大空间大小,子句的语法为:
AUTOEXTEND OFF|ON [NEXT <文件扩展大小>] [MAXSIZE <文件限制大小>]
- OFF表示文件不可扩展,ON 表示文件可扩展;
- 文件扩展大小表示需要扩展文件时,文件一次增大的空间大小,取值范围0~2048M;
- 文件限制大小表示文件可扩展的最大空间大小,0或UNLIMITED表示无限制,单位是M。缺省情况文件扩展大小是1M
- 创建表空间时可指定文件的扩展属性。
如创建表空间时指定数据文件的扩展属性为可自动扩展,每次扩展大小为 10M,最大可扩展到 100M:CREATE TABLESPACE bookshop DATAFILE 'd:\book.dbf' SIZE 32 AUTOEXTEND ON NEXT 10 MAXSIZE 100;
- 在表空间中添加文件时可指定文件的扩展属性。如添加数据文件时指定扩展属性为不可自动扩展:
ALTER TABLESPACE bookshop ADD DATAFILE 'd:\book.dbf' SIZE 1024 AUTOEXTEND OFF;
- 可修改表空间中已存在的数据文件的扩展属性。如修改数据文件的扩展属性为可自动扩展:
ALTER TABLESPACE bookshop DATAFILE 'd:\book.dbf' AUTOEXTEND ON;
2.6 修改数据文件的路径
可以修改用户表空间中已存在数据文件的路径,待修改的数据文件所在表空间必须处于脱机状态并且只可修改用户创建的表空间中文件的路径。如修改 bookshop 表空间中文件book.dbf 的路径为 e:\ book.dbf。
ALTER TABLESPACE bookshop RENAME DATAFILE 'd:\book.dbf' TO 'e:\book.dbf';
2.7 添加HUGE数据文件路径
- 可以为普通表空间添加HUGE数据文件路径将其升级为混合表空间,也可以为混合表空间添加HUGE数据文件路径,一个混合表空间最多可以添加127个HUGE数据文件路径
- 如为普通表空间bookshop添加HUGE数据文件路径e:\HUGE,将bookshop升级为混合表空间:
ALTER TABLESPACE bookshop ADD HUGE PATH 'e:\HUGE';
三、管理重做日志文件
3.1 添加重做日志文件
在服务器打开状态下,可以添加新的重做日志文件。添加的数据文件大小最小为 4096*页大小
。如添加重做大小为128M的重做日志文件DAMENG03.log
ALTER DATABASE ADD LOGFILE 'd:\DAMENG03.log' size 128;
3.2 扩展重做日志文件
在服务器打开状态下,可以扩展已有的重做日志文件的大小。如扩展重做日志文件DAMENG03.log到256M
ALTER DATABASE RESIZE LOGFILE 'd:\DAMENG03.log' to 256;
四、管理回滚表空间
- 回滚表空间的管理和用户表空间的管理基本是一样的,区别是回滚空间的空间名固定为ROLL,不可修改
- 可增加和扩展回滚空间中的回滚文件,设置回滚空间的扩展属性
- 回滚文件的路径记录在控制文件里面,可以使用 dmctlcvt 工具在 DM 服务器关闭的状态下对控制文件进行修改
- 使用dmctlcvt工具将控制文件转换为文本文件,编辑文本文件中要修改的文件的路径后再使用dmctlcvt工具将文本文件转换为控制文件即可
首先转换控制文件到文本文件: dmctlcvt c2t D:\dm.ctl D:\ctl.txt 编辑ctl.txt文本文件中fil_path=d:\roll.dbf为fil_path=e:\roll.dbf,保存文本文件。 复制d:\roll.dbf 文件为 e:\roll.dbf。 最后转换文本文件到控制文件: dmctlcvt t2c D:\ctl.txt D:\dm.ctl
这种修改文件路径的方法也可用于重做日志文件,SYSTEM 表空间文件等路径的修改。
五、管理控制文件
可以在dm.ini中通过设置CTL_PATH
配置参数的值来指定控制文件的路径,缺省控制文件dm.ctl在数据目录下。例如可以把dm.ctl文件复制到D盘下,同时修改dm.ini中CTL_PATH = D:\dm.ctl
。