注册
Oracle与达梦数据库体系结构对比
技术分享/ 文章详情 /

Oracle与达梦数据库体系结构对比

DM_336625 2026/05/21 27 0 0

一、Oracle数据库体系结构

1. 物理结构

物理结构是数据库在操作系统层面可见的文件集合:

1.1 数据文件(Data Files)

  • 作用:存储实际数据,包括表、索引、UNDO等
  • 特点:一个表空间可包含多个数据文件,一个数据文件只属于一个表空间
  • 命名.dbf后缀

1.2 控制文件(Control Files)

  • 作用:记录数据库物理结构信息(数据文件、日志文件位置)、当前日志序列号、检查点信息
  • 特点:建议多路复用(至少2份),丢失需恢复
  • 命名.ctl后缀

1.3 重做日志文件(Redo Log Files)

  • 作用:记录所有数据变更,用于实例恢复
  • 特点:至少2个组,循环写入,建议多路复用
  • 命名.log.redo后缀

1.4 归档日志(Archive Log)

  • 作用:历史重做日志备份,用于介质恢复
  • 模式:归档模式/非归档模式

1.5 参数文件(Parameter File)

  • 类型:PFILE(文本)和SPFILE(二进制)
  • 作用:定义实例启动参数

1.6 密码文件(Password File)

  • 作用:管理远程管理员权限认证

2. 逻辑结构

数据库(Database)
  └── 表空间(Tablespace)
        └── 段(Segment)
              └── 区(Extent)
                    └── 块(Block)

2.1 数据块(Data Block)

  • 基础单位:I/O最小单位,默认8KB(可配置2K/4K/16K/32K)
  • 结构:块头、表目录、行目录、空闲空间、行数据

2.2 区(Extent)

  • 作用:一组连续数据块,空间分配最小单位

2.3 段(Segment)

  • 类型:数据段、索引段、UNDO段、临时段
  • 特点:一个表/索引对应一个段

2.4 表空间(Tablespace)

  • 类型

    • SYSTEM:系统数据
    • SYSAUX:辅助系统
    • UNDO:回滚数据
    • TEMP:临时数据
    • USERS:用户数据

3. 内存结构(SGA + PGA)

3.1 SGA(System Global Area)

  • 共享池:SQL解析结果、数据字典缓存
  • 数据库缓冲区缓存:数据块缓存(DB Cache)
  • 重做日志缓冲区:Redo记录临时存储
  • 大池:RMAN备份、并行查询
  • Java池:Java程序支持

3.2 PGA(Program Global Area)

  • 排序区:ORDER BY/GROUP BY操作
  • 会话区:会话变量
  • 游标区:SQL执行状态
  • 堆栈区:函数调用堆栈

4. 进程结构

  • 用户进程:客户端应用

  • 服务器进程:处理SQL/PLLSQL

  • 后台进程

    • SMON:实例恢复、合并空闲区
    • PMON:清理失败进程
    • DBWR:将脏块写入数据文件
    • LGWR:将Redo日志写入日志文件
    • CKPT:触发检查点
    • ARCH:归档日志

5. 关键特性

  • 多租户架构(12c+):CDB + PDB
  • ASM:自动存储管理
  • RAC:集群并发访问
  • Data Guard:容灾复制

二、达梦数据库体系结构

1. 物理结构

1.1 数据文件

  • 特点:与Oracle类似,支持表空间多文件
  • 命名.dbf(兼容)或自定义

