小编SQL*_*DBA的帖子

SQL Server 代理启动自我终止

在过去的一个月里,我的一台服务器遇到了 SQL Server 代理问题。它会自动停止并出现以下错误,这是随机发生的:

Sql 代理输出文件
[097] 检测到内存泄漏 [204 字节]
在文件 e:\sql9_sp2_t\sql\komodo\src\core\sqlagent\src\alerter.cpp 的第 403 行捕获到异常 5。SQLServerAgent 启动自我终止

我用谷歌搜索了这个错误,但没有得到太多关于它的信息。SQL Server 和代理都使用相同的域帐户运行;但是,问题仅与 SQL Server 代理服务有关。

我也无法在 SQL Server 配置管理器中看到 SQL Server 代理服务。我检查了 SQL Server 错误日志和 Windows 事件查看器日志,但没有看到任何可疑活动。

我的内存设置配置正确。服务器有 32GB RAM,SQL Server 被分配使用 26GB 的最大内存。

系统详情:

  • SQL Server 2012 SP2 标准版 11.0.5058 64 位
  • Windows Server 2008 R2 Ent Edition 64 位
  • 专用于 SQL Server(服务器上没有运行其他应用程序)
  • 服务器几个月前从 SQL Server 2005 EE 升级到 2012 SE。
  • 我们没有使用事件转发服务器

我也检查了msdb数据库。运行 checkdb 并成功完成,没有任何错误。我需要你的帮助来解决两件事:

  1. 修复 SQL …

sql-server sql-server-2012 sql-server-agent

9
推荐指数
1
解决办法
658
查看次数

聚集索引查找和非聚集索引查找的区别

聚集索引 (CI) 查找和非聚集索引 (NCI) 查找有什么区别?一个比另一个表现更好吗?

我问这个的原因是因为我有一个有 5000 万行和 150 列的表。它有一个名为ID聚集索引的列。上面还有一个 NCI,具有相同的索引键 ID 和七个include-d 列。在我看来,NC 索引在这里是重复的,可以安全地删除。

所以我想要一些专家的意见/建议,如果它可以安全地放下还是应该保持完整?

sql-server index-tuning sql-server-2012

9
推荐指数
1
解决办法
6812
查看次数

SQL Server 访问问题

我正在尝试使用来自不同登陆服务器的 SSMS 连接 3 个 SQL 服务器。问题是我可以连接 1 个服务器但无法连接其他 2 个。我得到的错误如下:

在此处输入图片说明

已成功与服务器建立连接,但随后在登录过程中出现错误。(提供者:SSL 提供者,错误:0 - 远程主机强行关闭了现有连接。)

我无法弄清楚其他 2 台服务器出了什么问题,需要您的帮助。

登陆服务器详情:

  1. Windows server 2008 R2 Ent版
  2. SSMS 2012 SP1

SQL 服务器详细信息:

  1. SQL Server 2012 -- 能够连接
  2. SQL Server 2012 -- 无法连接
  3. SQL Server 2005 -- 无法连接

我能够从我的登陆服务器 ping 和 telnet 所有 3 个服务器。另外,尝试了 2 台服务器的 SQL 身份验证,但我无法连接但它不起作用。禁用 TCP 烟囱,不起作用。相同的 3 个连接在我的其他登陆服务器上运行良好。所以不确定这个有什么问题。请帮我解决这个问题。

sql-server sql-server-2012 connectivity

8
推荐指数
1
解决办法
4万
查看次数

无法创建大于允许的最大行大小 8060 的大小为 XXXX 的行

我有一个场景,由于 8060 的最大行大小限制,某些插入/更新失败。对于具有大量 varchar 250 到 500、数字和日期时间列的表,会发生这种情况。我试图在我的测试环境中重现同样的场景,但无法这样做。

你们知道如何在测试环境中重现它吗?任何示例都非常适合解释。

我的环境是SQL server 2005 Ent。版。我的表有 ~470 列。我知道这是一个糟糕的设计,但它不在我的控制范围内。

我在下面尝试过,但它不起作用:

create table test (col1 varchar(5000), col2 varchar(5000))   
insert into test values (replicate('A', 5000), replicate('B', 5000))
Run Code Online (Sandbox Code Playgroud)

即使记录长度大于 8060,它也能成功插入。

sql-server-2005 sql-server

6
推荐指数
2
解决办法
1万
查看次数

SQL Server 和 SSPI 握手失败错误

最近我遇到了一个问题,来自一个域的用户无法登录 SQL Server 并收到此错误:

错误:17806,严重性:20,状态:2。SSPI
握手失败,错误代码为 0x8009030c,同时建立具有集成安全性的连接;连接已关闭。[客户:xxxxxx]

错误:18452,严重性:14,状态:1
。用户登录失败”。用户未与受信任的 SQL Server 连接相关联。[客户:xxxxxx]

我们有两个域,比如说 A 和 B。我的 SQL Server 在域 B 中运行。在正常情况下,两个域用户都能够连接。但是前几天,域A的所有用户都无法连接到域B中运行的SQL Server。但是域B的用户却能够成功连接。用户联系 SQL Server DBA 团队调查问题。

当我检查时,即使我无法使用 SSMS 并使用域 A 的凭据远程连接到 SQL Server。但是,当我尝试使用域 A 的凭据对服务器进行 RDP 时,它工作正常,并且在远程访问 SQL Server 后也开始工作美好的。所以在我看来,当我对服务器进行 RDP 时,某些东西得到了刷新并且我的登录远程开始正常工作。我确信实际问题与 AD 和 kerberos 身份验证有关,但无法证明。

