執行個體:從Oracle初始化資料到Sqlserver。
配置初始化資料抓取(direct load)
源端(oracle)
增加初始化加載batch task group
add extract eini01,sourceistable
參數解析:
#sourceistable表示從表direct抓取而不是redo日志擷取資料。
info extract *,tasks #檢視狀态是STOPPED
配置初始加載程序eini01的參數
edit params eini01
extract eini01
userid ggmgr,password oracle
rmthost 10.10.1.220,mgrport 7809,compress
rmttask replicat,group rini01
table ggmgr.t1;
rmttask replicat,group inir_erp
讓direct manager在目标端同時開啟rini01程序,完成一次性的加載,也就是在目标端我們不用手動start rini01程序了。
注意事項:
因為是直接從原表抽取,而不是從日志,是以不用為表加trandata也可以。
要使用defgen工具将源端定義傳送到目标端
目标端(sqlserver):
配置初始應用日志
目标端得手動建這個表,而不能在初始化時自動建上相應的表。
add replicat rini01,specialrun
info replicat *,tasks
--配置參數
edit params rini01
replicat rini01
targetdb mssql
sourcedefs D:\gg\dirdef\defgen.def
map ggmgr.t1, target erpdb.dbo.t1;
assumetargetdefs
什麼時候能用這個?
要是相同的db類型,例如都是Oracle
相同的charactor set與locale,例如american_AMERICA.
包含相同列的數目。
列的名稱要完全相同,包括大小寫空格符号等。
一樣的data types。
一樣的列長度。
have the same column length semantics for character columns (bytes versus characters). 意思應該是例如一個字母占幾個位元組這些吧。
字段的順序也得一緻。
如果對于有一樣結構的表,又有不一樣結構的表。sourcedefs與assumetargetdefs可以同時出現。
map ord.prod; target ord.prod;
assumetargetdefs
map rpt.stock, target rpt.stock
discardfile D:\gg\dirrpt\rini01.dsc,purges
#ASSUMETARGETDEFS:代表源表與目标表結構完全一樣,估計int與number也是不同的資料類型。這個與sourcedefs隻能選其中一個。
#specialrun指明這是一個one-time run,而不是continuous process。
發起init加載
源端(oracle)
start extract eini01 #源端發起就可以,會調用目标端的replicat程序來進行one-time加載。
info eini01
view report eini01
目标端(sqlserver)
view report rini01
specialrun參數定義一個初始加載程序(這是不使用檢查點的一次性加載)。檔案的下一行訓示replicat程序在加載完成後終止。extfile訓示提取檔案,sourcedefs指定表定義。
防火牆要注意通,可能用telnet 192.168.1.71 7809 這種方式來檢驗。
此時,我原表目标表都是沒有主鍵的,也可以同步。
另外,我在源端再次執行start extract eini01,目标表行數就多了一倍。