oracle往mysql数据同步存储过程,ORACLE数据库迁移至MYSQL方案2015年)

bc3f9276acf88283a0569b9b9ef9ee92.png

在线QQ客服:1922638

专业的SQL Server、MySQL数据库同步软件

\ ORACLE和MYSQL作为两种使用最广泛的关系数据库软件,在各种功能和编程语法上仍然存在很大差异,因此要实现将系统从ORACLE迁移到MYSQL数据库,数据的迁移只是一个方面。最大的挑战在于代码级别的更改。整个迁移的一般工作如下:

\

1 ORACLE和MYSQL函数之间的区别:

\

(1)字段类型的比较:

序列号

ORACLE

MYSQL

1

VARCHAR2

VARCHAR

2

日期

DATETIME

3

时间戳

DATETIME

4

NUMBER

十进制

5

整数

十进制(22,0)

6

CLOB

文本

7

BLOB

LONGBLOB

\

\

(2)常用函数语法比较:

序列号

比较

ORACLE

MYSQL

1

空字符的判断

名称为空

NAME =””

2

来自

从对偶中选择1;

从表名后面

选择1;

不需要,也不需要选择表名

3

用法

名称类似” a%”

区分大小写,仅查询以小写字母a

开头的字符串

名称类似” a%”

不区分大小写,查询以小写a或大写A开头的字符串

4

日期格式

获取系统日期:SYSDATE()

格式日期:TO_CHAR,TO_DATE函数

获取系统日期:立即()

格式化日期:str_to_date,date_format函数

主键

通常由Oracle序列生成:

SEQ_TEST.NEXTVAL

SEQ_TEST.CURRVAL

Auto_increment属性实现自我递增以获得唯一值

5

分页(常用)

SELECT T2。 *

FROM(选择T1。*,ROWNUM RN FROM(选择*从SID DESC测试顺序)T1

ROWNUM在哪里; 5)T2

RN> RN = 1

选择

*从TEST_TEST1订购,按SID降级限制0.4,

6

字符串链接

SELECT sid ||用户名||测试密码

从测试中选择concat(concat(sid,用户名),密码)

选择联系人(SID,用户名,密码)

从测试

7

分组功能

SELECT EMPNO,JOB,COUNT(1),

EMP的SUM(SAL),SUM(COMM);

上面的SQL无法正常执行,select之后的列必须是分组列或使用聚合函数的列

SELECT EMPNO,JOB,COUNT(1),

EMP的SUM(SAL),SUM(COMM);

您可以根据需要分组

8

分析函数

row_number()

超过(按xx划分为xx的顺序)

排名()以上(按xx划分为xx的顺序)

density_rank()over(按xx划分为xx,按xx划分)

数(1)于()

MySQL不支持

9

平行

支持SQL级并发处理

不支持

\

\

\

(3)数据库对象类型的比较:

序列号

数据库对象类型

ORACLE

MYSQL

迁移计划

1

程序

(1)使用创建过程XXX创建过程或创建或替换过程。

XXX两个语法

(2)存储过程参数不能指定精度或长度,例如P_NAME VARCHAR2

(3)参数后必须有IS或AS

(4)当存储过程没有参数()时,必须省略

(5)在is和begin之间定义变量

(1)创建存储过程只能使用创建过程XXX的语法

(2)存储过程的参数必须指定精度或长度,例如P_NAME VARCHAR(100)

(3)参数

后不能有IS或AS

(4)当存储过程没有参数时,必须保留()

(5)变量在开始和结束之间定义

由于ORACLE和MYSQL在编写存储过程方面的语法差异,您需要再次修改存储过程代码

2

触发

(1)包含DML触发器,替代触发器(视图),系统触发器(DDL语句/系统事件)

(2)支持语句级触发器和行级触发器

(3)触发器允许定义多个事件

(1)仅支持DML触发器

(2)仅支持行级触发器

(3)触发器只能定义一个事件

