1 : 使用 Navicat Premium 12 做迁移
安装 Navicat Premium 12 并且可以连接上MySQL 和 oracle
2: 迁移
3 : 验证 迁移完后主键 外键 索引 总数据条数 应该是没问题的 ,
要自己迁移 函数 存储过程 视图 ,更改一部分字段数据类型 , 自己点一遍每张表的数据 看看是否有问题 例如乱码 .....
1: 查询主键 ---对比查询总条数就可以
oracle : --更改用户名 ( CHENG ) 就可以
select cu.* from user_cons_columns cu, user_constraints au where cu.constraint_name = au.constraint_name
and au.constraint_type = 'P' and au.table_name in(select table_name from all_tables where owner='CHENG ')
mysql : --更改数据库名 ( qy ) 就可以
select table_name,column_name from INFORMATION_SCHEMA.KEY_COLUMN_USAGE t
where t.table_schema ='qy' and CONSTRAINT_NAME ='PRIMARY'
2: 查询外键 ---对比查询总条数就可以
oracle : --更改用户名 (CHENG ) 就可以
select * from user_constraints c where c.constraint_type = 'R' and c.table_name
in(select table_name from all_tables where owner='CHENG ')
mysql : --更改数据库名 ( qy ) 就可以
select table_name,column_name from INFORMATION_SCHEMA.KEY_COLUMN_USAGE t
where t.table_schema ='qy' and CONSTRAINT_NAME !='PRIMARY'
3 : 查询所有的索引
oracle : --更改用户名 ( CHENG ) 就可以
select * from USER_INDEXES where table_name in(select table_name from all_tables where owner='CHENG ')
mysql : --更改数据库名 ( qy ) 就可以
select INDEX_NAME,COLUMN_NAME from INFORMATION_SCHEMA.STATISTICS t where t.INDEX_SCHEMA ='qy'
4: 查询数据总条数
MySQL : 执行第一个sql 更改数据库名字 , 将第一个sql 结果手动复制到 第二个sql上 查看结果
select concat(
'select "',
TABLE_name,
'", count(*) z from ',
TABLE_SCHEMA,
'.',
TABLE_name,
' union all'
) from information_schema.tables
where TABLE_SCHEMA='testqy' ----testqy是数据库名字
select sum(t.z) from ( 将上面结果手动复制到这里进行查询 ) t
Oracle : 执行第一个sql 更改用户名 , 将第一个sql 结果手动复制到 第二个sql上 查看结果
select (
'select ''' ||
TABLE_NAME ||
''', count(*) z from '||
TABLE_NAME||
' union all'
) from all_tables where owner='CHENG' --这里是用户名
select sum(t.z) from ( 将上面结果手动复制到这里进行查询 ) t
5: 类型转换 ------转换的类型基本上不会出现问题
1: NUMBER ====decimal 类型
2: 如果 number 没有定义小数 存储整型的值 转的时候11以下转int 11以上转 bigint
例如 number(10)==int(10) ,number(11)===bigint , 当然也可以转为 decimal 类型 ,因为 decimal 类型 的取值区间是 1--65
如果number 没有定义长度 , 转到MySQL 上是默认转为 decimal(65,30) ------这里默认转为最大空间的值 , 这里得手动更改下
3: VARCHAR2 ----大于255 的转为 txt 类型, 小于255的转为 VARCHAR ------转为txt 也没问题 txt长度不限制
4: BLOB------longblob ===== 应该转为blob , 这里转为 longblob 也没问题,就是存储空间大了些而已
5: CLOB-------longtext
6: char ------char
7: TIMESTAMP------ datetime