2010-01-21 67 views
3

供应商有一个数据数据库(只读),每周通过dvd发送给我们。他们的升级脚本将分离数据库的现有副本,覆盖MDF和LDF,放弃所有用户并重新创建他们认为适当的安全应该是。有没有一种方法可以在不使数据库脱机的情况下同步数据?这是一个全天候的设施,在更新期间会导致15分钟的停机时间。替换SQL Server数据库

辅助信息: 该数据库有大约50张表,总大小为400 MB。实际改变的数据量大约在400kb左右。服务器运行Server 2008和SQL Server企业版2008.

回答

5

阅读上红门数据比较

http://www.red-gate.com/products/SQL_Data_Compare/index.htm

,这将产生对你差异的脚本,您可以应用到现有的数据库。

这也有能力来自动同步你的数据

您必须输入数据库装载到该操作的服务器。

+0

使用SQL Server时无法使用RedGate工具。如果只有40万个数据发生变化,则实时更新应该没问题。你甚至可以编写脚本,备份并运行比较/同步。 – Tom 2010-01-21 18:15:58

+0

这些工具让我有点害怕....你可以比较高利用率的实时数据库而不锁定表的数据吗? – 2010-01-21 18:30:03

+0

这不会产生一个完整的卸载日志没有用处吗?另外,如果您进行实时更新,您将进行所有更改并发出单个提交?你是否有足够的空间来做这件事,或者你会允许脏读吗?那么在这个过程中的任何查询都会让一些旧行和新行混淆数据? – 2010-01-21 18:47:10

0

您可以编写自己的程序,连接到供应商提供的数据库和您自己的(可能是DTS或C#应用程序),并且有关于哪些数据的一些情报应该从供应商数据库移动/迁移到您自己的数据库中。

0

您可以将db作为单独的数据库加载,然后使用像SQL Data Compare这样的实用程序来区分数据差异并生成脚本。

0

这应该是备份/恢复操作。分离/重新附加操作非常简单,但显然会使数据库脱机。

或者,他们可以提供差异脚本来更新他们需要的任何数据和模式更改。在活动数据库上运行脚本(基本上是一堆创建,更改,添加和删除模式更改以及插入新数据)以使其更新。这有一个好处,脚本可以很容易地进行版本控制。

0

您可以使用Red-Gate Data Compare等工具同步数据。

4

你可以做的事情是当他们发送给你新的数据库并安装DB_B时,你可以做两件事DB_A和DB_B。与此同时,您的所有用户都在使用DB_A。然后将DB_A重命名为DB_C,并将DB_B重命名为DB_A。这将使停机时间降低到接近0.或者,只要数据库准备就绪,您就可以将连接更改为从DB_A指向DB_B。

+1

连接打开时,您无法重命名数据库。您必须首先将数据库设置为单用户模式(但必须等到数据库中没有用户/强制所有用户),进行交换并将其设置回多用户模式。 – 2010-01-21 20:20:45

1

不敢相信没有人提到过这种方法。

KISS:你可以加载恢复(或附加)数据库到一个新的目录,然后重新配置你的应用程序(例如,通过一个ODBC DSN)与新的DB工作 - 一旦你翻转完成你可以分离旧的。这种方法被称为“滚动升级”,用于全天候的24/7网站。

0

您可以使用SSIS创建数据导入/更新过程。在做这件事之前我会遇到一个问题,如果在短时间内表格有新数据而表格b没有更新,那么问题会是什么?所有数据都必须保持同步吗?如果可以的话,请跟随Jose Chama的建议;即使一分钟也不会有事情发生。