1、兩台不同伺服器;
2、從oracle10g定時同步(每天淩晨2:00)到sqlserver2005;
3、處於安全性考慮,客服方不提供sqlserver2005的賬戶密碼,只需我們提供資料集;
4、雙方程式語言都為java;
在這些前提下我提出了幾套方案,僅供參考:
a:如果oracle資料庫教程能在客戶服務器上訪問,由oracle方提供介面給客戶服務器實現,返回給客戶服務器所需同步資料,並由客戶服務器操作資料儲存到sqlserver2005中,介面代碼描述:遠程建立jdbc串連oracle(臨時帳戶),查詢oracle方提供的視圖,並訪問客戶所需資料集,打成jar包,由客戶方調用介面實現方法獲得資料。
b:如果oracle方不能被客戶服務器訪問,則將需同步資料置入xml中,並由客服伺服器方訪問其xml(http or socket),並有oracle方提供解析機制,返回資料集。
c:通過開來源資料庫同步軟體實現不同(google結果:symmetricds、opendbdiff(針對sqlserver))
前面三種方案均可實現從oracle同步到sqlserver2005,不過如果資料量較大時可能導致中途資料丟失或者同步速度較慢等情況,於是制定如下方案:
建立同步表,將客戶方所需資料表中欄位放入到同步表中,如:
使用者表:wid,userid,password
使用者同步表:wid,userid,password,no,operationtype,operationdate
可以看到同步表中多了三個欄位:no,operationtype,operationdate
no為序號,由oracle序列產生,operationtype為操作類型,0為新增,1為修改,2為刪除,operationdate為操作日期,取當前完整時間(年月日分秒)
建立使用者表觸發器,如果使用者表有操作則將客戶方所需使用者表欄位放入同步表中,如果新增將operationtype的值插入0,以此類推
在客服伺服器方,oracle方提供介面查詢同步表得到結果集,並和客服商議如何操作這些資料
這樣就可以實現哪些資料修改過就同步哪些資料,減免了雙方伺服器的壓力