mysql迁移oracle服务器--过程笔记

2011年记

需求:公司要求把windows上的mysql数据迁移迁移到AIX中的oracle

准备阶段:

一、备份mysql库到本地例"gs0704"

二、再备份一个用于修改字段类型的库“gs0314”

       修改GS0314,用于mysql to oracle的操作

      1。删除表内的所有外键

      2。检查修改所有表名和字段的长度(ORACLE要求不超过32个字符)

      3。修改mysql

      例:

表名过长、字段关键字、字段名过长、字段类型text转为varchar(长度根据实际情况定义,如超过4000字节,text不变). bit类型改为bigint

gs_authorizationapply AUDITREMARK为text

gs_bankaccount 名下的account列 定义的长度不够 40以上

gs_combination 列number为关键字。改为number_

gs_confirmInvoiceApplyItem 列number为关键字。改为number_

gs_companyprofessionaevaluation 表名过长  现变为:gs_companyprofessionaevaluatio

gs_customer intro最长有8019个字,只能用text类型 ,"ADDRESS" 的值太大400

GS_CALLCATEGORY"."CONTENT" 的值太大100

# pub_group 中_id,_name去掉'_'

PUB_ORGAN2USER *  share 字段在oracle中是关键字。不能使用,现改为share_

# PUB_VIEW_HISTORY * _time改为time,_name 改为name

pub_jobgrade  字段   为关键字 改为level_

pub_permission _order 在表列名改为order_

修改所有的视图

        注:oracle 中if 写法:case when (b.status = 1) then 1 else 0 end)

       用工具Convert Mysql to Oracle 4.0 得到字段名与长度等问题

      4。备份外键脚本

        例:gs0314_tables_0712fk.sql

update   GS_ADJUSTSTOCKINAPPLY  set  APPLYUSERID =   rtrim(APPLYUSERID );
update   GS_ADJUSTSTOCKINAPPLY  set  AUDITUSERID =   rtrim(AUDITUSERID );
update   GS_ADJUSTSTOCKINAPPLY  set  STOCKFORMID =   rtrim(STOCKFORMID );
update   GS_ADJUSTSTOCKINAPPLY  set  GIFTID      =   rtrim(GIFTID      );
update   GS_ADJUSTSTOCKINAPPLY  set  ORGANID     =   rtrim(ORGANID     );
update   GS_ADJUSTSTOCKINAPPLY  set  WAREHOUSEID  =   rtrim(WAREHOUSEID  );
commit;
ALTER TABLE GS_ADJUSTSTOCKINAPPLY ADD CONSTRAINT GS_ADJUSTSTOCKINAPPLY_IBFK_4 FOREIGN KEY (APPLYUSERID) REFERENCES PUB_USER (ID);
ALTER TABLE GS_ADJUSTSTOCKINAPPLY ADD CONSTRAINT GS_ADJUSTSTOCKINAPPLY_IBFK_1 FOREIGN KEY (AUDITUSERID) REFERENCES PUB_USER (ID);    
ALTER TABLE GS_ADJUSTSTOCKINAPPLY ADD CONSTRAINT GS_ADJUSTSTOCKINAPPLY_IBFK_2 FOREIGN KEY (STOCKFORMID) REFERENCES GS_STOCKFORM (ID);
ALTER TABLE GS_ADJUSTSTOCKINAPPLY ADD CONSTRAINT GS_ADJUSTSTOCKINAPPLY_IBFK_3 FOREIGN KEY (GIFTID)      REFERENCES GS_GIFT (ID);     
ALTER TABLE GS_ADJUSTSTOCKINAPPLY ADD CONSTRAINT GS_ADJUSTSTOCKINAPPLY_IBFK_5 FOREIGN KEY (ORGANID)     REFERENCES PUB_ORGAN (ID);   
ALTER TABLE GS_ADJUSTSTOCKINAPPLY ADD CONSTRAINT GS_ADJUSTSTOCKINAPPLY_IBFK_6 FOREIGN KEY (WAREHOUSEID) REFERENCES GS_WAREHOUSE (ID);
             

(mysql to oracle 可能会出现外键列的值后面多出空格,先清除空格再创建外键)

      5。备份索引脚本

例:gs0704_tables_index.sql

CREATE INDEX FKE99298B5C66958A0 ON GS_ADJUSTSTOCKINAPPLY (WAREHOUSEID);
CREATE INDEX FKE99298B58CFCDD5C ON GS_ADJUSTSTOCKINAPPLY (GIFTID     );
CREATE INDEX FKE99298B5B23D8FBB ON GS_ADJUSTSTOCKINAPPLY (APPLYUSERID);
CREATE INDEX FKE99298B5C14D53A1 ON GS_ADJUSTSTOCKINAPPLY (ORGANID    );
CREATE INDEX FKE99298B54454E268 ON GS_ADJUSTSTOCKINAPPLY (AUDITUSERID);
CREATE INDEX FKE99298B5595C3F2E ON GS_ADJUSTSTOCKINAPPLY (STOCKFORMID);
DROP INDEX IDX_CODEGS_ADJUSTSTOCKINAPPLY;
CREATE UNIQUE INDEX IDX_CODEGS_ADJUSTSTOCKINAPPLY ON GS_ADJUSTSTOCKINAPPLY (CODE);
COMMIT;

      6。备份mysql数据增量处理脚本

