目录
目录X
联系信息 首页 /正文内容

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 服务。请在维护窗口执行。

  1. 删除旧的服务器名

-- 如果 @@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';

  1. 添加新的服务器名

-- 添加新的服务器名
EXEC sp_addserver N'新计算机名', 'LOCAL';
-- 如果是命名实例,使用:
-- EXEC sp_addserver N'新计算机名\实例名', 'LOCAL';
    • 新计算机名 替换为你当前的计算机名

    • 如果是命名实例(例如 NEWPC\SQLEXPRESS),则使用 EXEC sp_addserver N'NEWPC\SQLEXPRESS', 'LOCAL';

    • 'LOCAL' 参数表示这是本地服务器。

  1. 重启 SQL Server 服务

    • services.msc 中,找到 SQL Server (实例名) 服务,右键选择“重新启动”。

    • 必须重启,更改才会生效。

  1. 验证更改

    • 重启服务后,重新在 SSMS 中执行步骤1的查询。

    • 确认 @@SERVERNAMESERVERPROPERTY('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


处理后完重新创建维护计划即可。

【打印正文】 发布时间:2025-09-02 09:53:37 浏览次数: 作者: 来源:本站原创