Windows 2022、SQL Server 2022、具有 2 个物理节点的 FCI 群集。FCI 群集上运行 5 个 SQL Server 实例。我需要在所有 5 个 SQL Server 实例上运行 TLS 认证。单个 TLS 证书(安装在服务器上)可以用于所有 5 个实例吗,还是每个实例都需要一个证书?
SQL_Hacker's questions
我正在开发一个 SSIS 包,它将从生产备份中刷新开发数据库。该软件包已经存在多年,但我们正在开发实例上部署可用性组,因此必须更改任务以同时使用主副本和辅助副本。背景:所有实例都是SQL Server 2014 SP2。一个生产实例 (PD1)、两个开发实例 (DV3 和 DV7) 和一个实用程序实例 (DV1),其中 SSIS 包部署到 SSISDB 并运行 SQL 代理作业。在 SSIS 包中,在获取完整备份并将其放在生产环境的网络共享上之后,下一组任务(在单独的 SSIS 包中)需要确定哪个节点托管主副本。我正在按照此处列出的步骤操作去完成这项工作,如果它是硬编码的,一切都会很好(当然,如果/当发生故障转移时,这将不起作用)。我能够考虑解决这个问题的唯一方法是,在运行时评估哪个实例是主要实例,然后继续执行任务(顺便说一下,这些都是“执行 SQL 任务”对象——需要它们自己的连接定义). 我看过一些关于如何在 ConnectionStrings 和变量中使用表达式的示例,但无法弄清楚如何在 SQL Server 中设置从以下查询返回的值以返回正确的实例以在包中设置连接字符串。
select cs.replica_server_name
from sys.dm_hadr_availability_replica_states rs
join sys.dm_hadr_availability_replica_cluster_states cs
on rs.replica_id = cs.replica_id
join sys.dm_hadr_name_id_map n
on rs.group_id = n.ag_id
where rs.role = 2
and n.ag_name = 'DVAG001'
理想情况下,将有两个这样的连接管理器,一个用于主要连接管理器,一个用于辅助连接管理器,然后我可以在“执行 SQL 任务”对象中使用它们。然后一切都会完美地工作。很可能还有其他方法可以做到这一点,但我在 SSIS 或 TSQL 之外的开发方面不是很有经验。
更新:以上过程每天都在进行……这就是我使用 SSIS 包和 SQL 代理的原因。因此,整个过程必须自动化并具有所有必要的值——尤其是副本状态(主要和次要)的确定——在包内,这样就不需要人工干预。
版本:SQL Server 2008 R2 - 2014
我正在使用服务器审核来查找对我的 SQL Server 实例上的登录名的更改,并将其写入 ERRORLOG 目录路径。遗憾的是,并非所有实例都对 ERRORLOG 目录使用相同的路径。我可以使用路径,SELECT SERVERPROPERTY('ErrorLogFileName')
但我需要将该语句的返回值“插入”到另外两个地方。第一个是当我创建服务器审计时:
CREATE SERVER AUDIT [ServerAuditName]
TO FILE
( FILEPATH = N'C:\Program Files\Microsoft SQL Server\MSSQL\Log'
,MAXSIZE = 0 MB
,MAX_ROLLOVER_FILES = 2147483647
,RESERVE_DISK_SPACE = OFF
)
因此,我需要将 SERVERPROPERTY 查询的结果“插入”到一个变量或...某物中,以便我可以在上面的 FILEPATH 值中使用它。其次,在读取 Server Audit 创建的 *.sqlaudit 文件时,我还需要找到 ERRORLOG 目录路径。我可以轻松地使用以下内容来获取文件,但在这里,我也需要使用 SERVERPROPERTY 查询的结果“插入”文件路径值:
SELECT *
FROM sys.fn_get_audit_file('Filepath\*.sqlaudit',DEFAULT, DEFAULT)
我尝试了一些“google-fu”并查看了几个字符串函数,例如 replace 和“trim-family”……这不是很相关。如果有人可以帮助或指出一两篇关于如何实现这一目标的好文章,我将不胜感激。
我刚开始新的工作,发现安装在 Core Server 2012 R2 上的两个 SQL 2012 (SP2) 实例的名称与其运行的服务器名称不同。它们都是虚拟服务器。例如,服务器名称是 Server2 和 Server3(可以通过 RDP 连接到它,并且可以使用此名称以多种方式连接到它)甚至可以从其他机器连接到 SSMS。但是,当我运行@@Servername 时,它会在两台服务器上返回“CO-SQLTEMPLATE”。之所以麻烦,是因为这两个实例参与了AlwaysOn复制,有几个问题……最明显的一个是自动备份不行。使用 HADR 系统表和函数,它要么表明没有任何副本是“主要的”,要么所有副本都是(!!!)。此外,尚不清楚复制是否真的有效。
我一直在谷歌上四处寻找,但找不到指示 SQL Server 在安装过程中从何处获取其实例名称的来源。我以前从未见过这个问题,这确实很奇怪。
这是我在清理 2 台服务器并从头开始(显然,我宁愿不这样做)之前尝试找到解决方案的最后努力。
我sp_BlitzCache
version 4.1 (20161210)
在一个2008R2 instance (10.5.4042)
.
如果我在没有 的情况下执行 sp @OutputDatabaseName, @OutputSchemaName, and @OutputTableName
,它工作正常。但是,当我设置这些值时,它会贯穿整个过程并在最后出现错误:
“INSERT 语句的选择列表包含的项目多于插入列表。SELECT 值的数量必须与 INSERT 列的数量相匹配。”
我正在运行的具体声明是:
EXEC [dbo].[sp_BlitzCache] @OutputDatabaseName = 'Maintenance_Stats'
,@OutputSchemaName = 'dbo'
,@OutputTableName = 'BlitzCacheResults'
数据库、模式和表已经存在,但其中没有记录。所以...在 sp 代码的某个地方,它创建了表,但试图将太多值填充到表中。
我正在使用它来尝试解决应用程序 (SCCM) 挂起问题,并按照建议创建了一个 SQL 代理作业,帮助台在遇到问题时可以执行该作业(它是间歇性的),但我尝试自己执行它,并且它因上述错误而失败。