本文档详细记录了为本次 Oracle 到 Dameng(达梦)数据库迁移项目所准备的源端 Oracle 数据库环境。
内容涵盖了虚拟机与 Oracle 数据库的规格、作为迁移源的 HR 示例方案的选型理由、安装部署过程,以及最终的环境验证结果,旨在为后续的数据迁移工作提供一个标准、可靠且可复现的入门案例。
同时,本文档还将特别记录和分析在迁移过程中遇到的一个关键现象:DTS“迁移评估”报告中的“SQL”类型不兼容问题(如 NO_CROSS_CONTAINER("SYS"."INT$DBA_SYNONYMS") 等内部查询报错),与实际“创建迁移” 100% 成功的差异性。
这一发现对于正确解读DTS评估报告、避免不必要的迁移阻碍具有一定的实践意义。
目录:
本次迁移的源端 Oracle 数据库部署于独立的虚拟化环境中,具体规格如下表所示:
| 项目 | 规格/版本 | 备注 |
|---|---|---|
| 操作系统 | CentOS 7 | 64位 |
| 虚拟机配置 | 4 处理器, 8 GB 内存, 40 GB 磁盘 | |
| 部署方式 | Docker 容器化部署 | 采用 gvenzl/oracle-xe 镜像 |
| Oracle 版本 | Oracle Database 21c Express Edition | |
| SYSDBA 密码 | Oracle123 | 在容器启动时通过环境变量设置 |
Docker 容器启动命令:
docker run -d --name oracle-db -p 1521:1521 -e ORACLE_PASSWORD=Oracle123 gvenzl/oracle-xe
进入 Docker 容器命令:
docker exec -it oracle-db /bin/bash
关键数据库操作命令:
本次迁移选择 Oracle 官方的 HR (Human Resources) 示例方案 作为数据源。
选择 HR 方案作为迁移源,主要基于以下考虑:
HR 方案模拟了一个小型企业的人力资源管理系统,核心表包括员工 (employees)、部门 (departments)、职位 (jobs)、地址 (locations) 等。
在进行方案部署前,首先使用 DataGrip 工具对 Oracle 实例进行连接性测试,以验证网络和基础配置的正确性。
连接参数:
连接配置:
测试结果显示连接成功,表明数据库实例已准备就绪。
经检查,gvenzl/oracle-xe 镜像为精简版,未包含 HR 示例方案,需手动安装。
1. 获取脚本:
访问 Oracle 官方 GitHub 代码库 github.com/oracle/db-sample-schemas,下载 ZIP 包并解压,获取 human_resources 文件夹。
2. 上传与挂载:
将 human_resources 文件夹上传至宿主机 /home/dmdba/oracle/ 目录,并使用以下命令将其复制到 Docker 容器的 /tmp/ 目录下:
docker cp /home/dmdba/oracle/human_resources oracle-db:/tmp/
3. 执行安装:
进入容器,以 SYSDBA 身份登录并切换至 XEPDB1 PDB 后,执行主安装脚本。
-- (若存在) 先删除可能冲突的旧用户
DROP USER hr CASCADE;
-- 执行主安装脚本
@/tmp/human_resources/hr_install.sql
在脚本执行过程中,根据提示输入密码 hr、表空间 users 等参数。
4. 脚本自动校验:
安装脚本执行完毕后,会自动进行数据校验,输出结果显示所有表的预期行数与实际行数完全一致,证明数据已完整加载。

