我在 SQL Server 代理中设置了一个查询来返回输出结果文件。我遇到的问题是如何设置日期和时间戳,以便文件名始终包含日期和时间。
在 SQL 代理作业上,我打开步骤并单击“高级”选项卡,然后选择应保存输出的文件路径,仅此而已。
我在 SQL Server 代理中设置了一个查询来返回输出结果文件。我遇到的问题是如何设置日期和时间戳,以便文件名始终包含日期和时间。
在 SQL 代理作业上,我打开步骤并单击“高级”选项卡,然后选择应保存输出的文件路径,仅此而已。
我创建了一个以 XML 格式输出数据的脚本,并且正在使用 SQL Server 代理(类型为“操作系统(cmdexec)”的作业步骤)每月/每季度运行一项作业,以将数据输出到特定文件。但是,我们遇到的问题是 SQLCMD 脚本的输出:
sqlcmd -d <Database> -i "<Package>\<SQLFile>.sql" -o "<OutputFilePath>\<FileName>.xml" -y 0
正在输出“消息”以及“结果”。有没有办法只通过 sqlcmd 写入结果?
我删除了一些消息,包括:
“警告:空值被聚合或其他 SET 操作消除。”
“(受影响的 1 行)”
通过使用以下代码:
SET NOCOUNT ON
SET ANSI_WARNINGS OFF
GO
感谢您的建议!
我想查找代理工作的名称,但例如
Select login_name,
program_name,
host_name,
nt_domain,
nt_user_name
From sys.dm_exec_sessions
不显示名称,但显示:SQLAgent - TSQL JobStep (Job 0x"Some hexadecimal number" : Step 1)
我怎样才能找到这个代理工作的名称?
我正在 SQL Server 上创建一个 cron 作业。据我所知,创建作业的唯一方法是通过 SQL Server 代理。但是,分配给我的 VM 的服务(在 services.msc 中列出)不包含 SQL Server 代理。另外,我没有对数据库的系统管理员访问权限。那么,谁能帮助我了解如何在没有 SQL Server 代理的情况下创建 cron 作业?
我们有一个每天晚上从远程 SQL Server 导入数据的工作,我称之为 Import-Job。大多数情况下,这项工作在大约 15 分钟内完成,一切都很好,但由于 VPN 连接相当不稳定,有时这项工作需要更多时间。
我们为这项工作指定了 1.5 小时的时间窗口,我们不能冒险让 Import-Job 超过这个窗口(其他工作和生产从某个时间点开始)。
我们在时间窗口结束时使用另一个执行以下 TSQL 语句的作业停止 Import-Job:
IF EXISTS (
SELECT 1
FROM msdb.dbo.sysjobs J
JOIN msdb.dbo.sysjobactivity A
ON A.job_id=J.job_id
WHERE J.name=N'Import-Job'
AND A.run_requested_date IS NOT NULL
AND A.stop_execution_date IS NULL
)
BEGIN
EXEC msdb.dbo.sp_stop_job
N'Import-Job';
PRINT 'The job was stopped.'
END
ELSE
BEGIN
PRINT 'The job is not running.'
END
这确实有效,但它每次都会尝试停止 Import-Job,即使 Import-Job 没有运行,也会导致 Job History 中出现错误:
QLServerAgent Error: Request to stop job Import-Job (from User ServiceUser) refused because the job is not currently running.
我在这个语句中遗漏了什么,我如何让这个 T-SQL 脚本工作,这样它就不会在 Import-Job 没有运行时尝试停止它?(我想摆脱错误)
我正在使用此版本的 SQL Server。
Microsoft SQL Server 2016 (SP2-CU12) (KB4536648) - 13.0.5698.0 (X64) Feb 15 2020 01:47:30 Copyright (c) Microsoft Corporation Standard Edition (64-bit) on Windows Server 2012 R2 Standard 6.3 <X64> (Build 9600: )
这听起来可能违反直觉,但我希望我的一些工作在失败时不要发送电子邮件。
我有一个非常繁忙的服务器,当它们与其他进程陷入僵局时,一些作业会失败。我对此很好,只要大部分时间工作都能成功。
我收到了太多关于工作失败的电子邮件,所以我给自己做了一份报告,告诉我昨天失败的工作,以及它们失败的次数。
SET QUOTED_IDENTIFIER ON;
declare @Today date, @Yesterday varchar(8)
select @Today = GETDATE()
select @Yesterday = REPLACE(CONVERT(VARCHAR(10),DATEADD(day, -1, @Today),121),'-','')
;With failedJobs as
(
select job_id, step_id, COUNT(*) as Occurrences
from msdb.dbo.sysjobhistory
where run_date>=@Yesterday and run_status=0
group by job_id, step_id
)
SELECT j.name,fj.Occurrences,MAX(fj.step_id) as LastSteap
from msdb.dbo.sysjobs j
join failedJobs fj on fj.job_id=j.job_id
group by j.name, fj.Occurrences
我的问题是,即使我取消选中 SSMS 中的通知,当工作死锁时我仍然会收到电子邮件。
知道我需要禁用什么吗?我需要禁用故障安全操作员吗?如果可能的话,我想避免这种情况。
我在当前的主要和镜像故障转移 SQL Server 设置之间有一组镜像作业。过去,镜像服务器上的作业在启用时会失败,因为它们无法打开本地数据库,因为它处于恢复状态。但是,我现在看到作业成功并正在转发到当前的主数据库。
我已经看到 .Net 使用的 SQL Server 驱动程序的这种行为,因此如果发生故障转移,它将允许自动重新连接。我以前在 SQL 作业中没有看到过这种行为,而且我似乎找不到任何关于它的文档。
我发现另外两个提到此行为(一,二)的解决方法,但是我很难找到有关此功能的文档,因此我知道这是我所做的配置更改还是启用了我安装的更新。
此功能是否记录在 Microsoft 的任何参考资料中?
这些作业是 T-SQL 步骤,它们正在读取和(成功)写入。有些是内联 T-SQL,有些是在目标数据库中调用 SP。我使用的是标准镜像而不是可用性组。
SQL Server 2016 企业版,CU15 + GDR。
客户端最近开始在生产中使用OPCON,我注意到当 OPCON 创建作业时,它不会将本地服务器添加为目标。这会阻止作业执行。
无论如何,是否可以确定特定作业是否没有像上述情况那样定义任何目标服务器?
谢谢,
克雷格
我编写了一个脚本,该脚本从中读取作业计划msdb.dbo.sysschedules
并运行sp_update_schedule
以更改active_start_time
给定作业子集的时间。在每种情况下,sp_update_schedule
都会失败并显示消息“指定的@schedule_id('xxx') 不存在”。(消息 ID 14262,严重性 16)
schedule id
insysschedules
不是它要找的东西吗?我在这里想念什么?