2010-05-20 47 views
1

假设我有两个SQL Server 2008数据库,A和B.它们最初创建的目的是分开的,但随着时间的推移,它们都有不断的引用(如sprocs,views等)。它已经到了,它们实际上只是同一个数据库的两半。SQL Server 2008 - 数据库合并和别名?

所以,我们正在考虑合并它们。有谁知道我们如何才能最好地执行此合并?我们有相当多的内部应用程序参考其中的一个,其中包括许多面向客户的应用程序,因此尽量减少停机时间非常重要。为了不必查找和更新这些数据库中的所有内容,我们特别感兴趣的是某种数据库的“别名”,其中一个应用程序可能会调用数据库“A”中的一个存储过程,而'A'重定向对于新的合并数据库'C',不知何故。有没有人对这种情况有任何经验或了解?

回答

0

下面是我如何处理这个问题的大纲。这是完全不重要的修改,因此您的里程将根据您的实际设置而有所不同。 (1)构建新的组合数据库。我会选择其中一个,并将其他代码添加到其中,而不是创建一个新的(第三个)数据库。 (1a)你会(大概)需要一个例程从头开始构建新的数据库。你肯定会需要一个例程来将现有的一对数据库升级到单数据库表单。 (2)构建修订后的“第二”数据库。该数据库中的所有内容都是占位符,引用修订后的“第一个”数据库中的相关对象。正如Tom H.所建议的,sysnonyms应该适用于此(它们也可以在SQL 2005中使用)。观点也可以。存储过程应该只是在(新)第一个数据库中调用它们的类比的包装器。

(3)测试,测试测试。

(4)回去再做第3步。 (5)将所有更改一次全部应用于现有系统(这就是为什么我们有第4步),一次只有一个环境。正确完成,并且根据您系统上的很多,您可能甚至不必调整用户或应用程序访问数据库的方式。 (6)由于时间和资源允许,修改了所有外部用户和应用程序以引用新的/单个数据库,最终不赞成对第二个数据库的所有使用或引用。

+0

听起来不错? 1)以A和B开头 2)创建C数据库,作为A的副本 3)创建并应用(C)'A-> C'补丁,将B的所有代码添加到C,所以C包含A + B。 4)创建一个包含B中所有对象的D数据库。 5)创建并应用(到D)'B-> D'补丁,将其所有代码交换为用于C中对象的薄同义词/包装。5)测试测试测试,测试测试测试。重复。 – 2010-05-20 21:27:02

+0

6)使用'A-> C'补丁将A更新为'C';这是新的单一数据库。使用'B-> D'补丁将B更新为'D';这只是对C的一个精简重定向,对于仍在拨打电话B的所有应用程序。7)最终,更新所有打电话的应用程序,直接将它们改为A.让B离线。 – 2010-05-20 21:27:27

+0

如何比较类似...... 1)创建一个数据库C.使用细同义词/包装器将其填充到A和B中的所有对象。 2)将所有应用程序更新为指向C. 3 )最终,将时间/资源允许的每个对象从A移动到C,将B移动到C,将同义词放在它们指向C的地方(或者必须一次完成所有操作?) 感谢所有到目前为止的帮助! – 2010-05-20 21:31:49

0

由于您使用的是SQL 2008,您可以查看使用SYNONYMs,我相信它可以跨越数据库(甚至是需要的服务器)。我没有太多的经验,所以恐怕我不能给出任何建议或“陷阱”来考虑。

您的最终目标应该是最终将访问代码更改为指向单个数据库,然后删除其他两个“虚拟”数据库。长期进行这种重定向最终会导致我的经验出现问题。