windows下sqlserver数据库维护计划执行失败,删除异常
问题描述:windows环境下,自动维护计划任务执行失败,删除维护计划和作业也失败。
解决办法:考虑是修改过计算机名引起的:
一、修改数据库中的服务器名
步骤 1:验证当前服务器名
首先,确认问题确实存在。
在 SSMS 中,以管理员身份连接到 SQL Server。
执行以下查询:
SELECT @@SERVERNAME AS 'SQL Server 记录的服务器名'; SELECT SERVERPROPERTY('MachineName') AS 'Windows 报告的计算机名'; SELECT SERVERPROPERTY('ServerName') AS 'SQL Server 完整实例名';
预期结果:
@@SERVERNAME
和SERVERPROPERTY('ServerName')
应该返回 新的计算机名(或新计算机名\实例名
)。SERVERPROPERTY('MachineName')
返回 新的计算机名。
如果
@@SERVERNAME
仍显示旧的计算机名,这就是问题所在,需要修复。
步骤 2:更新 SQL Server 服务器名
警告:此操作需要重启 SQL Server 服务。请在维护窗口执行。
删除旧的服务器名:
-- 如果 @@SERVERNAME 返回的是旧的计算机名(或旧计算机名\实例名),执行: IF EXISTS (SELECT * FROM sys.servers WHERE name = N'旧计算机名') BEGIN EXEC sp_dropserver N'旧计算机名'; -- 如果是命名实例,应该是 '旧计算机名\实例名' -- EXEC sp_dropserver N'旧计算机名\实例名'; END
将
旧计算机名
替换为你旧的计算机名。如果是命名实例(例如
OLDPC\SQLEXPRESS
),则使用EXEC sp_dropserver N'OLDPC\SQLEXPRESS';
。
添加新的服务器名:
-- 添加新的服务器名 EXEC sp_addserver N'新计算机名', 'LOCAL'; -- 如果是命名实例,使用: -- EXEC sp_addserver N'新计算机名\实例名', 'LOCAL';
将
新计算机名
替换为你当前的计算机名。如果是命名实例(例如
NEWPC\SQLEXPRESS
),则使用EXEC sp_addserver N'NEWPC\SQLEXPRESS', 'LOCAL';
。'LOCAL'
参数表示这是本地服务器。
重启 SQL Server 服务:
在
services.msc
中,找到SQL Server (实例名)
服务,右键选择“重新启动”。必须重启,更改才会生效。
验证更改:
重启服务后,重新在 SSMS 中执行步骤1的查询。
确认
@@SERVERNAME
和SERVERPROPERTY('ServerName')
现在都显示新的计算机名。
二、使用T-sql删除维护计划和作业
USE msdb; GO -- 1. 先查找维护计划的 ID DECLARE @plan_id UNIQUEIDENTIFIER; SELECT @plan_id = id FROM dbo.sysmaintplan_plans WHERE name = 'clear'; -- 将 'clear' 替换为你的维护计划实际名称 -- 2. 如果找到了 ID,则删除维护计划 -- 注意:删除主计划会自动删除其子计划和关联的作业 IF @plan_id IS NOT NULL BEGIN EXEC dbo.sp_maintplan_delete_plan @plan_id = @plan_id; PRINT '维护计划 ''clear'' 及其关联的作业已成功删除。'; END ELSE BEGIN PRINT '未找到名为 ''clear'' 的维护计划。'; END
--删除作业
USE msdb; GO DECLARE @plan_id UNIQUEIDENTIFIER; SELECT @plan_id = id FROM dbo.sysmaintplan_plans WHERE name = 'clear'; IF @plan_id IS NOT NULL BEGIN -- 先删除子计划 (解除外键约束) DELETE FROM dbo.sysmaintplan_subplans WHERE plan_id = @plan_id; -- 再删除主计划 DELETE FROM dbo.sysmaintplan_plans WHERE id = @plan_id; PRINT '维护计划 ''clear'' 已手动删除。'; END ELSE BEGIN PRINT '未找到名为 ''clear'' 的维护计划。'; END
处理后完重新创建维护计划即可。