mysql转oracle_MYSQL数据库迁移到ORACLE数据库

一、概述

现在有个需求,想把mysql数据库中的数据转移到oracle数据库中,网上找了好几种方法,最后决定使用oracel sql developer这种工具来实现。

Mysql和oracle属于两种不同的数据库,具体使用差异也有很多,不能简单使用sql文件进行导出导入。以下几个示例比较一下Mysql与oracle数据库的差异

lSQL基本语法差异

MySQL的SQL语句中,要求表名、表的别名必须区分大小写(可通过修改mysql配置文件my.cnf,增加lower_case_table_names=1来忽略大小写,从而与Oracle尽量保持一致),尤其是表的别名。建议通过组内开发规范统一起来,以消除差异性。

MySQL的Insert语句,支持ignore语法忽略主键冲突报错,如:insert ignore into table_name...;支持insert into ... on duplicate key update...的用法,此时要求表必须有主键或唯一性约束字段。

与insert语句类似,MySQL还支持replace into语句,若插入表中已存在数据时,则用新数据记录替换旧的记录。

l建表语句差异

创建表时,MySQL不支持create or replace,但可以通过drop table if exists tbl_name来重新创建表。

另外,在建表语句、建索引语句中,MySQL不支持tablespace后缀。此时,可以将Oracle导出的DDL语句中,tablespace部分注释掉;同时,在导入MySQL数据库时,先执行set @@sql_mode='oracle'以尽量保持与Oracle语法一致。具体sql_mode,可参考MySQL官方手册等文档。

l内置函数差异

具体参考https://www.cnblogs.com/HondaHsu/p/3641190.html

l表主键取值差异

MySQL不支持Sequence,在表中可设置自增主键。如与Oracle兼容,可考虑统一采用function来封装主键取值差异。

l存储过程差异

对于存储过程而言,Oracle 的PLSQL与MySQL也是有较大不同的,比如,MySQL不支持包、不支持常量定义、不支持dbms_output调试……具体细节以后另外整理。

l视图差异

MySQL的视图from语句中不允许存在子查询,可以通过将子查询创建为新的视图的方式解决。Oracle的物化视图相关概念,在MySQL中也不存在。

二、环境准备

1、mysql准备工作

mysql创建测试数据,建立一个库,再建立一个表,随便插入两条数据

[root@DB mysqldb]# mysql -uroot -p

Enter password:

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 23

Server version: 5.1.73 Source distribution

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Type 'help;' or '\h'

你可能感兴趣的:(mysql转oracle)