例:mysql数据增量处理脚本.sql

select 'this table is gs_adjuststockinapply';
#
# data for the `gs_adjuststockinapply` table  (limit 0,500)
#
truncate table gs0314.gs_adjuststockinapply;
insert into gs0314.gs_adjuststockinapply select * from gs0704.gs_adjuststockinapply;

commit;

清除所有数据再重新导入

或 根据修改标识再更新数据

create table tmp as  select b.id as id from gs0704.gs_assert2user a
 left join gs0314.gs_assert2user b on  a.id= b.id
 where a.id is null or a.effectiveDate > b.effectiveDate;
delete from gs0314.gs_assert2user where id in(select * from tmp);
drop table tmp;

insert into gs0314.gs_assert2user
select a.* from gs0704.gs_assert2user a
left join gs0314.gs_assert2user b on a.id = b.id
where b.id is null or a.effectiveDate > b.effectiveDate;

commit;

 

  7。备份库(0314)与测试库(0704)记录数比对脚本

例:备份库与测试库记录数比对脚本.sql

truncate table gs0314.tempnum;
insert into  gs0314.tempnum   select (select count(*) as 0314num from   gs0314.gs_adjuststockinapply         ), ( select count(*) as 0704num from  gs0704.gs_adjuststockinapply         ),'gs_adjuststockinapply         ';
insert into  gs0314.tempnum   select (select count(*) as 0314num from   gs0314.gs_assert2user                ), ( select count(*) as 0704num from  gs0704.gs_assert2user                ),'gs_assert2user                ';

 

写入所有的表,创建对比表“tempnum”.对比完成无误后删除。

 

  8。备份序列

例:oracle序列脚本.sql

 

-- Create sequence 
create sequence GS_BUDGETAMOUNT_0
minvalue 1
maxvalue 9999999999999999999999999999
start with 2259
increment by 1
nocache
order;

在mysql to oracle 后 检查mysql中的自增长 列 与oracle中序列的配

三、创建ORALCE 表空间 与用户

例:

创建表空间-

CREATE TABLESPACE gs0704 DATAFILE '/oradata/data/gs/gs0704.dbf' size 50m autoextend on next 50m maxsize 20480m  extent management local;

创建用户-

create user gs identified by gstemp123 default tablespace gs0704;

分配权限-

grant dba to gs0704; --授权为管理员角色
grant connect,resource to gs0704;

 

开始对比迁移

 

四、同步数据库

       锁定正式库。用mysql工具 把mysql正式库 同步到 本机备份库

       记录表和列 修改的地方。再本地to oracle的修改库上进行修改。

       同时修改对应的脚本,比如外键、索引、增量等脚本。

 

五、本地mysql备份库与to oracle修改库 进行数据增量同步

       执行 mysql数据增量处理脚本.sql 脚本

       如报错,说明列或表 不对应。如 (四、同步数据库)

 

六、核查数据是否成功同步

       执行 备份库与测试库记录数比对脚本.sql

       查看tempnum表,确认记录数是否一致。

 

七、利用工具进行mysql to oracle的迁移

       现在用的工具为:Convert Mysql to Oracle 4.0 (具体过程 网上有教程)

 

mysql迁移oracle服务器--过程笔记 - 文木四水 - ∮文木四水∮
 
完成后,查看提示信息。如有错误进行对应的修改。
mysql to oracle 到目前为止,mysql方面完成。
 
八、对比mysql 与 oracle记录数
       oracle 查看所有表的记录数 :
       select t.table_name,t.num_rows from user_tables t order by t.table_name
       如有表不对应,最后对此表进行 重置同步数据。
 
九、修改oacle中的BLOB数据问题
       mysql to oracle 工具,遇到text类型 会 转为 BLOB类型,如果要转为CLOB类型 方法如下:
       例:oracle BLOB to CLOB脚本.sql
 
十、检查修改oracle中的外键
      执行:gs0314_tables_0712fk.sql 脚本
      如报:外键已存在,不用管,说明oracle已创建。注意其它的错误。
 
十一、检查修改oracle的索引
       执行:gs0704_tables_index.sql 脚本
       如报:索引已存在,不用管,说明oracle已创建。注意其它的错误。
  
十二、检查对比序列(mysql中的自增长)
       查看:oracle序列脚本.sql    

       确认所有的自增长列都有对应的序列

十三、加入视图

       手工修改mysql的视图(部份语法不同),加入到oracle库中。

    

OK,完成。。更改业务系统JDBC连接。

注:修改PO映射时的 类型,例:CLOB等


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值