none
Maintenance Cleanup Task RRS feed

  • Pergunta

  • Olá,

    Estou com o seguinte problema em remover backups do dia anterior no Sql Server 2008 Standart: Criei um plano de manutenção para realizar backup das base de dados de forma que ficaram dois planos: Um para executar ao meio dia de segunda a domingo (Backup Dia) e outro para executar às dez horas da noite de segunda a domingo (Backup Noite) e incluí também o maintenance cleanup task para excluir os backups do dia anterior. Os planos Backup Dia e Backup Noite são executados com sucesso, sem nenhum registro de erro, porém, os backups do dia anterior não são removidos. Criei um plano separado para fazer a remoção dos backups e mesmo assim ele é executado com sucesso só que os arquivos de backup não são removidos. Estou com o sql 2008 standart com sp1 em um servidor windows 2003 server com sp2. Você tem idéia do que possa está ocorrendo? Será algum bug do sql 2008?

    Obs.: Já tentei executar o comando abaixo no New Query ele retorna comando executado com sucesso, mas, não excluir os arquivos da pasta.

    EXECUTE master.dbo.xp_delete_file 0,N'E:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Backup',N'bak',N'2009-12-20'
    segunda-feira, 21 de dezembro de 2009 19:23

Respostas

  • Eu uso uma função em powershell para fazer isso , inclsuive mostrei ela no SQL Server Saturday Night



    function Remove-OldFiles()
    {
    	Param (
    			[Parameter(Mandatory = $true )][String] $FullNamePath,
    			[Parameter(Mandatory = $false )][int] $LifeTime = 1
    	      )
    	process 
    	{
    		try 
    		{
    			foreach ($name in Get-ChildItem $FullNamePath)
    			{
    				if((get-date).subtract($name.LastWriteTime).days -gt $LifeTime)
    				{
    					write-host "Removing " $name.FullName
    					try 
    					{
    						remove-item $name.FullName -force
    					} catch {	
    						write-host "Can not remove the file " + $name.FullName
    						continue
    					}	
    				}
    			}
    		} catch {
    			write-host "Can not find the path "  $FullNamePath
    		}
    		
    			
    	}	
    }


    É bem simples, vc pode incluir no seu profiler powershell e chamar por um step cmdexec logo depois. Ela usa o powershell 2.0, portanto não pode ser por um step powershell, pois o sqlps.exe é 1.0.

    vc pode usar no step cmdexec o comando

    powershell  -Noninteractive -command Remove-OldFiles -FullNamePath c:\temp\*.BAK -Lifetime 5

    aonde

    -FullNamePath é o path dos arquivos com a extensão

    -Lifetime é o numero de dias, contados após a última data de atualiazação

    Lembre-se de ter o powershell 2.0 instalado 
    segunda-feira, 21 de dezembro de 2009 23:41

Todas as Respostas

  • Eu uso uma função em powershell para fazer isso , inclsuive mostrei ela no SQL Server Saturday Night



    function Remove-OldFiles()
    {
    	Param (
    			[Parameter(Mandatory = $true )][String] $FullNamePath,
    			[Parameter(Mandatory = $false )][int] $LifeTime = 1
    	      )
    	process 
    	{
    		try 
    		{
    			foreach ($name in Get-ChildItem $FullNamePath)
    			{
    				if((get-date).subtract($name.LastWriteTime).days -gt $LifeTime)
    				{
    					write-host "Removing " $name.FullName
    					try 
    					{
    						remove-item $name.FullName -force
    					} catch {	
    						write-host "Can not remove the file " + $name.FullName
    						continue
    					}	
    				}
    			}
    		} catch {
    			write-host "Can not find the path "  $FullNamePath
    		}
    		
    			
    	}	
    }


    É bem simples, vc pode incluir no seu profiler powershell e chamar por um step cmdexec logo depois. Ela usa o powershell 2.0, portanto não pode ser por um step powershell, pois o sqlps.exe é 1.0.

    vc pode usar no step cmdexec o comando

    powershell  -Noninteractive -command Remove-OldFiles -FullNamePath c:\temp\*.BAK -Lifetime 5

    aonde

    -FullNamePath é o path dos arquivos com a extensão

    -Lifetime é o numero de dias, contados após a última data de atualiazação

    Lembre-se de ter o powershell 2.0 instalado 
    segunda-feira, 21 de dezembro de 2009 23:41
  • Laerte,

    Meu amigo, é convardia você postar um código de powershell!!!
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    quarta-feira, 23 de dezembro de 2009 00:04
    Moderador
  • Eu tinha comentado com ele por msn para dar uma olhadinha nas permissões da conta de serviço do agent e me parece que era isso, mas é uma saida usar o powershell. Eu Na verdade em questões fora SQL só uso PS.
    Mas ta aí..é uma saida também, inclsuive para quem usa o Express e quer fazer este procedimento..pode schedular no windows task schedule e pronto.


    www.laertejuniordba.spaces.live.com
    quarta-feira, 23 de dezembro de 2009 01:16
  • Laerte,

    Com certeza é uma possibilidade muito interessante.
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    quarta-feira, 23 de dezembro de 2009 11:09
    Moderador