oracle数据迁移到mysql

1、表结构与数据迁移

使用kettle进行数据迁移,注意添加
mysql-connector-java-5.1.46.jarojdbc8-19.3.0.0.jar
两个jar包进行支撑。参考地址
(1)、 在kettle中新建作业,新建两个数据库连接;
oracle数据库本身的编码要和mysql的保持一致,同时我们需要在配置mysql连接的“选项”里面配置对应的编码,否则mysql里面导过去的表会出现乱码,且某些表可能会迁移失败造成job异常终止.如下图:

在这里插入图片描述

配置DB连接时若连接测试报错
kettle ORA-28040: 没有匹配的验证协议
则是jar包问题,删除ojdbc14,使用ojdbc8
(2)、 配置完成后,选择“工具=>向导=>复制多表向导”,按照指引选择配置源数据库和配置目标数据库;
点击下一步,选择需要导入的库表;
点击下一步,输入名称与存储位置;
点击“完成”,会自动生成转换过程:

2、表注释迁移

1.在oracle中查询数据库的所有表的表注释和字段注释,代码如下:
select * from user_tab_comments – 获取表注释,查询结果只有table_name,table_type,comments
select * from user_col_comments – 获取字段注释,查询结果只有table_name,column_name,comments

select * from user_tab_comments where table_name not like '%BIN$%' and table_type != 'VIEW';
select * from user_col_comments where table_name not like '%BIN$%' and table_name != 'dsm_operationIndex';

2、在mysql中 新建tab_comments表,列名为table_name,table_type,comments,
新建comments表,列名为table_name,column_name,comments,将1中结果粘贴到这两个表中,保存。
3、在mysql中,将comment与information_schema.columns关联并创建包含表名、字段名、字段类型及注释的表:

CREATE TABLE col_comment
SELECT a.table_name,a.column_name,column_type,a.comments
FROM comments AS a,
(SELECT table_name,column_name,column_type
FROM information_schema.columns
WHERE table_schema='bj_dsm'
ORDER BY table_schema,table_name ) AS b
WHERE a.table_name=b.table_name AND a.column_name=b.column_name AND a.comments IS NOT NULL

4、创建存储过程批量更新表注释。
注意去掉在mysql中有冲突的表字段,如FUNCTION,LOAD等,进行手动添加

BEGIN
	DECLARE stmt VARCHAR(200);
	DECLARE strsqlb VARCHAR(200);
	declare done int default 0;
	
	declare c_person cursor for 
		SELECT CONCAT('ALTER TABLE ',table_name,' MODIFY COLUMN ',column_name,' ',column_type,' COMMENT ','\'',comments,'\'',';') AS statements
			FROM col_comment WHERE column_name not in ('FUNCTION','LOAD') ;
	# 捕获系统抛出的 not found 错误,如果捕获到,将 done 设置为 1  相当于try异常
	declare continue handler for not found set done=1;

	open c_person;

    www:loop
      # 3、使用游标
      fetch c_person into stmt;
      # 如果发生异常
        if done = 1 then
          leave www;
        end if ;
				SET @strsqlb = stmt;
				PREPARE d3 FROM @strsqlb;
				EXECUTE d3;

    end loop ;
    # 4、关闭游标
    close c_person;
END
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值