有一台老的服务器,用的SQL SERVER2000,数据库维护计划是每天晚上23完全备份,删除早于此文件4天的数据,自从
上次有网站数据库被注入后(之后还原数据库),维护计划就中的删除文件这项就失效了。重建数据维护计划也是老样子,
只备份,不会删除早于几天的数据,现在每星期都需要手工去删除,不知道什么引起的,麻烦帮我看看,谢谢!

解决方案 »

  1.   

    以下代码放在作业里做调度,自动备份、自动删除4天前备份--创建映射
    exec master..xp_cmdshell 'net use w: \DatabaseBackup$  "password"/user:Roy',NO_OUTPUT
    go
    -----2000用游标:
    declare @s nvarchar(200),@del nvarchar(200)
    select  @s='',@del=''declare datebak cursor for
    select 
        [bak]='backup database  '+quotename(Name)+'  to disk =''w:'+Name+'_'+convert(varchar(8),getdate(),112)+'.bak''  with init',
        [del]='exec master..xp_cmdshell '' del w:'+Name+'_'+convert(varchar(8),getdate()-4,112)+'.bak'', no_output' 
    from master..sysdatabases where dbid>4 --不备份系统数据库
    open datebakfetch next from datebak into @s,@del
    while @@fetch_status=0
        begin
            exec (@del)
            exec(@s)
            fetch next from datebak into @s,@del
        end
    close datebak
    deallocate datebak
    go
    --删除映射
    exec master..xp_cmdshell 'net use w: /delete'go
    --2005用max支持2G的字符串
    declare @s nvarchar(max),@del nvarchar(max)
    select  @s='',@del=''select 
        @s=@s+
            char(13)+'backup database  '+quotename(Name)+'  to disk =''w:'+Name+'_'+convert(varchar(8),getdate(),112)+'.bak''  with init',
        @del=@del+
            char(13)+'exec master..xp_cmdshell '' del w:'+Name+'_'+convert(varchar(8),getdate()-4,112)+'.bak'', no_output' from master..sysdatabases where dbid>4 order by dbid ascexec (@del)exec(@s)
      

  2.   

    还原数据库后,你的维护计划怎么重建的?
    确定plan里包含删除的动作?
      

  3.   

    原因找到了,主要是因为有一个数据库脱机放在那里,把这个数据库删除或恢复,“删除早于此文件4天的数据”就正常了,在其他SQL200我也做过实验,结果都是一样。谁能告诉我导致这个结果的原因吗?是数据库没有设置好,还是SQL2000本身自带的BUG导致