ESB产品Oracle数据库升级说明

news2024/9/20 10:34:45

ESB企业服务总线平台作为支撑企业综合集成的产品,在应用集成、数据集成、数据治理等解决方案都发挥着非常重要的作用。随着产品和解决方案的不断优化和升级,ESB企业服务总线平台功能需要逐步进行完善,不断提升产品功能的完备性、易用性和全面性。

为了更好的适配企业大数据量的使用要求,近期对ESB产品的应用数据库类型进行了扩展,原来的产品只支持MySQL数据库,升级后可以兼容Oracle数据库。在升级的过程中涉及到了部分文件的修改和配置,下面进行介绍说明。

1总体概述

本文将对如何升级ESB产品适配Oracle数据库进行介绍,并对升级Oracle数据库进行需求分析,介绍在什么场景下需要调整,以及具体实现思路。由于两个数据库中的语法有部分不一样,所以需要对于不同的数据库类型进行适配。

1.1总体概述

本次开发需要参照原ESB中的MySQL数据库对应升级兼容Oracle数据库。MySQL数据库具有体积小、速度快、成本低等优势,开放源码更是使其大受欢迎。Oracle数据库具有移植性好,使用方便、功能强等优势,各种相应的开发工具或者可视化工具都比MySQL多些。二者语法上的差异并不是很大,都是一些细枝末节,脚本基本围绕增、删、改、查等基本操作,所以对于这种脚本转换的语法需要进行细致的了解并修改。

1.2场景说明 

原ESB产品已经有Oracle数据库初始化文件,但一直使用MySQL数据库进行开发,增添了很多SQL数据,本次主要把MySQL数据库的数据同步转移到Oracle数据库并且实现用户切换数据库时可以自动切换成对应数据库类型的SQL语句执行。目前MySQL数据库的文件为“mysql.sql”文件,Oracle数据库的文件为“oracle.sql”文件,需要把这些文件的数据导入到Oracle数据库,进行升级开发。

1.3实现思路

对于如何进行Oracle数据库的升级步骤介绍说明。

1.在Oracle创建ESB库(本次升级的Oracle版本为12c); 

2.导出MySQL的数据库结构;

3.通过Navicat数据传输功能把MySQL数据同步到Oracle; 

4.修改数据库配置文件:

(1)修改dataSource.type=sqlmap4oracle;

(2)修改数据库连接改成Oracle数据库连接;

5.对应sqlmap4oracle目录进行调整,把sqlmp里的xml文件复制到sqlmap4oracle目录下;

6.修改xml里的sql语句改成能够Orcale在运行的SQL(调整顺序先调整首页和登录页面的,再根据ESB功能模块调整)。

7.运行ESB产品功能,全生命周期对功能测试调整

2数据同步

首先需要在Oracle数据库中做一些前置工作,包括创建表空间以及用户,并把MySQL数据库中的初始化数据进行数据传输到Oracle中。

2.1创建数据

Navicat是数据库可视化连接工具,该工具可以连接各种数据库如MySQL和Oracle。在MySQL中,数据库和用户之间的关系不是特别明显,只要我们连接到MySQL服务器,就可以看到所有的数据库和表,而Oracle新建一个用户没有任何资源和权限,需要我们为其分配资源权限,也可以在这个用户下面建立表,但不能像Oracle那样建数据库,因为对Oracle来说,一个用户就对应MySQL的一个数据库。所以迁移数据库,需要在Oracle中创建一个与相应MySQL数据库同名的用户。

使用Navicat创建Oracle表空间和用户,主要是在Oracle创建ESB表空间和用户。

1.打开Navicat工具,连接数据库,这里连接的是本地数据库做演示连接数据库:

起一个连接名,这个名称可任意,然后输入用户名和密码,点击测试连接,最后点击确定。

2.连接数据库后,进行创建表空间。选中自己刚刚创建的数据库连接,点击其他,其他中有表空间选项,点击表空间即可进入创建操作表空间页面。  