由于语法差异和触发器功能实现方面的差异,需要修改触发器代码

3

功能

支持

支持

语法上的差异和内置函数的差异要求重写代码

4

包装

支持

不支持

包装必须用存储过程替换

5

查看

支持

支持

如果涉及使用MYSQL不支持的内置函数,则需要对其进行转换

6

实例化视图

支持

不支持

使用视图替换或修改代码以直接计划基表方法

7

作业

完全支持

支持相对简单

根据需要进行修改

8

DBLINK

支持

您可以使用FEDERATED引擎来实现dblink访问功能,需要修改程序代码

9

序列

支持

您可以使用MYSQL自增列实现序列功能,需要修改表结构以添加自增列

10

同义词

支持

需要修改程序代码以直接访问物理表

11

光标

(1)静态光标(隐式光标,显示光标),参考光标

(2)支持循环循环,while循环,for循环

(3)支持记录变量

(4)支持批量收集语法的批处理操作

(1)仅支持静态游标

(2)支持循环循环,重复循环,while循环

(3)不支持记录变量

(4)仅需一次操作

由于功能差异,需要修改CURSOR代码

\

2 ,程序代码中的更改:

(1)前端代码更改:

\由于前端代码是用标准SQL编写的,因此只需很少的更改。主要考虑因素是需要更改内置MYSQL函数的差异,并且需要整理前端代码。

(2)后台代码更改:

\ 由于不同数据库的功能和编程语法的差异,因此后台代码的变化将非常大,包括数据类型的差异,对象类型的差异,编程语法的差异等,整个数据库中的代码背景几乎等同于重写,并且工作量非常大。经过调查,对于我们当前的数据库,有一些数据对象需要修改:

\

附件:

所有者

OBJECT_TYPE

数量

纠正措施

QHIEX_PROD

包装

4

包装必须用存储过程替换

QHIEX_PROD

程序

1

由于ORACLE和MYSQL在编写存储过程方面的语法差异,您需要再次修改存储过程代码

QHIEX_PROD

序列

155

可以使用MYSQL自增列实现序列功能,需要修改表结构以添加自增列

QHIEX

序列

98

可以使用MYSQL自增列实现序列功能,需要修改表结构以添加自增列

\

3 ,将ORACLE数据迁移到MYSQL

(1)字段类型的调整:

\ 关于数据迁移的主要注意事项是字段类型支持的差异。例如,MYSQL中不存在Oracle中常用的VARCHAR2类型和CLOB类型,因此我们需要为数据库略微调整字段类型。当前现状,需要修改以下字段类型:

\

日程:

DATA_TYPE

COUNT(*)

纠正措施

VARCHAR2

3194

改用MYSQL VARCHAR类型

NUMBER

1522

使用MYSQL DECIMAL类型替换

日期

776

改用MYSQL DATETIME类型

字符

544

无需更正

CLOB

89

改用MYSQL TEXT类型

NVARCHAR2

34

改用MYSQL VARCHAR类型

时间戳(6)

16

改用MYSQL DATETIME类型

BLOB

12

使用MYSQL LONGBLOB类型替换

浮动

6

无需更正

长生

4

使用MYSQL LONGTEXT类型替换

2

使用MYSQL LONGTEXT类型替换

\

(2)数据迁移:

\ 目前,MYSQL正式发布了MySQLMigration工具包,可将数据从SQL Server或Oracle迁移到MySQL

工具包,此工具支持LOB字段数据的迁移。由于单个数据库中的数据量相对较小,因此当前数据量接近17G。您可以使用该工具在停机状态下执行数据迁移。数据库中的表数和数据分布如下:

\

日程:

所有者

数量

数据量

QHIEX_PROD

357

6.7G

QHIEX

162

10G

\

\

4 ,系统测试(包括数据迁移测试)

\ 在对该程序进行了大量修改之后,测试和错误修复通常是最长,最重要的部分。每个功能都需要经过全面的测试和验证,以避免在线出现各种问题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值