2010-10-17 74 views
1

我有一个源数据库(Sybase),它是只读的,您可以使用导入文件写入数据库。另一面是我自己的数据库(MSSQL),它没有任何限制。如何实现快速数据库同步。只读源?

主要问题是第一个数据库上没有时间戳,我没有任何访问权限来更改源数据库。那么是否有引擎/解决方案来实现此同步?做了什么?

回答

1

差异算法可能有效,但速度不会很快,因为您必须扫描整个源数据库才能进行每次同步。

基本上你会做了充分的数据提取物,在商定,并且稳定,方式(即。两个这样的萃取液用无改变之间会产生相同的输出。)

然后,你比较,为前面的提取物你做了,然后你可以找到所有的变化。比纯文本差异稍微聪明一些的东西是需要的,以帮助确定行不仅仅是删除+插入,而是实际更新。

不幸的是,如果没有办法问源数据库最新的变化是什么,如您所指出的那样,缺乏时间戳或类似的机制,那么我看不到如何获得比每次完整的提取都要好。

现在,我不太了解Sybase,但是在MS SQL Server中,您可能会创建另一个反映第一个数据库的数据库,并且在此第二个数据库中,您可以进行所需的任何更改。

但是,如果您可以在Sybase中创建这样的数据库并使用SQL同时访问这两个数据库,那么您可能能够运行产生差异的查询。

例如,沿着线的东西:

SELECT S.* 
FROM sourcedb..sourcetable1 AS S 
    FULL JOIN clonedb..sourcetable1 AS C 
    ON S.pkvalue = C.pkvalue 
WHERE S.pkvalue IS NULL OR C.pkvalue IS NULL 

这将产生被插入或删除的行。

为了找到那些改变,你会需要这个WHERE子句:

WHERE S.column1 <> C.column1 
    OR S.column2 <> C.column2 
    OR .... 

由于表的连接,在WHERE子句会过滤掉任何行,其中前面的提取物和目前的状态是不同的。

现在,这可能不会跑得很快,你必须测试以确保。

+0

感谢您的回答。主要问题是我无法使用SQL - 我必须使用ADO.NET。所以我必须从双方加载所有数据,获取更改并更新目的地。 – 2010-10-20 09:15:27

+0

两台服务器的数据是否改变?或者你只是想将所有内容都镜像到只读数据库中? – 2010-10-20 11:46:53

+0

是和否;-) 源数据库是只读的,目的地是我的数据库。 源数据库的更改必须位于目标数据库中。来自目标数据库的更改将作为文本文件导入到源数据库中。所以如果你只看到没有文本文件的任务 - 是的,它只是一面镜子。 – 2010-10-21 06:45:18