是否可以在 SQL 2019 中为托管服务帐户创建 SQL 凭据?
当我尝试时,它要求输入密码,我不知道。我想使用此凭据作为代理从 SQL 代理运行 Powershell 命令,但无法添加凭据。
是否可以在 SQL 2019 中为托管服务帐户创建 SQL 凭据?
当我尝试时,它要求输入密码,我不知道。我想使用此凭据作为代理从 SQL 代理运行 Powershell 命令,但无法添加凭据。
我从其他问题和帖子中知道,当 SQL 编译查询计划时,如果保证每次查询运行时都能使用过滤索引,则它只能使用过滤索引。这意味着您不能在 where 子句中使用变量,因为有时它可能能够使用过滤后的索引,有时则不能。
解决此问题的一种方法是使用OPTION(RECOMPILE)
,以便它可以使用它的次数,它将获得过滤后的索引。
做一些测试,我发现这个查询可以使用过滤索引(注意,我强制索引只是为了证明一点):
SELECT MAX(table1.SomeDateField)
FROM dbo.table1 WITH(INDEX(MyFilteredIndex))
WHERE table1.filteredColumn = @variable
OPTION (RECOMPILE)
但是,如果我想将结果分配给一个变量,我很不走运:
SELECT @OutputVariable = MAX(table1.SomeDateField)
FROM dbo.table1 WITH(INDEX(MyFilteredIndex))
WHERE table1.filteredColumn = @variable
OPTION (RECOMPILE)
结果是:
消息 8622,级别 16,状态 1,第 15 行 由于此查询中定义的提示,查询处理器无法生成查询计划。在不指定任何提示且不使用 SET FORCEPLAN 的情况下重新提交查询。
当我不想将输出保存到变量时,查询可以清楚地使用过滤后的索引,因为它运行 find 。
我有办法将此查询重写为硬代码@variable
以消除问题,但有人可以解释为什么第一个查询可以使用过滤索引,但第二个查询不能吗?
我正在尝试为报告编写一个查询,以显示我们的数据文件中有多少可用空间,以便我们可以为将来计划存储。我正在从 中提取数据sys.database_files
,我可以将其缩小到仅键入 0(行)数据——此时我们不担心日志增长。
我遇到的问题是许多数据库都有全文目录。全文目录文件也显示为类型 0。我们也想从报告中排除这些文件。无论如何我们可以从sys.database_files
(或加入到那个)中分辨出来,这样我们就可以看到数据文件了吗?
我注意到 SQL Server 2016 中任何新创建的全文目录文件的类型都为 4,但这对 2014 年(或 2016 年升级的数据库)并没有真正帮助。
今天我们在 SQL 2014 Enterprise Server 上弹出磁盘警报,告诉我们其中一台服务器上的驱动器已满。经过调查,我们发现大部分空间都被 MSSQL 日志文件夹 (G:\MSSQL12.MSSQLSERVER\MSSQL\Log) 占用。
我们在这个驱动器上有超过 2 年的日志文件。大多数文件是由 Ola Hallengren 的备份存储过程创建的,它每 5 分钟运行一次事务日志备份(DR 要求)。
我们希望保留过去 1-2 个月的价值,以防出现问题。有没有一种方法可以让我们从 SQL 中自动清理这些日志文件,或者我们是否应该考虑创建某种 powershell/batch 文件来清理它们?
我们有两台 SQL 2014 服务器,我在其中一台服务器上创建了一个链接服务器。作为我尝试运行的任务的一部分,我需要将 SQL UserID 转换为本地和链接服务器上的用户名。
在本地服务器上,我可以调用
SELECT SUSER_NAME(1)
这将返回字符串sa
有没有一种简单的方法可以SUSER_NAME
在链接服务器上运行该函数以从那里取回值?
我认为我发现的另一种选择是加入sys.server_principals
并从那里提取名称,但SUSER_NAME
似乎是一种更简洁的方法。
我们的一位开发人员添加了以下代码,用于从表中删除重复记录:
DELETE SubQuery
FROM
(
SELECT ID
,FK1
,FK2
,CreatedDateTime
,ROW_NUMBER() OVER(PARTITION BY FK1, FK2 ORDER BY CreatedDateTime) AS RowNumber
FROM Table
)
AS SubQuery
WHERE RowNumber > 1
在查看代码时,我认为它不起作用,但是在我们的测试环境(SQL 2014)中测试它表明它可以!
SQL 如何知道解决子查询并从中删除记录table
?
我们有一个第 3 方薪资应用程序,它在我们的服务器上使用 SQL 数据库。在数据库服务器上,我们有每周的完整备份、每晚的差异备份和定期的日志备份。这些将保留一段时间以满足业务 DR 要求。
我们遇到的问题是,在运行工资单时,工资单部门要求对数据库进行备份并保留一段指定的时间(出于法律原因,5-7 年取决于国家/地区)。当他们从 Payroll 应用程序运行备份时,它会执行完整备份。这显然推出了我们的差异备份,因为 SQL 现在认为它有一个新的完整备份。
有没有一种方法可以捕获来自工资单应用程序的备份脚本并将其更改为仅复制,或者我们唯一的选择是更改程序和/或在工资单程序之外进行备份?
=======
更新以尝试更好地解释我们的目标:
我们要做的是拦截发薪程序出来的备份语句,向其中添加命令copy-only
,然后将其传递给SQL,然后将结果返回给发薪程序。
我们有一个 SQL 2014 可用性组,其中包含主数据库的 3 个副本 - 2 个在我们的主数据中心,1 个在我们的灾难恢复中心。
我们在主数据库上进行了一次大型索引重建,这显然需要复制到辅助数据库。我相信这个复制现在已经完成了。当我跑步时:
select redo_queue_size, log_send_queue_size
from sys.dm_hadr_database_replica_states
where database_id = 28
我得到:
redo_queue_size |log_send_queue_size
0 | 0
0 | 0
NULL | NULL
这向我表明复制已经完成。但是,当我跑步时
select log_reuse_wait, log_reuse_wait_desc from sys.databases where database_id = 28
我得到:
log_reuse_wait | log_reuse_wait_desc
6 | REPLICATION
我发现了这个查询:
select *
from sys.dm_hadr_database_replica_cluster_states
where database_name = DB_NAME()
它显示了复制的状态,这再次表明所有内容都已复制,但由于某种原因不能被截断:
is_failover_ready | is_pending_secondary_suspend | recovery_lsn | truncation_lsn
1 | 0 | 4294967295429496729500001 | 793156000000001600001
1 | 0 | 4294967295429496729500001 | 793156000000001600001
1 | 0 | 4294967295429496729500001 | 793156000000001600001
事务日志备份作业正在按预期运行和备份,但由于正常流量,已使用的日志文件的百分比继续增长。如何让 SQL 重用事务日志文件?
我不确定我是否在搜索错误的东西,但我找不到答案。我们正在运行 SQL 2014。SQL Server 和 SQL 代理进程都在域托管服务帐户下运行。
安装 SQL 时NT SERVICE\MSSQLSERVER
,NT SERVICE\SQLSERVERAGENT
, NT SERVICE\SQLWriter
,NT SERVICE\Winmgmt
都设置为SysAdmins
.
如果我以域用户身份运行 SQL 和 SQL 代理,我是否仍需要这些 NT 服务帐户,和/或它们是否需要是 SysAdmin?
我有一个使用 SQL 2014 和 Windows Server 2012 R2 的 Alwayson 可用性组设置。组中有 3 个节点。SQL 服务在每个节点上作为托管服务帐户运行(每个服务器 1 个 MSA)。
我正在尝试在每个节点上创建一个链接服务器以指向当前的活动节点。因此,假设这三台服务器称为 Server1、Server2 和 Server3,AlwaysOn 可用性组称为 SQLAAG_PROD。我想创建到 SQLAAG_PROD 的链接服务器。
我能够为每个单独的节点创建一个链接服务器(例如,带有到 server2 和 Server3 的链接的 Server1),并且使用安全选项可以正常工作Be made using the login's current security context
。
但是,当我尝试为组侦听器创建链接服务器时,我得到Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON
如果我将安全模式更改为使用当前活动服务器的 SA 密码,那么一切正常,但出于明显的安全原因,这不是一个可接受的解决方案。
我已经阅读了很多关于需要设置 SPN 并允许帐户进行委派的信息。我Trust this computer for delegation to any service (Kerberos only)
在 Active Directory 中打开了 SQLAAG_PROD 对象,但仍然遇到同样的问题。
有没有人见过这个,和/或有关于如何设置的指南?
===更新===
不确定它是否有帮助,但是当我跑步时
select auth_scheme from sys.dm_exec_connections where session_id=@@SPID
当直接连接到节点时,我得到 KERBEROS,但是如果我连接到 SQLAAG_PROD 并运行相同的查询,那么我得到 NTLM
使用 AlwaysOn 可用性组时,每个 SQL 实例是否需要使用相同的服务凭证?
我们正在设置新的 SQL2014 部署并将使用 AlwaysOn。如果我有 2 个 SQL 服务器(称它们为 ServerA 和 ServerB),那么我可以使用 2 个名为 Domain\ServerA_SQLServerService 和 Domain\ServerB_SQLServerService 的活动目录帐户(每台服务器上一个)吗?
或者他们是否需要使用相同的帐户,所以我应该只创建 Domain\SQLServerService
这些帐户将位于同一域中,并且可以访问两台服务器。以前我们已经锁定了 SQL Server 服务帐户,这显然导致了问题。我想要做的是拥有 2 个帐户,以便减少两个帐户被锁定的可能性。
是否有要求和/或 Microsoft 的最佳实践是什么?
我们正在构建一个新的生产 Windows Server 2012 R2 服务器来运行 SQL Server 2014 企业版。
互联网上有一些建议建议 Windows Server 2012 和 SQL Server 2012 我应该坚持使用 NTFS(例如itknowledgeexchange),因为数据库命令DBCC CHECKDB
不起作用。
但是,也有建议说 SQL Server 2014 现在支持 ReFS(例如Brent Ozar、msdn social)
是否有来自 Microsoft 的建议或关于何时使用 NTFS 以及是否/何时将 ReFS 用于 SQL 2014 和 Server 2012 R2 中的数据和日志文件的建议?
我们正计划将我们的 SQL 2012 升级到 SQL 2014。我们目前为我们的生产数据库使用镜像,但正计划迁移到可用性组。我们将在我们的主站点上运行 2 个 SQL Server,并在 DR 上运行一个异步副本。
我们与 DR 的链接有时非常不完整,因此我们不想依赖 DR 来获得法定人数,这也是 Microsoft 的建议:https://msdn.microsoft.com/en-us/library/hh270280。阿斯普克斯。为了提供奇数票数,我们计划让节点和文件共享多数(2 个节点 + 主站点上的 1 个文件共享 = 3 票)。
一年中有几次我们需要故障转移到灾难恢复,无论是为了测试还是因为我们主要站点的维护(电气/连接/等)工作。
要故障转移到 DR,我们可以将 DR 副本设置为同步,等待它赶上,然后使用脚本或故障转移向导进行故障转移。我已经在 Hyper-v(3x SQL + 1x AD)中使用 4 个服务器设置了测试。一旦我将故障转移到 DR,然后关闭 SQL Server,集群就会脱机。
我注意到我上面提到的同一篇 msdn 文章说
• 故障转移后重新评估投票分配。您不希望故障转移到不支持健康仲裁的群集配置中。
在计划故障转移到 DR 并且主站点完全脱机(包括 2 个主 SQL 节点和文件共享)之后,为维持仲裁而进行的最佳调整是什么?
我们有一个以完全恢复模式运行的 SQL Server 2012 Enterprise 数据库,每分钟运行一次事务日志备份。昨晚运行了一个查询,这意味着我们需要从某个时间点恢复数据——所以我们将事务日志恢复到那个时间点,恢复我们需要的数据,一切都很好。
我们想知道的是,有没有一种方法可以告诉我们使用事务日志备份来运行查询的登录名是什么?
我们有一个 SSAS 数据库(SQL Server 2012 Enterprise),里面有 4 个多维数据集。其中 1 个立方体明显大于其他 3 个。我们希望在白天定期处理 3 个较小的立方体,并在每晚更新大立方体。
一个非常基本的问题,如果我只处理一个选定的多维数据集,是否仍然处理该多维数据集中包含的度量组和维度的所有更改?
换句话说,如果我只处理一个立方体,或者如果我处理整个数据库,我处理的立方体中的数据是否完全相同?
我们有 2 个具有一些镜像数据库的 SQL 2012 SP2 Enterprise 服务器。其中一个数据库还在许多表上启用了 CDC,以便我们可以在表发生更改时运行一些业务逻辑。
昨天我们对镜像服务器做了一些维护(主服务器暴露在外)。几个小时后,我们重新启用了镜像,它按预期同步了。
我们发现,我们通常接近实时处理的 CDC 数据直到镜像恢复后才被收集。
其中有 2 个问题:
我们在每台开发人员 PC 上都设置了单独的开发人员版本 SQL Server 2012 数据库。所有 PC 都是 Windows 7,防火墙被禁用,一切运行正常。
我们现在正在寻求升级到 Windows 8.1。sqlcmd
我们在防火墙方面遇到了一些问题,但对端口 1433 和 1434 设置了例外。我们可以在使用and时使用 SQL 或 Windows 身份验证osql
进行连接,但是如果我们尝试通过 SSMS 进行连接,则会出现错误:
建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接(提供程序:SQL 网络接口,错误:26 - 错误定位服务器/指定实例)(Microsoft SQL Server)
让我感到困惑的是,我们可以毫无问题地使用osql
and进行连接sqlcmd
。SSMS 在计算机本地运行时没有问题。
TCP 看起来设置正确并正在侦听连接(并接受来自osql
和的连接sqlcmd
)。
SSMS 连接到 SQL Server 还需要什么?
我正在查看我们的数据库并注意到在特定表上我们有以下索引:
表:
Col1 INT IDENTITY(1,1) Primary Key
Col2 INT
...
about 15 more columns
....
ColN VARCHAR(50)
....
another 10 more columns
除了 上的标准主键聚集索引Col1
,我们还有以下索引:
create nonclustered index [iTable-Col1] ON [dbo].[Table1]
(
Col1
)
include ( ColN )
我们定期搜索Col1
并且只想检索ColN
. 该索引确实被使用,因为它是包含满足查询所需的所有数据的最小索引。
我的问题是,这个索引对 SQL Server 有什么好处吗?我们是否会更好地放弃它并只在聚集索引上进行搜索?
我唯一的想法是这个索引比聚集索引(25mb vs 300mb)小得多,这可能会使搜索和/或缓存更快。
如果这有什么不同的话,服务器是 SQL Server 2012。
我们有一个 Windows Server 2012 服务器运行,上面安装了 2 个 SQL Server 2012 实例 -Live
和System
. 两个实例都接受 1433 上Live
的连接,并且是默认实例(在 ListenAll 端口中设置的 1433)。
我们有一个程序需要连接到系统实例,但是它不支持 SQL Server 的命名实例。
根据我的阅读,我们有两个选择 -
System
实例监听该卡上到 1433 的所有连接System
实例我们更喜欢使用选项 2,因为这意味着我们不需要设置更多硬件,但我无法让它工作。网络团队设置了一个额外的 DNS A 记录(“programDB”)来指向服务器。
在 SQL Server 上,我使用 SQL Server 配置管理器创建了一个别名:
我已经在 32 位和 64 位配置中进行了设置
当我programDB
从 SSMS 连接时,它会将我连接到Live
实例,而不是System
实例。
我是否错过了别名的工作原理,或者我错过了设置中的某些内容?
更新:这是我设置的:
我已经多次重新启动服务。如果我尝试连接到“programdb,1544”然后它连接到System
实例