小编Ran*_*gen的帖子

不熟悉的语法 - 在开始时使用大括号中的参数进行查询

我已使用以下语法在我们的一台服务器上运行sp_WhoIsActive

sp_whoisactive @get_plans = 1, @show_sleeping_spids = 0, @get_outer_command = 1, @get_locks = 1
Run Code Online (Sandbox Code Playgroud)

并用sql_command(显示的列@get_outer_command设置为1)找到了一个spid,如下所示

(@p1 int,@p2 int)
Exec MyDatabase.MyProc @p1 @p2
Run Code Online (Sandbox Code Playgroud)

当我尝试在我的测试 Adventureworks 数据库上使用此语法运行查询时:

(@be int)
SELECT  *
FROM    Person.Person
WHERE   BusinessEntityID = @be
Run Code Online (Sandbox Code Playgroud)

我收到错误

消息 1050,级别 15,状态 1,第 1 行 此语法仅适用于参数化查询。消息 137,级别 15,状态 2,第 4 行 必须声明标量变量“@FN”。

所以这似乎与参数化查询有关。这是有道理的,因为变量 @be 永远不会被设置为一个值

这里发生了什么?

sql-server syntax parameter sql-server-2016 sp-whoisactive

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

SQL Server 的兼容级别

有没有办法知道我的 SQL SERVER DB 2014 中的兼容性级别是否已更改?

sql-server sql-server-2014 cardinality-estimates

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

为什么来自不同 SQL Server 实例的这些 T-SQL 作业在同一实例上执行(AlwaysOn 可用性组)

最近,在我们进行统计更新时,我们的阻止进程仪表板一直在报告被阻止的进程。

很快就找到了原因:更新统计作业步骤 (T-SQL) 在辅助 SQL Server 实例和主 SQL Server 实例上都启动。该作业更新同一数据库的多个统计信息,该数据库是 AlwaysOn 可用性组的一部分。我希望这会在辅助实例上失败。

故障转移历史的简要概述:

由于许可而应保持活动状态的服务器 A(将被命名为活动服务器),在 20/02 晚上 9 点意外故障转移到服务器 B(被动服务器)。

在计划外故障转移之后,我们在 2002 年 2 月 21 日中午 12 点进行了另一次(但这次是计划内的)手动故障转移回 Active Server。

工作经历

在第一次故障转移之前一切都很好,活动服务器是唯一运行该作业的服务器。

在此处输入图片说明 一项工作正在运行。 我们看到在活动端运行的统计更新。(这是当时的主要副本)

在无源服务器作为主要副本的短时间内,我们没有任何监控并且作业历史记录被清除。

故障转移后,回到“正常”状态,在被动节点上处于主节点不到 24 小时后,被动实例上的作业步骤也已在主动实例上启动并运行。

在此处输入图片说明 (我杀死了会话)。

现在对我来说有趣的部分是,这两个作业都在活动服务器上运行,似乎该作业正在使用侦听器访问数据库。但这可能是一个完全不同的原因。

有一个复制作业 PowerShell 任务在每晚凌晨 01 点运行 (dbatools):

powershell.exe Copy-DbaAgentJob -ExcludeJob "CopyJobs,CopyLogins" -Source INDCSPSQLA01  -Destination  INDCSPSQLP01     -Force
Run Code Online (Sandbox Code Playgroud)

我的猜测现在是针对一次,作业复制发生在主动、次要节点 --> 带有 -Force 的主要被动节点。这发生在 21/02 01 AM。

问题

为什么被动实例上的作业步骤在主动实例的数据库上执行?

清单

在这两种情况下,作业目标都是本地的:

在此处输入图片说明

EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'
Run Code Online (Sandbox Code Playgroud)

服务器名称正确

select …
Run Code Online (Sandbox Code Playgroud)

sql-server jobs availability-groups sql-server-2017

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

无法解释的 DBCC CHECKDB 命令输出

Microsoft SQL Server 2017 (RTM-CU14-GDR) (KB4494352) - 14.0.3103.1 (X64) 2019 年 3 月 22 日 22:33:11 版权所有 (C) 2017 Microsoft Corporation Developer Edition(64 位),Windows Server 2016(数据中心 10.0)内部版本 14393:)(管理程序)

我的生产服务器在 SQL 代理作业中执行这些命令以将结果输出到我的管理数据库中的表:

DECLARE @SQL VARCHAR(MAX) = 'master..xp_cmdshell ''SQLCMD -E -Q"DBCC CHECKDB('+@Database+') WITH NO_INFOMSGS, ALL_ERRORMSGS"'''; -- If all is well, there will be no output.
INSERT INTO DBCC_CHECKDB_Results EXEC(@SQL);
Run Code Online (Sandbox Code Playgroud)

昨晚,输出一行信息,作业停止执行,作业历史记录中没有显示错误。一行信息是:

“Sqlcmd:警告:上次操作已终止,因为用户按下了 CTRL+C。”

这怎么可能?周日晚上 10:00,没有人登录到服务器。CTRL+C不在命令行中。

作为测试,我执行了此命令,并在执行时键入CTRL+C::

