注册
DM8数据库存储管理
专栏/技术分享/ 文章详情 /

DM8数据库存储管理

好好先生 2025/11/07 289 0 0
摘要

前言

数据库存储管理是数据库管理和运维中非常重要的一部分,也是日常运维中很常用的部分。进行数据库存储管理是确保数据库系统高效、稳定、安全运行的关键。

做好数据库的存储管理有很多优点:

优化数据库性能

  • 减少I/O压力:通过合理分配表空间、数据文件和日志文件,避免热点数据集中存储导致的I/O瓶颈,提升查询和写入速度。
  • 平衡负载:将不同类型的数据(如频繁访问的表、历史数据)分散到不同存储设备,平衡磁盘负载,提高整体吞吐量。
  • 利用存储层级:结合SSD和HDD的混合存储策略,将高频数据放在高速存储上,降低延迟。

高效利用存储资源

  • 避免空间浪费:通过动态扩展数据文件或设置自动扩展属性,防止因空间不足导致服务中断,同时避免预留过多空间造成的资源闲置。
  • 精简存储配置:根据业务需求调整表空间大小,删除无用数据文件或归档历史数据,释放存储空间。
  • 支持高并发:合理规划存储结构(如分区表、索引分区)可提升并发处理能力,满足高并发场景需求。

保障数据安全与可靠性

  • 容错设计:将重做日志文件(REDO LOG)分散存储在不同磁盘,避免单点故障导致数据丢失。
  • 权限控制:通过表空间隔离不同业务的数据,结合数据库权限管理,防止未授权访问。

支持数据库扩展与升级

  • 无缝扩容:当业务增长时,可通过添加数据文件或扩展表空间快速扩容,无需停机。
  • 版本兼容性:存储管理需考虑数据库版本升级时的数据迁移路径,确保平滑过渡。

降低运维成本

  • 预防性维护:定期检查存储健康状态(如磁盘剩余空间、碎片率),提前发现潜在问题。
  • 成本优化:根据数据访问频率选择存储类型(如冷数据归档到低成本存储),降低TCO(总拥有成本)。

满足合规与审计要求

  • 审计追踪:通过存储管理记录数据变更历史,支持合规审计需求。
  • 加密存储:对敏感数据(如用户信息)启用加密存储,防止数据泄露。

提升系统稳定性

  • 防止存储耗尽:通过监控和预警机制,在存储空间不足时及时处理,避免数据库崩溃。
  • 减少碎片化:定期重组表空间或重建索引,减少存储碎片,提升访问效率。

本次将介绍DM8数据库的存储管理内容,包含表空间的管理、数据文件的管理、重做日志文件的管理、回滚空间的管理和控制文件的管理。

一、表空间管理

表空间的管理操作需要 DM 服务器处于打开状态下。

1.1 创建表空间

DM 数据库中的表空间可以分为普通表空间和混合表空间。使用 <HUGE 路径子句 > 创建的表空间为混合表空间,未使用 <HUGE 路径子句 > 创建的表空间即为普通表空间。普通表空间只能存储普通表(非 HUGE 表);而混合表空间既可以存储普通表又可以存储 HUGE 表。

语法

CREATE TABLESPACE [IF NOT EXISTS] <表空间名> <数据文件子句>[<数据页缓冲池子句>][<存储加密子句>][<指定ASM存储子句>][<HUGE路径子句>][<STORAGE子句>] <STORAGE子句> ::= STORAGE (ON <RAFT组名>)| STORAGE (ON <BP组名>) <数据文件子句> ::= DATAFILE <文件说明项>{,<文件说明项>} <文件说明项> ::= <文件路径> [ MIRROR <文件路径>] SIZE <文件大小>[<自动扩展子句>] <自动扩展子句> ::= AUTOEXTEND <ON [<每次扩展大小子句>][<最大大小子句>] |OFF> <每次扩展大小子句> ::= NEXT <扩展大小> <最大大小子句> ::= MAXSIZE <文件最大大小> | UNLIMITED <数据页缓冲池子句> ::= CACHE = <缓冲池名> <存储加密子句> ::= ENCRYPT WITH <加密算法> <密码子句> <密码子句>::=BY <加密密码> | BY WRAPPED <加密密码密文> <指定ASM存储子句>::= [<条带化类型子句>][<镜像类型子句>] <条带化类型子句> ::= STRIPING<0|32|64|128|256> <镜像类型子句> ::= HIGH | NORMAL | EXTERNAL <HUGE路径子句> ::= WITH HUGE PATH <HUGE数据文件路径>