1.2 控制文件

  • 作用:记录数据库名、数据文件/日志文件列表、检查点信息
  • 特点:必须至少1个,支持多路复用(dm.ctl

1.3 日志文件

  • 重做日志:在线日志(循环写入),类似Oracle
  • 归档日志:历史日志备份

1.4 配置文件

  • dm.ini:主配置文件(类似Oracle PFILE)
  • dmmal.ini:集群配置
  • dmarch.ini:归档配置
  • dmwatcher.ini:守护进程配置

1.5 达梦特有文件

  • 回滚文件dm_roll,存储回滚记录
  • 数据辅助文件:辅助管理大对象

2. 逻辑结构

数据库(Database)
  └── 表空间(Tablespace)
        └── 段(Segment)
              └── 簇
                    └── 页(Page)← 对应Oracle Block
                          

2.1 数据页(Page)

  • 默认8KB,支持4K/8K/16K
  • 页内结构:页头、数据区、空闲区、行偏移数组

2.2 表空间类型

  • SYSTEM:系统字典表
  • ROLL:回滚表空间
  • TEMP:临时表空间
  • MAIN:默认用户表空间(类似Oracle USERS),包含HMAIN,混合表空间

3. 内存结构

达梦采用全局内存池 + 会话私有内存模式(类似SGA+PGA)

3.1 全局内存(对应SGA)

  • 内存池:包括共享内存池和其他一些运行时内存池。

  • 缓冲区:

    • 数据缓冲池:缓存数据页(可配置多缓冲池:NORMAL/FAST/RECYCLE)

    • 日志缓冲池:日志缓冲区是用于存放重做日志的内存缓冲区。

    • 字典缓冲区:字典缓冲区主要存储一些数据字典信息,如模式信息、表信息、列信息、触发器。

    • SQL 缓冲区:SQL 缓冲区提供在执行SQL语句过程中所需要的内存,包括计划、SQL语句和结果集

  • 排序区(全局部分):大型排序共享区域

  • 哈希区:DM8提供了为哈希连接而设定的缓冲区,不过该缓冲区是个虚拟缓冲区。

3.2 会话私有内存(对应PGA)

  • 私有SQL区、排序区(会话级)、游标区、哈希区

4. 进程结构

  • 守护进程:系统监控和守护(dmserver主进程 + dmwatcher

  • 工作线程:处理用户请求

  • 后台线程

    • IO线程:异步I/O管理
    • 日志线程:日志写入
    • 检查点线程:定期检查点
    • 回收线程:空间回收(类似Oracle SMON功能)
    • 监控线程:系统监控(类似PMON)

与Oracle区别:达梦采用多线程架构(一个进程多线程),Oracle早期版本多进程,现代版本混用。

5. 关键特性

  • MPP集群:大规模并行处理
  • 读写分离集群:类似Oracle Data Guard
  • 数据复制:异步/同步复制
  • 列存储(HUGE表)+ 行存储混合
  • PL/SQL兼容:支持Oracle风格存储过程

三、详细对比表格

对比维度 Oracle 达梦DM8
数据库模型 关系型 + 多租户(CDB/PDB) 关系型
架构风格 多进程(Unix/Linux) 多线程(跨平台一致)
物理文件 .dbf, .ctl, .log, .arc .dbf, .ctl, .log, dm.ini等
特有文件 密码文件、参数文件(SPFILE) 回滚文件、集群配置文件
块/页大小 2K~32K,默认8K 4K/8K/16K,默认8K
表空间类型 SYSTEM, SYSAUX, UNDO, TEMP, USERS SYSTEM, ROLL, TEMP, MAIN, HMAIN
逻辑层级 DB → Tablespace → Segment → Extent → Block DB → Tablespace → Segment → Extent → Page
UNDO管理 UNDO表空间自动管理 回滚表空间(ROLL)
内存管理 SGA + PGA 全局内存池 + 会话私有内存
缓冲池 DEFAULT/KEEP/RECYCLE NORMAL/KEEP/RECYCLE
SQL解析 共享池(硬/软解析) 共享池(缓存计划)
并行查询 支持(需要并行度配置) 支持
高可用 RAC, Data Guard MPP, 读写分离集群, 数据复制
容灾方案 Active Data Guard DM Data Watch
备份恢复 RMAN(成熟强大) 逻辑备份/物理备份(DMRMAN)
自调优 AWR, ASH, SQL Tuning Advisor 动态性能视图,部分自动调优
第三方兼容 标准SQL,PL/SQL 高度兼容Oracle PL/SQL语法

四、核心差异深入剖析

1. 内存架构差异

Oracle:

  • SGA通过SGA_TARGET自动调优(11g+)
  • 缓冲区分Default/Keep/Recycle池
  • PGA单独管理

达梦:

  • 全局缓冲池可通过BUFFER参数设置,支持多池
  • 提供SSD缓冲(Oracle无)
  • 简化内存结构,对DBA更友好

2. 进程vs线程

Oracle (Unix):

bash

oracle_<SID> (PMON)
oracle_<SID> (SMON)
oracle_<SID> (DBW0)
oracle_<SID> (LGWR)

达梦:

bash

dmserver (主进程,内部含多线程)
├── IO线程
├── 日志线程
├── 工作线程1...N
└── 监控线程

影响:达梦在Windows上更高效(Oracle Windows版本也是线程模式)。

3. UNDO实现

Oracle:

  • 自动UNDO管理(推荐)
  • UNDO保留时间(UNDO_RETENTION
  • 闪回查询依赖UNDO

达梦:

  • 回滚表空间(ROLL),类似UNDO
  • 回滚记录物理存储在dm_roll文件
  • 支持闪回查询(通过回滚记录实现)

达梦社区技术 https://eco.dameng.com

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服