SQL Server 如何在运行时确定我是否连接到生产数据库?

lf3rwulv  于 2022-12-26  发布在  其他
关注(0)|答案(5)|浏览(144)

好吧,我做了件蠢事,发布了针对我们的开发数据库(SQL Server 2008 R2)的生产代码(C#,VS2010)。幸运的是,我们还没有使用生产数据库,所以我没有尝试恢复和同步所有内容的痛苦...
但是,我想防止这种情况再次发生,因为它可能会更痛苦。我的想法是添加一个表,我可以在启动时查询,并通过返回的值确定我连接到哪个数据库。例如,Production将返回“PROD”,dev和test将返回其他值。
如果有什么不同,应用程序将与WCF服务通信以访问数据库,这样我就可以在配置文件中使用端点,而不是实际的连接字符串。
这有道理吗?其他人是如何解决这个问题的?
谢谢,戴夫

6yt4nkrj

6yt4nkrj1#

解决这个问题最简单的方法是不访问生产帐户。这些帐户存储在.net应用程序的Machine.config文件中。在non-.net应用程序中,这很容易复制,方法是在公共位置有一个配置文件,或者(我敢说)有一个保存帐户信息的注册表项。
我们的大多数服务器也是通过别名访问的,所以没有人真的需要在不同的环境中更改连接字符串。只需从配置文件中获取用户,主机文件中的服务器别名会将您指向正确的服务器。这也消除了当我们切换数据库示例(更改硬件等)时必须更新所有配置文件的麻烦。
因此,即使是单击一次部署和端点,您也可以在最终用户桌面上的机器配置中发布新的端点URI(我假设这是一个内部应用程序),然后在代码中引用它。
如果你绝对做不到,因为这可能是一个很大的工作量(我上一个工作的地方有2000名呼叫中心人员,所以这次推广要困难得多,但仍然是可能的)。你总是可以有一个自动构建服务器设置,它为你修改app.config文件作为为你构建应用程序的最后一步。然后你总是从自动构建服务器发布编译后的代码。永远不要在开发过程中手动修改app.config,因为这总是会在某些时候导致问题。
现在,如果这些都不起作用,你的最后一个选择(也做了这个),我讨厌,但它起作用了,是从Map的驱动器中查找值。本质上,公司中的每个人都有一个Map的驱动器,可以说R:。这是你的生产配置文件等的地方。生产帐户的人Map到一个驱动器位置与生产值,和开发人员等Map到另一个与开发值。我讨厌这个选项相比,其他人,但它的工作,它可以保存你在紧要关头与其他人变得乏味和困难(由于说办公室政治,设置一个构建服务器等)。

xxslljrj

xxslljrj2#

我假设生产服务器的名称与开发服务器的名称不同,因此您可以简单地使用SELECT @@SERVERNAME AS ServerName

blmhpbnm

blmhpbnm3#

不确定这个答案在假定的.net环境中是否有帮助,但在 *nix/PHP环境中,这是我处理相同情况的方法。
好吧,我做了件蠢事发布了产品代码
有时候,某些应用行为与环境相关,这是您所回避的。为了提供在开发和生产环境之间进行检查的功能,我在全局/etc/profile/profile.d/ www.example.com config(CentOS)中添加了以下行custom.sh:

SERVICE_ENV=dev

在代码中,我有一个 Package 器方法,它将根据名称获取环境变量,并将其值本地化,使其可供我的应用程序代码访问。下面是一个代码片段,演示了如何检查当前环境并做出相应React(在PHP中):

public function __call($method, $params)
{
    // Reduce chatter on production envs
    //  Only display debug messages if override told us to
    if (($method === 'debug') &&
        (CoreLib_Api_Environment_Package::getValue(CoreLib_Api_Environment::VAR_LABEL_SERVICE) === CoreLib_Api_Environment::PROD) &&
        (!in_array(CoreLib_Api_Log::DEBUG_ON_PROD_OVERRIDE, $params))) {
        return;
    }
}

请记住,保存一些极端用例(如snippet演示的用例)外,您不希望在应用程序逻辑中加入环境检查。相反,您应该使用DNS控制对生产数据库的访问。例如,在您的开发环境中,以下数据库主机名mydatabase-db将解析为本地服务器,而不是实际的生产服务器。当您将代码推送到生产环境时,DNS将正确解析主机名,因此您的代码应该“正常工作”,而无需任何环境检查。

7uhlpewt

7uhlpewt4#

在花了几个小时阅读有关MSBuild和app.config操作的教科书和教程之后,我偶然发现了一个名为SlowCheetah的东西- XML Transforms http://visualstudiogallery.msdn.microsoft.com/69023d00-a4f9-4a34-a6cd-7e854ba318b5,它在我第一次偶然发现它之后不到一个小时就完成了我需要它完成的事情。
此包使您能够基于生成配置转换app.config或任何其他XML文件。它还添加了其他工具来帮助您创建XML转换。
这个包是由Sayed Ibrahim Hashimi,Chuck England和Bill Heibert创建的,这位Hashimi也是MSBuild的作者。如果你正在寻找一种简单而普遍的方法来转换你的app.config,web.config或者任何其他基于构建配置的XML文件,不用再找了--这个VS包就能完成这项工作。
是的,我知道我回答了我自己的问题,但我已经给出了答案的要点,最终将我指向了真实的的答案。现在我需要回去根据我对问题的新理解编辑问题...
戴夫

zqry0prt

zqry0prt5#

我假设你的生产服务器有一个不同的ip地址。你可以简单地使用
第一个月

相关问题