解決兩相同資料庫資料同步的問題 (轉)
為組建一套 SERVER應用時,使用者經常提到這樣的要求:
如果其中一臺壞了,怎樣才能防止資料丟失,並在最短的時間內恢復系統?
要解決這個問題,肯定需要兩臺伺服器,並在兩臺伺服器上裝有相同的,保持兩臺伺服器中的資料同步,當主伺服器壞了時,將另外一臺伺服器更改一下名稱,從而使得工作站可以繼續執行.
那麼如何保持兩臺資料庫中的資料同步呢? 提供了出版-定閱機制,可以將資料實時的複製到定閱伺服器中. 但在實際應用中,發現一旦建立起了出版-定閱關係,在定閱伺服器資料庫中的,主鍵等東西都不見了!!! 當主伺服器不能正常工作時,要想讓另一臺伺服器轉變為主伺服器,除更改計算機名外,還需建立觸發器,等,過程比較煩瑣.特別當使用者對資料庫維護不熟悉時,這種操作更加麻煩.
Sql Server做為一種資料庫管理系統,它與客戶的介面都是透過SQL語句進行的, 使用者在插入一條記錄時,SQL Server會接收到Insert語句;更改一條記錄時,會接收到 Update命令...
那麼如果我們能在SQL Server中跟蹤到所有發給SQL Server的SQL語句,那麼我們就可以知道資料庫發生了哪些改變,並可以將這種改變發給另外一到伺服器,從而實現資料實時同步的功能.
值得高興的是,SQL Server 提供了跟蹤功能 ,它們是以 xp_trace_XXXXXX的一系列過程,
你可以設定過濾條件,從而只跟蹤影響你的資料庫 變化的SQL 語句,將這些SQL 語句存放在本地表中,再從本地表中讀出,傳送給另外一臺伺服器 ,從而實現資料同步功能. 這種方法可以跟蹤任何型別的變化,包括Image型別資料的改變.
以下面是用BCB5.0語句實現建立跟蹤過程:
bool TForm1 :: BuildTrace(int ID,
AnsiString AppFilter,
AnsiString SQLFilter,
AnsiString DstTable,
int &TraceHandle)
{
char tempBuf[512];
Query1 -> Close();
Query1 -> SQL -> Clear();
TStrings *pSQL = Query1 -> SQL;
pSQL -> Add("USE master");
pSQL -> Add("DECLARE @queue_handle int");
pSQL -> Add("DECLARE @column_value int");
pSQL -> Add("SET @column_value = 67108864|1|512|1024|10384");
pSQL -> Add("EXEC xp_trace_addnewqueue 1000,5,95,90,@column_value,@queue_handle OUTPUT");
pSQL -> Add("EXEC xp_trace_seteventclassrequired @queue_handle, 41,1 ");
wsprintf(tempBuf,"EXEC xp_trace_setappfilter @queue_handle,'%s',NULL", AppFilter.c_str());
pSQL -> Add(AnsiString(tempBuf));
wsprintf(tempBuf,"EXEC xp_trace_setdbidfilter @queue_handle,%d",DBID);
pSQL -> Add( AnsiString(tempBuf));
wsprintf( tempBuf,"Exec xp_trace_settextfilter @queue_handle,'%s',NULL", SQLFilter.c_str());
pSQL -> Add(AnsiString(tempBuf));
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(" @queue_handle QueueHandle");
try
{
Query1 -> Open();
}
catch(...)
{
return false;
}
TraceHandle = Query1 -> FieldByName("QueueHandle") -> AsInteger;
return true;
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-993406/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料庫同步問題資料庫
- 兩臺SQL Server資料同步解決方案(轉)SQLServer
- Mysql多臺資料庫同步問題(轉)MySql資料庫
- 安裝資料庫和資料庫解決問題資料庫
- 解決hive資料庫 插入資料很慢的問題Hive資料庫
- 資料庫同步更新問題?資料庫
- 利用oracle快照dblink解決資料庫表同步問題Oracle資料庫
- MySQL主從資料庫同步延遲問題怎麼解決MySql資料庫
- Oracle資料庫基本知識及問題解決(轉)Oracle資料庫
- 做資料庫分離讀寫時,sqlServer資料庫資料同步的問題:資料庫SQLServer
- 解決被掛起的資料庫問題資料庫
- 兩臺SQL Server資料同步解決方案SQLServer
- 同步寫兩個資料庫資料庫
- 資料庫層面問題解決思路資料庫
- 解決MySQL的主從資料庫沒有同步的兩種方法MySql資料庫
- 【資料庫】解決Mysql資料庫提示innodb表不存在的問題!資料庫MySql
- 不同字符集資料庫之間的資料同步問題:資料庫
- Laravel5的資料庫表建立問題 資料庫遷移操作報錯問題解決Laravel資料庫
- 資料庫學習:透過作業定時同步兩個資料庫(轉)資料庫
- 資料不能同步的問題?
- SqlServer資料庫中文亂碼問題解決SQLServer資料庫
- oracle 資料庫解決問題思路總結Oracle資料庫
- 不同字符集資料庫之間的資料同步問題-補資料庫
- 解決AI的小資料問題AI
- 同步整合不同系統、不同資料庫中資料的問題資料庫
- 在兩個資料庫之間進行資料同步資料庫
- 資料庫系列:大廠使用資料庫中介軟體解決什麼問題?資料庫
- 解決Mysql資料庫插入資料出現問號(?)的解決辦法MySql資料庫
- 安裝mysql資料庫及問題解決方法MySql資料庫
- 用檢視解決資料庫鏈路問題資料庫
- 轉:EXP 資料庫資料 QUERY 選項使用問題資料庫
- 解決資料庫高併發訪問瓶頸問題資料庫
- 如何建立與現有資料庫相同的空資料庫資料庫
- 如何解決資料庫配置問題資料庫
- 解決latch free問題的資料庫引數調整資料庫
- 解決pl/sql developer中資料庫插入資料亂碼問題SQLDeveloper資料庫
- 關於兩組相同的radio同步問題
- Excel查詢兩列資料相同的元素Excel