先选择表空间类型,表空间类型有以下几种:

这里选择的是永久表空间。信息填写完毕,点击左上角保存即可。

3.创建用户(注意:注意用户名需要设置为全大写英文字母),默认表空间设置为刚刚新建的表空间:

4.配置服务器权限。

5.登陆测试连接,登录刚新建的用户,就可以连接到新配置的表空间。输入刚刚创建的用户名和密码,点击测试连接即可。

2.2调整要点

两种数据库存在一定的区别,下面将对调整的要点进行介绍:

1.字段类型:MySQL数据库与Oracle数据库的字段有着很多不同,需要将MySQL的字段类型替换成Oracle对应的字段。

2.语法区别:MySQL数据库与Oracle数据库的语法有着很多不同,需要将MySQL的语法替换成Oracle对应的语法,例如:MySQL用AS起别名,而Oracle直接用空格代替

3.函数替换:MySQL数据库与Oracle数据库的语法有着很多不同,需要将MySQL的函数替换成Oracle对应的函数。 

2.3同步数据

通过Navicat数据传输功能把MySQL数据同步到创建的Oracle数据库中。左侧是MySQL数据库,右侧是Oracle连接。

选择高级,把创建表勾选取消,转换对象选择大写,遇到错误继续选择把正确的先导进去。

3配置调整

对于ESB产品的一些数据库配置需要进行调整,底层代码中需要查询的部分也需要进行两种数据库的兼容。 

3.1引入依赖

接下来对底层Oracle驱动jar包如何调整进行介绍。全部文件需要复制到ESB产品文件夹下的“\shared”文件夹中,删除原“ojdbc6.jar” jar包文件,如果服务是启动状态的,替换后需要进行ESB产品重启。需要添加调整的jar包名如下:

3.2配置文件

接着对数据库配置文件进行修改,对数据库配置文件进行调整如下:

1.数据类型修改成Oracle,修改数据库连接改成Oracle数据库连接:

2.修改对应数据库配置文件改成Oracle驱动的,填写用户名、密码。

3.3月表创建

修改ServiceContext.xml下添加属性:

调整之后验证ESBServer的启动。来到“/bin”目录下的startup.bat文件,进行ESB产品的启动,查看月表是否创建成功

4调整过程

该模块对于升级调整顺序进行介绍,并对文件如何调整进行总结说明,最后对MySQL升级Oracle的具体语法区别进行总结。

4.1调整规划

把要进行调整的代码内容进行规划。

1.首先是登录、权限、首页相关。

2.然后依照下面升级顺序调整:

(1)系统管理、系统资源;

(2)服务工程、API管理、应用集成;

(3)运行监控、统计分析、文件传输

4.2配置调整

在对产品的xml文件进行调整之前,首先需要将原来系统支持的MySQL相关的xml文件复制后调整为对应的Oracle数据库相关的xml文件,下面进行简要说明。

1.sqlmap同目录下有一个sqlmap4oracle目录。

2.把sqlmp里的xml文件复制到sqlmap4oracle目录下。

4.3语句修改

MySQL和Oracle两者的语句有部分不同,所以需要把MySQL中能用但Oracle中不能用的函数或类型等改为Oracle中能用的类型,以下是总结出的部分语法区别:

1.CREATE DATABASE/TABLE IF NOT EXISTS(创建数据库中不存在的数据表):

MySQL直接判断是否存在数据库X,若不存在就建立该数据库,通过用户X,使用该数据库。Oracle通常使用可视化工具Database Configuration Assistant(数据库配置助理,DBCA)创建数据库。

MySQL中大量使用该语句,简单实用安全可靠,通常搭配后面紧跟的“CREATE TABLE”,但是Oracle不支持该语法,只有DROP TABLE,需要注意的是没有该表的时候直接DROP会报错。

2.INSERT INTO...VALUES/SELECT(插入语句):

