将存储过程部署到具有相同结构的多DB的最佳实践?

时间:2017-09-15 02:13:42

标签: database sql-server-2008 tsql stored-procedures multi-tenant

我们目前有3个客户使用一个网站。我们有3个不同版本的相同源代码,它们调用3个不同的数据库。所以,

1)客户A访问" http://custA.weblink.com"将访问" CustA"数据库

2)客户B访问" http://custB.weblink.com"将访问" CustB"数据库

3)客户端C访问" http://custC.weblink.com"将访问" CustC"数据库

所有数据库都具有相同的结构,表格设计和存储过程。只有数据不同。

问题是,当我需要对存储过程进行部署时,我需要重复备份并执行3次部署。即使需要部署大量存储过程,它也不是很难,但似乎并不是一个好习惯。

现在我只有3个客户,如果将来我有10个客户怎么办?我需要重复10次备份和部署,这非常耗时,并且很难保证所有数据库中的所有存储过程始终都是相同的。

在这种我拥有多种应用程序和数据库的情况下,为了使情况更好,可能需要采取哪些良好做法或措施?我不认为我的公司会允许进行大的更改,例如将所有客户数据合并到一个数据库中,然后重新编写应用程序流以获取正确的数据。

我想过创建一个没有任何数据的主数据库。将在那里部署所有存储过程脚本。并且每个现有的" CustA"," CustB"和#34; CustC" DB,我将使用EXEC方法从主数据库调用存储过程来处理相关数据库中的数据。像这样:

1)主数据库

USE [MainDatabase]
ALTER PROCEDURE USP_GetCustomerById
@CustId BIGINT

SELECT * FROM [Customer] WHERE Id = @CustId 

2)CustA数据库(CustB和CustC数据库的相同流程)

USE [CustA]
ALTER PROCEDURE USP_GetCustomerById
@CustId BIGINT

EXEC MainDatabase.dbo.USP_GetCustomerById @CustId 

如果我这样做会有影响吗?

1 个答案:

答案 0 :(得分:0)

您是否考虑过使用visual studio创建SQL Server数据库项目?在这里,您可以导入单个数据库的第一个服务器ClientA设置。它将导入(模式,对象,视图,索引等)然后您可以设置不同的部署服务器。您还可以将源和目标(A和B)相互比较,以查看是否存在差异。 (I

将数据库部署到多台服务器的示例 enter image description here

正如您在我的图片中所看到的,我拥有一个数据库的整个结构。在解决方案资源管理器的底部,您可以看到我有一个名为PROD和TEST的东西。这实际上是两个不同的服务器。您可以创建所需的3台服务器,然后只需按下部署即可。

架构比较示例 enter image description here

我在这里将源与我的项目进行了比较。然后我可以导入我在ClientA上进行的更改并将它们注入到我的项目中,这样我就可以将它们部署到其他服务器上。