解決兩相同資料庫資料同步的問題 續

2021-04-17 07:54:53 字數 1370 閱讀 9306

筆者是在山東濰坊出差時,遇到了使用者要求的提供雙機熱備份功能,

最終的解決方案是:

在主服器上執行同步程式(用bcb5.0編寫的程式),同步程式在啟動時,在sql server 中建立跟蹤過程,跟蹤過程將跟蹤到的sql 語句存放在主伺服器的跟蹤表中;

同步程式每隔半分鐘訪問跟蹤表,將其中的sql 語句傳送到備份伺服器,並將其刪除!

query1 -> close();            //query1 為 tadoquery的元件

//實驗中發現若用bde中的tquery元件,對跟蹤到的 

//image型別資料會操作時會發生錯誤.

query1 -> sql -> clear();

tstrings *psql = query1 -> sql;

//設定sql 語句的過濾條件,可設定成" update%;delete%;insert%",則只跟蹤update

// insert 和 delete語句

wsprintf( tempbuf,"exec xp_trace_settextfilter @queue_handle,'%s',null", sqlfilter.c_str());

psql -> add(ansistring(tempbuf));

//設定將跟蹤到的資訊存放在哪個表裡 ,

//如果表不存在,則自動建立,表的列數由前面的@colomun_value控制.

// 為以後方便讀出控制,可以在自動建立了這個表後,手工的為其加上id欄位(自動增長字段),

// 並做為主索引.

wsprintf( tempbuf,

"exec xp_trace_setqueuedestination @queue_handle,4,1,null,'%s'",

dsttable.c_str()

);psql -> add( ansistring(tempbuf));

// 開始跟蹤

psql -> add("exec xp_trace_startconsumer @queue_handle");

psql -> add("select @queue_handle queuehandle");

// 將批命令提交到sql server, 執行完畢後,跟蹤過程就建立起來了

trycatch(...)

tracehandle = query1 -> fieldbyname("queuehandle") -> asinteger;

return true;

}//呼叫過程

...int tracehandle

int dbid;

dbid = getdbid("mydb1");    //根據資料庫名從sql server的sysdatabases中查詢dbid

解決兩相同資料同步的問題

為使用者組建一套應用系統時,使用者經常提到這樣的要求 如果其中一台伺服器壞了,怎樣才能防止資料丟失,並在最短的時間內恢復系統?要解決這個問題,肯定需要兩台伺服器,並在兩台伺服器上裝有相同的資料庫,保持兩台伺服器中的資料同步,當主伺服器壞了時,將另外一台伺服器更改一下計算機名稱,從而使得工作站可以繼續...

解決主從資料庫同步延遲問題

場景 需要在主機寫入之後,保證在備機一定能夠讀取到已經寫入的資料,也就是需要主從架構下的強一致性。主機與備機之間的物理延遲是不可控的,也是無法避免的。但是如果僅僅需要滿足這種強一致性,是相對簡單的事情 只需要在主機寫入時,確認更新已經同步到備機之後,再返回寫操作成功即可。主從資料庫支援這種完全的同步...

同步兩個資料庫

同步兩個資料庫的示例 有資料 srv1.庫名.author有欄位 id,name,phone,srv2.庫名.author有欄位 id,name,telphone,adress 要求 srv1.庫名.author增加記錄則srv1.庫名.author記錄增加 srv1.庫名.author的phone...