标签: sql-server-2014

恢复期间的事务死锁

我正在使用 PS 脚本来恢复数据库备份,并且我有以下从 PS Invoke-SQLcmd 命令运行的 SQL 脚本:

USE master
GO
ALTER DATABASE mydatabase SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
ALTER DATABASE mydatabase SET OFFLINE WITH ROLLBACK IMMEDIATE
GO
RESTORE DATABASE mydatabase
FROM DISK = 'Z:\bak\mydatabase.bak'
WITH REPLACE
GO

ALTER DATABASE mydatabase SET RECOVERY SIMPLE
GO
ALTER DATABASE mydatabase SET ONLINE
GO
ALTER DATABASE mydatabase SET MULTI_USER WITH ROLLBACK IMMEDIATE
GO
Run Code Online (Sandbox Code Playgroud)

如您所见,我将数据库切换到单模式,甚至在还原操作之前将其设为离线。但是,我不时收到如下错误:

Transaction (Process ID 61) was deadlocked on lock resources with another process and has been chosen as the …

sql-server deadlock restore sql-server-2014

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

在 SQL 中的 CASE 表达式中转换为 int

我有一个查询,它从 10 个表和一个子查询中提取数据。其中一个选择是针对某个位置,我正在使用 case 表达式来清理输出数据。它拉取数据的字段是varchar,数据可以是这样的值:USA800, admin, ccc-ulw, ccc-ury, 002-Carson, 066-Nellis BX, 042-Junction City(还有更多) .

如果它是不以数字开头的位置之一,我希望 case express 报告一个特定值,但如果它是一个数字,我希望它只返回数字,作为一个整数(删除 0) .

这是我现在拥有的查询(可能不需要整个 SQL,但我认为它会有助于上下文):

    select 
    ct.id as CaseID
    ,c.first_name as FirstName
    ,c.last_name as LastName
    ,c.id as CustomerID
    ,SUBSTRING(sdu.User_ID,CHARINDEX('-',sdu.User_ID)+1,(((LEN(sdu.User_ID))-CHARINDEX('-', REVERSE(sdu.User_ID)))-CHARINDEX('-',sdu.User_ID))) as [Username from Navigator]
    ,case sdu.Application_Name when 'Navigator' then sn.[RESP CODE] else '' end as [Responsibility Code from Navigator]
    ,case sdu.Application_Name when 'Navigator' then RIGHT(sn.[EMUL STATION], 4) else '' end as [CStat From Navigator]
    ,ce02.id as JobCode
    ,case l.id 
        when 'USA800' then 'USA800' …
Run Code Online (Sandbox Code Playgroud)

sql-server cast sql-server-2014

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

SQL Server 中的 MAX 工作线程 2012/14/16

