在将 Oracle 数据库迁移到 DM8 时,可能会出现数据膨胀的情况。这是由于 Oracle 和 DM8 在数据存储和处理方面的差异导致的。
| 特性 | Oracle | DM8 | 迁移影响与注意事项 |
|---|---|---|---|
| 表空间/数据文件 | 核心逻辑存储单位,由数据文件构成。 | 概念基本一致。 | 需在DM8手动预先创建与Oracle源端对应的表空间。 |
| 段(SEGMENT)/区(EXTENT) | 表、索引等对象是段,由区组成。 | 采用类似的段、区、数据块层级管理。 | 迁移后,段的初始区分配策略可能不同,影响初期空间占用。 |
| 字符集和编码差异 | Oracle的AL32UTF8或WE8ISO8859P1 | 达梦数据库如果字符集是UTF-8一个中文字符占三个字节,最多存1300个中文字符,达梦数据库如果字符集是GB18030一个中文占2个字节,最多存1950个中文字符。 | 不同字符集的字符映射规则不同,可能导致数据转换时的存储空间变化或乱码问题。 |
| 数据块(BLOCK) | I/O最小单位,可配置(如8K)。 | 页大小可在初始化时设定(如4K,8K,16K等)。 | 页大小选择至关重要,它会影响单行数据长度(如VARCHAR类型最大长度)和性能。 |
| 高水位线(HWM) | 标志段中已格式化数据块的最高点。 | 存在类似概念。 | DELETE操作后HWM不自动下降。在Oracle中执行delete删除操作不会降低高水位。原则上MWM只会增大,不会缩小。即使表中的全部数据都删除了,那么HWM还是原值。 |
| 成因 | 机制说明 | 迁移案例 |
|---|---|---|
| 页大小差异 | Oracle默认8KB,DM8在创建数据库时可以指定为 4KB、8KB、16KB 或者 32KB。数据迁移后,DM8可能因页大小增加而"膨胀"。 | 同一表数据文件的总物理大小通常会发生变化。 |
| 表空间规划不当 | 未分离数据/索引表空间,导致索引占用数据表空间,增加文件膨胀。 | 数据表空间初始10GB,无自动扩展,数据增长到15GB时触发扩展,但因混用,文件实际占用25GB。 |
| 页大小和HWM共同作用 | 相同逻辑数据量,HWM块数减半。 | DM8的HWM块数 = Oracle HWM块数 ÷ 2,但迁移工具可能错误保留Oracle的表空间大小,导致数据文件物理空间被过度分配(膨胀)。 |
可以看到,迁移后数据文件膨胀的可能原因有:
dm.ini中设置COMPATIBLE_MODE=2,以提高对Oracle语法的兼容性。| 特性 | 非聚簇表(普通堆表) | 聚簇表 |
|---|---|---|
| 物理存储 | 数据行无序存放,写入时放入第一个有足够空间的数据块。 | 将逻辑上关联紧密的数据(如主外键关联的表数据)物理上存储在一起。 |
| 优点 | INSERT效率高;全表扫描速度快;管理简单,是默认和主流选择。 |
等值连接查询效率极高,因为关联数据可能在同一个数据块中。 |
| 缺点 | 按非索引字段查询效率可能较低。 | INSERT可能更慢;全表扫描单个表效率低;如果聚簇键设计不佳易导致空间浪费。 |
根据资料,DM8不支持Oracle的"聚簇表"(Clustered Table)概念,但有表分区和索引组织表(IOT)作为替代方案。
| 方案 | DM8实现 | 适用场景 | 迁移建议 |
|---|---|---|---|
| 聚簇表 | 不支持,需用表分区或索引组织表替代 | 关联查询频繁(如报表、BI) | 将Oracle的聚簇表改为DM8的分区表 |
| 索引组织表 | CREATE TABLE ... ORGANIZATION INDEX |
主键查询频繁,减少索引维护开销 | 适合Oracle中使用CLUSTER的场景 |
| 标准表+索引 | 默认存储方式(与Oracle非聚簇表等效) | OLTP高频写入场景 | 保留Oracle的非聚簇表结构,但需优化索引 |
文章
阅读量
获赞
