oracle迁移达梦操作流程记录

oracle迁移达梦操作流程

达梦数据库的安装参考:

迁移参考:

官方提供的操作流程:https://eco.dameng.com/document/dm/zh-cn/start/migrate-oracle-dm.html 以及提供的pdf文档(更详细,pdf链接失效就在这个官方的里找):

DM DBA手记之ORACLE移植到DM.pdf

数据准备

需要迁移Oracle中的用户”LONGER”的模式”LONGER”中的数据,其中包括:

  • 2个Sequence:

    • TEST_SEQ1
    • TEST_SEQ2
  • 5张表Table:

    • EMPLOYEES → 8000条数据,一个索引
    • DEPARTMENTS
    • TEST_TABLE → 少量数据
    • USER_DATABASE → 1个联合索引
    • USER_PASSWD → 1个联合索引

    其中EMPLOYEES和DEPARTMENTS的数据量较大,但也没有多到需要多台机器。因此还是简单的单机数据迁移

  • 5个索引Index

    • DEPARTMENT_ID_IDX
    • EMPLOYEE_ID_IDX
    • PK_IP_NAME
    • PK_UNION
    • SYS_C0011120
  • 2个视图View

    • EMPLOYEE_BASIC_INFO_VIEW
    • EMPLOYEE_CONTACT_INFO_VIEW
  • 1个Function:

    • TEST_FUNC_ADD:简单的两数相加的函数
  • 2个存储过程procedure:

    • PROCEDURE_CALL 调用函数TEST_FUNC_ADD并通过DBMS_OUTPUT.PUT_LINE进行打印的存储过程
    • PROCEDURE_LONGER_TEST 插入一条数据到test_table的存储过程
  • 4个简单的包package(只有声明):

    • PKG_BBA
    • PKG_DEV
    • PKG_DEV1
    • PKG_TEST
  • 1个表级触发器Trigger:

    • MODIFY_TEST
  • 1个物化视图

    • EMPLOYEE_MVW

迁移步骤

使用达梦提供的迁移工具DTS进行迁移。

  • 如果两个数据库在同一个局域网,能够互相通信,则可以直接使用迁移工具进行迁移
  • 若不在同一个局域网,则需要一台中间机器,首先从Oracle迁移到中间机器,再迁移到目标机器上的达梦数据库。

本例中两个数据库能互通(192.168.226.200和192.168.226.103,在同一个子网192.168.226.1下),所以直接迁移。

新建工程和迁移

启动迁移工具

  1. 首先创建工程。

    一个工程下可以创建多个迁移任务和对比任务

  2. 然后右键“迁移”来创建迁移任务

    在这里插入图片描述

  3. 填写相关标识后创建成功,可以进行下一步

选择迁移类型

迁移工具提供了多种迁移种类,按照需求进行选择,这里选择将Oracle迁移到DM

在这里插入图片描述

连接到Oracle和DM数据库

输入Oracle和DM数据库的连接串信息来连接到两个数据库。一般是登录有“DBA”权限的用户,这样有权限迁移多个用户和对应的模式下面的数据。

在这里插入图片描述

在这里插入图片描述

查看数据类型映射关系

连接上数据库之后,点击下一步:

在这里插入图片描述

在“获取迁移对象方式”中选择“选择迁移对象”,这种方式允许我们在迁移工具加载完对象之后,手动选择要迁移的对象。

“迁移对象”中的选项通常默认,值得一提的是在“查看默认类型映射关系”中可以查看Oracle数据库到DM数据库的数据类型的映射关系,因为各自的数据类型并不完全一致,比如达梦中并没有date类型,取而代之的是使用TIMESTAMP时间戳类型。当然也可以自己定义映射关系。不过通常默认提供的就比较合适了。

选择迁移的schema

上步完成后,下一步中我们可以选择要迁移的schema以及其下的数据库对象。

在这里插入图片描述

注意:要迁移的schema最好要提前在达梦数据库中建立对应的表空间、用户和模式,否则直接迁移只会在DM中创建一个同名schema,不会创建用户,并且迁移的表都在默认的MAIN表空间下,这会造成管理混乱。

新建表空间可参考:https://eco.dameng.com/document/dm/zh-cn/start/dm-create-tablespace.html

创建用户、授权可参考:https://eco.dameng.com/document/dm/zh-cn/start/dm-user-tablespace.html