我只是在浏览系统运行状况扩展事件时遇到一个事件,其中包含用于显示工作线程状态的查询处理的诊断结果:

  1. 当我有 80 个逻辑处理器时,为什么最大工作线程显示 2994,根据 msdn 计算,这里 512 + ((logical CPU's - 4) * 16)看起来不正确。但是,这里的最新链接对于大于 64 的逻辑处理器是有意义的,其中 16 的计算更改为 32。但是该链接说从 SQL 2017 开始,但是我得到的数字 2994 是针对 SQL2012, 14 16 的,其中逻辑处理器数为 80 . 我在这里遗漏了什么吗?

sp_configure 中的 max worker 设置设置为“0”

  1. 回到该系统运行状况事件状态,显示以下 no 的警告:

maxWorkers="2944" workersCreated="456" workersIdle="314" tasksCompletedWithinInterval="1021881" pendingTasks="1"

我应该检查其他东西还是可以忽略它?

sql-server sql-server-2012 sql-server-2014 cpu

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

SQL Server 2014 中的 MASSIVE 标识列值跳转

因此,在基本编码和测试过程中,我们看到多个表的 Identity 值出现了巨大的无模式跳跃。我们不知道任何服务器故障或尝试进行批量操作,但 DBA 正在查看日志。

差距不是典型的 1,000 或 10,000 与服务器重启等情况。

对于Application_NO具有 2,320 行的表,其间隔为10,410,345

Transaction_Payment_NO 对于包含 685 条记录的表,跳出惊人的 1,712,149,313 条记录。

关于什么可能导致如此大且看似随意的跳跃的任何想法?

标识值在多个表上跳转

sql-server identity sql-server-2014

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

Exchangevent 在 SQL 死锁图中表示什么?

有一个死锁 XDL 文件,其中列出了几个交换事件。不确定这些是好是坏,或者是什么导致了它们。是什么导致 SQL 死锁图中的交换事件?

 <exchangeEvent id="Pipe12dfb4bc900" WaitType="e_waitPipeGetRow" nodeId="28">
   <owner-list>
    <owner id="process4a9ee4eca8" />
   </owner-list>
   <waiter-list>
    <waiter id="process2612ca8" />
 </waiter-list>
  </exchangeEvent>
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2014 deadlock-graph

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

删除字符串的最后一个字符,如果最后一个字符是 s

目前正在解决一个奇怪的问题并试图找到解决方案。如果我们有一个字符串变量(@string),我们如何删除字符串的最后一个字符,仅当最后一个字符是 s 时?

sql-server-2014

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

节点故障转移后使 SQL 联机的时间更长

在为 SQL 服务器进行常规操作系统修补后,我们遇到了一个奇怪的问题。

根据最佳实践,我们在被动上应用补丁并进行节点故障转移以使当前被动、主动,反之亦然以完成修补。

通常节点故障转移是无缝的并且在一分钟内完成。但是最近我们遇到了一个问题,在节点故障转移后需要 4 分钟才能使 SQL 联机:

我正在检查日志和事件,但找不到原因:以下是迄今为止的调查结果:

注意:SQL 服务器在 VM 上运行

  1. SQL 服务器活动没有增加
  2. 数据库是数据库镜像的一部分
  3. 在此期间内运行时间更长的用户连接或用户查询不会增加
  4. 所有数据库的 VLF 低于 500
  5. 无 CPU/内存压力和 LPIM 已启用。
  6. 在故障转移期间似乎终止长时间运行的进程是 EXEC sp_server_diagnostics 20 running for last 86745234 secs

请协助我还应该检查什么才能找到根本原因?

编辑 - 我尝试分析集群日志,可以看到 sql 离线已启动,但我不确定它在内部花了至少 4 分钟的时间来实际关闭 sql 并将其恢复。4 分钟后,sql 错误日志将数据库的所有条目都调高了大约 10 秒。所以看起来 DB 可能没有参与这里来减慢进程。

编辑 - 当前检查时的一些 VLF 信息

在此处输入图片说明

sql-server clustering failover sql-server-2014

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

无缝 SQLServer 数据库名称更改

我需要更改一些数据库的名称,但是这些数据库被多个不同团队管理的许多应用程序使用。所有应用程序完成更改连接和数据库名称引用需要一些时间。有没有办法让更改无缝完成?正在查看同义词以暂时允许引用重命名的数据库,但不幸的是它仅适用于数据库级别。

sql-server sql-server-2014 rename

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

展开日期范围

我有下表,其中包含以下数据:

DECLARE @MyActions TABLE (ActionId INT NOT NULL, ActionDate DATETIME NOT NULL)

INSERT INTO @MyActions VALUES (1, '2021-08-01 01:00:00')
INSERT INTO @MyActions VALUES (2, '2021-08-02 02:00:00')
INSERT INTO @MyActions VALUES (3, '2021-08-03 03:00:00')
INSERT INTO @MyActions VALUES (4, '2021-08-04 04:00:00')
Run Code Online (Sandbox Code Playgroud)

如何在不使用慢表值函数的情况下将每个 ActionID 分解为 10 个附加记录(当前 ActionID 的日期前 5 天和日期后 5 天)?

ActionID = 1 应该爆炸到 11 个总记录(没有时间),Action 2 应该爆炸到 11 个总记录(没有时间),依此类推

分解结果集

DECLARE @MyActions TABLE (ActionId INT NOT NULL, ActionDate DATETIME NOT NULL)

INSERT INTO @MyActions VALUES (1, '2021-08-01 01:00:00') …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2014 date-math

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

是否可以更改驱动器名称/标签(不是驱动器号!)

我意识到这可能是一个简单的问题,但如果我包含 SQL Server,我的搜索只会返回驱动器号或数据库名称的结果。请随时向我指出现有的文章或答案,并提前道歉:)

我继承了一个环境,其中包含多个支持多个 SharePoint 2013 和 2016 场的 SQL Server 2014 和 2016 服务器(也有一些是集群服务器)。以前的 SA 为驱动器命名/标记了一些相当模糊的名称,我想通过重命名驱动器来避免自己继续混淆每个包含的内容。这是一个坏主意吗?我似乎无法在我的环境中找到任何专门提到驱动器名称的东西,一切似乎都选择了驱动器号,在某些情况下,驱动器名称被呈现为信息。

驱动器名称只是一个描述,实际上并没有将驱动器本身识别为任何系统,我对吗?

sql-server sharepoint sql-server-2014 sql-server-2016

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