示例

创建名为 bookshop 的表空间,并指定该空间上拥有 2 个数据文件,每个数据文件的大小为 128MB。

CREATE TABLESPACE bookshop DATAFILE 'd:\bookshop1.dbf' SIZE 128, 'd:\bookshop2.dbf' SIZE 128;

理论上最多允许有 65535 个表空间,但用户允许创建的表空间 ID 取值范围为 0~32767,超过 32767 的只允许系统使用,ID 由系统自动分配,ID 不能重复使用,即使删除掉已有表空间,也无法重复使用已用 ID 号,也就是说只要创建 32768 次表空间后,用户将无法再创建表空间。

注意

  1. 表空间名在数据库中必须唯一。如果表空间名已存在则报错。若指定 IF NOT EXISTS 关键字,表空间名已存在不报错,忽略本次表空间创建操作;
  2. 一个表空间中,数据文件和镜像文件的个数一起不能超过 INI 参数 TS_FIL_MAX_ID 设置的值;
  3. 如果全库已经加密,就不再支持表空间加密;
  4. SYSTEM 表空间、TEMP 表空间不允许关闭自动扩展;
  5. TEMP 表空间相关信息记录在 dmtemp.ctl 控制文件中,DM 服务器启动时根据 dmtemp.ctl 中的内容构建 TEMP 表空间数据文件。
  6. DSC 镜像环境下若创建表空间时指定多个 ASM 文件路径,要求数据文件必须属于同一磁盘组。

1.2 扩展表空间

表空间通过数据文件来扩展,表空间的大小等于构成该表空间的所有数据文件的大小之和。所以要扩展表空间可以通过添加新的数据文件或者扩展表空间中已有的数据文件完成。数据文件的添加和扩展可见下一节。

1.3 删除表空间

只可以删除用户创建的表空间并且只能删除未使用过的表空间。删除表空间时会删除其拥有的所有数据文件。

语法

DROP TABLESPACE [IF EXISTS] <表空间名>

示例

删除 bookshop 表空间

DROP TABLESPACE bookshop;

注意

  1. 删除不存在的表空间会报错。若指定 IF EXISTS 关键字,删除不存在的表空间,不会报错;
  2. SYSTEM、RLOG、ROLL 和 TEMP 表空间不允许删除;
  3. 系统处于 SUSPEND 或 MOUNT 状态时不允许删除表空间,系统只有处于 OPEN 状态下才允许删除表空间。

1.4 修改表空间

可修改已存在的由用户创建的表空间的属性。

语法

ALTER TABLESPACE <表空间名> [ONLINEOFFLINE|CORRUPT|<表空间重命名子句>|<数据 文件重命名子句>|<增加数据文件子句>|<修改文件大小子句>|<修改文件自动扩展子句>|<数据页缓冲池子句>|<DSC集群表空间负载均衡子句>|<增加HUGE路径子句>|<删除表空间文件>] <表空间重命名子句> ::= RENAME TO <表空间名> <数据文件重命名子句>::= RENAME DATAFILE <文件路径>{,<文件路径>} TO <文件路径>{,<文件路径>} <增加数据文件子句> ::= ADD <数据文件子句> <数据文件子句> ::= 参考3.4.1 表空间定义语句中的<数据文件子句> <修改文件大小子句> ::= RESIZE DATAFILE <文件路径> TO <文件大小> [ON RAFT_NAME] <修改文件自动扩展子句> ::= DATAFILE <文件路径>{,<文件路径>}[<自动扩展子句>] <自动扩展子句> ::= 参考3.4.1 表空间定义语句中的<自动扩展子句> <数据页缓冲池子句> ::= CACHE = <缓冲池名> <DSC集群表空间负载均衡子句> ::= OPTIMIZE <DSC集群节点号> <增加HUGE路径子句> ::= ADD HUGE PATH <HUGE数据文件路径> <删除表空间文件>::=DROP DATAFILE <文件路径>

