AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 103347
Accepted
R1cky
R1cky
Asked: 2015-06-06 07:44:25 +0800 CST2015-06-06 07:44:25 +0800 CST 2015-06-06 07:44:25 +0800 CST

如何唯一标识 SQL 实例

  • 772

我需要找到一种方法来识别 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+ 上运行的“已经内置”的方式

sql-server instance
  • 5 5 个回答
  • 6058 Views

5 个回答

  • Voted
  1. Best Answer
    Solomon Rutzky
    2015-11-29T09:38:20+08:002015-11-29T09:38:20+08:00

    好吧,有一个实例 GUID 是有可能的,但前提是您要包括[msdb]在备份/恢复过程中。假设确实如此,那么只需检查数据库中的service_broker_guid字段:sys.databases[msdb]

    SELECT [service_broker_guid]
    FROM   sys.databases
    WHERE [name] = N'msdb';
    

    它在每个实例之间会有所不同,但在同一[msdb]数据库的备份还原之间应该是一致的。这甚至似乎适用于 Express 版本。虽然我没有在更新和服务包中跟踪这个值,但我不明白为什么它会改变,除非强制手动。

    如果您想从一组“主”备份文件([msdb]包括

    ALTER DATABASE [msdb] SET NEW_BROKER;
    

    笔记:

    • 和数据库中的service_broker_guid字段始终设置为sys.databases并且不能通过 更改。[master][model]00000000-0000-0000-0000-000000000000ALTER DATABASE [{database_name}] SET NEW_BROKER;

    • 如果您使用这种技术来区分 SQL Server Express LocalDB 的实例,那么数据库中的字段service_broker_guid最初将包含所有新创建实例的相同值。在这种情况下,您只需执行,就像从备份还原创建新实例时一样。sys.databases[msdb]ALTER DATABASE [msdb] SET NEW_BROKER;

    • 3
  2. RBarryYoung
    2015-09-15T13:58:00+08:002015-09-15T13:58:00+08:00

    没有合乎逻辑的方法可以做到这一点。您如何区分已移动到新主机的 SQL Server 和从另一个主机的副本创建的新 SQL Server ?您不能,仅基于实例属性和内容。

    这样做的唯一方法是进行一些信息/表格/参数/配置设置/等。为您跟踪它,您(或某人/某物)必须保持最新以反映您的 MIS 更改。

    • 2
  3. Alexander Suprun
    2019-11-14T11:37:26+08:002019-11-14T11:37:26+08:00

    这可能不是您问题的完整答案,但至少您将能够确定 SQL 服务器已移动到另一台主机。您可以使用安装 SQL Server 的日期。它实际上是创建“NT AUTHORITY\SYSTEM”的日期时间,但它通常工作得很好:

    SELECT createdate as sql_install_date FROM sys.syslogins where sid = 0x010100000000000512000000
    

    我刚刚找到了另一种可能效果更好的方法。注册表中有一个校验和字段,对于每个 SQL Server 安装来说应该是唯一的:

    declare @Checksum nvarchar(512)
    exec master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE', N'SOFTWARE\Microsoft\MSSQLServer\Setup', N'checksum', @Checksum OUTPUT
    SELECT @Checksum
    
    • 2
  4. Todd Harmon
    2015-09-15T12:01:15+08:002015-09-15T12:01:15+08:00

    在我相信您打算的上下文中,没有用于跟踪“唯一”Windows 服务器或 SQL Server 的明确公式。注册表信息的所有组合(甚至是提取 BIOS 信息的 WMI 调用)都会受到克隆问题的影响。我自己已经在非常庞大的环境(数以千计的服务器,物理的和虚拟的)中测试了 ProductID、UUID、MachineGUID、SID、SERVERNAME、MACHINENAME、MAC ADDRESS 等的组合,并且没有任何东西 100% 是独一无二的时间。

    除非在初始安装\设置\克隆后的某个时间有手动创建“id 标记”的过程,否则无法保证任何事情。

    有趣的阅​​读关于 Windows 中需要唯一 SID 的神话。

    • 1
  5. user75963
    2015-09-15T14:13:49+08:002015-09-15T14:13:49+08:00

    避免重复键:我看到的唯一方法是在每次启动数据库时创建一个新的令牌。为了使其真正独一无二,您可以将此令牌生成放在一个高可用性中央服务器上。

    保留密钥:这很难实现,您永远不知道数据库是否已移动、克隆或刚刚启动。如果您设法将所有这些操作置于您的控制之下(特殊脚本等),您可以保持它有效的错觉。但是去度假两周,你的替代者不知道工具或忘记,你注定要失败。

    您可以禁用板工具,但如果他设置了一台新机器,他可以在那里使用这些工具。我认为这是一个变更/配置管理的问题,跟踪而不是关于 sql-server 的问题。

    • -3

相关问题

  • SQL Server - 使用聚集索引时如何存储数据页

  • 我需要为每种类型的查询使用单独的索引,还是一个多列索引可以工作?

  • 什么时候应该使用唯一约束而不是唯一索引?

  • 死锁的主要原因是什么,可以预防吗?

  • 如何确定是否需要或需要索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve