热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

从Oracle安全移植到国产达梦数据库的DBA实践与攻略

随着我国对信息安全和自主可控技术的重视,国产数据库在党政机关、军队和大型央企等行业中得到了快速应用。本文介绍了如何降低从Oracle到国产达梦数据库的技术门槛,保障用户现有业务系统投资。具体包括分析待移植系统、确定移植对象、数据迁移、PL/SQL移植、校验移植结果以及应用系统的测试和优化等步骤。同时提供了移植攻略,包括待移植系统分析和准备移植环境的方法。通过本文的实践与攻略,DBA可以更好地完成Oracle安全移植到国产达梦数据库的工作。

前    言

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


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



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

  1. 分析待移植系统,确定移植对象。

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

  3. 通过人工完成 PL/SQL 的移植。

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

  5. 对应用系统进行测试和优化。


具体移植攻略

No.1

待移植系统分析


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

(2)统计Oracle数据库基础信息;

(3)统计 Oracle 数据中的对象以及表数据量。


No.2

准备移植环境


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


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


2.1  DM 移植环境

选择版本

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


初始化参数

从 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 更节省空间一些。


合理配置 INI参数

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


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


创建用户和表空间

从 Oracle 移植到 DM7,要求必须创建新的用户和表空间,不要把数据迁移到系统管理员 SYSDBA 用户下和 MAIN 表空间下。首先需要分析本次移植 Oracle 源库需要移植的是哪一个或者哪几个用户的数据,然后分别创建这些需要移植的用户和对应的表空间;大多数情况下,我们需要移植的 Oracle 实例中可能存在有大量的用户,并不是所有的用户对象都是需要我们移植的,所以在移植准备阶段,一定要沟通明确清楚。


2.2  Oracle 移植环境

在从 Oracle 向 DM7 进行移植准备阶段,也需要注意 Oracle 的移植环境:严禁在生产环境中直接迁移。因为移植首先是一个测试的工作,所以移植应该避免从Oracle生产环境数据库中直接进行移植,需要提前向应用开发商提出需要搭建一个测试环境,准备 Oracle 需要移植的环境和数据。直接从生产库上进行数据移植,有很多风险存在, 例如会影响生产库的效率,引发崩溃的可能等等。推荐使用 pl/sql developer 工具进行移植测试工作。


No.3

常规对象及数据迁移


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


3.1  制定迁移计划

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

  • 对于数据量大的表单独迁移。

  • 对于分区表如果数据量没有超过 1 亿建议迁移成普通表,在分区列上创建索引。

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


3.2  Oracle 移植环境

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

  • 使用 DTS 工具迁移序列,此方法适用于批量迁移序列对象。DTS 工具使用方法可参考帮助-帮助主题。


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


3.3  表对象迁移

  • 一次性迁移

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


  • 分批次迁移

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


3.4  视图对象迁移

  • 普通视图对象迁移

(1)使用 DTS 工具迁移视图,此方法适用于批量迁移视图对象。DTS 工具使用方法可参考帮助-帮助主题。


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


  • 物化视图对象迁移

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

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


No.4

PL/SQL 移植


接下来对自定义类型、存储过程、函数、触发器进行移植,可以使用达梦 DTS 工具进行迁移。如果遇到大量错误难以排查,也可以使用如下的方法进行分步迁移,导出待移植对象的脚本:


  • 方法一:使用 PL/SQL DEVELOPER 等工具导出自定义类型、存储过程、函数、触发器等 PL/SQL 脚本。


  • 方法二:在 sqlplus 中使用 Oracle 自带的包导出自定义类型、存储过程、函数、触发器等。


同理,其他类型如 TYPE, PACKAGE,PACKAGEBODY 等也可以用这种方法导出。


No.5

移植后收尾工作


  • 更新统计信息

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


  • 数据备份

再对数据更新完统计信息后,在数据量不大,磁盘空间足够的情况下应进行一次数据备份工作。数据备份有两种方式:正常停止数据库后,拷贝备份 data 文件夹;或者开启归档日志后,进行物理备份。


  • 整理对象脚本

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


No.6

系统测试与优化


数据库和应用系统移植完毕后开启 sql 日志,对系统进行全面测试,排除移植过程中错误的地方,对慢的 sql 语句进行优化。


在功能测试和性能测试的时候可以开启 SQL 日志,然后通过日志分析工具从执行时间和执行次数两个维度对 SQL 日志进行分析,生产分析结果,然后根据分析结果对系统性能进行优化。


结   语


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


关于美创

杭州美创科技有限公司,敏感数据保护和数据安全领域的拓荒者和领导者,由国内多名数据库资深专家携手于2005年成立,产品及服务覆盖数据安全、数据管理、容灾备份、智能运维等四大领域,广泛应用于医疗、教育、金融、政府、人社、电力能源、物流交通、企业等众多行业。多年来,凭借卓越的技术创新与良好的用户口碑,美创多次入围全国网络安全50强,并参与多项国家及行业标准的编写,引领数据安全领域的规范发展。目前,美创科技已全面推动全国市场化发展战略,相继在北京、广州、武汉、南京、成都、上海等地设立分公司,致力于为更多的客户提供专业的安全解决方案。



推荐阅读
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • 集成电路企业在进行跨隔离网数据交换时面临着安全性问题,传统的数据交换方式存在安全性堪忧、效率低下等问题。本文以《Ftrans跨网文件安全交换系统》为例,介绍了如何通过丰富的审批流程来满足企业的合规要求,保障数据交换的安全性。 ... [详细]
  • RouterOS 5.16软路由安装图解教程
    本文介绍了如何安装RouterOS 5.16软路由系统,包括系统要求、安装步骤和登录方式。同时提供了详细的图解教程,方便读者进行操作。 ... [详细]
  • 面向对象之3:封装的总结及实现方法
    本文总结了面向对象中封装的概念和好处,以及在Java中如何实现封装。封装是将过程和数据用一个外壳隐藏起来,只能通过提供的接口进行访问。适当的封装可以提高程序的理解性和维护性,增强程序的安全性。在Java中,封装可以通过将属性私有化并使用权限修饰符来实现,同时可以通过方法来访问属性并加入限制条件。 ... [详细]
  • 本文介绍了一种轻巧方便的工具——集算器,通过使用集算器可以将文本日志变成结构化数据,然后可以使用SQL式查询。集算器利用集算语言的优点,将日志内容结构化为数据表结构,SPL支持直接对结构化的文件进行SQL查询,不再需要安装配置第三方数据库软件。本文还详细介绍了具体的实施过程。 ... [详细]
author-avatar
玉米猴子_794
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有