示例

修改 bookshop 表空间名为 books

ALTER TABLESPACE bookshop RENAME TO books;

注意

  1. 不论 DM.INI 的 DDL_AUTO_COMMIT 设置为自动提交还是非自动提交,ALTER TABLESPACE 操作都会被自动提交;
  2. SYSTEM 表空间、TEMP 表空间不允许关闭自动扩展;
  3. 如果表空间有未提交事务时,表空间不能修改为 OFFLINE 状态;如果表空间在故障节点活动事务回滚完成前和已提交事务 PURGE 完成前,表空间不能修改为 OFFLINE 状态;
  4. 重命名表空间数据文件时,表空间必须处于 OFFLINE 状态,修改成功后再将表空间修改为 ONLINE 状态;
  5. 表空间如果发生损坏(表空间还原失败,或者数据文件丢失或损坏)的情况下,允许将表空间切换为 CORRUPT 状态,并删除损坏的表空间,如果表空间上定义有对象,需要先将所有对象删除,再删除表空间;
  6. DSC 集群表空间负载均衡子句用于在 DSC 集群环境中进行基于表空间的负载均衡设置,可指定优化节点号,当 INI 参数 DSC_TABLESPACE_BALANCE 为 1 时,符合条件的查询语句会被自动重连至 <DSC 集群节点号 > 指定的节点执行,从而实现负载均衡。当指定的 <DSC 集群节点号 > 为非法节点号时,此表空间的优化节点失效;
  7. 对普通表空间使用 < 增加 HUGE 路径子句 >,可将普通表空间升级为混合表空间;对混合表空间使用 < 增加 HUGE 路径子句 >,可为混合表空间添加新的 HUGE 数据文件路径。

1.5 查询表空间与数据文件对应关系

可以通过查询动态视图 V$TABLESPACE 得到系统中除 RLOG 表空间外其他所有表空间的信息,通过查询动态视图 V$DATAFILE 得到系统中除 RLOG 表空间外所有数据文件的信息。将两个动态视图以表空间 ID 为连接条件,通过以下查询可以得到表空间上对应的数据文件。

SELECT ts.NAME, df.PATH FROM V$TABLESPACE ts, V$DATAFILE AS df WHERE ts.ID = df.GROUP_ID;

1.6 表空间文件失效检查

LINUX 操作系统中,被进程打开的文件仍可以在 OS 系统中被删除,因此存在 DM 数据文件可能被误删的风险。如果数据文件被删除,DM 系统能够及时检测出来,并立刻停止对其继续使用并通知用户。

在 dm.ini 中参数 FIL_CHECK_INTERVAL 的值指定 DM 系统检查数据文件是否仍存在的时间间隔。将其设为 0 表示不进行检查。

也可以通过系统过程 SP_FILE_SYS_CHECK()来手动的进行检查。

系统一旦检测出某个表空间内的数据文件被删除,则与该表空间所有的操作都将会失败,并报错该表空间内有数据文件被删除。

语法

SP_FILE_SYS_CHECK ();

示例

SP_FILE_SYS_CHECK ();

注意

该过程只在 LINUX 下有效。

1.7 表空间失效文件恢复

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(<表空间名称>); SP_TABLESPACE_RECOVER(<表空间名>);

示例

恢复被删除的表空间bookshop

SP_TABLESPACE_PREPARE_RECOVER(bookshop); SP_TABLESPACE_RECOVER(bookshop);

注意

  1. 该过程只在 LINUX 下有效;
  2. 严格执行顺序:SP_TABLESPACE_PREPARE_RECOVER(表空间名称);——》操作系统恢复——》SP_TABLESPACE_RECOVER(<表空间名>);

二、数据文件管理

管理数据文件的操作需要 DM 服务器处于打开状态下。

移动数据文件的操作在 DM 服务器处于打开或配置状态下都可以进行。

2.1 添加数据文件

可以在用户表空间中添加数据文件。添加的数据文件大小最小为 4096*页大小,如页大小为 8KB,则可添加的文件最小值为 4096*8kB=32MB。