插入语句的转化由下例给出,Oracle不支持 “\”作为转义符;DATE类型需要说明格式;当使用查询“SELECT”时,没有括号;注意MySQL的插入值是一对多(VALUES值有多个)还是一对一,Oracle不支持一对多。

3.FUNCTION/PROCEDURE:MySQL和Oracle对于函数/存储过程的定义语法不同。

4.不能有``符号,注释另外添加。

5关键要点

对于本次升级的过程中,走了很多的弯路,遇到了很多问题,下面由字段处理、语法区别、SQL文件的等三方面进行介绍其中的关键点。 

5.1字段处理

对于字段的处理需要将MySQL中的一些字段转换成Oracle数据库支持的字段,具体对应关系如下表:

5.2语法区别

对于两种数据库中语法的区别,下面由几个关键点进行介绍:

1.对于语句中包含AS的需要去除AS,直接“空格 别名”即可:

MySQL语句:

Oracle语句:

2.分页语句修改

Oracle可通过rownum获取前n条记录,MySQL通过limit来获取前n条记录,但二者的写法略有不同,在Oracle中rownum作为where条件的一部分,而MySQL中limit不是where条件的一部分

MySQL语句:

SELECT * from fw_department limit 3;查询前3条数据

SELECT * from fw_department limit 2, 4;从第2(序号从0开始)条开始,查4条记录

Oracle语句:

SELECT * FROM XJ_STUDENT WHERE ROWNUM = 1;查询第一条数据

SELECT * FROM XJ_STUDENT WHERE ROWNUM <= 10;获取前10条数据

但rownum不支持查询后几条或第n(n>1)条数据,例如以下sql是不支持的

SELECT * FROM XJ_STUDENT WHERE ROWNUM > 2

SELECT * FROM XJ_STUDENT WHERE ROWNUM = 3

3.日期相关: 

(1)区别:

(a)MySQL:可以用Date类型的日期进行比较;

(b)Oracle:必须用to_date()函数和to_char()函数配合转换成统一格式的日期字符串,然后进行比较;

(2)获取方式:

(a)MySQL:可以用YEAR(),MONTH(),NOW()等函数获取年/月/当前日期等;

