oracle 迁移到 mysql

 

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

posted @ 2020-06-24 23:26  雪儿蛇王  阅读(776)  评论(0编辑  收藏  举报