CN115757339A - Oracle脚本自动转Postgresql脚本方法 - Google Patents
Oracle脚本自动转Postgresql脚本方法 Download PDFInfo
- Publication number
- CN115757339A CN115757339A CN202211432623.7A CN202211432623A CN115757339A CN 115757339 A CN115757339 A CN 115757339A CN 202211432623 A CN202211432623 A CN 202211432623A CN 115757339 A CN115757339 A CN 115757339A
- Authority
- CN
- China
- Prior art keywords
- script
- oracle
- database
- postgresql
- analyzer
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000013515 script Methods 0.000 title claims abstract description 66
- 238000000034 method Methods 0.000 title claims abstract description 32
- 238000006243 chemical reaction Methods 0.000 claims abstract description 25
- 230000005012 migration Effects 0.000 claims abstract description 15
- 238000013508 migration Methods 0.000 claims abstract description 14
- 230000006870 function Effects 0.000 claims abstract description 8
- 238000012545 processing Methods 0.000 claims abstract description 6
- 230000008569 process Effects 0.000 description 3
- 230000000694 effects Effects 0.000 description 2
- 238000012795 verification Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012216 screening Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了Oracle脚本自动转Postgresql脚本方法,该方法包括以下步骤:S1、利用JAVACC将数据库数据对象定义语句解析成应用程序对象;S2、利用所述应用程序处理不同数据库数据对象的互转;S3、生成符合各自数据库语法规则的数据库对象定义脚本;S4、完成异构数据库数据对象的自动化转换及迁移。本发明通过构建JAVACC词法语法生成器,生成用于SQL脚本解析的词法分析器和语法分析器,将普通的SQL脚本解析成Java数据对象,然后操作不同数据定义的Java对象,通过Java对象之间相互调用、递归调用,实现不同数据库数据类型、关键字、***函数、***对象的相互转化。
Description
技术领域
本发明涉及数据迁移技术领域,具体来说,涉及Oracle脚本自动转Postgresql脚本方法。
背景技术
将数据库从Oracle迁移至PostqreSQL数据库,需要考虑的有很多。但是有一点是不变的,或者说是目的:要保证数据库迁移后,***功能能够正常使用,或对业务逻辑尽可能少的修改(修改务逻辑可能会出现意想不到的连锁问题)。那么,就需要想办法将原有的Oracle数据库整体结构,尽可能的在PostqreSQL上还原,这样才能保证不必大量调整业务逻辑。
目前将Oracle数据迁移到Postgresql数据库常用的方法有:
1、人工迁移。常用于工程小,数据结构简单的迁移项目,原理是先导出Oracle数据库的对象定义语言及数据(对象包含,表、触发器、索引、存储过程、函数、序列等)然后在目标Postgresql数据库上进行还原。
2、使用ora2pg工具。ora2pg是一款开源软件。能将大部分的Oracle数据迁移到pg数据库。针对不能迁移的数据,需要人工筛选并手动迁移。
3、使用navicat等商业工具迁移。一般只能迁移表结构及数据。
现有的Oracle迁移到Postgresql方案存在费时费力(人工迁移)、错误率高(第三方软件迁移)、不能完整的迁移业务逻辑等现象。
针对相关技术中的问题,目前尚未提出有效的解决方案。
发明内容
针对相关技术中的问题,本发明提出Oracle脚本自动转Postgresql脚本方法,以克服现有相关技术所存在的上述技术问题。
为此,本发明采用的具体技术方案如下:
Oracle脚本自动转Postgresql脚本方法,该方法包括以下步骤:
S1、利用JAVACC将数据库数据对象定义语句解析成应用程序对象;
S2、利用所述应用程序处理不同数据库数据对象的互转;
S3、生成符合各自数据库语法规则的数据库对象定义脚本;
S4、完成异构数据库数据对象的自动化转换及迁移。
进一步的,所述利用JAVACC将数据库数据对象定义语句解析成应用程序对象包括以下步骤:
S11、利用JAVACC生成SQL语句的词法分析器和语法分析器;
S12、通过词法分析器和语法分析器将Oracle数据库数据对象定义语句解析成应用程序对象。
进一步的,所述利用JAVACC生成SQL语句的词法分析器和语法分析器包括以下步骤:
S111、JAVACC加载以扩展名为jj的语法规则文件;
S112、生成用于SQL语句解析的词法分析器和语法分析器。
进一步的,所述JAVACC支持自定义词法、语法规则适用于各种异构类型数据库数据对象定义语句词法分析器和语法分析器的生成。
进一步的,所述语法规则文件为扩展名为jj结尾的文本文件,且所述语法规则文件包括语法分析器的属性设置、语法分析器的类声明、词法规则声明及语法规则实现。
进一步的,所述语法规则文件通过引用数据对象定义JAVA类完成数据对象与之对应JAVA类之间的相互关联。
进一步的,所述Oracle数据库对象定义语句为数据对象定义的SQL语句脚本。
进一步的,所述通过词法分析器和语法分析器将Oracle数据库数据对象定义语句解析成应用程序对象包括以下步骤:
S121、利用词法分析器和语法分析器对数据对象定义的SQL语句脚本进行解析;
S122、将数据对象定义的SQL语句脚本中的普通SQL文本语句转换成应用程序JAVA对象。
进一步的,所述利用所述应用程序处理不同数据库数据对象的互转包括以下步骤:
S21、将Oracle数据库对象定义语句通过SQL解析引擎转换化应用程序对象,生成Oracle数据对象相关联的Java数据对象;
S22、将Oracle数据对象相关联的Java数据对象转换成Postgresql相关联的Java数据对象;
S23、将Postgresql相关联的Java数据对象转成Postgresql数据库数据对象定义语句。
进一步的,所述异构数据库之间脚本转换包括数据库数据类型、关键字、***函数及***数据对象。
本发明的有益效果为:通过构建JAVACC词法语法生成器,生成用于SQL脚本解析的词法分析器和语法分析器,将普通的SQL脚本解析成Java数据对象,然后操作不同数据定义的Java对象,通过Java对象之间相互调用、递归调用,实现不同数据库数据类型、关键字、***函数、***对象的相互转化,转化成目标数据库识别、兼容地数据库语句脚本,即在进行Oracle数据迁移到Postgresql时做到了高效、错误率低、业务逻辑完美迁移的效果;同时利用数据库脚本的自动化转换增强了转化过程的容错性、降低了转换耗时、提高了成功率;通过技术手段进一步完成对转换结果的校验。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是根据本发明实施例的Oracle脚本自动转Postgresql脚本方法的流程图;
图2是根据本发明实施例的Oracle脚本自动转Postgresql脚本方法中通过JAVACC将SQL文本解析成Java类的流程图;
图3是根据本发明实施例的Oracle脚本自动转Postgresql脚本方法中Oracle数据对象定义向Postgresql数据对象定义转化的流程图。
具体实施方式
为进一步说明各实施例,本发明提供有附图,这些附图为本发明揭露内容的一部分,其主要用以说明实施例,并可配合说明书的相关描述来解释实施例的运作原理,配合参考这些内容,本领域普通技术人员应能理解其他可能的实施方式以及本发明的优点,图中的组件并未按比例绘制,而类似的组件符号通常用来表示类似的组件。
根据本发明的实施例,提供了Oracle脚本自动转Postgresql脚本方法。
现结合附图和具体实施方式对本发明进一步说明,如图1所示,根据本发明实施例的Oracle脚本自动转Postgresql脚本方法,该方法包括以下步骤:
S1、利用JAVACC将数据库数据对象定义语句解析成应用程序对象;
所述JAVACC支持自定义词法、语法规则适用于各种异构类型数据库数据对象定义语句词法分析器和语法分析器的生成。
如图2所示,所述利用JAVACC将数据库数据对象定义语句解析成应用程序对象包括以下步骤:
S11、利用JAVACC生成SQL语句的词法分析器和语法分析器,包括以下步骤:
S111、JAVACC加载以扩展名为jj的语法规则文件;
所述语法规则文件为扩展名为jj结尾的文本文件,且所述语法规则文件包括语法分析器的属性设置、语法分析器的类声明、词法规则声明及语法规则实现。
JAVACC语法规则文件编写与数据对象定义Java类相辅相成,所述语法规则文件通过引用数据对象定义JAVA类完成数据对象与之对应JAVA类之间的相互关联。
S112、生成用于SQL语句解析的词法分析器和语法分析器。
部分运行命令如javaccoracle.jj,运行成功后会生成如表1所示的文件:
表1:文件名称及说明
S12、通过词法分析器和语法分析器将Oracle数据库数据对象定义语句解析成应用程序对象。
所述Oracle数据库对象定义语句为数据对象定义的SQL语句脚本。
所述通过词法分析器和语法分析器将Oracle数据库数据对象定义语句解析成应用程序对象包括以下步骤:
S121、利用词法分析器和语法分析器对数据对象定义的SQL语句脚本进行解析;
S122、将数据对象定义的SQL语句脚本中的普通SQL文本语句转换成应用程序JAVA对象。
将普通SQL文本解析成应用程序识别的对象。
如下所示为解析Oracle对象定义SQL语句:
通过以上流程可完成数据库对象定义SQL语句的解析,将普通SQL文本语句转换成应用程序Java对象,为异构数据库数据对象定义的互转打下基础。
S2、利用所述应用程序处理不同数据库数据对象的互转,
如图3所示,利用所述应用程序处理不同数据库数据对象的互转包括以下步骤:
S21、将Oracle数据库对象定义语句通过SQL解析引擎转换化应用程序对象,生成Oracle数据对象相关联的Java数据对象;
S22、将Oracle数据对象相关联的Java数据对象转换成Postgresql相关联的Java数据对象;
S23、将Postgresql相关联的Java数据对象转成Postgresql数据库数据对象定义语句。
S3、生成符合各自数据库语法规则的数据库对象定义脚本;
S4、完成异构数据库数据对象的自动化转换及迁移。
将Oracle数据库对象迁移到Postgresql数据库,是常见的异构数据对象迁移,两种不同类型数据库支持不同的词法、语法规则,各种数据对象的定义语句不能完成兼容,要完成Oracle数据库数据对象至Postgresql数据库的迁移,需要将Oracle数据库识别的词法、语句数据对象定义语句转换成Postgresql数据库识别的词法、语句数据对象定义语句。
所述异构数据库之间脚本转换包括数据库数据类型、关键字、***函数及***数据对象。每一种数据库对象经过SQL引擎解析后生成一种由Java定义的对象,转换的核心逻辑由Java对象之间的互相调用、递归调用完成。
综上所述,借助于本发明的上述技术方案,通过构建JAVACC词法语法生成器,生成用于SQL脚本解析的词法分析器和语法分析器,将普通的SQL脚本解析成Java数据对象,然后操作不同数据定义的Java对象,通过Java对象之间相互调用、递归调用,实现不同数据库数据类型、关键字、***函数、***对象的相互转化,转化成目标数据库识别、兼容地数据库语句脚本,即在进行Oracle数据迁移到Postgresql时做到了高效、错误率低、业务逻辑完美迁移的效果;同时利用数据库脚本的自动化转换增强了转化过程的容错性、降低了转换耗时、提高了成功率;通过技术手段进一步完成对转换结果的校验。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.Oracle脚本自动转Postgresql脚本方法,其特征在于,该方法包括以下步骤:
S1、利用JAVACC将数据库数据对象定义语句解析成应用程序对象;
S2、利用所述应用程序处理不同数据库数据对象的互转;
S3、生成符合各自数据库语法规则的数据库对象定义脚本;
S4、完成异构数据库数据对象的自动化转换及迁移。
2.根据权利要求1所述的Oracle脚本自动转Postgresql脚本方法,其特征在于,所述利用JAVACC将数据库数据对象定义语句解析成应用程序对象包括以下步骤:
S11、利用JAVACC生成SQL语句的词法分析器和语法分析器;
S12、通过词法分析器和语法分析器将Oracle数据库数据对象定义语句解析成应用程序对象。
3.根据权利要求2所述的Oracle脚本自动转Postgresql脚本方法,其特征在于,所述利用JAVACC生成SQL语句的词法分析器和语法分析器包括以下步骤:
S111、JAVACC加载以扩展名为jj的语法规则文件;
S112、生成用于SQL语句解析的词法分析器和语法分析器。
4.根据权利要求3所述的Oracle脚本自动转Postgresql脚本方法,其特征在于,所述JAVACC支持自定义词法、语法规则适用于各种异构类型数据库数据对象定义语句词法分析器和语法分析器的生成。
5.根据权利要求4所述的Oracle脚本自动转Postgresql脚本方法,其特征在于,所述语法规则文件为扩展名为jj结尾的文本文件,且所述语法规则文件包括语法分析器的属性设置、语法分析器的类声明、词法规则声明及语法规则实现。
6.根据权利要求5所述的Oracle脚本自动转Postgresql脚本方法,其特征在于,所述语法规则文件通过引用数据对象定义JAVA类完成数据对象与之对应JAVA类之间的相互关联。
7.根据权利要求6所述的Oracle脚本自动转Postgresql脚本方法,其特征在于,所述Oracle数据库对象定义语句为数据对象定义的SQL语句脚本。
8.根据权利要求7所述的Oracle脚本自动转Postgresql脚本方法,其特征在于,所述通过词法分析器和语法分析器将Oracle数据库数据对象定义语句解析成应用程序对象包括以下步骤:
S121、利用词法分析器和语法分析器对数据对象定义的SQL语句脚本进行解析;
S122、将数据对象定义的SQL语句脚本中的普通SQL文本语句转换成应用程序JAVA对象。
9.根据权利要求8所述的Oracle脚本自动转Postgresql脚本方法,其特征在于,所述利用所述应用程序处理不同数据库数据对象的互转包括以下步骤:
S21、将Oracle数据库对象定义语句通过SQL解析引擎转换化应用程序对象,生成Oracle数据对象相关联的Java数据对象;
S22、将Oracle数据对象相关联的Java数据对象转换成Postgresql相关联的Java数据对象;
S23、将Postgresql相关联的Java数据对象转成Postgresql数据库数据对象定义语句。
10.根据权利要求9所述的Oracle脚本自动转Postgresql脚本方法,其特征在于,所述异构数据库之间脚本转换包括数据库数据类型、关键字、***函数及***数据对象。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211432623.7A CN115757339A (zh) | 2022-11-16 | 2022-11-16 | Oracle脚本自动转Postgresql脚本方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211432623.7A CN115757339A (zh) | 2022-11-16 | 2022-11-16 | Oracle脚本自动转Postgresql脚本方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115757339A true CN115757339A (zh) | 2023-03-07 |
Family
ID=85371666
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211432623.7A Pending CN115757339A (zh) | 2022-11-16 | 2022-11-16 | Oracle脚本自动转Postgresql脚本方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115757339A (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102073490A (zh) * | 2009-11-25 | 2011-05-25 | 阿里巴巴集团控股有限公司 | 转译数据库语言的方法及装置 |
CN102750374A (zh) * | 2012-06-20 | 2012-10-24 | 深圳市远行科技有限公司 | 一种基于数据库脚本的数据追溯和影响关系的分析方法 |
US20150019488A1 (en) * | 2013-07-09 | 2015-01-15 | Oracle International Corporation | Automated database migration architecture |
CN105787044A (zh) * | 2016-02-26 | 2016-07-20 | 广州品唯软件有限公司 | 一种基于MySQL的SQL解析器及其解析方法 |
CN105868204A (zh) * | 2015-01-21 | 2016-08-17 | ***(深圳)有限公司 | 一种转换Oracle脚本语言SQL的方法及装置 |
CN112965995A (zh) * | 2021-04-19 | 2021-06-15 | 瀚高基础软件股份有限公司 | 基于postgreSQL客户端PSQL的数据交互方法及交互装置 |
-
2022
- 2022-11-16 CN CN202211432623.7A patent/CN115757339A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102073490A (zh) * | 2009-11-25 | 2011-05-25 | 阿里巴巴集团控股有限公司 | 转译数据库语言的方法及装置 |
CN102750374A (zh) * | 2012-06-20 | 2012-10-24 | 深圳市远行科技有限公司 | 一种基于数据库脚本的数据追溯和影响关系的分析方法 |
US20150019488A1 (en) * | 2013-07-09 | 2015-01-15 | Oracle International Corporation | Automated database migration architecture |
CN105868204A (zh) * | 2015-01-21 | 2016-08-17 | ***(深圳)有限公司 | 一种转换Oracle脚本语言SQL的方法及装置 |
CN105787044A (zh) * | 2016-02-26 | 2016-07-20 | 广州品唯软件有限公司 | 一种基于MySQL的SQL解析器及其解析方法 |
CN112965995A (zh) * | 2021-04-19 | 2021-06-15 | 瀚高基础软件股份有限公司 | 基于postgreSQL客户端PSQL的数据交互方法及交互装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111061757B (zh) | 数据库的语言转换方法、装置、电子设备及存储介质 | |
JP2602205B2 (ja) | データベース・アクセス制御方法 | |
CN110555032A (zh) | 一种基于元数据的数据血缘关系分析方法及*** | |
US5905892A (en) | Error correcting compiler | |
US20040158820A1 (en) | System for generating an application framework and components | |
CN110209668B (zh) | 基于流计算的维表关联方法、装置、设备及可读存储介质 | |
CN112765209A (zh) | 一种数据库间的sql语句语法迁移方法及*** | |
US11995075B2 (en) | System and method for efficient transliteration of machine interpretable languages | |
CN115809063B (zh) | 一种存储过程编译方法、***、电子设备和存储介质 | |
CN117093599A (zh) | 面向异构数据源的统一sql查询方法 | |
CN111309751A (zh) | 大数据处理方法及装置 | |
CN111143330A (zh) | 一种多模态数据库解析引擎的实现方法及装置 | |
CN111695002B (zh) | 一种基于xml语句的数据库无关的查询方法 | |
CN110851514B (zh) | 基于flink的etl处理方法 | |
CN113297251A (zh) | 多源数据检索方法、装置、设备及存储介质 | |
CN111694738B (zh) | 一种sql测试脚本的生成方法 | |
CN113934786A (zh) | 一种构建统一etl的实施方法 | |
CN112347120B (zh) | 一种基于复杂sql的自动优化方法和装置 | |
CN113032366A (zh) | 基于Flex和Bison的SQL语法树解析方法 | |
CN115757339A (zh) | Oracle脚本自动转Postgresql脚本方法 | |
CN116204550A (zh) | 数据库查询语句的优化方法、存储介质与设备 | |
CN115576563A (zh) | 一种sql脚本动态优化方法 | |
CN115407997A (zh) | 基于低代码的敏捷开发应用方法及*** | |
CN113836164A (zh) | 统一sql的方法、***、设备及介质 | |
CN113626465B (zh) | 数据库及在postgresql数据库中实现会话级变量的方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20230307 |