【问题标题】:Database Properties数据库属性
【发布时间】:2019-01-02 20:12:36
【问题描述】:

公司网络上有多个 SQL Server 实例,它们的名称都是唯一的,但是,每个实例都有相同的数据库名称,例如 ClientDB。我知道每个都有一个数据库 ID,但我想知道是否有一个可以跨实例工作的唯一标识符?现在我写这个听起来很傻,一个新实例怎么会知道已经存在的数据库名称? 我之所以问,是因为我正在将我们所有数据库的信息(例如名称、创建者、大小、上次备份等)收集到一个表中,并且由于许多记录具有相同的数据库名称,它会变得令人困惑。也许某处有实例 ID 或数据库 GUID,或者我只需要跟踪实例和数据库名称来识别记录?感谢您的帮助。

【问题讨论】:

标签: sql sql-server database uniqueidentifier


【解决方案1】:

您需要在数据库名称前加上“主机”。主机也称为:

  • “机器名”、“主机名”、“主机名”。
  • “服务器”或“服务器名称”、“计算机名称”。
  • “盒子”。
  • “虚拟机”或“虚拟机名称”。

【讨论】:

    【解决方案2】:

    它叫做composite key。由于单独的数据库名称不足以在您的资产中唯一标识它,因此您需要为表带来额外的属性。

    • @@server_name 标识盒子上的 MS SQL Server 实例以及盒子名称;
    • db_name() 或从 sys.databases 中选择以获取该实例上的数据库名称。

    在大多数情况下,它们共同构成了一个足够独特的密钥。但是请注意,如果出现以下情况,您仍然可能会发生冲突:

    • 您的网络中有多个 AD 域,并且某些服务器在不同域中有重复名称。一个糟糕的网络设计决策本身;如果您的 SQL Server 版本支持,我会尝试从实例名称切换到 IP 地址,或者添加 default_domain() 函数;
    • 您有集群 SQL 实例。本身不是冲突,而是您的记录中的重复;只需确保您不使用集群节点的名称,或保留单独的集群/AlwaysOn 实例列表来解决此问题。自己没有实际检查过,这里可能有误。

    【讨论】:

      【解决方案3】:

      在 SQL Server 中创建时分配给每个数据库(mastermodel 除外)的 service_broker_guid 属性可以满足您的需求。 service_borker_guidGlobal Unique Identifier,也称为 UUID。

      Wikipedia page 说明了您在网络内外发现两个相同值的可能性:

      虽然 UUID 被复制的概率不为零,但它是 足够接近于零,可以忽略不计

      下面的查询将获取您要查找的 GUID。

      select @@servername as host_nm, name as db_nm, service_broker_guid
      from master.sys.databases
      where name in ('ClientDB')
      

      输出:

      +----------------+----------+--------------------------------------+
      | host_nm        | db_nm    | service_broker_guid                  |
      +----------------+----------+--------------------------------------+
      | MY_SERVER_NAME | ClientDB | 9B7C1BF1-022D-423D-9780-88B555459868 |
      +----------------+----------+--------------------------------------+
      

      如果您想了解有关该主题的更多详细信息,DBA 网站上的This question 会详细说明 GUID。

      【讨论】:

        猜你喜欢
        • 2010-10-09
        • 2011-06-23
        • 2020-07-07
        • 1970-01-01
        • 2014-07-04
        • 2013-06-26
        • 2011-12-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多