`

MySQL与Oracle的数据迁移注意事项,另附转换工具链接

 
阅读更多

将数据从MySQL迁移到Oracle的注意事项

1. 自动增长的数据类型处理

MYSQL有自动增长的数据类型,插入记录时不用操作此字段,会自动获得数据值。ORACLE没有自动增长的数据类型,需要建立一个自动增长的序列号,插入记录时要把序列号的下一个值赋于此字段。

CREATE SEQUENCE 序列号的名称 (最好是表名+序列号标记) INCREMENT BY 1 START WITH 1 MAXVALUE 99999 CYCLE NOCACHE;

INSERT 语句插入这个字段值为: 序列号的名称.NEXTVAL

2. 单引号的处理

MYSQL里可以用双引号包起字符串,ORACLE里只可以用单引号包起字符串。在插入和修改字符串前必须做单引号的替换:把所有出现的一个单引号替换成两个单引号。当然你如果使用 Convert Mysql to Oracle 工具就不用考虑这个问题

3.长字符串的处理

在ORACLE中,INSERT和UPDATE时最大可操作的字符串长度小于等于4000个单字节, 如果要插入更长的字符串, 请考虑字段用CLOB类型,方法借用ORACLE里自带的DBMS_LOB程序包。插入修改记录前一定要做进行非空和长度判断,不能为空的字段值和超出长度字段值都应该提出警告,返回上次操作。

4. 翻页的SQL语句的处理

MYSQL处理翻页的SQL语句比较简单,用LIMIT 开始位置, 记录个数。ORACLE处理翻页的SQL语句就比较繁琐了。每个结果集只有一个ROWNUM字段标明它的位置, 并且只能用ROWNUM<100, 不能用ROWNUM>80。

以下是经过分析后较好的两种ORACLE翻页SQL语句( ID是唯一关键字的字段名 ):

语句一:

SELECT ID, [FIELD_NAME,...] FROM TABLE_NAME WHERE ID IN ( SELECT ID FROM (SELECT ROWNUM AS NUMROW, ID FROM TABLE_NAME WHERE 条件1 ORDER BY 条件2) WHERE NUMROW > 80 AND NUMROW < 100 ) ORDER BY 条件3;

语句二:

SELECT * FROM (( SELECT ROWNUM AS NUMROW, c.* from (select [FIELD_NAME,...] FROM TABLE_NAME WHERE 条件1 ORDER BY 条件2) c) WHERE NUMROW > 80 AND NUMROW < 100 ) ORDER BY 条件3;

5. 日期字段的处理

MYSQL日期字段分DATE和TIME两种,ORACLE日期字段只有DATE,包含年月日时分秒信息,用当前数据库的系统时间为SYSDATE, 精确到秒。

日期字段的数学运算公式有很大的不同。MYSQL找到离当前时间7天用 DATE_FIELD_NAME > SUBDATE(NOW(),INTERVAL 7 DAY)ORACLE找到离当前时间7天用 DATE_FIELD_NAME >SYSDATE - 7;

6. 字符串的模糊比较

MYSQL里用 字段名 like '%字符串%',ORACLE里也可以用 字段名 like '%字符串%' 但这种方法不能使用索引, 速度不快,用字符串比较函数 instr(字段名,'字符串')>0 会得到更精确的查找结果。

7. 空字符的处理

MYSQL的非空字段也有空的内容,ORACLE里定义了非空字段就不容许有空的内容。按MYSQL的NOT NULL来定义ORACLE表结构, 导数据的时候会产生错误。因此导数据时要对空字符进行判断,如果为NULL或空字符,需要把它改成一个空格的字符串。

-----------------------------------------------------------------华丽的分割-------------------------------------------------------------------

Oracle移植到mysql注意事项

客户用的数据库是mysql,而研发好的产品支持oracle,我们必须把数据库环境从oracle移植到mysql。在移植的过程中碰到了下面一些问题,如果我们在最初的设计、编码过程中注意数据库的移植性,这种情况下可以完全不需要作额外工作。

一、数据库环境从oracle移植到mysql碰到的问题。

1、 大小写敏感的区别(如果服务器OS是linux)。

在oracle中一般情况下不区分大小写。有时候我们在使用oracle不注意大小写的问题,表名和字段名不加双引号是不区分大小写的,像这样:insert into tableName 和 insert into TABLENAME效果是一样的,用工具导出创建/数据初始化脚本,得到的结果一般表名和字段名转化成了大写。

但在MySQL中,所使用操作系统的大小写敏感性决定了数据库名和表名的大小写敏感性。数据库对应数据目录中的目录,数据库中的每个表至少对应数据库目录中的一个文件(也可能是多个,取决于存储引擎)。因此,使用数据库或表实际上是操纵这些文件(夹),所以使用操作系统的大小写敏感性决定了数据库名和表名的大小写敏感性。在以linux为内核的操作系统中是大小写敏感的。

解决的办法是把mysql的数据库名和oracle的大小写保持一致,表名与应用程序中sql字符串中的表名保持一致,如果应用程序中字段名用了双引号,那请把sql中的字段名大小写与双引号里的字符保持一致。如果你的应用程序所引用的表名、字段没有统一大小写,那麻烦就大了。

2、保留字的区别。

像sql语言的函数名(如:inteval,show)等是保留字。Oracle中保留字是可以作为表名和字段名,并且不影响使用,但mysql中保留字是不能作为表名和字段名,如果使用会报语法错误。

解决办法,把sql语句中的保留字用‘`’符号引起来,这个符号位于键盘的tab键上面;如果是字段名还有另外一种方法tablename.字段名。像这样:insert into tablename (id, `interval`) value(….. 或insert into tablename (id, tablename.inteval) value(….. 。

3、自动增长类型的区别。

Oracle有sequence,mysql中没有,但有auto_increment属性。

解决办法是把Oracle中sequence转换成使用auto_increment属性,某些情况可能还有一种办法可以解决问题,新建一个独立的表用来专门记录自动增长型的数据。

4、数据类型的区别。

在mysql中没有像oracle中的varchar2、number,mysql有与之对应的varchar、numeric,当然在oracle中没有mysql的time类型。

解决办法是替换。

5、索引长度限制的区别。

从MySQL 4.1.2开始,MyISAM和InnoDB表索引长度支持1000字节,也就是说索引字段的长度不能超过1000字节,如果超过会报这样的错:ERROR 1071 (42000): Specified key was too long; max key length is 1000 bytes。如果是UTF-8编码,相当于333个字符的长度(因为UTF8一个字符占3个字节)。Oracle的索引长度限制比mysql要宽松得多。

解决的办法就不必要多说了,要么改索引的定义,要么改字段的定义长度。

二、为了数据库的兼容性我们应该注意些什么。

数据库的兼容性应该是数据库设计应该重视的一个问题,因为有时候客户存在已经在用的数据库,并且不希望同时维护两个数据库,这样的话兼容多种数据库还能成为产品的一个卖点。

作到数据库的兼容性关键是遵守标准用法。

1、 遵守标准用法,尽量不使用某种数据库特有的用法。

如msyql的‘`’符号的用法,

再比如,很多人有这种用法,在使用oracle开发的时候创建sequence,往表中插数据之前先SELECT seq.nextval FROM DUAL;,然后把查询得到的值作为value插入表中,这种用法没法适应没有sequence的数据库,每个数据库都有自动增长型的用法,如果需要使用就应该完全地使用。

再举个例子,不同的数据库对分页查询作了扩展,postgresql有offset,limit,oracle就没有。

2、 保留字。

要求数据库设计者尽量不使用保留字作表名和字段名。也有很多人有这种用法,在表名和字段名前加‘_’,像这样:create table _tablename ( _id integer)。这样永远不会出现保留字引起的问题。

3、 避免数据库大小写敏感的问题。

选择数据库表名和字段名采用大写还是小写,并且在数据库的设计和编码过程中完全统一。
当使用 Convert Oracle to Mysql 工具时,请注意“名称转换为大写”这个选项的控制

------------------------------------------------------------------华丽的分割----------------------------------------------------------------

数据库转换软件

各款软件Pro版和基本版的区别在于Pro版支持命令行方式。Pro版就可以把配置文件放到计划任务中,在无人值守的情况下自动定时运行。
截至2009年6月底,将不再提供免费版的数据库转换软件下载,之前下载的软件不影响使用
对于找到软件Bug并协助解决的朋友将免费获得注册版软件。

数据库转换软件列表

数据库转换软件

各款软件Pro版和基本版的区别在于Pro版支持命令行方式。Pro版就可以把配置文件放到计划任务中,在无人值守的情况下自动定时运行。
截至2009年6月底,将不再提供免费版的数据库转换软件下载,之前下载的软件不影响使用
对于找到软件Bug并协助解决的朋友将免费获得注册版软件。

数据库转换软件列表

产品编号 产品描述 价格  
001 Convert Mysql to Oracle - 数据库转换工具,实现Mysql转换为ORACLE数据库 免费 下载数据库转换工具Convert Mysql to Oracle
003 Convert Oracle to Mysql - 数据库转换软件,实现ORACLE转换为Mysql数据库 免费 下载数据库转换软件Convert Oracle to Mysql
005 Convert Mysql to Access - 数据库转换工具,实现Mysql转换为Access数据库 免费 下载数据库转换工具Convert Mysql to Access
007 Convert Oracle to Access - 数据库转换工具,实现Oracle转换为Access数据库 免费 下载数据库转换软件Convert Oracle to Access
分享到:
评论

相关推荐

    mysql与oracle数据迁移工具

    mysql与oracle数据迁移工具,用过了还可以

    mysql和Oracle数据互相迁移

    Oracle和Mysql互相迁移数据,可同时迁移多个不同数据库数据(并发的将数据在oracle和mysql之间随意迁移),效率高(实际测试表明,将100万数据从oracle迁移到mysql耗时2分30秒,其中1分30秒耗在oracle查询上),支持...

    mysql-oracle数据转换工具

    一个很不错的mysql与oracle数据互相转换工具,用于两种数据库数据迁移,非常好用。

    阿里巴巴开源的Oracle数据迁移同步工具yugong.zip

    yugong 是阿里巴巴推出的去Oracle数据迁移同步工具(全量 增量,目标支持MySQL/DRDS)。2008年左右,阿里巴巴开始尝试MySQL的相关研究,并开发了基于MySQL分库分表技术的相关产品,Cobar/TDDL(目前为阿里云DRDS产品),...

    Mysql转Oracle软件 DBMover for Mysql to Oracle

    Dbmover for Mysql to Oracle 是高效的将Mysql导入到Oracle数据库的工具。 使用DBMover可以灵活定义Mysql和Oracle之间表和字段的对照关系,也可以在DBMover创建一个查询,把查询结果当作源表转入到Oracle中。 ...

    Oracle导Mysql适用于百、千万级别数据迁移

    Oracle导Mysql适用于百、千万级别数据迁移,速度是kettle的10倍以上数据库迁移 数据迁移 千万级 亿万级数据,MySQL oracle关系型 现需要开发一套程序用来快速迁移数据库,要求如下: 1.使用人员可以指定迁移数据库...

    oracle数据迁移到mysql小工具

    oracle数据迁移到mysql小工具,方便连接两个系统进行数据迁移。

    数据库迁移 数据迁移 千万级 亿万级数据MySQL oracle关系型

    1.使用人员可以指定迁移数据库类型 如:(orcal,sqlServer,csv 迁移至mysql) 2.在迁移数据库时,可以只迁移指定字段. 3.开发多任务的平台,按权重去执行任务,如:权重为1,1,2,3,4 那么1,1的权重一起执行,执行完毕后2...

    OracleTOMysql 转换工具

    Oracle数据库转换成Mysql数据库,可将Oralce数据转换成Mysql数据。

    Oracle到Mysql数据库迁移总结

    Oracle到Mysql数据库迁移总结Oracle到Mysql数据库迁移总结Oracle到Mysql数据库迁移总结Oracle到Mysql数据库迁移总结

    MYSQL到ORACLE程序迁移的注意事项

    有很多应用项目,刚起步...数据量的增加,MYSQL渐渐地出现不堪重负的情况:连接很慢甚至宕机,于是就有把数据从MYSQL迁到 ORACLE的需求,应用程序也要相应做一些修改。本人总结出以下几点注意事项,希望对大家有所帮助。

    记使用Oracle SQL Developer 迁移MySql 数据至 Oracle.docx

    将mysql的数据库表迁移到oracle中,使用sql developer 工具进行迁移,在迁移过程中遇到了很多坑,比如视图或表不存在错误,本文都进行了一一讲解,亲测成功。

    MySql转换成Oracle工具

    Convert Mysql to Oracle是一个免费的数据库转换工具,实现快速安全地将Mysql数据库导入为ORACLE数据库。 Convert Mysql to Oracle 功能特点 可以转换所有的Mysql字段类型 支持所有版本的Mysql 可以将数据合并到...

    Mysql迁移Oracle方案

    2.3.4 转换为oracle模型 2.3.5 生成数据结构执行脚本 2.3.6 迁移数据结构 2.3.7 设置“数据移动选项” 2.3.8 迁移数据 2.3.9 删除移植资料档案库 2.4 迁移数据准确性验证 2.4.1 过程验证 2.4.2 数据验证

    Oracle到mysql的迁移步骤及各种注意事项_数据库.pdf

    Oracle到mysql的迁移步骤及各种注意事项_数据库.pdf

    Oracle到mysql的迁移步骤及各种注意事项_数据库.docx

    Oracle到mysql的迁移步骤及各种注意事项_数据库.docx

    mysql-oracle数据同步

    一个mysql数据库数据同步至oracle数据库代码,同时修改mysql数据表标识。

    数据迁移工具DB2DB和mysql to oracle

    数据迁移工具,包含DB2DB、mysql to oracle工具。其中DB2DB工具不包含oracle,mysql to oracle仅有这两种。

    mysql与oracle数据互导

    mysql与oracle数据互导,源码,有详细代码说明 java写的mysql导入oracle; oracle导入mysql的只要改两行代码 eclipse3.6中直接运行

    从Oracle迁移数据到MySql-工具oracle2mysqlcn

    数据迁移 oracle转mysql oracle数据迁移 mysql数据迁移 从Oracle迁移数据到MySql-工具oracle2mysqlcn 从Oracle迁移数据到MySql方法大全文章地址: http://www.bywei.cn/post/111.html

Global site tag (gtag.js) - Google Analytics