数据库布局和存储管理

规划数据库结构时需要考虑如何管理数据库中的相关文件,每个表空间存储什么数据,在表空间中创建几个多大的数据文件,以及数据文件存储的位置等。本章介绍了表空间的管理、数据文件的管理、重做日志文件的管理、回滚空间的管理和控制文件的管理。

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 修改表空间状态

用户表空间有联机和脱机两种状态。系统(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 即可。

14.1.6 修改表空间数据缓冲区

用户表空间可以切换使用的数据缓冲区。系统(SYSTEM)表空间、回滚(ROLL)表空间、日志表空间(RLOG)和临时(TEMP)表空间不允许修改数据缓冲区。可以使用的数据缓冲区有 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 提供失效文件的恢复方案如下:

  1. 调用系统过程 SP_TABLESPACE_PREPARE_RECOVER(表空间名称)准备进行恢复;
  2. 如果使用过程中 DM 报错表空间数据文件被删除,通过操作系统的 ps 命令找到当前 DMSERVER 的 PID:ps -ef|grep dmserver;
  3. 使用操作系统 ll 命令查看被删除文件对应的副本:ll /proc/<PID>/fd,会发现被删除的文件后有(deleted)字样;
  4. 使用操作系统的 cp 命令将文件复制到原位置:cp 源路径 目的路径;
  5. 复制成功后,调用系统过程 SP_TABLESPACE_RECOVER(表空间名称)完成表空间失效文件的恢复。

注意,要保证数据文件正确修复,需要保证在 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 的数据文件。

ALTER TABLESPACE bookshop DROP DATAFILE 'd:\book.dbf';

删除表空间中数据文件时必须遵守文件 ID 从大到小的原则。先从具有最大文件 ID 的数据文件开始,且表空间中文件 ID 为零的数据文件不能被删除。

14.2.3 扩展数据文件的大小

可以扩展用户表空间中已存在的数据文件的大小。比如扩展 bookshop 表空间中数据文件 book.dbf 大小至 128M。

  ALTER TABLESPACE bookshop RESIZE DATAFILE 'd:\book.dbf' TO 128;

14.2.4 缩减数据文件的大小

可以缩减用户表空间中已存在的数据文件的大小。比如将 bookshop 表空间中数据文件 book.dbf 大小缩减至 32M。

ALTER TABLESPACE bookshop RESIZE DATAFILE 'd:\book.dbf' TO 32;

14.2.5 指定数据文件的扩展属性

可以指定数据文件是否可以扩展,每次扩展的空间大小以及数据文件可扩展到的最大空间大小,子句的语法为:

AUTOEXTEND OFF|ON [NEXT <文件扩展大小>] [MAXSIZE <文件限制大小>]

OFF 表示文件不可扩展,ON 表示文件可扩展。文件扩展大小表示当需要扩展文件时,文件一次增大的空间大小,取值范围是 0—2048,单位是 M。实际的文件扩展大小由指定的值与 INI 参数 TS_AUTO_EXTEND_SIZE 共同决定,为大于等于 TS_AUTO_EXTEND_SIZE 且是指定的文件扩展大小的整数倍的值;若未指定文件扩展大小,文件也会自动扩展,扩展大小由 INI 参数 TS_AUTO_EXTEND_SIZE 决定。文件限制大小表示文件可扩展的最大空间大小,为 0 或者 UNLIMITED 表示无限制,单位是 M,缺省为无限制。

创建表空间时可指定文件的扩展属性。如创建表空间时指定数据文件的扩展属性为可自动扩展,每次扩展大小为 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.6 修改数据文件的路径

可以修改用户表空间中已存在数据文件的路径,待修改的数据文件所在表空间必须处于脱机状态并且只可修改用户创建的表空间中文件的路径。如修改 bookshop 表空间中文件 book.dbf 的路径为 e:\ book.dbf。

  ALTER TABLESPACE bookshop RENAME DATAFILE 'd:\book.dbf' TO 'e:\book.dbf';

14.2.7 添加 HUGE 数据文件路径

可以为普通表空间添加 HUGE 数据文件路径将其升级为混合表空间,也可以为混合表空间添加 HUGE 数据文件路径,一个混合表空间最多可以添加 127 个 HUGE 数据文件路径。如为普通表空间 bookshop 添加 HUGE 数据文件路径 e:\HUGE,将 bookshop 升级为混合表空间。

  ALTER TABLESPACE bookshop ADD HUGE PATH 'e:\HUGE';

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,不可修改。可增加和扩展回滚空间中的回滚文件,设置回滚空间的扩展属性,相关操作可参考[14.2 管理数据文件](#14.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

这种修改文件路径的方法也可用于重做日志文件,SYSTEM 表空间文件等路径的修改。

14.5 管理控制文件

可以在 dm.ini 中通过设置 CTL_PATH 配置参数的值来指定控制文件的路径,缺省控制文件在数据目录下。例如可以把控制文件复制到 D 盘的 control_path 目录下,同时修改 dm.ini 中 CTL_PATH = D:\control_path。

微信扫码
分享文档
扫一扫
联系客服