结论:至此,源端 Oracle 数据库及 HR 示例方案已全部准备就绪,环境稳定可靠,数据完整,可以作为本次迁移工作的正式数据源。
创建目标库用户和表空间:
登录目标DM数据库(以SYSDBA身份)。
根据迁移准备文档的要求,为即将迁入的HR方案创建对应的用户(例如,也叫HR)和表空间 。
示例SQL (在DM中执行):
-- 假设为HR创建表空间,根据实际情况调整大小
CREATE TABLESPACE "HR_DATA" DATAFILE 'HR_DATA.DBF' SIZE 128;
-- 创建用户并指定默认表空间
CREATE USER "HR" IDENTIFIED BY "hr" DEFAULT TABLESPACE "HR_DATA";
-- 授予用户必要的权限
GRANT "DBA" TO "HR";
调整目标库参数(重要):
为了最大限度兼容Oracle,建议检查并调整DM数据库的COMPATIBLE_MODE参数。
示例SQL (在DM中执行):
-- 切换到 Oracle 兼容模式
SP_SET_PARA_VALUE(1, 'COMPATIBLE_MODE', 2);
-- 注意:该参数修改后需要重启数据库实例才能生效。
Oracle默认对象名大写,DM默认大小写敏感,迁移Oracle保持默认即可。
启动DTS工具:
新建评估工程:
新建一个工程,例如“Oracle_HR_Migration” 。
在工程下,右键选择【新建评估】 。
选择评估方式:Oracle ==> DM 。
配置评估源:
对象详情总览:
分析评估报告:
EDITIONABLE关键字 在DM中不兼容,你需要手动删除该关键字,然后点击【校验】 ,直到DTS提示“兼容” 。评估报告具体内容如下:
在所有测试中,HR模式的对象(表、视图、序列、存储过程等)均评估为“转换兼容”或“完全兼容”。唯一的“不兼容”项均来自“SQL”类型。
为检查问题原因,个人更换了不同版本的驱动,其他不变,检查评估结果是否改变,结果如下:
Oracle 21c (默认驱动):
Oracle 23c:
Oracle 12c:
迁移成功后,对目标DM库中的HR模式进行了完整性验证:
select object_type, count(*) from all_objects where owner = 'HR' group by object_type order by 1;SELECT 'EMPLOYEES', COUNT(*) FROM HR.EMPLOYEES UNION ALL ... (已省略)评估报告中“SQL”类型的不兼容,主要源于两种SQL:
V$SQL抓取的“样本”
V$SQL(动态性能视图)中抓取近期执行过的SQL作为“样本”。V$SQL是动态变化的,因此DTS每次抓取的样本集都可能不同。select value(p$) from "XDB"."XDB$ALL_MODEL" as of snapshot(:2)...。SELECT /*+ NO_STATEMENT_QUEUING RESULT_CACHE (SYSOBJ=TRUE) OPT_PARAM('_ENABLE_VIEW_PDB', 'FALSE') */ "OWNER","OWNERID","TABLE_NAME","OBJECT_ID","OBJECT_TYPE#","COLUMN_NAME","COMMENTS" FROM NO_CROSS_CONTAINER("SYS"."INT$DBA_COL_COMMENTS") "INT$DBA_COL_COMMENTS" WHERE "INT$DBA_COL_COMMENTS".SHARING=0 AND ("INT$DBA_COL_COMMENTS"."COMMENTS" IS NOT NULL AND "INT$DBA_COL_COMMENTS"."OWNER"=:1 AND ("INT$DBA_COL_COMMENTS"."TABLE_NAME"=:2 OR "INT$DBA_COL_COMMENTS"."TABLE_NAME"=:3 OR "INT$DBA_COL_COMMENTS"."TABLE_NAME"=:4 OR "INT$DBA_COL_COMMENTS"."TABLE_NAME"=:5 OR "INT$DBA_COL_COMMENTS"."TABLE_NAME"=:6 OR "INT$DBA_COL_COMMENTS"."TABLE_NAME"=:7 OR "INT$DBA_COL_COMMENTS"."TABLE_NAME"=:8))NO_CROSS_CONTAINER、INT$DBA...的查询失败。SELECT count(*) FROM NO_CROSS_CONTAINER("SYS"."_INT$_ALL_SYNONYMS_FOR_AO") "_INT$_ALL_SYNONYMS_FOR_AO" WHERE 1=1 AND 1=1V$SQL的样本,可能是DTS的“迁移评估”模块(可能受旧驱动影响)自己生成的、用于查询Oracle 21c/23c多租户架构数据字典的内部SQL。这些SQL本身带有Oracle独家语法或内部视图,导致DTS评估器评估失败了。DTS工具的“迁移评估” 与“创建迁移” 是两个在功能上相对独立的模块。
“迁移评估”中的SQL”类型评估项,其结果不具备决定性。该项评估失败(指不兼容的对象为SQL对象,若为模式对象需要手动修改兼容),不代表实际的“创建迁移”会失败。
在本次(Oracle HR)迁移测试中,所有版本的Oracle(12c, 21c, 23c)评估均显示大量“SQL”类型不兼容,但实际迁移 100% 成功,且数据与对象完整性校验通过。
总结:
在评估完成并处理完不兼容项后,才开始正式迁移。迁移过程和结果及检测参阅上面3.3 使用DTS工具:评估兼容问题分析
新建迁移任务:
Oracle ==> DM 。配置源和目的:
配置迁移选项(导师划重点):
保持对象名大小写 :Oracle默认大写,勾选此项能确保对象名在DM中也保持大写,避免应用SQL找不到对象 。使用默认数据类型映射关系 :先勾选。HR方案中的VARCHAR2和DATE是经典难题 。如果评估阶段没有发现问题,可使用默认映射。AL32UTF8,因此迁移策略中选择对应的字符集。
select * from V_$NLS_PARAMETERS where parameter='NLS_CHARACTERSET';选择与映射:
HR模式下的所有对象(表、视图、序列、存储过程等) 。HR正确映射到目标模式HR 。审阅并执行:
具体操作和结果参阅上面3.3使用DTS工具:评估兼容问题分析
对比对象数量:
在目标DM数据库中,使用HR用户登录。
执行SQL,对比HR方案中的对象类型和数量 。
示例SQL (在DM中执行):
select object_type, count(*)
from all_objects
where owner = 'HR'
group by object_type;
将这个结果与你在源端Oracle(或迁移报告)中的统计进行对比。
抽查数据完整性:
EMPLOYEES, DEPARTMENTS)的行数 。合理差异:
文章
阅读量
获赞
