我已使用以下语法在我们的一台服务器上运行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 DB 2014 中的兼容性级别是否已更改?
最近,在我们进行统计更新时,我们的阻止进程仪表板一直在报告被阻止的进程。
很快就找到了原因:更新统计作业步骤 (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) 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)
关于什么会导致该输出行的任何想法?
谢谢,李
需要将 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 的服务包不同吗?
我有一个关于工作统计的问题。因此,我有一份具有以下时间表的工作:每天在上午 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
我想知道(更好的想法/最佳实践......)我可以用什么来加密我的数据。
我过去曾使用过 TDE,但我真的不喜欢它。因为如果证书和服务器出现问题,我将无法恢复备份。
我在一次又一次的测试中进行测试,我只是不安全。
还有哪些其他选项可以保护我的数据库/数据/备份文件?
我也尝试过屏蔽数据,但是 1)它用于 sql server 2016+(现在我们使用的是 2012)。和 2)它只是创建了另一列,数据被屏蔽,原始数据仍然存在。
这项任务的好选择是什么?
我想保护我的备份,所以没有人可以在另一台服务器上“窃取和恢复”它,我想防止数据被窃取。
我已经在使用登录和 ETC 的良好安全措施。只有我有 sa 通行证,我创建了一个函数,它每个月都会更改通行证,等等。
对于本地 SQL Server,有 Express、Web、Standard 和 Enterprise 等版本。Azure SQL DB 中是否存在这些版本(或类似版本),尤其是 Express?
我的 Google-Fu 在这里失败了,可能是因为它不存在。
sql-server express-edition azure-sql-database sql-server-express
在测试某些查询时,我在数据库上将恢复模型设置为 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) 我在 Active Directory 中创建了一个组。该组包含 3 个用户。由于某些奇怪的原因,组中的一个用户无法从特定类型的架构中进行选择,而其他 2 个用户可以从同一架构中进行选择,我为其他 2 个用户运行了一些测试 EXECUTE AS USER,除了这一点之外,一切似乎都很好一位用户和我收到以下错误:
消息 229,级别 14,状态 5,第 4 行 对对象“”、数据库“Somethng_Database”、架构“sch”的 SELECT 权限被拒绝。