我最近开始研究遗留应用程序,该应用程序的大多数业务逻辑都存储在两个或三个SQL Server数据库中的存储过程中。目前,所有代码也在实时环境中进行编辑。
由于我是代码库的新手,我真的不想在实时环境中进行任何更改,因此我正在尝试设置开发环境。我们使用Visual Studio编写所有数据库对象的脚本,并在Subversion中跟踪它们。 然后,我可以设置一个开发SQL Server实例,但一个问题是代码中充满了对服务器和数据库名称的硬编码引用,例如,许多存储过程看起来如下所示:
CREATE PROCEDURE server1.db1.dbo.proc1 AS
INSERT INTO db1.dbo.table1
EXEC server2.db2.dbo.proc2
END
如何以安全的方式更改所有这些引用?到目前为止,我想到了两个选择:
1)有一个脚本运行全局搜索并替换我的subversion工作副本上的服务器名称,然后针对我的测试数据库运行该修改过的代码。
2)通过编辑我的\ windows \ system32 \ drivers \ etc \ hosts文件在我的本地方框上设置一个dns别名,该文件将server1和server2重定向到数据库的开发实例。在生产服务器上,这些将指向生产数据库。
您认为哪一种设置更好?您是否认为我忽略了哪些风险,哪些风险应该被考虑在内?
答案 0 :(得分:4)
如果所有引用都是链接服务器“Server2”等,那么您可以在开发框中为该链接服务器指定不同的基础SQL Server
您可以执行以下操作之一:
答案 1 :(得分:1)
正确的解决方案似乎是删除所有对生产服务器的硬编码引用(如果可能)(您的解决方案1)。在生产和开发环境之间共享服务器数据库是不常见的(除非这是一个单独的数据库,仅存储静态/参考数据)。如果您正在进行跨服务器工作,则只需要服务器 - 根据GBN,您可以添加sp_addlinkedserver
DNS别名路由很危险。如果有任何失败,您将从开发环境更新生产数据。
附注:如果您可以访问Visual Studio DBPro等工具,还可以使用变量来标记脚本 例如引用一个表,如$(SERVER)。$(DATABASE).dbo.Table 部署项目时,将替换适当的环境值。