(b)Oracle:必须用to_char(sysdate, ’yyyy'),to_char(sysdate, 'MM')获取;

(3)日期转换:

(a)MySQL:DATE_FORMAT(t.CZSJ,'%Y-%m-%d');

(b)Oracle:to_char(t.CZSJ,'yyyy-mm-dd')。

4.对于“”的使用

MySQL中“”是对于字符串传值的引用,而Oracle中假如建立对象的时候,对象名、字段名加双引号,则示意 Oracle将严格区分大小写,否则Oracle都默认大写。

5.3SqlMap

对于SQL文件的空值需要进行处理,MySQL的非空字段也可以存储空的内容,而Oracle里定义了非空字段就不容许有空的内容。按MySQL的NOT NULL来定义Oracle表结构,导数据的时候会产生错误。因此insert或者update数据时要对空字符进行处理

Oracle的insert语句添加“:NULL”,这里需要注意的是需要添加对应的数据类型:

6分析总结

接下来会从升级心得、注意事项以及心得总结三个方面介绍本次ESB产品升级Oracle数据库的心得体会。

6.1升级心得

在导入数据之前,需要导入建表DDL语句。首先,查询建表DDL语句。然后将该数据库的DDL语句导入到SQL语句中。然后修改DDL语句:修改表格名。然后执行该语句,即可生成相同表格结构和索引的数据库。

如果是Oracle数据库的话,也可以稍微修改一下DDL建表语句,复用索引即可。然后导出数据到CSV格式中。然后导入到ORACLE数据库中。这种方式的好处可跨数据库、跨格式、支持所有协议,稳定性很强,能保留索引。

6.2注意事项

在升级过程中遇见的语法区别有很多细节,期间也会遇到很多问题,下面以一些常见问题为例进行介绍。

(1)对于需要使用order by(分组函数)的语句,需要将函数进行删除利用其他语句进行组合(MySQL中可以用属性进行分组过滤,而Oracle中分组函数只能对查到的所有字段进行);

(2)Sql语句中的双引号改成单引号;

(3)对于CONCAT()连接函数,需要两个属性拼接一次进行使用(MySQL语法中可以连续多个拼接,而Oracle中需要两两拼接,涉及到多数据拼接的时候需要进行嵌套,才能正常使用)。

6.3产品价值

ESB 应用集成平台能够消除信息系统之间的“信息孤岛”情况,集中进行应用管理维护,打破系统壁垒,实现各系统间数据、功能的互通,提高系统使用的便捷性。同时可以与公司的很多产品进行组合形成多种方案,满足企业的多样化的需求。

而作为一款好的产品需要具备持续的增长能力,在保持初心和践行长期主义的前提下不断的迭代更新,使得用户有更好的体验,而数通畅联的ESB产品为了达到更好的效果,需要不断地完善,经过更多地打磨与验证,这样才能具有更高的核心竞争力。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/68548.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Github最新霸榜,Alibaba架构师手写的分布式系统核心原理手册

前言&#xff1a; 分布式的重要性就不需要我再强调了吧&#xff0c;它现在已经是大厂面试的“常驻嘉宾”了 前几天有粉丝在后台跟我吐槽&#xff1a;鑫哥&#xff0c;我觉得现在的风气真的变了&#xff0c;之前只觉得网上的情况是个例&#xff0c;结果自己就遇到了很多次&…

东方甄选、交个朋友迎头而上,云集不进则退

配图来自Canva可画 社交电商、会员电商、精选电商&#xff0c;多个定位描绘出云集的“求变史”。 2015年前后&#xff0c;社交电商概念崛起&#xff0c;拼多多靠“砍一刀”、“拼团”快速成长&#xff0c;云集也学着借助社交平台微信的传播途径&#xff0c;通过社交互动、用户…

【论文笔记】DEEP FEATURE SELECTION-AND-FUSION FOR RGB-D SEMANTIC SEGMENTATION

论文 题目&#xff1a;DEEP FEATURE SELECTION-AND-FUSION FOR RGB-D SEMANTIC SEGMENTATION 收录于&#xff1a;ICME 2021 论文&#xff1a;Deep Feature Selection-And-Fusion for RGB-D Semantic Segmentation | IEEE Conference Publication | IEEE Xplore [2105.04102]…

[附源码]Python计算机毕业设计Django学生宿舍维修管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

仿QQ音乐(HTML+CSS)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

[安装] Doris集群搭建环境

参考文献 参考链接 推荐指数 Doris集群安装部署&#xff08;详细&#xff09; [火][火][火][火][火] Doris学习笔记之数据表的创建 [火][火][火] doris官网0.15版本的安装部署 [火][火][火][火][火] Doris0.15升级到1.1.1 [火][火][火][火][火] [说明] Doris使用…

7个有用的Pandas显示选项

Pandas是一个在数据科学中常用的功能强大的Python库。它可以从各种来源加载和操作数据集。当使用Pandas时&#xff0c;默认选项就已经适合大多数人了。但是在某些情况下&#xff0c;我们可能希望更改所显示内容的格式。所以就需要使用Pandas的一些定制功能来帮助我们自定义内容…

Word控件Spire.Doc 【图像形状】教程(13): 如何在C#中对齐word文档上的形状

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下&#xff0c;轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具&#xff0c;专注于创建、编辑、转…

poi-tl实现对Word模板中复杂表格的数据填充

文章目录前言what poi-tlwhy poi-tlHow poi-tl1. 版本问题2. 集成和使用3. SpringEL表达式总结前言 开发时, 我们有时需要进行word类型表格导出, 而对于表格操作. 我们一般可能会倾向于使用 poi 进行操作. 但poi操作比较复杂, 所以就在寻找一种可以快速将内容填充到表格中的工具…

yolov7配置与训练记录(二)

yolov7配置与训练记录(一) 已经完成了环境的配置,下面开始文件内部的操作 yolov7官方下载地址为 git clone https://github.com/WongKinYiu/yolov71 将下载好的预训练权重放在yolov7-main/weights内 需要在yolov7中新建weights文件夹(也是为了方便管理权重文件) 测试 pyth…

单调队列算法总结

背景 单调队列&#xff0c;即为单调递减或者单调递增的队列。队列中的元素只能在队尾入队、从队首或者队尾出队。 单调队列的基本实现就是维护一个双向队列&#xff0c;只有当一个元素是当前最值、或者可能成为最值时才保留&#xff0c;否则出队。 单调队列通常用来解决在滑…

NR 大规模天线设计--1

参考《无线系统设计与国际标准》 概述 空间自由度是多天线系统获得性能增益的源泉。随着有源天线技术理论的出现&#xff0c; 为MIMO维度的扩展奠定了理论基础&#xff0c;有源天线技术在商用移动通讯领域的发展&#xff0c; 对天线的进一步扩展&#xff0c;尤其对信道垂直维…

Java常用API

Java常用API什么是API&#xff1f;Object类的作用:Object类的常用方法&#xff1a;Object的toString方法&#xff1a;Obiect的equals方法ObiectsStringBuilderMathSystem类概述BigDecimal什么是API&#xff1f; 1.API应用程序编程接口。 2.简单来说&#xff1a;就是Java帮我们…

JAVA中变量与常量

文章目录0 写在前面1 变量1.1 声明变量1.2 变量初始化2 常量3 写在最后0 写在前面 所有程序设计语言一样&#xff0c;Java 也使用变量来存储值。常量就是值不变的变量。 1 变量 1.1 声明变量 格式 类型 变量名; 例如&#xff1a; int index; double salary; long earthPop…

华为云发布CodeArts Req需求管理工具,让需求管理化繁为简

摘要&#xff1a;华为云正式发布CodeArts Req&#xff0c;这是一款自主研发的软件研发管理与团队协作工具&#xff0c;旨在助力企业大规模研发转型成功&#xff0c;释放组织生产力。本文分享自华为云社区《华为云发布CodeArts Req需求管理工具&#xff0c;让需求管理化繁为简》…

代码随想录刷题day56 583. 两个字符串的删除操作;72. 编辑距离;编辑距离总结篇

代码随想录刷题day56 583. 两个字符串的删除操作&#xff1b;72. 编辑距离&#xff1b;编辑距离总结篇 关于编辑距离的一些题目。 583. 两个字符串的删除操作 583. 两个字符串的删除操作 - 力扣&#xff08;Leetcode&#xff09; 化简这一步不容易想到。原理就是两个都删除…

华为云大数据BI赋能企业数字化发展

企业在数字化转型过程中面临着不少挑战&#xff0c;比如数据整合能力有限、不足的需求快速响应能力、缺乏数据管理机制和保障、自建分析平台成本高等等。所以各大企业都希望通过一个大数据智能系统来全方位帮助企业处理数据分析&#xff0c;做好智能决策。因此&#xff0c;对于…

基于SOPHON TPU架构实现 Faiss 的两个查询接口

文章目录1. Faiss 简介2. 距离度量3. 在 Sophon TPU 上的接口实现3.1 Sophon TPU3.2 indexflat 实现3.3 indexPQ 实现 1. Faiss 简介 Faiss 库是 Facebook 开发的一个用于稠密向量相似性搜索和聚类的库&#xff0c;该库包含有诸多向量相似性搜索的算法。向量相似性搜索是将一…

【Pytorch】第 2 章 :马尔可夫决策过程和动态规划

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

python之对比两张图像的相似度

python之图像背景识别 本着结合实际工作&#xff0c;实际落地并已应用的态度去码文。 python之对比两张图像的相似度 需求&#xff1a;在某个手机端项目中&#xff0c;有多个页面图片&#xff0c;但每个图片都做了相应的修改&#xff0c;由于这种图片非常多&#xff0c;高达上万…