一、前言
今天無意間發現一篇不錯的博客,關於達夢遷移工具的,正好最近也用到了,趁機整理一下,部分圖是從那篇博客里拷出來的,因為不想自己再操作一遍了,請見諒。
數據遷移方式有很多,跨庫比較常用的是dts和dmfldr。
遷移的時候建議先不遷移外鍵等約束,在選擇好要遷移的表時,點擊轉換,按照下面步驟遷移。
(1)第一次只選擇表定義,不選擇約束等
(2)第一次遷移完成后(確保沒有錯誤),第二次只選擇數據
(3)第三步選擇約束、索引等
(4)數據量大的表,可以用達夢的dmfldr工具單獨遷移
(4)驅動建議用源庫自帶的驅動,不然可以會遷移出錯
二、遷移
1、dts打開方式
可以在xx/dmdbms/tool下找到dts打開,或者管理工具里,在主頁雙擊DM數據庫遷移工具。
2、新建工程
3、數據類型映射
打開找到新建工程下的數據類型映射,這步可以不做,一般直接創建遷移就行,里面有轉換按鈕,需要的話可以做類型映射。
點擊添加,添加對應要遷移的數據庫類型和目前數據庫類型的對應關系
達夢數據庫對應類型
4、新建遷移任務
點擊下一步,選擇對應遷移數據庫
點擊下一步,輸入源端(需要遷移庫)和目的端(把數據遷移到的目標庫)的連接信息
5、選擇遷移方式
1)查詢方式遷移
2)從數據源復制對象
這里要多說一句,遷移前要先在目的庫創建用戶,創建好用戶,達夢會自動創建同名的模式,如果源庫和目的庫模式名稱不同,這里要先做好模式映射,在“目的模式”中輸入你想遷入的目的庫的模式名。
點擊下一步選擇需要遷移的表
選擇后可以點擊轉換按鈕,設置你要遷移哪些東西,比如只遷移表結構,還是只遷移數據,等等,還可以設置數據類型映射,如下圖的“數據類型”。
如果想把你在轉換中的設置,應用到其他的表上,可以勾選“應用當前選項到其他同類對象”。
6、遷移出錯處理
1)重新遷移出錯的對象
建議保存遷移錯誤
2)導入遷移對象
如果遷移對象很多,在遷移的時候,可以導入遷移對象,只遷移部分表,最常用的場景是,重新遷移出錯的表
可以自定義導入對象的格式,現在只支持txt,文件格式如下:
逗號前面的是模式名稱,逗號后面的是表名稱。
最終效果:
3)補充
如果表比較多,txt整理起來還挺麻煩的,在這里補充個notpade快捷鍵的用法。
a)先添加一個逗號
b)復制列
復制第一個逗號
Alt+鼠標左鍵
選取要復制的列
Ctrl+v
效果如下:
或者,也可以把光標放在第三行DEM后面,點擊“編輯”-列塊編輯,插入文本輸入逗號
點擊確定即可
c)在行末添加“,
使用notepad++替換功能在每行末尾添加”,,構成所需要的字符串內容
點擊確定之后,執行全部替換
Ctrl+F
點替換
$表示行末
7、數據比對
遷移完,想知道數據到底遷移過來沒,一般直接比較數據量就行了。
可以先創建一張統計表,然后統計每張表的數據量,把數據量信息插入統計表中,如下:
create table TMP_GET_ACTURAL_TABLE_COUNT(table_name varchar(50),table_cnt int); begin for cursor_sql in( select 'insert into TMP_GET_ACTURAL_TABLE_COUNT(table_name,table_cnt) select '''||table_name||''' as table_name,count(1) as table_cnt from '||table_name as sqlstr1,table_name from (select b.name table_name from sysobjects a,sysobjects b where a.type$='SCH' and a.id = b.schid and b.type$='SCHOBJ' and b.subtype$='UTAB' and a.name ='SYSDBA' and b.name not like 'TMP%' ) ) loop --print cursor_sql.table_name; execute immediate (cursor_sql.sqlstr1); commit; end loop; end;
統計達夢庫中某個模式下的數據量,注意表名稱如果是關鍵字,需要加引號,不然這個過程塊會報錯。 oracle中換成從all_tables中查詢,根據owner篩選。SYSDBA是本例統計的模式名稱。
select b.name table_name from sysobjects a,sysobjects b where a.type$='SCH' and a.id = b.schid and b.type$='SCHOBJ' and b.subtype$='UTAB' and a.name ='SYSDBA' and b.name not like 'TMP%' 這個是達夢的語法,其實也能換成通過all_tables來統計,或者使用模式所屬用戶登錄,通過user_tables統計,user_tables只能查到當前登錄用戶下的所有表。
8、其他
達夢有個雲適配中心,地址如下:
https://eco.dameng.com/docs/zh-cn/start/migrate-oracle-dm.html
里面有遷移手冊之類的,還有遷移時遇到的各種問題整理,會定時更新,有需要的可以參考下。
更多資訊請上達夢技術社區了解: https://eco.dameng.com