1.基本處理思路
第一步:建與mysql同構的oracle數據庫實例,并更新數據。
????? 1.期望將mysql導出成與oracle通用的sql語句,通過該語句進行更新。
????? 2.如果1不能做到,可先將數據庫結構(表結構等)導出,在通過insert語句,或execl(限制:最多只能6w多條記錄)進行導出、導入。
第二步:一邊設計新庫,一邊寫老庫到新庫的同步程序。
????? 1.通過dblink進行連接,用存貯過程同步。
????? 2.對于數據量為千萬級的表需要單獨(特別)處理。
2.mysql到oracle的整理工作
1.將表結構文件與數據文件分開
2.將"替換為null(替換為null即刪除)
3.將`替換為null
4.將int替換為number,將bigint替換為number,將decimal替換為number,將float替換為number,將unsigned替換為null
5.將char替換為varchar2,將varchar替換為varchar2,將text替換為blob
6.將timestamp替換為date,將datetime替換為date
7.將CURRENT_TIMESTAMP替換為sysdate
8.將character set gb2312 替換為null,將DEFAULT CHARSET=gbk 替換為null
9.將表名前的數據庫名替換為null。如:3yxupupup.module中將3yxupupup.刪掉
10.將ENGINE=InnoDB替換為null,將ENGINE=MyISAM替換為null
11.將default * 放置在NOT NULL之前
12.pk? : PRIMARY KEY (*)可以不進行替換,如果想要替換可替換為 alter table 表名 add primary key (主鍵列名);如:alter table DEPTLIST add primary key (DEPTID);
13.uk? :
14.fk? :
15.idx : KEY NewIndex1 (*)替換為 create index 索引名 on 表名 (索引列名);如:KEY NewIndex1 (timelevel,buglevel,moduleid)--》 create index idx_task_level on task (timelevel,buglevel,moduleid);
16.增加表說明:comment on table 表名 is '說明信息'; 如:comment on table deptlist is '部門表';
17.將列說明 COMMENT '列說明信息' 替換為 comment on column 表名.列名 is '列說明信息';如:comment on column deptlist.deptid is '部門編號,保持與RTX一致';
18.將自增長功能? 主鍵列auto_increment替換為null,表尾 AUTO_INCREMENT=當前值 替換為sequence+trigger
?? 如:CREATE TABLE doing (doingid number(11) NOT NULL,...) AUTO_INCREMENT=8 ;? 替換為
-- create sequence
create sequence seq_doing
minvalue 1
maxvalue 999999999999999999999999999
start with 8
increment by 1
nocache;
--create sequence bi
create or replace trigger tri_doing_bi before insert on doing for each row
begin
?if :new.doingid<0 or :new.doingid is null then
? select seq_doing.nextval into :new.doingid from dual;
????? --select substr(sys_guid(),1,32) into :new.doingid from dual;
?end if;
end;
/
21.更新數據對于日期類型需要增加to_date進行格式轉換,如:'2011-01-17 20:18:42'--》to_date( '2011-01-17 20:18:42','yyyy-mm-dd hh24:mi:ss')
21.更新數據時需要注意效率問題。一般的原則是每個表處理完成都需要一個commit;如果某個表記錄比較多,則每處理100條記錄commit一次。
22.如果表之間存在外鍵及觸發器,在更新數據時應該先讓外鍵、觸發器失效(disable),更新后在啟用外鍵、觸發器(enable)。
23.處理數據時需要記錄日志。如:spool c:/temp/×××.log;... spool off;
24.查看日志,對于提示違反唯一性約束的記錄分為兩種情況:一、記錄重復,違反了主鍵、唯一鍵、唯一索引,則不需要特殊處理;二、有人調整了唯一鍵、唯一索引,則需要確認后特殊處理。
?? 對于提示違反完整性約束的記錄是指違反了外鍵約束(父表沒有,子表有,即違反完整性約束),需要特殊處理。
??
31.表連接不建議使用jion的寫法
32.對于可能不維護值的字段請勿設置為not null 如:userinfo表
33.請將表名、列名、用戶名、數據庫名中的3yx*替換為yx3*
34.刪除表時將 IF EXISTS替換為null,如:DROP TABLE IF EXISTS yx3_account_info;--》DROP TABLE yx3_account_info;
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
