Ric*_*rno 6 sql-server uniqueidentifier instance
我需要找到一种方法来识别 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]
SELECT [service_broker_guid]
FROM sys.databases
WHERE [name] = N'msdb';
Run Code Online (Sandbox Code Playgroud)
它在每个实例中会有所不同,但在同一[msdb]
数据库的备份恢复之间应该是一致的。这甚至对于 Express 版本来说似乎也是如此。虽然我没有在更新和服务包中跟踪这个值,但我不明白为什么它会改变,除非强制手动。
如果您想要从“主”备份文件集(包括[msdb]
)创建新的 SQL Server 实例,并且需要将新实例视为不同的,则只需在系统数据库初始还原后运行以下命令:
ALTER DATABASE [msdb] SET NEW_BROKER;
Run Code Online (Sandbox Code Playgroud)
笔记:
和数据库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;
,就像从备份恢复创建新实例一样。