随着我国对信息安全和自主可控技术的日益重视,国产数据库在党政机关、军队和大型央企等行业中得到了快速应用。达梦数据库(以下简称DM)是国内数据库行业领军企业——达梦推出的一款自主可控的高性能数据库产品。

如何降低从Oracle到DM数据库移植的技术门槛,保障用户现有业务系统投资,美创DBA团队对Oracle安全移植到DM数据库的技术课题进行了研究实践。

从Oracle到DM的移植,主要包含以下工作

Ⅰ、 分析待移植系统,确定移植对象。

Ⅱ、 通过数据迁移工具 DTS 完成常规数据库对象及数据的迁移。

Ⅲ、 通过人工完成 PL/SQL 的移植。

Ⅳ、 移植完成后对移植的结果进行校验,确保移植的完整性和正确性。

Ⅴ、 对应用系统进行测试和优化。

具体移植攻略

1、 待移植系统分析

1. 1、信息采集,包括操作系统版本、数据库版本、应用开发平台、应用开发接口和需要移植的数据库对象;

1. 2、统计Oracle数据库基础信息;

1. 3、统计 Oracle 数据中的对象以及表数据量。

二、 准备移植环境

仅做移植兼容性测试。这里指的是用户或者开发商对于移植可能性和技术工作量的一个评估和确认工作,也就是尝试性的移植,移植后可能并不会立刻进行产品级的应用功能、性能、稳定性测试,在这种情况下,一般搭建最基础的移植环境即可,用虚拟机和物理机服务器都可以进行,且对配置无特别要求,满足基本运行条件即可;

为替换 Oracle

上线运行进行正式移植。在这种情况下,移植完成后,会对应用进行产品级全方位的功能点测试、性能测试、压力测试以及稳定性测试等集成测试。在这种情况下搭建移植环境,一定要优先采用物理服务器搭建,并且对于物理服务器的相关硬件配置要提出要求。

2. 1  DM 移植环境

2. 1.1、选择版本

版本优先选择完整安装版本,避免数据库客户端和服务器端存在版本不匹配带来的额外工作量,达梦在不同平台的不同版本上,安装包都会有差异,一定要采用严格匹配的原则。

2. 1.2、初始化参数

从 Oracle 移植到 DM 数据库,初始化参数建议:

(1)页大小 PAGE_SIZE

Oracle 也叫块大小(block),在 DM 数据库中,页大小可以为

4KB、8KB、16KB 或者 32KB,从 Oracle 移植到 DM,建议设置页大小为

8KB,一旦创建好了数据库,在该库的整个生命周期内,页大小都不能够改变。除了每个字段的最大长度限制外,每条记录总长度不能大于页面大小的一半。如果系统中存在或者以后可能存在含有较长的字符串类型的表,建议该参数设置为

16 或者 32。页大小设置越大,最后数据文件的物理大小就会越大,系统运行时,每次从磁盘调入内存的数据单位也就越大,所以此处要慎重。

(2)簇大小 EXTENT_SIZE

数据文件使用的簇大小,即每次分配新的段空间时连续的页数,只能是16页或32页,缺省使用

16 页,从 Oracle 移植到 DM 使用默认值就可。

(3)大小写敏感 CASE_SENSITIVE

DM

为了兼容不同的数据库,在初始化数据库的时候有一个参数字符串比较大小写敏感,用于确定数据库对象及数据是否区分大小写,默认为区分,不可更改。Oracle

迁移过来的系统,使用大小写敏感,以便和原来系统匹配。

(4)字符集 CHARSET

建议采用默认值 GB18030,如果需要国际字符可以采用Unicode,GB18030

数字字母占 1 个字节,普通汉字占 2 个字节,部分繁体及少数民族文字占 4 字节,Unicode 在达梦中采用 UTF-8 编码格式,欧洲的字母字符占 1 到

2 个字节, 亚洲的大部分字符占 3 个字节,附加字符为 4 个字节。如果只存储中文和字母数字,一般来说 GB18030 更节省空间一些。

2. 1.3、合理配置 INI参数

COMPATIBLE_MODE

参数,配置成兼容Oracle数据库模式。

在 INI 参数的

compatibility部分,还有其它的一些参数,在涉及到之前,尽量保持默认值,在移植准备的环节,先只调整这个参数就可以了,其它参数,在移植过程中,遇到了再具体分析。

2. 1.4、创建用户和表空间

移到系统管理员 SYSDBA 用户下和 MAIN 表空间下。首先需要分析本次移植

Oracle 源库需要移植的是哪一个或者哪几个用户的数据,然后分别创建这些需要移植的用户和对应的表空间;大多数情况下,我们需要移植的 Oracle

实例中可能存在有大量的用户,并不是所有的用户对象都是需要我们移植的,所以在移植准备阶段,一定要沟通明确清楚。

2. 2  Oracle 移植环境

