公司网络上有多个SQL Server实例,它们均具有唯一的名称,但是每个实例都有相同的数据库名称,例如ClientDB。我知道每个数据库都有一个数据库ID,但是我想知道是否存在一个可以在实例之间工作的唯一标识符?现在,我写这篇文章听起来很傻,一个新实例如何知道那里已经存在的数据库名称? 我之所以这样问是因为我正在将所有数据库的信息(例如名称,创建者,大小,最后备份的信息等)收集到一个表中,并且由于许多记录具有相同的数据库名称,这会造成混乱。也许某处有实例ID或数据库GUID,或者我是否只需要同时跟踪实例和数据库名称以识别记录?感谢您的帮助。
答案 0 :(得分:0)
您需要在数据库名称前添加“主机”。主机也称为:
答案 1 :(得分:0)
它称为composite key
。由于仅数据库名称不足以在资产中唯一标识数据库名称,因此您需要在表中添加其他属性。
@@server_name
来标识盒子上的MS SQL Server实例以及盒子名称; db_name()
或从sys.databases
中进行选择以获取该实例上的数据库名称。它们共同构成了在大多数情况下足够独特的密钥。但是请注意,如果发生以下情况,您仍然可能会发生碰撞:
default_domain()
函数; 答案 2 :(得分:0)
在SQL Server中创建后,分配给每个数据库(master
和model
除外)的service_broker_guid
属性可以满足您的需求。 service_borker_guid
是Global 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。