一、DM 物理存储结构概述:深入理解底层数据布局
1.1 物理存储结构简介:掌握核心组件分类
DM 数据库的物理存储结构由多种物理文件组成,这些文件是数据库运行的基础。了解 DM 物理存储结构,对于数据库的日常运维、性能调优以及故障恢复具有至关重要的作用。DM 物理存储结构主要包括配置文件、控制文件、数据文件、重做日志文件、归档日志文件以及备份文件等。每一类文件都承担着特定的职责,共同保障数据库系统的稳定运行。
1.2 存储结构关系图:直观展现文件交互
为了更直观地理解 DM 物理存储结构中各文件之间的交互与依赖关系,可以通过以下流程图进行展示。该图描绘了从数据库启动到数据写入、日志记录再到备份恢复的完整文件流转过程。
#publish-mermaid-1786592816508-0{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#publish-mermaid-1786592816508-0 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#publish-mermaid-1786592816508-0 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#publish-mermaid-1786592816508-0 .error-icon{fill:#552222;}#publish-mermaid-1786592816508-0 .error-text{fill:#552222;stroke:#552222;}#publish-mermaid-1786592816508-0 .edge-thickness-normal{stroke-width:1px;}#publish-mermaid-1786592816508-0 .edge-thickness-thick{stroke-width:3.5px;}#publish-mermaid-1786592816508-0 .edge-pattern-solid{stroke-dasharray:0;}#publish-mermaid-1786592816508-0 .edge-thickness-invisible{stroke-width:0;fill:none;}#publish-mermaid-1786592816508-0 .edge-pattern-dashed{stroke-dasharray:3;}#publish-mermaid-1786592816508-0 .edge-pattern-dotted{stroke-dasharray:2;}#publish-mermaid-1786592816508-0 .marker{fill:#333333;stroke:#333333;}#publish-mermaid-1786592816508-0 .marker.cross{stroke:#333333;}#publish-mermaid-1786592816508-0 svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#publish-mermaid-1786592816508-0 p{margin:0;}#publish-mermaid-1786592816508-0 .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#publish-mermaid-1786592816508-0 .cluster-label text{fill:#333;}#publish-mermaid-1786592816508-0 .cluster-label span{color:#333;}#publish-mermaid-1786592816508-0 .cluster-label span p{background-color:transparent;}#publish-mermaid-1786592816508-0 .label text,#publish-mermaid-1786592816508-0 span{fill:#333;color:#333;}#publish-mermaid-1786592816508-0 .node rect,#publish-mermaid-1786592816508-0 .node circle,#publish-mermaid-1786592816508-0 .node ellipse,#publish-mermaid-1786592816508-0 .node polygon,#publish-mermaid-1786592816508-0 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#publish-mermaid-1786592816508-0 .rough-node .label text,#publish-mermaid-1786592816508-0 .node .label text,#publish-mermaid-1786592816508-0 .image-shape .label,#publish-mermaid-1786592816508-0 .icon-shape .label{text-anchor:middle;}#publish-mermaid-1786592816508-0 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#publish-mermaid-1786592816508-0 .rough-node .label,#publish-mermaid-1786592816508-0 .node .label,#publish-mermaid-1786592816508-0 .image-shape .label,#publish-mermaid-1786592816508-0 .icon-shape .label{text-align:center;}#publish-mermaid-1786592816508-0 .node.clickable{cursor:pointer;}#publish-mermaid-1786592816508-0 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#publish-mermaid-1786592816508-0 .arrowheadPath{fill:#333333;}#publish-mermaid-1786592816508-0 .edgePath .path{stroke:#333333;stroke-width:1px;}#publish-mermaid-1786592816508-0 .flowchart-link{stroke:#333333;fill:none;}#publish-mermaid-1786592816508-0 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#publish-mermaid-1786592816508-0 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#publish-mermaid-1786592816508-0 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#publish-mermaid-1786592816508-0 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#publish-mermaid-1786592816508-0 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#publish-mermaid-1786592816508-0 .cluster text{fill:#333;}#publish-mermaid-1786592816508-0 .cluster span{color:#333;}#publish-mermaid-1786592816508-0 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#publish-mermaid-1786592816508-0 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#publish-mermaid-1786592816508-0 rect.text{fill:none;stroke-width:0;}#publish-mermaid-1786592816508-0 .icon-shape,#publish-mermaid-1786592816508-0 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#publish-mermaid-1786592816508-0 .icon-shape p,#publish-mermaid-1786592816508-0 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#publish-mermaid-1786592816508-0 .icon-shape .label rect,#publish-mermaid-1786592816508-0 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#publish-mermaid-1786592816508-0 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#publish-mermaid-1786592816508-0 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#publish-mermaid-1786592816508-0 .node .neo-node{stroke:#9370DB;}#publish-mermaid-1786592816508-0 [data-look=\”neo\”].node rect,#publish-mermaid-1786592816508-0 [data-look=\”neo\”].cluster rect,#publish-mermaid-1786592816508-0 [data-look=\”neo\”].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#publish-mermaid-1786592816508-0 [data-look=\”neo\”].swimlane.cluster rect{filter:none;}#publish-mermaid-1786592816508-0 [data-look=\”neo\”].node path{stroke:#9370DB;stroke-width:1px;}#publish-mermaid-1786592816508-0 [data-look=\”neo\”].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#publish-mermaid-1786592816508-0 [data-look=\”neo\”].node .neo-line path{stroke:#9370DB;filter:none;}#publish-mermaid-1786592816508-0 [data-look=\”neo\”].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#publish-mermaid-1786592816508-0 [data-look=\”neo\”].node circle .state-start{fill:#000000;}#publish-mermaid-1786592816508-0 [data-look=\”neo\”].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#publish-mermaid-1786592816508-0 [data-look=\”neo\”].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#publish-mermaid-1786592816508-0 :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
DM 数据库实例启动
读取配置文件 dm.ini
加载控制文件 dm.ctl
挂载并打开数据库
读写数据文件 .DBF
生成重做日志文件 .log
配置归档模式
生成归档日志文件
执行备份操作
生成备份文件
二、核心文件类型详解:剖析各文件作用与机制
2.1 配置文件:定义数据库运行环境
配置文件主要包含数据库初始化参数,用于决定数据库实例的启动模式、内存分配、线程启动等核心行为。最核心的配置文件是 dm.ini。除了 dm.ini 之外,还有用于集群环境的 dmmal.ini、用于归档配置的 dmarch.ini 等。修改配置文件后,通常需要重启数据库服务才能生效。
2.2 控制文件:维护数据库物理结构
控制文件 (扩展名通常为 .ctl) 是一个二进制文件,记录了数据库的物理结构信息。它包含了数据库名称、唯一标识符 (DB_MAGIC)、数据库创建时间、数据文件和重做日志文件的路径与状态等关键信息。控制文件在数据库启动时被读取,如果控制文件损坏,数据库将无法启动。
2.3 数据文件:存储实际业务数据
数据文件 (扩展名通常为 .DBF) 是物理存储结构中最为核心的文件,所有的业务数据最终都存放在数据文件中。在 DM 数据库中,数据文件以簇 (Cluster) 为单位进行分配,簇又由多个连续的页 (Page) 组成。DM 默认的页大小可以是 8KB、16KB 或 32KB。表空间由一个或多个数据文件组成,逻辑上的表数据最终映射到这些物理数据文件上。
2.4 重做日志文件:保障数据一致性与恢复
重做日志文件 (Redo Log,扩展名通常为 .log) 记录了数据库中所有修改操作的前滚日志。当数据库发生宕机时,DM 数据库可以利用重做日志文件将已经提交但未写入数据文件的事务重新应用 (前滚),从而保证数据的不丢失。DM 数据库通常采用循环写入的方式管理重做日志文件,至少需要两个重做日志文件组。
2.5 归档日志文件:实现时间点恢复
归档日志文件是重做日志文件的离线副本。当数据库运行在归档模式下,每当一个重做日志文件写满并发生切换时,后台进程会将该日志文件复制到指定的归档目录中。归档日志文件是数据库执行时间点恢复 (PITR) 的基础,在生产环境中强烈建议开启归档模式。
2.6 备份文件:提供灾难恢复基础
备份文件是通过 DM 的备份工具 (如 dmrman) 或 SQL 命令生成的,包含了数据库某个时间点的完整数据副本。备份文件可以分为全量备份、增量备份以及表空间级备份等。结合归档日志,备份文件能够将数据库恢复到故障发生前的任意时刻。
三、物理存储管理实践:掌握核心运维操作
3.1 查看物理文件路径:快速定位存储位置
在实际运维中,经常需要查询各类 DM 物理存储结构文件的具体路径。可以通过查询动态性能视图来获取当前数据库的数据文件、控制文件和日志文件信息。
SELECT GROUP_ID, PATH, STATUS$ FROM V$DATAFILE;
SELECT PATH FROM V$CTLFILE;
SELECT PATH, RLOG_SIZE FROM V$RLOGFILE;
3.2 表空间与数据文件扩展:应对数据增长
随着业务的发展,数据文件的空间可能会耗尽,此时需要对 DM 物理存储结构进行扩展。可以通过向表空间添加数据文件或扩大现有数据文件的大小来解决。
ALTER TABLESPACE MAIN ADD DATAFILE '/dm8/data/DAMENG/MAIN02.DBF' SIZE 128;
ALTER TABLESPACE MAIN RESIZE DATAFILE '/dm8/data/DAMENG/MAIN.DBF' TO 256;
3.3 日志文件切换与归档:优化I/O性能
重做日志文件的写入频率极高,合理配置日志文件大小和数量对数据库 I/O 性能影响显著。如果日志文件过小,会频繁触发检查点和日志切换,影响性能。
CALL SP_TRUNC_LOG_FILE();
ALTER DATABASE RESIZE LOGFILE '/dm8/data/DAMENG/DAMENG01.log' TO 1024;