注意:此外,一般存储过程、函数、包中都会涉及各个数据库的方言,因此迁移通常着重迁移数据部分,也就是序列,表,视图、触发器等内容。对于存储过程、函数、包等数据库对象,可以通过PL/SQL或SQLPlus等工具将Oracle中相应的数据库对象导出到sql脚本,手动修改后在达梦中执行,达到迁移的目的。

PL/SQL导出对象可以选择:工具→导出用户对象,勾选相应的对象,之后便可导出到sql脚本中供修改使用。

在这里插入图片描述

不过本例中用来测试的存储过程、函数、包只有一些简单语法,可以直接正常迁移。

选定后,点击下一步

检查数据和转换内容

指定要转换的schema之后,迁移工具会分析并列举要迁移的数据库对象,在这里,我们可以进行预览和转换的设置:

在这里插入图片描述

↑选中一个table,【预览】能查看其中的部分数据

【转换】则允许我们对该对象的要转换的内容进行设定。

在这里插入图片描述

↑以一个table为例,【迁移策略选项】允许我们指定要迁移的内容,对于一些较大的表,可能需要将表定义、数据、索引等内容分开迁移,因此可以在这里指定,分多次迁移。

在这里插入图片描述

【列映射选项】里允许我们对列的映射情况进行检查和管理。比如调整列名,精度等

之后,下一步

检查确认

在这里插入图片描述

对要迁移的内容进一步检查,点击【完成】即可开始迁移。

检查报错与纠错

不出意外,迁移过程大概率会出现问题,要认真查看报错和官方文档找解决方法。就不一一列举(上面贴的pdf附件中有很多常见错误可参考)

比如,本次实验中,因为表数据设计的问题,出现以下报错:

在这里插入图片描述

分析:达梦数据库中没有DATE类型,均保存为TIMESTAMP时间戳类型。由于源表里的数据是批量生成的,规则是每生成一条数据,日期就减去一定的天数,导致出现了一部分不合法的公元前0年的数据,比如,在公元1年1月1日,减去25天得到的是公元前0年的12月7号,再转成日期类型看一下,就得到了报错中的非法日期值,导致迁移失败。不过直接往Oracle中插入公元前0年的数据也是不允许的。这种通过运算符得到公元前0年数据应该是Oracle的一个bug。
在这里插入图片描述
在这里插入图片描述

重新生成表的数据后,之后重新迁移数据(这个时候就可以在上面的【转换】中只选择数据)正常执行:

在这里插入图片描述

数据正常迁移

在迁移package时还出现了另一个错误:

有一个包在oracle只有简单的声明,这在oracle中是允许的:

create or replace package pkg_null is
end package;

但迁移到达梦中会报建包语法错误如下:

在这里插入图片描述

达梦不允许包内容为空,通过给包添加个简单的变量则来解决这个问题。不过实际上基本不会出现创建一个包却没有任何包体的情况

检查迁移后的模式内容

迁移完成后,可以对迁移的内容进行检查:

在这里插入图片描述

可以看到,新模式“LONGER”下的内容都正常迁移。

但是视图的图标上有红色的错误。那是因为该视图被先迁移了,导致没有找到表,按如下重新编译即可

在这里插入图片描述

所以,迁移过程中一般还要遵循一定的规则,一般来说:序列→表→视图→其他(存储过程,函数,包)

迁移完对比

也就是diff。在迁移完,还可以使用迁移工具中的【对比】,对迁移的内容进行diff。

类似迁移,简单流程如下:

  • 先创建一个对比

    在这里插入图片描述

  • 选择对比方式

    在这里插入图片描述

  • 使用连接串登录两个数据库

  • 选择对比选项(默认即可)

    在这里插入图片描述

  • 选择要对比的模式和其中的对象

    在这里插入图片描述

  • 【指定对象】界面中点击右上角的【添加源】会读取源模式中的对象,勾选想要对比的对象之后点确定,会列举与目的模式之间的对比的对应关系。勾选想要对比的项目,点击下一步。

    在这里插入图片描述

  • 检查对比概要之后点击完成即可开始对比

    在这里插入图片描述

  • 对比结果中可以看到一些diff信息,双击【不一致】下面的对应行的内容,可以打开具体diff详情:

    在这里插入图片描述

  • 再双击具体的不相等的内容可以查看细节:

    在这里插入图片描述

    这里以EMPLOYEES这个表为例。可以发现,只是表定义不同,因为将DATE类型转为了时间戳类型。数据量和数据内容都是没有不相等的。说明迁移是没问题的

  • 同样的,可以检查一下其他数据库对象的不相等的原因,以确定是否可用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值