2023年記
需求:公司要求把windows上的mysql資料遷移遷移到aix中的oracle
準備階段:
一、備份mysql庫到本地例"gs0704"
二、再備份乙個用於修改字段型別的庫「gs0314」
修改gs0314,用於mysql to oracle的操作
1。刪除表內的所有外來鍵
2。檢查修改所有表名和字段的長度(oracle要求不超過32個字元)
3。修改mysql
例:表名過長、字段關鍵字、欄位名過長、字段型別text轉為varchar(長度根據實際情況定義,如超過4000位元組,text不變). bit型別改為bigint
gs_bankaccount 名下的account列 定義的長度不夠 40以上
gs_combination 列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
(mysql to oracle 可能會出現外來鍵列的值後面多出空格,先清除空格再建立外來鍵)
5。備份索引指令碼
例:gs0704_tables_index.sql
6。備份mysql資料增量處理指令碼
例:mysql資料增量處理指令碼.sql
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
寫入所有的表,建立對比表「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 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等
Oracle遷移到MySQL總結
日期 2012 06 01 字型 大中小 這兩個星期裡一直都在忙於一件事兒,就是oracle資料庫的遷移問題。沒有做的時候感覺這是一件十分輕鬆的事兒,可是等到實實在在去做去實現的時候,自己傻眼了。這種糾結啊,在這裡先說下遇到的問題 1。資料庫的表結構問題 資料型別不同需要解決varchar2 var...
Oracle與MySQL遷移語法相容
最近專案上使用oracle的系統,需要相容mysql,原本使用到的sql語法需要修改以相容到mysql。先記錄下目前遇到的問題,後續會繼續更新。1,oracle nvl 這個函式用的比較多,功能就是從兩個表示式返回乙個非 null 值,mysql ifnull expr1,expr2 也有相同功能 ...
將MySQL資料遷移到Oracle
因為專案的原因,今晚將mysql資料庫的內容嘗試遷移到oracle,雖然結果失敗,不過學到了不少,下次就不一定了,哈哈 因為之前專案是使用mysql資料庫的,現在因為新公司要求使用oracle 公司大得很 不得不嘗試將以前專案進行遷移。經過查詢相關文件,最終選定使用oracle sql develo...