利用file_guid作为SQL Server实例的唯一识别符

日期: 2010-10-28 作者:Serdar Yegulalp翻译:冯昀晖 来源:TechTarget中国 英文

一般情况下,人们识别SQL Server实例是通过“@@servername”配置功能。它会返回SQL Server运行其上的服务器名称,和当前的SQL Server实例名。然而,我最近读到了一篇文章,是关于有人想给他的SQL Server实例设置GUID类型的识别符,这是为了使每个实例都能区别于其它实例,而不用管所在的计算机名称。   要做到这一点,按照他人的理论,一种基本做法是简单地为数据库中的第一个物理文件使用“file_guid”属性(也就是说,与主数据库分开)。

这不是一种完美的解决方案,而且这种做法有些缺陷值得商榷,但是它可以很好地达到我们的目的。   要提取“file_guid”属……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

一般情况下,人们识别SQL Server实例是通过“@@servername”配置功能。它会返回SQL Server运行其上的服务器名称,和当前的SQL Server实例名。然而,我最近读到了一篇文章,是关于有人想给他的SQL Server实例设置GUID类型的识别符,这是为了使每个实例都能区别于其它实例,而不用管所在的计算机名称。

  要做到这一点,按照他人的理论,一种基本做法是简单地为数据库中的第一个物理文件使用“file_guid”属性(也就是说,与主数据库分开)。这不是一种完美的解决方案,而且这种做法有些缺陷值得商榷,但是它可以很好地达到我们的目的。

  要提取“file_guid”属性,你可以简单地运行如下查询。它会返回应该普遍适用的一个GUID:

  select top 1 [file_guid] from [sys].[database_files]
  这个技巧稍微扩展一点的版本是,可以创建一个函数或者存储过程,起一个跨所有你想从其中提取信息的服务器的通用名字,选一个合适的名字避免与自己冲突:

  create procedure [dbo].[Server:GetGUID]
  as
  begin
  select top 1 [file_guid] from [sys].[database_files]
  end

  这种方法的另一个好处是它给你提供了通用接口,你可以实现你自己的程序并根据需要进行扩展。例如,你可以返回更多的列(比如:“@@servername”属性),或者在你不需要获得严格GUID格式的结果时把多个属性字符串拼接。

  利用主数据库主文件GUID可能不顺利的一个原因是因为可能有些情况并不会有值赋给它。例如,从之前的版本升级的SQL Server实例会有“NULL”值(参见“sys.master_files” 参考了解更多信息)。

  要避免这个问题,你可以简单地利用有GUID的第一个文件:

  create procedure [dbo].[Server:GetGUID]
  as
  Begin
  select top 1 file_guid from [master].sys.master_files
  where file_guid is not null
  end

  采用这种技术时,要记住的另一件事是:“file_guid”属性往往是非常持久的,即便你备份了数据库然后在另一台计算机上恢复了它,该属性也可能还不变。因此,在这个问题上,GUID比服务器方式更能准确地识别数据库。

  这种情况可能很少会用到,但是值得一提。假定你有大量数据库服务器,它们是由恢复空数据库模板备份创建的,而不是利用T-SQL脚本生成的(不管怎么说,你都应该这么做)。那些数据库就会带有“file_guid”属性。正如我在上面提到的,另一种解决办法是利用“file_guid”以相同的方式连接服务器名称,来生成一个部分是GUID,部分是其他独特内容的合并串。

作者

Serdar Yegulalp
Serdar Yegulalp

Serdar Yegulalp从1994年到2001年为Windows杂志写作,覆盖了广泛的技术方面。他现在是《The Windows 2000 Power Users Newsletter》一书的出版者,辛勤钻研他擅长的Windows NT, Windows 2000 and Windows XP领域,并为TechTarget写专栏。

相关推荐