USE ARC 
DBCC CHECKDB WITH NO_INFOMSGS, ALL_ERRORMSGS:
Nothing happened. 
Run Code Online (Sandbox Code Playgroud)

关于什么会导致该输出行的任何想法?

谢谢,李

sql-server dbcc dbcc-checkdb sql-server-2017

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

修补 SQL Server 2014 与 SQL Server 2014 Express

需要将 Service Pack 应用于以下 SQL Express 安装:

安装版本: 12.0.2000.8 (2014) Express Edition

不确定我是否可以应用最新的 SQL 2014 Service Pack SP4 或坚持使用我发现的最新 Express Service Pack SP3。

SQL 2014 的服务包与 SQL 2014 Express 的服务包不同吗?

sql-server sql-server-2014

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

为什么作业的 next_run_time 是错误的?

我有一个关于工作统计的问题。因此,我有一份具有以下时间表的工作:每天在上午 12:00:00 到晚上 11:59:59 之间每 5 分钟发生一次。时间表将于 2017 年 12 月 13 日开始使用。

在 2019-10-20 上午 11:27 我运行了两个脚本来获取 last_run_time 和 next_run_time,下面是脚本及其对应的结果:

USE msdb
GO
SELECT J.Name                     AS 'Job Name'
         ,'Job Enabled' =        
          CASE J.Enabled
                 WHEN 1 THEN 'Yes'
                 WHEN 0 THEN 'No'
          END
         ,STUFF(
          STUFF(CAST([active_start_date] AS VARCHAR(8)), 5, 0, '-')
          , 8, 0, '-')                   AS 'Job Schedule Start Date'
         ,STUFF(
          STUFF(CAST([active_end_date] AS VARCHAR(8)), 5, 0, '-')
          , 8, 0, '-')                   AS 'Job Schedule End Date'
         ,'Job Frequency' =
          CASE …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-agent jobs scheduled-tasks sql-server-2014

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

数据加密的良好实践

我想知道(更好的想法/最佳实践......)我可以用什么来加密我的数据。

我过去曾使用过 TDE,但我真的不喜欢它。因为如果证书和服务器出现问题,我将无法恢复备份。

我在一次又一次的测试中进行测试,我只是不安全。

还有哪些其他选项可以保护我的数据库/数据/备份文件?

我也尝试过屏蔽数据,但是 1)它用于 sql server 2016+(现在我们使用的是 2012)。和 2)它只是创建了另一列,数据被屏蔽,原始数据仍然存在。

这项任务的好选择是什么?

我想保护我的备份,所以没有人可以在另一台服务器上“窃取和恢复”它,我想防止数据被窃取。

我已经在使用登录和 ETC 的良好安全措施。只有我有 sa 通行证,我创建了一个函数,它每个月都会更改通行证,等等。

sql-server sql-server-2012 transparent-data-encryption

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

是否有 Azure SQL DB 的 Express 版本?

对于本地 SQL Server,有 Express、Web、Standard 和 Enterprise 等版本。Azure SQL DB 中是否存在这些版本(或类似版本),尤其是 Express?

我的 Google-Fu 在这里失败了,可能是因为它不存在。

sql-server express-edition azure-sql-database sql-server-express

3
推荐指数
1
解决办法
1862
查看次数

完整恢复模型和 tabblock 插入日志记录

在测试某些查询时,我在数据库上将恢复模型设置为 full 并运行了两个相同的 1M 行插入,有和没有TABLOCK.

在使用 时TABLOCK,我绕过9295了 sql server 2008 实例8714上的日志记录,以及 SQL Server 2017 实例上的日志记录。

在没有 tabblock 的情况下运行插入时,我绕过1035659了 2008 实例的1068599记录和 2017 实例的记录。

在 sql server 2008 上测试的原因是为了匹配数据加载性能指南关于 ML 操作的恢复模型的声明:

仅当您的数据库处于大容量日志或简单恢复模式时,最少日志操作才可用。

那么,如果不是最小日志记录,这里看到的是什么?

Use DatabaseName

ALTER DATABASE DatabaseName SET RECOVERY FULL;
GO
BACKUP DATABASE DatabaseName TO DISK = '\\location\DatabaseName.bak';

BACKUP LOG DatabaseName TO DISK = '\\location\DatabaseName_log.trn';
GO

IF OBJECT_ID(N'dbo.Accounts', N'U') IS NOT NULL
BEGIN
    DROP TABLE dbo.Accounts;
END; …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server sql-server-2017

3
推荐指数
1
解决办法
260
查看次数

AD 中的用户的权限被拒绝

我在 Active Directory 中创建了一个组。该组包含 3 个用户。由于某些奇怪的原因,组中的一个用户无法从特定类型的架构中进行选择,而其他 2 个用户可以从同一架构中进行选择,我为其他 2 个用户运行了一些测试 EXECUTE AS USER,除了这一点之外,一切似乎都很好一位用户和我收到以下错误:

消息 229,级别 14,状态 5,第 4 行 对对象“”、数据库“Somethng_Database”、架构“sch”的 SELECT 权限被拒绝。

sql-server-2008 sql-server

3
推荐指数
1
解决办法
440
查看次数