当我使用以下查询监控我的备份时:
SELECT command, percent_complete,
'elapsed' = total_elapsed_time / 60000.0,
'remaining' = estimated_completion_time / 60000.0
FROM sys.dm_exec_requests
WHERE command like 'BACKUP%'
or command like 'RESTORE%'
Run Code Online (Sandbox Code Playgroud)
我注意到在备份之前,SQL Server 只在备份之后执行还原标头。
我想知道它有什么用处,以及它的执行时间是否可以以某种方式减少。它似乎比实际备份花费的时间更长。
有没有办法可以确定计划是为特定查询生成的,还是在计划缓存中找到的?
如何在 SQL Server 2012 中将默认实例转换为命名实例?
我错误地选择了默认实例选项并安装了。现在我必须更改为命名实例。如何改变?
在表中插入值后实时检索最新的guid值
不知道怎么做
CREATE TABLE [AddressBook]
(
[testID] [uniqueidentifier] NOT NULL default newid(),
[address] [nvarchar](50) NULL,
[zipcode] [nvarchar](50) NULL
)
Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个用空格替换特殊字符的查询。下面的代码有助于识别行。(字母数字字符、逗号和空格有效):
SELECT columnA
FROM tableA
WHERE columnA like '%[^a-Z0-9, ]%'
Run Code Online (Sandbox Code Playgroud)
如何将替换函数集成到 select 语句中,以便结果集中除字母数字、逗号和空格之外的所有字符都替换为 ' '(空格)。这个不行:
SELECT replace(columnA,'%[^a-Z0-9, ]%',' ')
FROM tableA
WHERE columnA like '%[^a-Z0-9, ]%'
Run Code Online (Sandbox Code Playgroud) 我们的一个用户的名称已合法更改,因此我们更改了他们的 Active Directory 用户名以匹配 - 从域\旧名称到域\新名称。但是,当此用户在存储过程中调用 suser_sname() 时,它返回旧名称,而不是新名称。
谷歌搜索让我找到了KB 946358,这表明他们的名字被缓存在服务器上并且没有更新,大概是因为 suser_name() 正在调用 LsaLookupSids。但是,该文章中的解决方法涉及重新启动服务器,即使是这样,我仍然想了解问题所在。
如果我将上下文更改为他们的上下文,则会返回正确的名称:
EXECUTE AS LOGIN = 'domain\newname'
GO
SELECT suser_name() --returns 'domain\newname'
Run Code Online (Sandbox Code Playgroud)
...我会假设这也会调用 LsaLookupSids,因此会返回不正确的名称。我似乎不太了解这里的工作机制。
一些可能重要的观察结果:
此用户在服务器上没有显式登录。但他们是这样做的 AD 组的成员。更改后的名称 (domain\newname) 出现在结果集中exec xp_logininfo 'domain\ADGroupName', 'members';域\旧名称没有。
用户从存储过程中调用 suser_name(),从 Access 2003 MDB 中的直通查询调用。
过去我们更改了大量用户的帐户名称,但仅在上周才发现此问题(上周进行了两次更改,似乎都出现了此问题)。
服务器在 Windows 2008 R2 数据中心版上运行 Sql Server 2008 SP3 x64。
这是怎么回事?作为 DBA,我可以做什么或者我可以在哪里解决这个问题?
在 SQL Server 中,如果 XACT_ABORT 关闭,则某些错误将终止当前语句(例如,向采用某些参数的存储过程提供不正确数量的参数),而某些错误将中止整个批处理(例如,向存储过程提供参数)不带参数的过程)。[参考]:http : //www.sommarskog.se/error-handling-I.html#scope-abortion。
我想知道的是是否有一个明确的列表,列出哪些错误是批量中止,哪些是语句终止。
我登录到一个新的客户端系统并运行 sp_blitz 以查看发生了什么变化。它报告说“ CPU Schedulers Offline ”对我来说是一个新的。
由于关联屏蔽或许可问题,SQL Server 无法访问某些 CPU 内核。
很公平,我运行基本查询
SELECT
DOS.is_online
, DOS.status
, DOS.*
FROM
sys.dm_os_schedulers AS DOS
ORDER BY
1;
Run Code Online (Sandbox Code Playgroud)
那报告说我有 8 个设置为离线可见,43 个设置为在线。据我所知,该客户端上的任何人都不会故意设置任何 CPU 关联性。
我决定看看我是否可以解开它。当我查看属性窗口时,我看到 40 个可用的处理器,但没有一个设置为具有关联性。
为什么在 is_online 为 true 的 dm_os_schedulers 中有 40 个显示 43 个条目似乎也很好奇。8离线的cpu_id是32到39。
sys.configurations 似乎同意没有明确开启关联
name value value_in_use description
affinity I/O mask 0 0 affinity I/O mask
affinity mask 0 0 affinity mask
affinity64 I/O mask 0 0 affinity64 I/O mask
affinity64 mask 0 0 affinity64 mask …Run Code Online (Sandbox Code Playgroud) 我想将表中的数据选择为 4 组,该表具有尽可能均匀分布的组中值的总和。我敢肯定我解释得不够清楚,所以我会尝试举一个例子。
这里我使用 NTILE(4) 创建 4 个组:
SELECT Time, NTILE(4) OVER (ORDER BY Time DESC) AS N FROM TableX
Time - N
-------------
10 - 1
9 - 2
8 - 3
7 - 4
6 - 1
5 - 2
4 - 3
3 - 4
2 - 1
1 - 2
Run Code Online (Sandbox Code Playgroud)
在上面的查询和结果中,为简洁起见,省略了其他列。
所以你也可以看到这些组如下:
1 2 3 4
--- --- --- ---
10 9 8 7
6 5 4 3
2 1
--- --- --- ---
18 15 …Run Code Online (Sandbox Code Playgroud) sql-server ×10
t-sql ×3
backup ×1
cache ×1
installation ×1
ms-access ×1
replace ×1
sp-blitz ×1
transaction ×1