随着国家对自主可控的日益重视,目前在各个行业和区域中面临越来越多的国产化,采用有自主知识产权的国产数据库将成为主流。DM 数据库以其丰富的产品架构、优异的性能表现、绝对的安全保证适应各种应用场景需求得到了众多客户的信任。DM 数据库针对 ORACLE 数据库可以做到完全替代,本文主要介绍 ORACLE 移植到达梦数据库的具体步骤及移植过程中的注意点和常见适配问题,供用户参考。
移植会涉及诸多场景,如容灾备份、应用改造/替代、数据库版本升级/回退、数据库替代、业务分流等,不同的场景在数据流向、停机窗口、同步需求、数据处理等方面会有不同的需求,需要针对性地选择迁移工具和方案。
考虑迁移或同步工具版本、驱动版本、基础环境、操作方式、对象个数、对象大小、数据量等均会影响迁移工作的开展,需要对源端和目的端数据库及服务器、业务系统进行调研,确保在满足相关需求的前提下稳定完成迁移。
确认迁移需求后,源端数据库需提前调研如下信息:
- 环境信息。提前了解操作系统层面,对工具能否使用可视化界面,或者端口号开放情况,可以方便在后期部署安装过程中,及时避开处理问题时的一些干扰项。主要包括对服务器、内存、CPU、网络、端口、安全策略、是否具备可视化界面等信息的调研。
- 业务系统信息。提前了解应用系统层面信息,结合应用系统特性,为后面制定迁移策略、迁移时间评估等提供参考。主要包括对业务类型、业务运行时段、停机窗口、数据量、数据增量、并发访问量等信息的调研。
- 数据库信息。提前了解迁移数据量、字符编码、归档保留、数据库对象、表空间等信息,为后续迁移做好规划和相关准备工作。
达梦数据提供了两种工具进行迁移前源端数据库兼容性评估:
数据迁移工具 DTS:提供了异构数据源之间的评估,迁移和对比功能。DM 数据迁移工具采用向导方式引导用户通过简单的图形化进行兼容性评估操作。
达梦企业管理器 DEM:支持对 ORACLE、MySQL、SQL Server 等主流数据库迁移到达梦数据库进行在线采集评估和自动转化,并提供兼容报告。
除此之外,需要人工对大表、大字段表这些是否单独迁移进行评估及如何配置大表、大字段表的迁移策略。
达梦公司提供了三种移植工具:数据迁移工具 DTS、数据复制软件 DMDRS 和数据集成软件 DMDIS,以满足不同移植场景的使用需求。
- 数据迁移工具 DTS
DTS 是一款免费的数据迁移工具,在数据库安装时自带有图形化的版本,同时也可以部署 DEM (达梦企业管理器),以 WEB 客户端方式提供。此工具主要适用于静态数据迁移场景。
- 功能简介 DM
DTS 基于成熟的关系数据模型和标准接口,跨越多种主流大型数据库,能以极少的系统开销实现数据迁移工作。DM DTS 的技术原理图如下图所示:
DM 数据迁移工具提供了主流大型数据库迁移到 DM、DM 迁移到主流大型数据库、DM 到 DM、文件迁移到 DM 以及 DM 迁移到文件的功能,DM 数据迁移工具采用向导方式引导用户通过简单的步骤完成需要的操作,数据迁移粒度灵活,DTS 客户端部署简单,对移植环境要求较低。
- 产品特性
(1)支持视图、存储过程/函数、包、类、同义词、触发器等对象迁移。
(2)支持数据类型的自动映射,编码转换。
(3)支持根据条件自定义迁移部分数据。
(4)向导式迁移步骤,上手简单。
(5)支持 web 端操作、监控。
(7)支持迁移评估。
- 典型场景
(1)支持全量静态数据迁移,无法实现数据增量迁移方式;
(2)为保障迁移全量数据的一致性,需要充足的业务系统停机窗口;
(3)迁移过程中,源端数据库不能有数据变更以及对象变更。
- 数据复制软件 DMDRS
- 功能简介
DMDRS 是支持异构环境的高性能、高可靠和高可扩展的数据库实时同步系统。通过秒级数据实时同步有效避免传统备份系统导致的无法完全满足企业对于信息系统不中断服务的问题;通过变化日志捕捉可以有效降低传统 ETL 工具因创建触发器、影子表等对业务系统带来的性能影响;通过实时的数据同步,构建“双活”的主备系统,解决传统基于数据库自身的主备系统中备机只读而无法对外提供写服务的问题。该产品可广泛应用于应急系统、容灾备份、负载均衡、数据移植、联机维护、订阅分发和多业务中心等业务领域。
DMDRS 的基础实现原理如下图所示:
- 产品特性
(1)部署形态支持单链路、文件转换、跨网闸、文件摆渡、主备、一对多同步、多对一同步、双向同步、级联同步、环状同步等。
(2)支持数据清洗转换 CVT 功能,比如:列名转换、字段映射、表合并、表拆分等。
(3)支持 web 端操作、监控。
(4)支持 DMDRS 主备功能。
(5)支持目标端为 kafka、redis、hdfs( Hadoop 分布式文件系统)等。
- 典型场景
DMDRS 移植场景下,源端数据库需要开启归档和逻辑附加日志。
(1)主要场景是停机窗口较短的业务系统,使用增量同步数据的方式缩短停机窗口,适用于平滑迁移或升级。
(2)支持数据全量和增量实时同步,非介入式捕获增量对源端数据库几乎无影响。
(3)可实现数据级灾备、业务分流,支持远距离异地容灾。
- 数据集成软件 DMDIS
- 功能简介
DMDIS 实现了对数据抽取、传输、整合、以及装载的一站式支持,是构建数据中心、数据仓库、数据交换和数据同步等数据集成类应用的理想平台。DMDIS 体系结构如下图所示:
- 产品特性
(1)支持 TXT、CSV、Excel、XML 文件、消息服务器、WebService、Restful。
(2)支持全量抽取、增量抽取,双向同步、文件同步、批量文件读取。
(3)支持对于简繁体、汉字拼音、乱码处理、字符集转换、中文数字的中国特有的问题提供内置的转换规则进行处理。
(4)支持中英文日期时间格式自动转换。
(5)支持 web 端操作、监控。
(6)支持二次开发接口,比如数据源的抽取装载接口、数据转换接口、元数据存取接口等。
- 典型场景
(1)周期性地从数据源中抽取变化数据加载到目的数据库中。
(2)数据种类丰富,来源多样且数据质量参差不齐,需要数据清洗。
(3)数据持续集成,不同类型数据集成周期可能不同,需要功能强大的作业调度与监控功能。
(4)跨部门、跨地域的数据共享和业务协同,不同系统间需要同步共享的数据,而系统中的数据可能是异构的,结构和类型都不相同,无法使用常规手段。
根据需求分析和数据库调研,结合每个应用系统的具体要求,选择合适的迁移工具,基于数据迁移的基本原则和迁移工具评估结果,制定合理的移植计划避免任何可能遗漏的步骤,保障迁移工作的稳定实施。
对于异构数据库移植到达梦,在正式迁移前,需要根据源端数据库的相关调研信息,对目的库的实例、表空间、用户等进行配置,以提高数据库间的兼容性,保障后续移植工作稳定进行。
同时,达梦数据的迁移工具均具有自动转换功能。大多数情况下,可通过相关迁移工具进行对象和数据移植,但由于异构数据库间语法并非 100% 兼容,少量数据则需要进行手动移植。
在进行正式环境的数据移植时,每一条数据都是真实的,有效的且完整的,在迁移完成后,必须要源端数据库的所有对象都准确无误的迁移到目的端,一旦出现缺少对象、缺少数据和数据内容不正确的情况,可能会导致历史记录缺少,甚至某些功能模块失效等严重后果。因此在迁移完成后,需确认是否出现迁移后的数据量、数据内容和对象个数不一致的情况,如果不一致应进行对应的维护。
移植后的收尾工作包括:索引补录、更新统计信息、备份、整理对象脚本等内容,保障移植工作的完整性。
一般情况下,源端数据库迁移完成后,直接更换应用连接源端数据源到达梦数据库,应用代码适配不用修改。为了验证系统移植的完整性,还需要进行应用的相关功能和性能测试,并改造应用到连接达梦数据库一个最佳状态。
此外,在对应用系统进行全面测试后,排除移植过程中错误的地方,还应对数据库中的慢 SQL 进行优化,保证移植后的系统高效运行。
本例构建了一套 Oracle 11g 的单机示例库,并介绍利用 DTS 工具从 Oracle 11g 移植 OT 用户下的所有对象到 DM8 数据库的详细步骤,以供参考。
考虑迁移或同步工具版本、驱动版本、基础环境、操作方式、对象个数、对象大小、数据量等均会影响迁移方案的制定、迁移工作的开展,需要对源端和目的端数据库及服务器、业务系统进行调研,确保在满足相关需求的前提下稳定完成迁移。
- oracle源端信息
部分调研项查询方法如下:
通过以上 SQL 统计出如下对象信息统计表:
其它 Oracle 端信息统计可参考如下 SQL:
- DM目的端信息
清楚目的端系统环境信息以便于选择对应版本的 DM 数据库进行安装。
达梦提供两种方式进行迁移评估,以下将详细介绍。
利用 DEM 的迁移评估工具,对源端数据库进行迁移评估,包括数据对象和 SQL ,最终形成迁移评估报告。可通过迁移评估报告提前了解哪些数据对象或 sql 需要单独处理,方便后续迁移的顺利进行。
下图为 DEM 界面,选择迁移评估模块。
- 右键新建迁移评估工程,输入迁移评估名称。
- 选择迁移评估方式,这里选择 Oracle ==> DM 。
- 输入 Oracle 数据库连接信息,点击下一步。
- 选择评估对象模式以及数据对象类型,点击下一步。
- 选择评估的具体数据对象,点击下一步。
- 迁移评估对象详情总览,点击下一步。
- 迁移评估开始。
- 等待迁移评估结束,查看迁移报告。
- 对于不兼容情况,可以点击“不兼容”,查看详情。
比如点击不兼容,点击详情我们可以了解到具体不兼容原因,并进行修改,补充到“转换后 SQL”模块中。
迁移评估完成后点击“导出”,方便后续查看。
使用 DTS 迁移工具进行迁移评估,详细步骤如下:
- 下图为 DTS 界面,选择评估模块。右键新建评估。
- 连接到源端数据库后,可以选择不同的评估项目,点击下一步。
- 选择需要评估的模式,点击下一步。
- 选择评估的具体数据对象,点击下一步。
- 迁移评估对象详情总览,点击完成。
- 等待评估结束,查看评估结果。
- 点击【查看评估报告】,可以查看评估概述、数据库信息、对象兼容详细、SQL 兼容详情,并且根据需要选择对应的导出报告类型。
对于不兼容情况,可以点击“不兼容”,查看详情。
比如点击不兼容 sql,点击详情我们可以了解到具体不兼容原因,并进行修改。
根据待移植的 Oracle 系统信息分析的情况,制定迁移计划:先对整库进行一次性迁移,再对迁移失败的或不兼容的对象进行手动迁移。
- Oracle 源端数据库准备
DTS 工具为静态迁移工具,在正式开始移植前需要停止所有对源端数据库的操作,避免数据变化或新数据的产生导致源端与目的端数据不一致。
- 目的端达梦数据库准备
- 数据库版本选择
DM 数据库会定期进行产品更新迭代。在进行项目移植前,需要先确定使用的 DM 数据库版本:
- 建议使用当前最新版本的数据库,以保证功能全面和兼容性更强。
- 版本优先选择完整版本。
- 版本与硬件环境一定要严格匹配,以减少干扰性的问题出现。
- 数据库架构选择
达梦数据库为用户提供多样的数据库架构适配用户不同的业务需求,用户可以根据业务系统需求选择达梦合适的数据库架构进行部署。DM 数据库架构可参考:
达梦数据库管理系统 DM8
数据共享集群 DMDSC
数据守护集群 DMDataWatch
新一代分布式集群 DMDPC
详细安装部署步骤可参考:达梦在线服务平台-运维指南-数据库规范化部署相关内容,本例中选择目的端数据库架构为单机。
- 初始化参数设置
源端为 Oracle 的情况下,对于目的端是达梦数据库的初始化参数,需要做好规划,初始化参数建议配置如下:
部分参数说明:
(1)EXTENT_SIZE:簇大小默认为 16 页,建议设置成 32 页。
(2)CASE_SENSITIVE:默认是大小写敏感,源端为 Oracle 情况下,建议保持默认大小写敏感即可。
(3)BLANK_PAD_MODE:空格填充参数,是否要兼容 Oracle 进行设置,即在 BLANK_PAD_MODE = 0 的情况下,’A’ 和 ’A ’ 被认为是相同的值,参数为 1 的情况下,认为是两个不同的值,根据现场具体应用的需求进行设置。此为初始化参数,只能在初始化时候指定,后续不可以修改,需要提前做好评估,但是源端为 Oracle 数据库的时候,建议设置为 1。
(4)CHARSET:字符集编码,可选 GB18030、UTF-8,默认为 GB18030,如果只存储中文和字母数字,使用 GB18030 更节省空间。
(5)PAGE_SIZE:页大小默认为 8K,建议设置成 32K,一条记录的长度,受到页大小的限制,不可以超过页大小的一半,所以建议一开始规划页大小为 32K。
- 兼容性参数设置
从 Oracle 移植到 DM,需额外注意以下参数。
COMPATIBLE_MODE:兼容参数,置为 2 为兼容 Oracle 参数,在 dm.ini 中可以进行配置,如果默认 0 的情况下,达梦视 null 不等同于空字符串,用户可能会插入空串,会导致 is null 查不出全部数据,所以视情况而定是否需要修改。
更多初始化参数的详细说明可参考达梦数据库安装目录下 doc 目录中的《 DM8_dminit 使用手册》或在数据库运行目录 bin 目录下执行以下命令查看部分初始化参数说明。
- 表空间规划
目的端的表空间规划,参照源库表空间使用情况即可,这里前期调研的源端数据库 oracle 信息可直接引用。另需注意,如源库存储业务数据并不存在独立表空间,目的端则需要创建单独的业务表空间(包括数据表空间以及索引表空间)。
目的端达梦的表空间需要根据源端数据量情况,规划表空间数据文件个数以及单个数据文件上限,单个数据文件不宜过大,可以创建多个数据文件。
需要根据源端表空间使用情况进行规划目的端数据文件初始大小,避免在迁移过程中频繁自动扩展,影响迁移速度,值得注意的是从 oracle 迁移到达梦,由于 oracle 高水位线的存在,会导致直接在 dba_segments 查出来的表大小比表实际大小要大,所以需要查看实际空间使用情况。
- 用户规划
目的端用户参照源库用户进行创建,对于权限设置、资源限制要求等内容需要按照目的端达梦实际上线要求进行设置,在用户规划时,需要注意:创建用户授予权限,不建议授予 DBA 角色,一般的权限,授予 resource、public、vti、soi、svi 这几个角色即可满足使用要求,其中各个角色的介绍,如下图所示:
设置用户的资源限制参数中,比较常用的几个参数如下图,图中显示参数缺省值均为在通用机情况下:
口令限制,在通用机中创建的用户口令长度,复杂度默认只有口令长度九位,即 PWD_POLICY=2,参数值含义如下:
用户口令最长为 48 字节,创建用户语句中的 PASSWORD POLICY 子句用来指定该用户的口令策略,系统支持的口令策略有:
0:无策略。
1:禁止与用户名相同。
2:口令长度不小于 9。
4:至少包含一个大写字母(A-Z)。
8:至少包含一个数字(0-9)。
16:至少包含一个标点符号(英文输入法状态下,除“和空格外的所有符号)口令策略可单独应用,也可组合应用。组合应用时,如需要应用策略 2 和 4,则设置口令策略为 2+4=6 即可。
该参数不可以在 dm.ini 中直接修改,需要用 SP_SET_PARA_VALUE 系统过程来修改,如 SP_SET_PARA_VALUE(1, 'PWD_POLICY',8)。
- 创建迁移用户和表空间
从 Oracle 移植到 DM,要先创建好待使用的用户和这个用户的表空间,不要把数据迁移到系统默认的管理员 SYSDBA 用户下和 MAIN 表空间下。
Oracle 的体系架构是单库多实例的模式,DM 数据库也是单库多实例的架构,从 Oracle 迁移到达梦的时候就需要针对 Oracle 中的库在达梦里面创建一个用户和表空间来对应。例如 Oracle 中有一个库 oracletest1,需要移植库中的 OT 模式下的数据对象,达梦里面先创建一个表空间 dbtest ,然后创建一个用户 OT-DM,指定默认表空间为 dbtest。示例如下:
(1)创建 dbtest 表空间存储 Oracle 中 oracletest1 库迁移过来的数据。
(2)创建 OT-DM 用户并授予权限,使用 dbtest 表空间。
迁移 Oracle 库的数据的时候,用 OT 用户连接 oracletest1;用 OT-DM 用户连接达梦,在迁移过程中指定迁移到的用户模式,这样就把 oracletest1 库的 OT 模式下的数据迁移到了达梦 OT-DM 用户模式下。
在做 oracletest 迁移的时候要先分析本次迁移需要从源库中移植库中的那个模式或者那几个模式下的数据,然后为每一个模式,分别在达梦中创建独立的表空间和用户,达梦同时生成相应的模式,大多数情况下,并不是所有的数据都需要迁移,所以在迁移准备阶段,一定要明确迁移那些模式下的哪些数据。
- 迁移工具准备
本文选择“DM 数据迁移工具 V8 (Build 2023.04.17)”作为本次迁移要使用到的迁移工具,不同版本界面显示上可能存在一些差异。该工具在安装数据库客户端时已安装完成可以直接使用,工具存放在 DM 数据库安装目录下 tool 文件夹中。
Linux 环境下进入 tool 目录中执行https://eco.dameng.com/document/dm/zh-cn/start/dts 即可运行 DM DTS 工具,windows 环境下可直接双击启动。
- 创建迁移
(1)打开 DMDTS 迁移工具点击左上方的 3 色图标新建迁移工程。
(2)打开刚刚创建的工程右键点击“迁移”,选择“新建迁移”。
新建迁移,自定义迁移名称。
(3)新建迁移完成后点击下一步。
(4)从“其他数据库迁移到达梦”选项中选择迁移方式为“Oracle ==> DM”。
- 连接数据库
迁移方式选择完毕后开始连接数据库,首先连接源端 Oracle 数据库,再连接目的端 DM 数据库。
(1)连接源端 Oracle 数据库。
输入源端 Oracle 数据库相关登录信息,在“数据库名”选项中选择需要迁移的数据库。
在创建连接 Oracle 数据库时建议通过指定驱动的方式来连接数据库,避免因为驱动版本不适配等问题导致迁移失败。驱动可以在 Oracle 官网获取与 Oracle 迁移版本相对应的驱动。
(2)连接目的端 DM 数据库。
输入目的端 DM 数据库相关登录信息,选择与源端对应的迁移用户连接数据库。
- 配置迁移对象及策略。
(1)迁移对象方式及迁移策略中勾选“保持对象名大小写”。
当勾选了“使用默认数据类型映射关系”后在迁移时 DTS 会将源端 Oracle 数据库中相应的数据类型采用默认的映射关系映射到目的端 DM 数据库中。如果在这里勾选了“使用默认数据类型映射关系”,后面又自定义了数据类型映射关系,DTS 会优先选择使用自定义的数据映射关系。
在“迁移策略”点击“查看数据类型映射关系”可以查看源端 Oracle 到目的端 DM 的数据类型映射关系,包括“源数据类型名”、“源精度”、“源标度”、“目的数据类型名”、“目的精度”等等。
(2)勾选源端待迁移的模式。
这需要勾选源端待迁移的模式下的数据。
在指定模式阶段,用户可以通过“源模式”选择源端要迁移的模式,通过“目的模式”来指定迁移到 DM 的模式,通过是否勾选“创建模式”、“表”、“视图”、“存储过程/函数”、“触发器”来指定目的端 DM 是否要迁入源端 Oracle 中的这些对象。由于在 DM 数据库准备阶段已经提前将 DBTEST 模式创建好了,这里就不勾选“创建模式”。
(3)勾选源端数据库中需要迁移的模式下的数据对象。
这里可以看到源端待迁移模式下所有的数据对象,用户可以自定义选择 Oracle 需要迁移的具体对象。
用户可以通过点击右上方的“分析源对象”统计选中的源端待迁移对象。用户可以通过该功能对源端迁移对象进行统计分析,包括“源对象统计”、“源表统计”、“源表详细”。
待迁移具体对象勾选完毕后可以通过点击转换进行自定义对象迁移策略。
(4)自定义对象迁移策略。
点击转换后可以设置表的映射关系,包括迁移策略和列映射选项。
① 迁移策略。
在迁移策略中可根据需要设置表及数据迁移的策略。在左侧选项中可以选择“表定义”、“主键”、“约束”、“索引”等的迁移策略;在右侧选项中可以配置与迁移数据相关的策略。
部分选项说明:
a. 压缩:指定迁移的目的表是否按照压缩方式存储。
b. 强制聚集索引:即使源表的主键为非聚集主键,创建目的表时也会被转换为聚集主键。
c. 强制非聚集索引:即使源表的主键为聚集主键,创建目的表时也会被转换为非聚集主键。
d. 启用标志列插入:如果表上有标志列,则迁移数据时会强制向标志列插入值,以保证源和目的数据完全一致
e. 显示行数:将在迁移任务过程中,显示数据的行数。
f. 拷贝记录:如果目的表已存在,直接拷贝记录,不需要创建表。
g. 删除后拷贝记录:迁移过程中先删除已存在的目的表,再重新创建新目的表。
h. 源一次读取行数:设置从数据源中读取数据时每次读取数据的行数,该参数决定内存中缓存结果集的大小,对于数据量很大的数据源,设置该参数,可以控制内存的使用。
i. 目的一次提交行数:设置向目的数据库中每次写入数据的行数。当数据量比较大时,减小该参数的值可以减少内存的使用。但会影响迁移的速度。
j. 缓存批数:设置缓存队列的长度。调整该参数可以调整迁移过程中内存的使用。
② 列映射选项。
在列映射选项中可根据需求修改源端迁移到目的端表的列名、数据类型、精度、小数位数、默认值、是否可空、主键、自增列、起始值、增量信息等。
完成映射关系的配置后,需要勾选“应用当前选择项到其他同类对象”,选择该选项后,将弹出对话框,选择其他同类对象,将此策略应用到相同对象上。如果不勾选“应用当前选择项到其他同类对象”,那么配置的迁移策略只会对当前选中的表生效。
- 开始迁移
(1)检查迁移任务,确认迁移对象是否正确。
(2)检查确认后点击“完成”即可开始迁移。
- 对象补迁
由于 Oracle 和 DM 数据库在某些语法使用上存在差异,导致某些对象可能会迁移失败,再加上在迁移评估阶段语法不兼容的对象,用户需要根据 DM 语法手动修改这些无法使用工具迁移的对象再导入到 DM 数据库中。
通过 SQL 脚本分别统计 Oracle 端和 DM 端的对象和数据量,通过对比判断是否迁移完成。
使用脚本进行验证介绍如下:
- 统计用户下各类对象的数量,在源端和目的端通过对应的系统表进行查询记录对比是否一致。
- 统计用户下的表数量及对应的数据条目,在源端和目的端分别创建辅助表,使用脚本将源端和目的端的表的数量和表的数据量插入到辅助表中,通过查看辅助表内的数据进行比对,验证表的数量和数据量是否一致。
- 统计各个表的数据量。
(1)在源端创建辅助表 table_count 用来统计模式下所有表的数据量。
(2)分别在源端和目的端执行脚本,将模式下表的数据量插入到辅助表 table_count 中,需要统计哪个模式将 ’OT’ 替换为模式名即可。
查询结果:
- 统计各种对象的数量。
在数据库中除了表还有索引,视图,序列,存储过程,PKG,自定义类型等都需要验证。
Oracle 端执行如下语句。
查询结果:
- 统计各个表的数据量。
(1)分别在源端和目的端创建辅助表 table_count 用来统计模式下所有表的数据量。
(2)在目的端执行脚本,将模式下表的数据量插入到辅助表 table_count 中。
查询结果:
- 统计各种对象的数量。
在数据库中除了表还有索引,视图,序列,存储过程,PKG,自定义类型等都需要验证。
达梦端执行如下语句:
下面的 sql 索引数量只统计达梦端用户自建索引的个数,其次是 ORACLE 数据库中自定义类型为 TYPE ,但是在达梦中自定义类型除了 TYPE 外还有一部分会归于 CLASS ,所以在对比 ORACLE 的自定义类型在达梦中应该是自定义类型 TYPE+CLASS。
查询结果:
在达梦数据库中物化视图是以表和视图的形式共同存在于数据库中,在查询时,将物化视图识别为表,也识别为视图。因此本例数据校验中,视图的数量为 1。
检查 DM 目的端的查询结果和 ORACLE 源端是否一致,本例中可以看到查询结果与 oracle 源端查询结果一致,表明迁移数据无缺失。
在之前的测试迁移,适配完成之后做的一些优化工作,可以创建一张记录表,将优化记录在一张表中,在正式迁移完成之后,将前期优化过程中添加的索引等内容进行补录。
先进行模式级别更新,再更新索引统计信息,也可以根据需求,进行单独表或者单独列进行更新,下面列出来一些更新统计信息的方式:
- 模式更新。
当迁移后全库数据量较小时,可以使用全模式更新的方法:
- 收集表的统计信息。
对于需要单独收集统计信息的表,可以按照如下方式收集:
- 收集所有列的统计信息。
当全库数据量较大时,按模式更新统计信息比较慢,可以使用全列收集统计信息的方式进行收集,通过存储过程完成对全库全部列的收集:
STAT < 统计信息采样百分比 > ON [< 模式名 >.]< 表名 >(< 列名 >);
如:STAT 100 ON TEST(A);
- 收集分区较多的分区表的统计信息
1)使用“”的方法收集统计信息时,水平分区表子表采样数受 HP_STAT_SAMPLE_COUNT 参数影响。需要适当调大此参数,参数值大于实际分区数,否则分区表统计信息收集不准确,参数修改方法如下:
2)若不调整 HP_STAT_SAMPLE_COUNT 参数,可以使用 DBMS 系统包进行 GLOBAL 全部分区收集,此方法收集统计信息速度较慢:
- 清除列的统计信息。
- 收集索引的统计信息 。
- 对表上所有索引生成统计信息。
- 收集表中某列的统计信息。
因为更新索引统计信息比较常用,可以建立一个 sql 脚本,将更新一个模式下的所有索引统计信息的语句输出到一个 sql 文件中,在需要执行时候,直接执行 sql 脚本文件,在索引数量很多情况下,执行 sql 脚本可以看到执行到哪条语句,语句如下:
完成整体的迁移工作后,如果为正式迁移,需要对系统做一次全库备份,如果是测试迁移,则需要将迁移过程中的问题处理等内容整理成迁移报告,以便后续正式迁移时,可以快速解决问题,完成迁移工作。
除此之外,通常情况下生产系统都需要制定定时备份任务,备份时间点建议避开业务高峰期,可根据配置备份作业任务。
一般情况下,oracle 数据库迁移完成后,直接更换应用连接 oracle 数据源到达梦数据库,应用代码适配不用修改。为了验证系统移植的完整性,还需要进行应用的相关功能和性能测试,并改造应用到连接达梦数据库一个最佳状态。
问题原因:一条记录的长度,超过页大小的一半。
解决方法:
- 修改初始化页大小为 32K,如果本身表中存在大量的 varchar2 类型,并且长度都很长的情况下不适用。
- 将类似 varchar(8000) 这些字段类型修改为 text。
- 开启超长记录。
问题原因:数据中含有中文,目的端达梦为 UTF-8,源端为 GBK,因两个字符集中文所占字节数不同,导致目的端存储数据报错。
解决方法:
- 初始化时选择 GB18030。
- 初始化时选择 varchar 类型以字符为单位。
- varchar 和 varchar2 类型的数据在迁移时指定对应数据类型字符映射关系 X2。
问题原因:因为表中设置了唯一性约束或者主键约束,但是数据中有重复记录。
源端因为是 Oracle,Oracle 默认就是区分结尾空格,达梦端如果初始化时候没有指定 BLANK_PAD_MODE=1,则不区分,如果这个字段上有唯一约束,会报错。
解决方式:如果是就有重复数据,那就和应用确认重复数据的处理方式;如果是因为空格问题,就需要考虑重新初始化实例,指定初始化参数 BLANK_PAD_MODE=1 后,再重新迁移。
问题描述:源端 Oracle 的函数索引,迁移时候报错“函数索引表达式超长”。
解决方式:迁移工具可能将函数索引表达式写了好多遍,获取源端函数索引定义语句,手动在目的端上创建。
问题描述:数据迁移过程中报错精度超出范围。
解决方式:判断是否源端和目的端字符集不一致,GBK 和 UTF-8 中文所占字节数不一致,可能导致该问题,可以在迁移的时候,指定数据类型映射关系,字符长度扩大几倍。
问题描述:在迁移外键的时候,报错被引用列未添加索引。
解决方式:先添加唯一约束再添加外键约束。
问题原因:所依赖基表未提前迁移完成。
解决方法:先将所依赖基表迁移完成后再尝试重新迁移视图。
问题原因:Oracle 里面视图名称和表名称允许同名,达梦不允许。
解决方法:修改其中一个数据库对象的名。
更多 Oracle 到 DM 迁移常见问题可参考达梦在线服务平台-常见问题-从 Oracle 迁移到 DM。
更多 DTS 工具使用详情可参考 DTS 工具“帮助主题”,具体位置见下图: