<b>办理两相同数据库数据同步的问题</b>[MSSQL防范]
本文“<b>办理两相同数据库数据同步的问题</b>[MSSQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
为用户组建一套sql server利用系统时,用户常常提到这样的要求:
假如此中一台服务器坏了,怎样才能避免数据丧失,并在最短的时间内恢复系统?www.iTbulo .comkCgPj
要办理这个问题,必定需求两台服务器,并在两台服务器上装有相同的数据库,保持两台服务器中的数据同步,当主服务器坏了时,将别的一台服务器更改一下计算机名称,从而使得工作站可以持续运行.www.iTbulo .comkCgPj
那么若何保持两台数据库中的数据同步呢? SQL Server供应了出版-定阅机制,可以将数据及时的拷贝到定阅服务器中. 但在实际利用中,发现一旦成立起了出版-定阅关系,在定阅服务器数据库中的触发器,主键等东西都不见了!!! 当主服务器不能正常工作时,要想让另一台服务器改变成主服务器,除更改计算机名外,还需成立触发器,索引等,历程对比烦琐.分外当用户对数据库保护不熟习时,这种操作越发麻烦.www.iTbulo .comkCgPj
Sql Server做为一种数据库管理系统,它与客户的接口都是通过SQL语句举行的, 用户在插入一条记录时,SQL Server会接纳到Insert语句;更改一条记录时,会接纳到 Update号令...
那么假如我们能在SQL Server中跟踪到全部发给SQL Server的SQL语句,那么我们便可以知道数据库发生了哪些改变,并可以将这种改变发给别的一到服务器,从而实现数据及时同步的功效.www.iTbulo .comkCgPj
值得高兴的是,SQL Server 供应了跟踪功效 ,它们是以 xp_trace_XXXXXX的一系列存储历程,
你可以设置过滤条件,从而只跟踪影响你的数据库 改变的SQL 语句,将这些SQL 语句存放在本地表中,再从本地表中读出,发送给别的一台服务器 ,从而实现数据同步功效. 这种办法可以跟踪任何范例的改变,包含Image范例数据的改变.www.iTbulo .comkCgPj
以下面是用BCB5.0语句实现成立跟踪历程:
bool TForm1 :: BuildTrace(int DBID,
AnsiString AppFilter,
AnsiString SQLFilter,
AnsiString DstTable,
int &TraceHandle)
{
char tempBuf[512];www.iTbulo .comkCgPj
Query1 -> Close();
Query1 -> SQL -> Clear();
TStrings *pSQL = Query1 -> SQL;www.iTbulo .comkCgPj
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));www.iTbulo .comkCgPj
wsprintf(tempBuf,"EXEC xp_trace_setdbidfilter @queue_handle,%d",DBID);
pSQL -> Add( AnsiString(tempBuf));www.iTbulo .comkCgPj
wsprintf( tempBuf,"Exec xp_trace_settextfilter @queue_handle,'%s',NULL", SQLFilter.c_str());
pSQL -> Add(AnsiString(tempBuf));www.iTbulo .comkCgPj
www.iTbulo .comkCgPj
www.iTbulo .comkCgPj
wsprintf( tempBuf,
"EXEC xp_trace_setqueuedestination @queue_handle,4,1,NULL,'%s'",
DstTable.c_str()
);
pSQL -> Add( AnsiString(tempBuf));www.iTbulo .comkCgPj
pSQL -> Add("EXEC xp_trace_startconsumer @queue_handle");
pSQL -> Add("SELECT @queue_handle QueueHandle");www.iTbulo .comkCgPj
try
{
Query1 -> Open();
}
catch(...)
{
return false;
}
TraceHandle = Query1 -> FieldByName("QueueHandle") -> AsInteger;
return true;
}www.iTbulo .comkCgPj
www.iTbulo .comkCgPj
本文地址: | 与您的QQ/BBS好友分享! |