规划数据库结构时需要考虑如何管理数据库中的相关文件,每个表空间存储什么数据,在表空间中创建几个多大的数据文件,以及数据文件存储的位置等。本章介绍了表空间的管理、数据文件的管理、重做日志文件的管理、回滚空间的管理和控制文件的管理。
14.1 管理表空间
表空间的管理操作需要DM服务器处于打开状态下。
14.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次表空间后,用户将无法再创建表空间。
14.1.2 扩展表空间
表空间通过数据文件来扩展,表空间的大小等于构成该表空间的所有数据文件的大小之和。所以要扩展表空间可以通过添加新的数据文件或者扩展表空间中已有的数据文件完成。数据文件的添加和扩展可见下一节。
14.1.3 删除表空间
只可以删除用户创建的表空间并且只能删除未使用过的表空间。删除表空间时会删除其拥有的所有数据文件。例如删除bookshop表空间。
DROP TABLESPACE bookshop;
14.1.4 修改表空间名
可修改已存在的由用户创建的表空间的名称。比如可修改bookshop表空间名为books。
ALTER TABLESPACE bookshop RENAME TO books;
14.1.5 修改表空间状态
用户表空间有联机和脱机两种状态。系统表空间、回滚表空间、重做日志表空间和临时文件表空间不允许脱机。设置表空间状态为脱机状态时,如果该表空间有未提交的事务,则脱机失败报错。脱机后可对表空间的数据进行备份。例如修改bookshop表空间状态为脱机。
ALTER TABLESPACE bookshop OFFLINE;
修改bookshop表空间状态为联机。
ALTER TABLESPACE bookshop ONLINE;
注意:MPP环境下,可能发现节点间的表空间不一致情况,如:EP01为ONLINE状态,EP02为OFFLINE状态,这个时候,无论执行ONLINE还是OFFLINE都是报错。需要用户介入,才可以解决问题。用户LOCAL方式登陆实例,并执行SP_SET_SESSION_LOCAL_TYPE(1),使得该会话可以执行DDL操作,再执行ONLINE或者OFFLINE即可。
14.1.6 修改表空间数据缓冲区
用户表空间可以切换使用的数据缓冲区,系统表空间、回滚表空间、重做日志表空间和临时文件表空间不允许修改数据缓冲区。可以使用的数据缓冲区有NORMAL和KEEP。表空间修改成功后,并不会立即生效,而是需要服务器重启。缓冲池名KEEP是达梦的保留关键字,使用时必须加双引号。例如将bookshop表空间绑定到KEEP缓冲区。
ALTER TABLESPACE bookshop CACHE= "KEEP";
14.1.7 查询表空间与数据文件对应关系
可以通过查询动态视图V$TABLESPACE得到系统中除RLOG表空间外其他所有表空间的信息,通过查询动态视图V$DATAFILE得到系统中所有数据文件的信息。将两个动态视图以表空间ID为连接条件,通过以下查询可以得到表空间上对应的数据文件。
SELECT ts.NAME, df.PATH FROM V$TABLESPACE ts, V$DATAFILE AS df WHERE ts.ID = df.GROUP_ID;
14.1.8 表空间文件失效检查
LINUX操作系统中,被进程打开的文件仍可以在OS系统中被删除,因此存在DM数据文件可能被误删的风险。如果数据文件被删除,DM系统能够及时检测出来,并立刻停止对其继续使用并通知用户。
在dm.ini中参数FIL_CHECK_INTERVAL的值指定DM系统检查数据文件是否仍存在的时间间隔。将其设为0表示不进行检查。
也可以通过系统过程SP_FILE_SYS_CHECK()来手动的进行检查。
系统一旦检测出某个表空间内的数据文件被删除,则与该表空间所有的操作都将会失败,并报错该表空间内有数据文件被删除。
14.1.9 表空间失效文件恢复
LINUX系统中被删除的文件,只要其句柄没有被关闭,可以在/proc/<pid>/fd中找到其对应的文件副本。其中<pid>指打开该文件的进程id。
利用该方法,结合OS命令,DM提供失效文件的恢复方案如下:
- 调用系统过程SP_TABLESPACE_PREPARE_RECOVER(tablespace_name)准备进行恢复;
- 如果使用过程中DM报错表空间数据文件被删除,通过操作系统的ps命令找到当前dmserver的PID:ps –ef|grep dmserver;
- 使用操作系统ls命令查看被删除文件对应的副本:ls /proc/<PID>/fd–l,会发现被删除的文件后有(deleted)字样;
- 使用操作系统的cp命令将文件复制到原位置:
cp bak_fildata_file_path_dir;
- 复制成功后,调用系统过程SP_TABLESPACE_RECOVER(ts_name)完成表空间失效文件的恢复。
注意,要保证数据文件正确修复,需要保证在SP_TABLESPACE_PREPARE_RECOVER后进行数据文件的复制。
14.2 管理数据文件
管理数据文件的操作需要DM服务器处于打开状态下。其中,移动数据文件的操作在DM服务器处于打开或配置状态下都可以进行。
14.2.1 添加数据文件
可以在用户表空间中添加数据文件。添加的数据文件大小最小为4096*页大小,如页大小为8K,则可添加的文件最小值为4096*8k=32M。比如在bookshop表空间中添加大小为64M的数据文件。
ALTER TABLESPACE bookshop ADD DATAFILE 'd:\book.dbf' SIZE 64;
一个表空间中,数据文件和镜像文件一起不能超过256个。例如,如果创建表空间的时候已经指定了1个数据文件,那么添加数据文件的时候,最多只能添加255个了。
14.2.2 扩展数据文件的大小
可以扩展用户表空间中已存在的数据文件的大小。比如扩展bookshop表空间中数据文件book.dbf大小至128M。
ALTER TABLESPACE bookshop RESIZE DATAFILE 'd:\book.dbf' TO 128;
14.2.3 指定数据文件的扩展属性
可以指定数据文件是否可以扩展,每次扩展的空间大小以及数据文件可扩展到的最大空间大小,子句的语法为:
AUTOEXTEND OFF\|ON [NEXT \<文件扩展大小\>] [MAXSIZE \<文件限制大小\>]
OFF表示文件不可扩展,ON表示文件可扩展。文件扩展大小表示当需要扩展文件时,文件一次增大的空间大小,取值范围是0—2048,单位是M。文件限制大小表示文件可扩展的最大空间大小,为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' ;
14.2.4 修改数据文件的路径
可以修改用户表空间中已存在数据文件的路径,待修改的数据文件所在表空间必须处于脱机状态并且只可修改用户创建的表空间中文件的路径。如修改bookshop表空间中文件book.dbf的路径为e:\ book.dbf。
ALTER TABLESPACE bookshop RENAME DATAFILE 'd:\book.dbf' TO 'e:\book.dbf';
14.3 管理重做日志文件
14.3.1 添加重做日志文件
在服务器打开状态下,可以添加新的重做日志文件。添加的数据文件大小最小为4096*页大小,如页大小为8K,则可添加的文件最小值为4096*8k=32M。如添加重做大小为128M的重做日志文件DAMENG03.log。
ALTER DATABASE ADD LOGFILE 'd:\DAMENG03.log' size 128;
14.3.2 扩展重做日志文件
在服务器打开状态下,可以扩展已有的重做日志文件的大小。如扩展重做日志文件DAMENG03.log到256M。
ALTER DATABASE RESIZE LOGFILE 'd:\DAMENG03.log' to 256;
14.4 管理回滚空间
回滚空间的管理和用户表空间的管理基本是一样的,区别是回滚空间的空间名固定为ROLL,不可修改。可增加和扩展回滚空间中的回滚文件,设置回滚空间的扩展属性,相关操作可参考16.2管理数据文件中的说明。
回滚文件的路径记录在控制文件里面,可以使用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
这种修改文件路径的方法也可用于重做日志文件,系统表空间文件等路径的修改。
14.5 管理控制文件
可以在dm.ini中通过设置CTL_PATH配置参数的值来指定控制文件的路径,缺省控制文件dm.ctl在数据目录下。例如可以把dm.ctl文件复制到D盘下,同时修改dm.ini中CTL_PATH = D:\dm.ctl。