Kategorie szkoleń | Egzaminy | Kontakt
  • 3
  • 17
  • 473

Witajcie, mam folder który zawiera kilka podfolderów, a w każdym z nich zapisywane są zrzuty dzienne danej bazy danych. I tak np. folder backup\baza1 zawiera plik *.bak kolejnych backupów bazy o nazwie baza1. Pliki backupów są codziennie archiwizowane RAR-em, więc mechanizm SQL Servera nie radzi sobie z usuwaniem starych kopii.

Pytanie brzmi: jak najlepiej zrealizować usuwanie plików starszych niż, powiedzmy, 5 dni? 

Maciej_Krauze
  • Zapytał
  • @ Maciej_Krauze | 09.08.2015
    • lider
    • laureat
    • 45
    • 16
    • 58

Odpowiedzi (3)

  • 8

Usunięcie plików starszych niż 5 dni można zrealizować za pomocąMaintenance Cleanup Task, własnego skryptu T-SQL, skryptu bat lub PowerShell. Przykład korzystający ze skryptu i Maintenance Cleanup Task:

declare @dt datetime
select @dt=getdate()-5
EXECUTE master.dbo.xp_delete_file 0,N'E:\Backups',N'BAK',@dt,1

źródło: forum msdn

Sama konfiguracja zadania Maintenance Cleanup Taskz różnymi rozszerzeniami: http://www.freetutorialssubmit.com/create-ms-sql-maintenance-cleanup-task/1588

Opcja ze skryptem bat:

set match=D:\backup\backup*.zip
for %%x in (%match%) do (
del %%x
)

źródło: stackoverflow

Jako ostatnia opcja pozostaje PowerShell:

Get-ChildItem D:\backup\backup*.zip -Recurse  | 
Where-Object LastModifiedDate -lt (Get-Date).Date.AddDays(-5) |
Remove-Item -WhatIf

(W wersji docelowej usuwamy -WhatIf)

Przy okazji proszę o rozwinięcie, co dokładnie oznacza że mechanizm SQL Servera nie radzi  sobie z usuwaniem starych kopii?

 

  • Odpowiedział
  • @ | 10.08.2015
  • TRENER ALTKOM AKADEMII
  • 2

Dziękuję za odpowiedź, Panie Jacku. Po pobieżnej analizie mam wrażenie że ustawiłem wszystko tak jak w przykładzie z Maintenance Cleanup Task. Sam task wyskonuje się, jedynie nie są usuwane stare kopie.

Najwygodniejsze będzie w moim przypadku zastosowanie PowerShell'a z poziomu harmonogramu zadań, spróbuję też użyć T-SQL-a i zaobserwuję wynik.

Maciej_Krauze
  • Odpowiedział
  • @ Maciej_Krauze | 12.08.2015
    • lider
    • laureat
    • 45
    • 16
    • 58
Komentarze
Ponieważ Maintenance Plan jest rodzajem pakietu SSIS można w ostateczności spróbować zaimportować go do projektu SSIS i wykonać debugowanie krok po kroku.
Skomentował : @ TRENER ALTKOM AKADEMII ,13.08.2015
  • 5

W takim razie dodam tylko, że wykonanie skryptu PowerShell warto w tym przypadku zrealizować w ramach kroku CmdExec a nie kroku PowerShell. Ponieważ krok PowerShell oznacza dla agenta załadowanie procesu SQLPS (a co za tym idzie przystawki/modułu SQL) a więc większe zużycie zasobów i wolniejszy start nie jest to najlepsze rozwiązanie przy operacji na systemie plików. Znacznie lepszym wyjściem jest skorzystanie z CmdExec i hosta PowerShell.exe zamiast SQLPS.exe.
Dodatkowe informacje odnośnie wykonywania skryptów PowerShell w krokach pracy agenta można znaleźć w artykule: http://www.sqlhammer.com/blog/running-powershell-in-a-sql-agent-job/

 

  • Odpowiedział
  • @ | 13.08.2015
  • TRENER ALTKOM AKADEMII