1.基本處理思路
第一步:建與mysql同構(gòu)的oracle數(shù)據(jù)庫(kù)實(shí)例,并更新數(shù)據(jù)。
????? 1.期望將mysql導(dǎo)出成與oracle通用的sql語(yǔ)句,通過(guò)該語(yǔ)句進(jìn)行更新。
????? 2.如果1不能做到,可先將數(shù)據(jù)庫(kù)結(jié)構(gòu)(表結(jié)構(gòu)等)導(dǎo)出,在通過(guò)insert語(yǔ)句,或execl(限制:最多只能6w多條記錄)進(jìn)行導(dǎo)出、導(dǎo)入。
第二步:一邊設(shè)計(jì)新庫(kù),一邊寫老庫(kù)到新庫(kù)的同步程序。
????? 1.通過(guò)dblink進(jìn)行連接,用存貯過(guò)程同步。
????? 2.對(duì)于數(shù)據(jù)量為千萬(wàn)級(jí)的表需要單獨(dú)(特別)處理。
2.mysql到oracle的整理工作
1.將表結(jié)構(gòu)文件與數(shù)據(jù)文件分開
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.將表名前的數(shù)據(jù)庫(kù)名替換為null。如:3yxupupup.module中將3yxupupup.刪掉
10.將ENGINE=InnoDB替換為null,將ENGINE=MyISAM替換為null
11.將default * 放置在NOT NULL之前
12.pk? : PRIMARY KEY (*)可以不進(jìn)行替換,如果想要替換可替換為 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.增加表說(shuō)明:comment on table 表名 is '說(shuō)明信息'; 如:comment on table deptlist is '部門表';
17.將列說(shuō)明 COMMENT '列說(shuō)明信息' 替換為 comment on column 表名.列名 is '列說(shuō)明信息';如:comment on column deptlist.deptid is '部門編號(hào),保持與RTX一致';
18.將自增長(zhǎng)功能? 主鍵列auto_increment替換為null,表尾 AUTO_INCREMENT=當(dāng)前值 替換為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.更新數(shù)據(jù)對(duì)于日期類型需要增加to_date進(jìn)行格式轉(zhuǎn)換,如:'2011-01-17 20:18:42'--》to_date( '2011-01-17 20:18:42','yyyy-mm-dd hh24:mi:ss')
21.更新數(shù)據(jù)時(shí)需要注意效率問(wèn)題。一般的原則是每個(gè)表處理完成都需要一個(gè)commit;如果某個(gè)表記錄比較多,則每處理100條記錄commit一次。
22.如果表之間存在外鍵及觸發(fā)器,在更新數(shù)據(jù)時(shí)應(yīng)該先讓外鍵、觸發(fā)器失效(disable),更新后在啟用外鍵、觸發(fā)器(enable)。
23.處理數(shù)據(jù)時(shí)需要記錄日志。如:spool c:/temp/×××.log;... spool off;
24.查看日志,對(duì)于提示違反唯一性約束的記錄分為兩種情況:一、記錄重復(fù),違反了主鍵、唯一鍵、唯一索引,則不需要特殊處理;二、有人調(diào)整了唯一鍵、唯一索引,則需要確認(rèn)后特殊處理。
?? 對(duì)于提示違反完整性約束的記錄是指違反了外鍵約束(父表沒(méi)有,子表有,即違反完整性約束),需要特殊處理。
??
31.表連接不建議使用jion的寫法
32.對(duì)于可能不維護(hù)值的字段請(qǐng)勿設(shè)置為not null 如:userinfo表
33.請(qǐng)將表名、列名、用戶名、數(shù)據(jù)庫(kù)名中的3yx*替換為yx3*
34.刪除表時(shí)將 IF EXISTS替換為null,如:DROP TABLE IF EXISTS yx3_account_info;--》DROP TABLE yx3_account_info;
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

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