我们有一点凌乱的数据库的情况。

我们的主要的后台系统是用Visual福克斯临用本地数据(是的,我知道了!)

为了有效地在我们的网站上的数据进行工作,我们选择定期将数据导出到一个SQL数据库。然而,基本上执行此过程清除出表的每个时间和做了重新插入。

这意味着我们有两个SQL数据库 - 一个我们的FoxPro出口过程中写到,另一个从阅读我们的网站

此问题涉及的是把从一个SQL数据库到另一个(SqlFoxProData - > SqlWebData)。

有关特定表(我们主要应用的一个表),因为各种数据转换在此过程中需要的地方,它不是一个简单的UPDATE,INSERT和使用自连接DELETE语句,但我们现在使用的游标,而不是(我知道!)

这一直工作正常了好几个月,但现在我们已经开始在性能问题击中时更新正在发生(这可以在白天经常发生)

基本上,当我们从SqlFoxProData.ImportantTable更新SqlWebData.ImportantTable,它导致偶尔连接超时/死锁/其他问题上的直播网站。

我在优化查询,缓存等等等等努力,但它走到哪里我正在寻找另一种策略更新数据的一个点。

这已经想到一个想法是具有ImportantTable两份(A和B),一些概念,它的表是当前“活动”,更新所述非活性表,然后切换currenly actice表

即。网站,而我们正在更新ImportantTableB从ImportantTableA读取,那么我们切换网站从ImportantTableB阅读。

问题是,这是可行的,是个好主意?我以前做过类似的东西,但我不相信它是优化/索引等。

一定好

任何建议表示欢迎,我知道这是一个混乱的局面......和长期目标是让我们的FoxPro应用程序指向SQL。

(我们使用的是SQL 2005,如果有帮助)

我要补充的是数据一致性不是在实例特别重要的,看到的数据始终略显过时

有帮助吗?

解决方案

有很多方法对皮肤这只猫。

我会先攻击锁定问题。这是极为罕见的,我会使用游标,我想提高业绩和锁定行为有可能会解决很多问题的。

我期望我会通过使用两个单独的临时表中解决这个问题。一个在SQL FoxPro的出口和一个变换成SQL并排侧的最终格式。然后,使用sp_rename或者交换最终进行生产,或者干脆利用3 INSERT / UPDATE / DELETE交易从最后表中的所有更改应用到生产中。无论哪种方式,有一些将要锁定在那里,但我们有多大谈论什么?

其他提示

您应该能够维护一个数据库的网站,只是复制到该表从另一个SQL数据库表。

这是假设你不更新从网站本身的任何数据。

“对于特定的表(我们主要应用的一个表),因为各种数据转换在此过程中需要的地方,它不是一个简单的UPDATE,INSERT和使用自连接DELETE语句,但我们现在使用的游标而不是(我知道了!)“

我不认为,我会永远需要执行插入,更新或者使用游标删除的情况。如果你能写选择的光标,你可以将它转换成一个插入,更新或删除。你可以加入到这些陈述中其他表和使用的情况下stament为条件处理。花时间做这个一组为基础的方式可以解决你的问题。

一件事,如果你有大量数据的移动,你可以考虑。我们偶尔创建一个视图我们想要的数据,然后有两个表 - 一个主动,一个数据将被装入。当数据被加载finsihed,因为你的过程中运行一个简单的命令来切换视图使用您刚才finshed装载到一个表。这样,用户只下跌至多几秒钟。你不会产生锁定他们试图访问数据要加载的问题。

您也可以看看使用SSIS移动数据。

你有没有做更新多个原子,而不是说“清除掉,然后重新插入”的选项?我认为视觉福克斯Pro支持触发器,对不对?为了您的键表,你能触发添加到更新/插入/删除拍摄的记录的ID改变,那么移动(或删除)只是那些记录?

或者怎么样写的所有更改到脱机数据库,并让SQL Server复制照顾同步?

[对不起,这将是一个评论,如果我有足够的声誉!]

根据您回应厄尼上面,你问你如何复制数据库。这里是微软如何对有关复制在SQL2005。

不过,如果你问有关复制,以及如何做到这一点,它表明,我认为你是在SQL服务器经验一盏小灯。话虽这么说,这是相当容易的事情搞砸的时候,虽然我所有的由经验中学习,如果这是关键任务数据,你可能会更好雇用DBA或者至少是,测试#$ @#$ %出在这之前你真正实现它。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top