在从 Oracle 向 DM7 进行移植准备阶段,也需要注意 Oracle

的移植环境:严禁在生产环境中直接迁移。因为移植首先是一个测试的工作,所以移植应该避免从Oracle生产环境数据库中直接进行移植,需要提前向应用开发商提出需要搭建一个测试环境,准备

Oracle 需要移植的环境和数据。直接从生产库上进行数据移植,有很多风险存在, 例如会影响生产库的效率,引发崩溃的可能等等。推荐使用 pl/sql

developer 工具进行移植测试工作。

3、 常规对象及数据迁移

常规对象指的是序列、表和视图,都可以通过达梦提供的数据迁移工具从 Oracle

完整的迁移到达梦数据库。

3. 1 制定迁移计划

3. 1.1、选择合理的迁移顺序:先迁移序列、再迁移表、最后迁移视图。

3. 1.2、对于数据量大的表单独迁移。

3. 1.3、对于分区表如果数据量没有超过 1

亿建议迁移成普通表,在分区列上创建索引。

3. 1.4、对于大字段较多的表,需要修改批量的行数,以免造成迁移工具内存溢出。

3. 2  Oracle 移植环境

序列对象一般不依赖其他模式对象,而被其他如表、过程所依赖,所以一般迁移过程中,

最先迁移序列对象。迁移序列方法:

3. 2.1、使用 DTS 工具迁移序列,此方法适用于批量迁移序列对象。DTS

工具使用方法可参考帮助-帮助主题。

3. 2.2、从源 Oracle

中获取序列定义,在目的库手动执行序列创建,此方法适用于所需迁移对象较少,或者对方法一中迁移出错的序列单独处理。

3. 3 表对象迁移

3. 3.1、一次性迁移

对于表比较少,数据量不大的系统,可以通过 DTS 采取一次性迁移。

3. 3.2、分批次迁移

对于表比较多,数据量大的系统,建议先迁移小表再进行大表的迁移,迁移时最好不用快速装载功能。

3. 4 视图对象迁移

3. 4.1、普通视图对象迁移

(1)使用 DTS 工具迁移视图,此方法适用于批量迁移视图对象。DTS

工具使用方法可参考帮助-帮助主题。

(2)从源 Oracle

中获取视图定义,在目的库手动创建视图,此方法适用于所需迁移对象较少,或者对方法一中迁移出错的视图单独处理。

3. 4.2、物化视图对象迁移

(1)使用 DTS

工具迁移物化视图,此方法适用于批量迁移物化视图对象。

(2)从源 Oracle

中获取物化视图定义,在目的库手动创建物化视图,此方法适用于所需迁移对象较少,或者对 a 方法中迁移出错的物化视图单独处理。

4、 PL/SQL 移植

接下来对自定义类型、存储过程、函数、触发器进行移植,可以使用达梦 DTS

工具进行迁移。如果遇到大量错误难以排查,也可以使用如下的方法进行分步迁移,导出待移植对象的脚本:

方法一:使用 PL/SQL DEVELOPER

等工具导出自定义类型、存储过程、函数、触发器等 PL/SQL 脚本。

方法二:在 sqlplus 中使用 Oracle

自带的包导出自定义类型、存储过程、函数、触发器等。

同理,其他类型如 TYPE, PACKAGE,PACKAGEBODY

等也可以用这种方法导出。

5、 移植后收尾工作

5. 1、更新统计信息

数据核对完成无问题后,应进行一次全库的统计信息更新工作。更新统计信息的目的在于大批量迁移数据后,可能会导致数据库优化器根据错误的统计信息得到错误的查询计划,严重影响查询性能。

5. 2、数据备份

再对数据更新完统计信息后,在数据量不大,磁盘空间足够的情况下应进行一次数据备份工作。数据备份有两种方式:正常停止数据库后,拷贝备份

data 文件夹;或者开启归档日志后,进行物理备份。

5. 3、整理对象脚本

整理所有数据库对象脚本,这是为了对项目移植情况进行记录和备份,方便再次进行数据迁移。备份的数据库对象脚本包括:序列定义及当前值,表定义,索引定义,视图定义,函数定义,存储过程定义,包及包体定义、自定义类型和同义词定义。

6、 系统测试与优化

数据库和应用系统移植完毕后开启 sql

日志,对系统进行全面测试,排除移植过程中错误的地方,对慢的 sql 语句进行优化。

在功能测试和性能测试的时候可以开启 SQL

日志,然后通过日志分析工具从执行时间和执行次数两个维度对 SQL 日志进行分析,生产分析结果,然后根据分析结果对系统性能进行优化。

结语

在数据库国产化进程中,大量Oracle数据库向国产数据库移植是一个长期、复杂的过程,需要管理、业务和运维各方的充分协作。美创DBA团队对Oracle到国产数据库的移植场景进行了充分探索和实践,可以结合客户实际环境和个性化需求提供安全、高效的移植服务,并确保数据库移植后生产业务系统的持续稳定运行。