我在网上研究了这个问题,并找到了两个解决方案来解决它。一是修复故障 DC,二是重新启动运行 SQL Server 的服务器。我采用了第二种方式,因为 Windows 管理员不接受这是 DC 问题。我从 SQL 端检查了所有内容,最近没有任何变化。还发现在运行 SQL Server 的服务器上记录以下事件后,此问题开始发生:

日志名称:系统
来源:NETLOGON
日期:xxxxxxxx
事件 ID:5719 任务
类别:无
级别:错误
关键字:经典
用户:不适用
计算机:xxxxxxxxxx
描述:这台计算机无法与域控制器建立安全会话domain xxxxxx 由于以下原因: 当前没有可用于为登录请求提供服务的登录服务器。这可能会导致身份验证问题。确保此计算机已连接到网络。如果问题仍然存在,请联系您的域管理员。

附加信息 如果此计算机是指定域的域控制器,它会设置与指定域中的主域控制器模拟器的安全会话。否则,此计算机将与指定域中的任何域控制器建立安全会话。

我的问题是:

  1. 如何证明这是域控制器问题?
  2. 服务器重启如何解决这个问题? …

authentication sql-server windows-server

6
推荐指数
1
解决办法
5241
查看次数

模拟超过 2 个进程的死锁

如何在 SQL Server 测试环境中模拟超过 2 个进程的死锁?有人可以帮我写代码吗?再次澄清我的问题,我不希望只有 2 个进程的死锁模拟。我知道如何用 2 个进程产生死锁,但不能用两个以上的进程产生死锁。

sql-server deadlock

6
推荐指数
1
解决办法
1385
查看次数

SQL Server 复制

我们遇到了复制问题,其中在 3300 万行的表上进行了大型(750 万行)更新。复制将其转换为 750 万条单独的更新语句。当我的警报通知我我们的出版物低于我们的门槛时,我开始检查这个问题。

我发现更新已被执行,并且需要几天时间来仔细阅读这些更新语句。所以我决定看看我们是否可以跳过它试图处理的那些记录。使用系统表和存储过程,我能够确定执行更新的时间段。一旦找到最后一个xact_seqno,我就停止分发代理,并手动更新订阅者数据库。然后我执行sp_setsubscriptionxactseqno, 跳过所有这 750 万笔交易。当我启动分发代理时,它似乎工作正常并且能够处理剩余的事务。

为了更好地衡量,我使用 Redgate 的数据比较来查看数据是否混乱,但我丢失了大约 24 条记录(最初可能没有,因为我没有设置它)。

我的问题是这是修复它的正确方法吗?你怎么总是保证得到下一个Xact_seqno?您是按Xact_Seqnoentry_time 或 entry_time订购交易?

replication sql-server sql-server-2012 transactional-replication

6
推荐指数
1
解决办法
192
查看次数

tempdb 上的 DBCC checkdb

是否建议在 tempdb 上运行 DBCC CheckDB?如果是,有人可以列出这样做的原因吗?这可以在任何 SQL Server 版本上。我拥有的是 SQL Server 2017。

sql-server dbcc-checkdb

6
推荐指数
2
解决办法
2161
查看次数

如何在对象所在的文件组中查找特定文件

今天,我在我管理的一个 SQL Server 上遇到了以下错误。

无法为数据库 '%.*ls' 中的对象 '%.*ls'%.*ls 分配空间,因为 '%.*ls' 文件组已满。通过删除不需要的文件、删除文件组中的对象、向文件组添加其他文件或为文件组中的现有文件设置自动增长来创建磁盘空间。

它发生在索引重组操作期间。经过调查,我发现我的数据库被分成 3 个文件组,其中有多个文件。他们都至少有一个启用了自动增长的文件,并且托管它们的磁盘有足够的可用空间。那么为什么我的索引维护失败了呢?我的研究使我找到了这篇 MS 文章https://msdn.microsoft.com/en-us/library/aa337441.aspx,其中说:

当一个索引位于多个文件时,当其中一个文件已满时,ALTER INDEX REORGANIZE 会返回错误 1105。当进程尝试将行移动到完整文件时,重组进程被阻止。要解决此限制,请执行 ALTER INDEX REBUILD 而不是 ALTER INDEX REORGANIZE 或增加任何已满文件的文件增长限制。

好的。所以解决方案是重建索引,使其移动到新文件。但是,如果我想继续将索引保存在同一个文件中,以便我的重组可以继续,该怎么办?那可能吗?另外,是否可以找出我的数据库对象驻留在哪个文件中?大多数博客都有脚本来查找驻留在文件组中的对象,但我想在该文件组中查找文件,以便我可以手动增长它们并查看是否可以修复它。

sql-server filegroups sql-server-2012 index-maintenance

5
推荐指数
1
解决办法
1398
查看次数

重写T-SQL where子句导致性能问题

我有一个查询,其中以下where子句需要花费大量时间来执行,因为基础表中有大量数据:

环境:SQL Server 2022

WHERE条款:

DATEFROMPARTS(dyear, dmonth, dday) 
    BETWEEN DATEADD(m, -2, DATEADD(mm, DATEDIFF(m, 0, GETDATE()), 0))  
        AND CAST(CAST(DATEADD(d, -2, GETDATE()) AS DATE) AS DATETIME)
Run Code Online (Sandbox Code Playgroud)

dyear, dmonth, dday由于使用了函数,它当前不使用索引(所有三个 int 列)。

如何重写它以便可以使用底层索引来使查询运行得更快?

抱歉,由于安全限制,我无法共享执行计划。

数据存储格式由第三方定义,不受我们控制。例如,不能选择将计算列添加到随后可以建立索引的表中。

sql-server query-performance sql-server-2022

5
推荐指数
2
解决办法
2509
查看次数