oracle数据迁移到mysql
1、表结构与数据迁移使用kettle进行数据迁移,注意添加mysql-connector-java-5.1.46.jar和ojdbc8-19.3.0.0.jar两个jar包进行支撑。参考地址(1)、 在kettle中新建作业,新建两个数据库连接;oracle数据库本身的编码要和mysql的保持一致,同时我们需要在配置mysql连接的“选项”里面配置对应的编码,否则mysql里面导过去的表会出现乱码
数据迁移
1、表结构与数据迁移
使用kettle进行数据迁移,注意添加
mysql-connector-java-5.1.46.jar和ojdbc8-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
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)