当前位置:   article > 正文

oracle迁移至mysql数据表字段以及索引核对_oracle数据映射转换到mysql 字段不一致

oracle数据映射转换到mysql 字段不一致

由于mysql数据库是从oracle最早的用户下拉取的数据表,后期oracle的用户又对这些数据表进行了变更,没有及时同步所以有很大的出入,所以要将mysql下的所有数据表字段类型与Oracle用户已开发好的数据表字段类型保持一致。

其实有比较简单的方式可以进行核对,目前项目还没上线,数据库表中也没有数据,完全可以重新建库,由于甲方没有给重新建库的权限,所以只能想其他的办法进行核对表和字段类型。如下:

核对索引

1.查询mysql索引及对应的字段

有两种方式,根据自己的需求任选其一

  1. select a.table_name,a.column_name,a.index_name
  2. from intormation.schema.statistics a
  3. group by a.table_schema,a.table_name,a.index_name,a.column_name;
  4. -- 将联合索引字段进行拼接
  5. select upper(a.table_name),upper(group_concat(column_name order by column_name)) as
  6. from information_schema.statistics a
  7. group by a.table_schema,a.table_name ,a.index_name
  8. order by a.table_name ;

2.oracle查询所有表的索引及对应的字段

  1. select t.TABLE_NAME,t.COLUMN_NAME,
  2. i.index_name,i.UNIQUENESS
  3. from user_ind_columns t,user_indexes i
  4. where t.index_name = i.index_name
  5. and t.table_name = i.table_name
  6. and table_owner='EWS' -- 用户名
  7. group by t.table_name,i.index_name,i.UNIQUENESS
  8. order by t.table_name ;
  9. -- 将联合索引字段进行拼接
  10. select t.TABLE_NAME,listagg(t.COLUMN_NAME,',') within group(order by t.COLUMN_NAME) as COL,
  11. i.UNIQUENESS,i.index_name
  12. from user_ind_columns t,user_indexes i
  13. where t.index_name = i.index_name
  14. and t.table_name = i.table_name
  15. and table_owner='EWS' -- 用户名
  16. group by t.table_name,i.index_name,i.UNIQUENESS
  17. order by t.table_name ;
  18. -- 查询oracle数据库下所有的索引
  19. select t.TABLE_NAME,t.COLUMN_NAME, i.index_type
  20. from user_ind_columns t, user_indexes i
  21. where t.index_name = i.index_name
  22. and t.table_name = i.table_name ;

3.查看索引同步情况

创建两张临时表用于存放oracle与mysql查询的索引字段,便于查询出oracle存在而mysql不存在的索引

将查询到的所有字段数据导出csv格式,在oracle中导入临时表中

  1. 1.创建临时表
  2. create table MYSQL_INDEX(
  3. table_name VARCHAR2(255),
  4. col VARCHAR2(255),
  5. index_type VARCHAR2(255)
  6. )
  7. create table ORACLE_INDEX(
  8. table_name VARCHAR2(255),
  9. col VARCHAR2(255),
  10. index_type VARCHAR2(255),
  11. index_name VARCHAR2(255)
  12. )
  13. 插入临时表MYSQL_INDEX,ORACLE_INDEX中
  14. 直接使用以下sql,点击解锁图标,选中需要插入的字段。直接复制粘贴数据,填入需要的空字段中,提交
  15. select rowid, t.* from MYSQL_INDEX t;
  16. select rowid, t.* from ORACLE_INDEX t;
  17. 2.查看oracle存在而mysql不存在的索引
  18. select t.table_name,t.col,T.index_TYPE,T2.index_TYPE
  19. FROM oracle_index T
  20. LEFT JOIN MYSOL_index T2 ON T.table_name = T2.table_name
  21. WHERE T2.COL IS NULL
  22. GROUP BY t.table_name,t. col,T. index_TYPE,T2.index_TYPE
  23. ORDER BY t. table_name;
  24. select a.col,a.table_name
  25. from mysql_index a
  26. 3.查询mysql与oracle不一致的索引字段
  27. select a.col, a.table_name
  28. from mysql_index a
  29. where a.col not in
  30. (
  31. select a.col as col
  32. from oracle_index
  33. left join mysql_index b on a.table_name
  34. where ь.table_name and a.col b.col
  35. )

核对字段

查询两张表的字段是否相等
在查询之前需要将oracle和mysql数据库的字段全部导出
mysql字段需要在notpad++中转换成大写,将数据类型转换成oracle对应的字段类型,方便作比较

1.查询mysql所有的表,字段以及字段类型

  1. SELECT
  2. CONCAT_WS('',TABLE_NAME ,COLUMN_NAME )AS COLUMN_NAME,COLUMN_TYPE
  3. FROM
  4. information_schema.columns a
  5. WHERE
  6. EXISTS( SELECT 1 FROM
  7. information_schema.tables b
  8. WHERE b.table_type ='BASE TABLE'
  9. AND a.table_name = b.table_name AND table_schema ='ews_20')
  10. ORDER BY a.TABLE_NAME, a.COLUMN_NAME

2.查询oracle所有的表,字段以及字段类型

  1. SELECT table_name||'.'||column_name,
  2. case when data_type = 'NUMBE'THEN data_type||'('||data_precision||','||DATA_SCLE ||')'
  3. when data_type = 'DATE' THEN data_type
  4. ELSE data_type||'('||char_col_decl_length||')' END AS data_typeS
  5. FROM ALL_TAB_COLUMNS
  6. WHERE OWNER = UPPER('ews');
  7. 查询该用户下所有表
  8. SELECT * FROM ALL_TAB_COLUMNS WHERE OWNER = UPPER('ews');

3.查询字段同步情况

创建两张临时表用于存放oracle与mysql查询的字段类型,便于查询出oracle存在而mysql不存在的字段类型

将查询到的所有字段数据导出csv格式,在oracle中导入临时表中

  1. 1.创建临时表
  2. create table MYSQL_COLUMNS_INFO(
  3. table_name VARCHAR2(255),
  4. col VARCHAR2(255)
  5. )
  6. create table oracle_columns_info(
  7. table_name VARCHAR2(255),
  8. col VARCHAR2(255)
  9. )
  10. 插入临时表MYSQL_COLUMNS_INFO, oracle_columns_info中
  11. 直接使用以下sql,点击解锁图标,选中需要插入的字段。直接复制粘贴数据,填入需要的空字段中,提交
  12. select rowid, t.* from mysql_columns_info t;
  13. select rowid, t.* from oracle_columns_info t;
  14. 2.查询出mysql存在而oracle中不存在的字段
  15. select distinct upper(substr(a.col,1,instr(a.col,'.') -1)) as table_name
  16. from mysql_columns_info a
  17. left join oracle_columns_info b
  18. on upper(substr(a.col,1,instr(a.col,'.') -1)) F upper(substr(b.col,1,instr(b.col,'.') - 1))
  19. where b.colis null;
  20. 3.查询mysql与oracle字段类型不一致的字段
  21. SELECT A.COL,B.T_TYPE as oracle_type,A.T_TYPE as mysql_type
  22. FROM oracle_columns_info B
  23. LEFT JOIN MYSQL_COLUMNS_INFO A
  24. ON A.COL = B.COL AND B.T_TYPE<>A.T_TYPE
  25. WHERE A.COL Is NOT NULL;
 

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号