我需要找到一种方法来识别 SQL 实例,无论对 SQL Server 和/或运行它的 Windows Server 进行了哪些更改,因为我们正在将有关实例的远程信息收集到我们的操作数据库中,并且仍然遇到我们的方式识别它并不像看起来那么独特。
例如,如果我有服务器 WIN1\SQL 并且由于服务器刷新将安装在不同的服务器 WIN2\SQL 上,迁移数据并交换服务器名称,以便 WIN2\SQL 将变为 WIN1\SQL,反之亦然,我需要能够识别当前的 WIN1\SQL 不同于以前的 WIN1\SQL 忽略操作系统版本和/或 SQL 版本\补丁级别
已经尝试以下:
NetworkName\InstanceName - 在服务器主机名\网络名称因服务器刷新而发生更改之前一直有效,如上所述
SQL Server SID - 我正在寻找一些像 Windows 一样的 SQL 安装 SID,但似乎没有这样的东西真正存在
##MS_SQLAuthenticatorCertificate## 的 SID - 这是我找到的最后一个最佳镜头,扫描了数百个 SQL Server,它真的很独特 - 以为我终于找到了它,直到我将 Service Pack 应用到一台服务器并发现 SID 已更改
任何想法如何唯一标识 SQL 实例(如 SQL 实例 SID)将不胜感激,因为我迷路了
编辑:我没有管理所有 SQL 服务器。无法对超出范围的设备进行修改,因此寻找一些可以在 SQL2005+ 上运行的“已经内置”的方式
好吧,有一个实例 GUID 是有可能的,但前提是您要包括
[msdb]
在备份/恢复过程中。假设确实如此,那么只需检查数据库中的service_broker_guid
字段:sys.databases
[msdb]
它在每个实例之间会有所不同,但在同一
[msdb]
数据库的备份还原之间应该是一致的。这甚至似乎适用于 Express 版本。虽然我没有在更新和服务包中跟踪这个值,但我不明白为什么它会改变,除非强制手动。如果您想从一组“主”备份文件(
[msdb]
包括笔记:
和数据库中的
service_broker_guid
字段始终设置为sys.databases
并且不能通过 更改。[master]
[model]
00000000-0000-0000-0000-000000000000
ALTER DATABASE [{database_name}] SET NEW_BROKER;
如果您使用这种技术来区分 SQL Server Express LocalDB 的实例,那么数据库中的字段
service_broker_guid
最初将包含所有新创建实例的相同值。在这种情况下,您只需执行,就像从备份还原创建新实例时一样。sys.databases
[msdb]
ALTER DATABASE [msdb] SET NEW_BROKER;
没有合乎逻辑的方法可以做到这一点。您如何区分已移动到新主机的 SQL Server 和从另一个主机的副本创建的新 SQL Server ?您不能,仅基于实例属性和内容。
这样做的唯一方法是进行一些信息/表格/参数/配置设置/等。为您跟踪它,您(或某人/某物)必须保持最新以反映您的 MIS 更改。
这可能不是您问题的完整答案,但至少您将能够确定 SQL 服务器已移动到另一台主机。您可以使用安装 SQL Server 的日期。它实际上是创建“NT AUTHORITY\SYSTEM”的日期时间,但它通常工作得很好:
我刚刚找到了另一种可能效果更好的方法。注册表中有一个校验和字段,对于每个 SQL Server 安装来说应该是唯一的:
在我相信您打算的上下文中,没有用于跟踪“唯一”Windows 服务器或 SQL Server 的明确公式。注册表信息的所有组合(甚至是提取 BIOS 信息的 WMI 调用)都会受到克隆问题的影响。我自己已经在非常庞大的环境(数以千计的服务器,物理的和虚拟的)中测试了 ProductID、UUID、MachineGUID、SID、SERVERNAME、MACHINENAME、MAC ADDRESS 等的组合,并且没有任何东西 100% 是独一无二的时间。
除非在初始安装\设置\克隆后的某个时间有手动创建“id 标记”的过程,否则无法保证任何事情。
有趣的阅读关于 Windows 中需要唯一 SID 的神话。
避免重复键:我看到的唯一方法是在每次启动数据库时创建一个新的令牌。为了使其真正独一无二,您可以将此令牌生成放在一个高可用性中央服务器上。
保留密钥:这很难实现,您永远不知道数据库是否已移动、克隆或刚刚启动。如果您设法将所有这些操作置于您的控制之下(特殊脚本等),您可以保持它有效的错觉。但是去度假两周,你的替代者不知道工具或忘记,你注定要失败。
您可以禁用板工具,但如果他设置了一台新机器,他可以在那里使用这些工具。我认为这是一个变更/配置管理的问题,跟踪而不是关于 sql-server 的问题。