语法

ALTER TABLESPACE <表空间名> ADD DATAFILE '<数据文件>' SIZE <数据文件大小>;

示例

在 bookshop 表空间中添加大小为 64M 的数据文件。

ALTER TABLESPACE bookshop ADD DATAFILE 'd:\book.dbf' SIZE 64;

注意

一个表空间中,数据文件和镜像文件的个数一起不能超过 INI 参数 TS_FIL_MAX_ID 设置的值。例如,如果创建表空间的时候已经指定了 1 个数据文件,那么添加数据文件的时候,最多只能添加 TS_FIL_MAX_ID-1 个文件了。

2.2 删除数据文件

可以删除用户表空间中的数据文件。

语法

ALTER TABLESPACE <表空间名> DROP DATAFILE '<数据文件>';

示例

bookshop 表空间中的一个名为 book.dbf 的数据文件。

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

2.3 修改数据文件的大小

可以修改用户表空间中已存在的数据文件的大小。

语法

ALTER TABLESPACE <表空间名> RESIZE DATAFILE '<数据文件>' TO <修改后大小>;

示例

比如修改bookshop 表空间中数据文件 book.dbf 大小至 128MB。

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

2.4修改数据文件的路径

可以修改用户表空间中已存在数据文件的路径。

语法

ALTER TABLESPACE <表空间名> RENAME DATAFILE '<j旧数据文件>' TO '<新数据文件>';

示例

修改 bookshop 表空间中文件 book.dbf 的路径为 e:\ book.dbf

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

注意

待修改的数据文件所在表空间必须处于脱机状态并且只可修改用户创建的表空间中文件的路径。

2.5 添加 HUGE 数据文件路径

可以为普通表空间添加 HUGE 数据文件路径将其升级为混合表空间,也可以为混合表空间添加 HUGE 数据文件路径。

语法

ALTER TABLESPACE <表空间名> ADD HUGE PATH '<文件路径>';

示例

为普通表空间 bookshop 添加 HUGE 数据文件路径 e:\HUGE,将 bookshop 升级为混合表空间。

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

注意

一个混合表空间最多可以添加 127 个 HUGE 数据文件路径。

三、重做日志文件管理

管理重做日志文件需在服务器打开状态下。

3.1 添加重做日志文件

添加的数据文件大小最小为 4096*页大小,如页大小为 8KB,则可添加的文件最小值为 4096*8kB=32MB。

语法

ALTER DATABASE ADD LOGFILE '<日志文件>' size <日志大小>;

示例

添加重做大小为 128MB 的重做日志文件 DAMENG03.log。

ALTER DATABASE ADD LOGFILE 'd:\DAMENG03.log' size 128;

3.2 扩展重做日志文件

可以扩展已有的重做日志文件的大小

语法

ALTER DATABASE RESIZE LOGFILE '<日志文件>' TO <日志大小>;

示例

扩展重做日志文件 DAMENG03.log 到 256M。

ALTER DATABASE RESIZE LOGFILE 'd:\DAMENG03.log' to 256;

3.3 删除重做日志文件

可以删除已有的重做日志文件。

语法

ALTER DATABASE DROP LOGFILE '<日志文件>';

示例

删除重做日志文件 DAMENG03.log。

ALTER DATABASE DROP LOGFILE 'd:\DAMENG03.log';

注意

在删除重做日志文件时,指定的文件需要满足以下的一些条件才能够成功删除:

  1. 指定文件必须是当前节点自身的重做日志文件。
  2. 指定文件不是当前正在写的重做日志文件,并且该文件上不存在有效的重做日志。
  3. 指定文件必须是 RLOG 表空间中 FILE_ID 最大的那个文件。
  4. 指定文件不能是 0 号或 1 号重做日志文件。
  5. 指定文件删除前后的日志空间都应该是安全的。即当前已使用的日志空间不应该超过 RLOG_RESERVE_THRESHOLD,并且删除该文件不会导致剩余日志空间过小。

四、回滚空间管理

回滚表空间的管理和用户表空间的管理基本是一样的,区别是回滚表空间的空间名固定为 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参数来管理。

image.png

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服