数据库同步的方式有设置标志位同步方式、以时间戳同步的方式,对于一对一的同步这两种方式都满足,但是对于一对多的同步,则只能选择时间戳的同步方式了,但是已时间戳同步的方式的一个问题是如何可靠的保证数据可以不丢失的同步到数据库中。下面有两种方式
数据库同步的方式有设置标志位同步方式、以时间戳同步的方式,对于一对一的同步这两种方式都满足,但是对于一对多的同步,则只能选择时间戳的同步方式了,但是已时间戳同步的方式的一个问题是如何可靠的保证数据可以不丢失的同步到数据库中。下面有两种方式来保证以时间戳同步的可靠性。
1、计算服务器与客户端两台电脑的时间差,将该时间差记入在同步时间的比对当中,下图是使用kettle做的一个计算同步的时间差的思路:
该思路的xml代码为:
getLeadValue Normal 0 /downloadServerData/commonData <table />ID_BATCHYID_BATCHCHANNEL_IDYCHANNEL_IDTRANSNAMEYTRANSNAMESTATUSYSTATUSLINES_READYLINES_READLINES_WRITTENYLINES_WRITTENLINES_UPDATEDYLINES_UPDATEDLINES_INPUTYLINES_INPUTLINES_OUTPUTYLINES_OUTPUTLINES_REJECTEDYLINES_REJECTEDERRORSYERRORSSTARTDATEYSTARTDATEENDDATEYENDDATELOGDATEYLOGDATEDEPDATEYDEPDATEREPLAYDATEYREPLAYDATELOG_FIELDYLOG_FIELD<table />ID_BATCHYID_BATCHSEQ_NRYSEQ_NRLOGDATEYLOGDATETRANSNAMEYTRANSNAMESTEPNAMEYSTEPNAMESTEP_COPYYSTEP_COPYLINES_READYLINES_READLINES_WRITTENYLINES_WRITTENLINES_UPDATEDYLINES_UPDATEDLINES_INPUTYLINES_INPUTLINES_OUTPUTYLINES_OUTPUTLINES_REJECTEDYLINES_REJECTEDERRORSYERRORSINPUT_BUFFER_ROWSYINPUT_BUFFER_ROWSOUTPUT_BUFFER_ROWSYOUTPUT_BUFFER_ROWS<table />ID_BATCHYID_BATCHCHANNEL_IDYCHANNEL_IDLOG_DATEYLOG_DATELOGGING_OBJECT_TYPEYLOGGING_OBJECT_TYPEOBJECT_NAMEYOBJECT_NAMEOBJECT_COPYYOBJECT_COPYREPOSITORY_DIRECTORYYREPOSITORY_DIRECTORYFILENAMEYFILENAMEOBJECT_IDYOBJECT_IDOBJECT_REVISIONYOBJECT_REVISIONPARENT_CHANNEL_IDYPARENT_CHANNEL_IDROOT_CHANNEL_IDYROOT_CHANNEL_ID<table />ID_BATCHYID_BATCHCHANNEL_IDYCHANNEL_IDLOG_DATEYLOG_DATETRANSNAMEYTRANSNAMESTEPNAMEYSTEPNAMESTEP_COPYYSTEP_COPYLINES_READYLINES_READLINES_WRITTENYLINES_WRITTENLINES_UPDATEDYLINES_UPDATEDLINES_INPUTYLINES_INPUTLINES_OUTPUTYLINES_OUTPUTLINES_REJECTEDYLINES_REJECTEDERRORSYERRORSLOG_FIELDNLOG_FIELD <table /> 0.0 0.0 10000 50 50 N Y 50000 Y N 1000 100 - 2012/11/16 13:59:51.117 - 2014/05/12 15:22:12.008 backupConn ${CLIENT_DATABASE_IP} ORACLE Native ${CLIENT_DATABASE_NAME} ${CLIENT_DATABASE_PORT} ${CLIENT_DATAB<em style="color:transparent">本文来源[email protected]搞@^&代*@码网(</em>ASE_USERNAME} ${CLIENT_DATABASE_PASSWORD} <code>FORCE_IDENTIFIERS_TO_LOWERCASE</code>N <code>FORCE_IDENTIFIERS_TO_UPPERCASE</code>N <code>IS_CLUSTERED</code>N <code>PORT_NUMBER</code>${CLIENT_DATABASE_PORT} <code>QUOTE_ALL_FIELDS</code>N <code>SUPPORTS_BOOLEAN_DATA_TYPE</code>N <code>USE_POOLING</code>N serverConn ${SERVER_DATABASE_IP} ORACLE Native ${SERVER_DATABASE_NAME} ${SERVER_DATABASE_PORT} ${SERVER_DATABASE_USERNAME} ${SERVER_DATABASE_PASSWORD} <code>FORCE_IDENTIFIERS_TO_LOWERCASE</code>N <code>FORCE_IDENTIFIERS_TO_UPPERCASE</code>N <code>IS_CLUSTERED</code>N <code>PORT_NUMBER</code>${SERVER_DATABASE_PORT} <code>QUOTE_ALL_FIELDS</code>N <code>SUPPORTS_BOOLEAN_DATA_TYPE</code>N <code>USE_POOLING</code>N wardConn ${CLIENT_DATABASE_IP} ORACLE Native ${CLIENT_DATABASE_NAME} ${CLIENT_DATABASE_PORT} ${CLIENT_DATABASE_USERNAME} ${CLIENT_DATABASE_PASSWORD} <code>FORCE_IDENTIFIERS_TO_LOWERCASE</code>N <code>FORCE_IDENTIFIERS_TO_UPPERCASE</code>N <code>INITIAL_POOL_SIZE</code>50 <code>IS_CLUSTERED</code>N <code>MAXIMUM_POOL_SIZE</code>500 <code>PORT_NUMBER</code>${CLIENT_DATABASE_PORT} <code>QUOTE_ALL_FIELDS</code>N <code>SUPPORTS_BOOLEAN_DATA_TYPE</code>N <code>USE_POOLING</code>Y 增加常量增加常量 2Y 计算器Set Variables 2Y 调用DB存储过程调用DB存储过程 2Y 调用DB存储过程 2增加常量Y 增加常量 2计算器Y Set Variables 2 SetVariable Y 1 none TIMEDIFF DOWNLOAD_SERVER_COMMON_DATA_LEAD JVM Y 118 273 Y 增加常量 Constant Y 1 none DIVIDEND Integer 86400000 -1 -1 388 241 Y 增加常量 2 Constant Y 1 none DEVIATION Integer 10000 -1 -1 364 362 Y 计算器 Calculator Y 1 none TEMPSUBTRACTLOCAL_DATESERVER_DATEBigNumber-1-1N TEMP2ADDTEMPDEVIATIONBigNumber-1-1N TIMEDIFFDIVIDETEMP2DIVIDENDBigNumber-1-1N 251 272 Y 调用DB存储过程 DBProc Y 1 none serverConn F_GET_SYSDATE2INT SERVER_DATE BigNumber Y 140 134 Y 调用DB存储过程 2 DBProc Y 1 none wardConn F_GET_SYSDATE2INT LOCAL_DATE BigNumber Y 353 132 Y N
2、通过NTP方式校对系统时间
1)如果可以连接到Internet网中,则可以采用国际上的校时服务器去校对时间
2)如果在内网中且不能上网,则可以自己定义一台都可访问到的台式机作为NTP服务器,其他机子与该计算机教士即可,下面是window NTP校时服务器的设置。
可以参考文章:NTP服务同步时间方案