oracle向达梦迁移工作量,从Oracle安全移植到国产达梦数据库的DBA实践相关推荐

  1. oracle pg 文件级迁移,Ora2pg 把oracle数据导入到postgres

    1 Ora2pg特性 1.导出整个数据库模式(表.视图.序列.索引),以及唯一性,主键.外键和检查约束. 2.导出用户和组的授权/权限. 3.导出筛选的表(通过制定表明). 4.导出Oracle模式到 ...

  2. 达梦迁移oracle,达梦数据迁移工具的使用

    作为国产数据库,达梦是比较典型的一种,开发工作中会用到其他数据库表迁移到达梦数据库的问题,在此记录一下迁移方法也为他人提供方便. 该工具仅用于其他数据库表及文本文件迁移达梦,或达梦数据库表迁移到其他数 ...

  3. 国产达梦数据库与Oracle数据库的区别

    1.登录的区别 oracle:如果sys的密码忘记可以用操作系统验证方式登录修改密码. dm:达梦数据库如果忘记了sysdba的密码则无法登录. 2.数据库的状态 oracle:oracle的状态有s ...

  4. 达梦创建dblink连接oracle

    1.首先下载oracle客户端 下载地址: https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downl ...

  5. hibernate oracle 读写分离_利用FDW进行ORACLE到Postgresql的数据迁移

    随着开源数据库技术的发展和去"O"工作的推进,越来越多企业生产系统选择使用Postgresql数据库.Pgsql采用多进程结构,其存储过程.函数的支持好于mysql.个人认为pgs ...

  6. 数据库迁移之从oracle 到 MySQL

    数据库迁移之从oracle 到 MySQL 转载于:https://www.cnblogs.com/langtianya/p/6814639.html

  7. mysql数据迁移 脚本_PHP将数据从Oracle向Mysql数据迁移实例

    为什么要迁移? 首先从运营成本考虑,用Mysql可以节约不少的费用.另一方面,Mysql的稳定性及功能不断地提高与增强,基本上可以满足客户的需求,如支持多 节点部署,数据分区等.还有就是Mysql使用 ...

  8. oracle表空间可以迁移,Oracle 表空间迁移

    迁移表空间databump 使用databump导入导出,两个库用户必须一致,否则另一个库导入的时候会报错.所以两个库都是用helei用户. 给两个数据库的用户分别授予dba权限,这里只是实验更清晰而 ...

  9. oracle 整个表空间迁移,oracle11g迁移表空间

    表空间名为sbjc,要从'D:\APP\ORACLE\ORADATA\TABLESPACE\SBJC.DBF' 迁移到 'F:\oracle\oradata\tablespace\SBJC.DBF'. ...

最新文章

  1. 用css绘制各种形状
  2. 传递给系统调用的数据区域太小怎么解决_40张图看懂分布式追踪系统原理及实践...
  3. 第 2 章 常量、变量和表达式
  4. 计算机等级考试初级网络工程师,计算机等级网络工程师考试内容
  5. freemarker list size问题
  6. WPF中TreeView.BringIntoView方法的替代方案
  7. 自己写cache server之网络框架处理——Oracle、Mysql都不靠谱儿(中)
  8. 全向轮移动平台参数校准
  9. FZU2105 Digits Count(按位建线段树)题解
  10. 《计算机组成原理》唐朔飞第三版知识点总结
  11. 新华三(H3C)校园招聘技术类笔试题2019
  12. 罗技G610:无驱动背光模式调整
  13. html怎么给文字添加视频链接,视频加文字水印,视频加图片水印,视频加外部链接,一个软件全部搞定...
  14. adb shell循环命令_Android ADB命令详解
  15. 英国帝国理工出品——SSIM对抗攻击
  16. 【elastic-job】elastic-job部署以及简单例子
  17. 企业级项目|用Python进行web开发企业统一用户认证和权限控制平台
  18. Linux中的 “~” 和 “/”符号代表含义?
  19. 三年级乘法计算机应用题目,三年级数学加减计算题大全
  20. Abusing UIViewControllers

热门文章

  1. R语言distVincentyEllipsoid函数计算大圆距离实战(Great Circle Distance)
  2. 字典学习(Dictionary Learning)
  3. LightGBM是什么?相对于xgboost有什么优势?如何使用randomSearchCV和lightgbm进行组合获取最优参数组合?
  4. 二代测序组装PK三代测序组装
  5. int数组转化为字符数组 java_Java 将int数组转换为字符串
  6. python 字典 转 pandas DataFrame
  7. flask uwsgi nginx *504* Gateway Time ou解决办法
  8. ubuntu18.04.4 pip3 换清华、阿里、豆瓣 源
  9. 9.可变参数创建不可变集合
  10. 2.合并区间(LeetCode第56题)