none
file .cmd per backup RRS feed

  • Domanda

  • Sto cercando di creare un file .cmd messo in esecuzione automatica in windows ogni giorno per l'esezuzione del backup di un database SQL su una penna usb esterna.

    vorrei limitare a numero 5 backup numerandoli e poi ricominciare a sovrascrivere il primo appena arrivo al numero 10, come è posso fare ??

    questo il mio file .cmd ora :

    net stop mssql$sql2008

    copy "C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\DATA\miodatabase.mdf" F:\miodatabase-01.mdf

    net start mssql$sql2008

     

    Vorrei creare:

    giorno 01

    F:\miodatabase-01.mdf

    giorno 02

    F:\miodatabase-02.mdf

    giorno 03

    F:\miodatabase-03.mdf

    giorno 04

    F:\miodatabase-04.mdf

    giorno 05

    F:\miodatabase-05.mdf

     

    il sesto giorno mi ripare da 01 e mi sovrascrive 

    F:\miodatabase-01.mdf

    martedì 31 agosto 2010 12:06

Risposte

  • Rinnovo il consiglio di SQL Backup & FTP, ed in ogni caso (li ho visti dopo).. non copiarti solo gli mdf, fai un vero e proprio backup.. (:
    venerdì 7 dicembre 2012 09:31
  • Ciao,

    io utilizzo un sistema abbastanza efficace che mi permette di storicizzare i backup e tenerne d'occhio il numero di copie.

    Spero che possa fare al caso tuo; ovviamente dovrai "metterci" le mani per adattarlo meglio alle tue esigenze, ma diciamo che come falsa riga dovrebbe essere sufficiente.

    Prima di tutto crea un file .bat, per esempio BackupDaily.Bat (che andrai a schedulare come vuoi) contenente le seguente istruzione:

    SQLCMD -S .\SQLEXPRESS -E -i C:\BackupDaily.sql

    Ora crea il file BackupDaily.sql che abbiamo menzionato al passaggio precedente nel seguente modo:

    declare @name as nvarchar(255)
    declare @database_name as nvarchar(255)

    set @database_name=N'MioDatabaseName'
    set @name = N'C:\SQLBackup\MioDatabaseName_' + CONVERT(varchar(8), getdate(), 112) + '_' + replace(CONVERT(varchar(8), getdate(), 108),':','') + '.bak'

    BACKUP DATABASE MioDatabaseName TO DISK = @name WITH NOFORMAT, INIT, NAME = N'MioDatabaseName-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10, CHECKSUM

    declare @backupSetId as int
    select @backupSetId = position from msdb..backupset where database_name= @database_name and backup_set_id=(select max(backup_set_id) from msdb..backupset where database_name=@database_name )
    if @backupSetId is null begin raiserror(N'Verify failed. Backup information for database ''?'' not found.' , 16, 1) end
    RESTORE VERIFYONLY FROM DISK = @name WITH FILE = @backupSetId, NOUNLOAD, NOREWIND
    GO

    Ora schedula in operazioni pianificate l'avvio del tuo BackupDaily.Bat.

    A questo punto ogni volta che viene lanciato creerà una copia di backup.

    Ora non ti resta che creare un file, ad esempio EliminaStorico.Bat, contenente le istruzioni per eliminare i files più vecchi di tot giorni.

    Puoi usare l'istruzione ForFiles

    Spero che possa esserti stato d'aiuto.


    -- Sandro Bizioli http://blogs.dotnethell.it/sandro/

    venerdì 7 dicembre 2012 17:00
  • Se si tratta di una edizione Express potresti valutare anche l'utilizzo di ExpressMaint http://expressmaint.codeplex.com/ che permette di eseguire pianificazioni senza creare manualmente degli script. Se invece si tratta di una edizione completa puoi utilizzare direttamente i piani di manutenzione...
    domenica 9 dicembre 2012 17:57
    Moderatore

Tutte le risposte

  • Se accetti un consiglio, c'è un programma fantastico che si chiama SQL Backup & FTP, puoi schedulare fino a 2 database nella versione FREE, con zip automatico, mail di conferma dell'avvenuto backup, archiviazione su qualsiasi supporto.. e si autoschedula nelle operazioni pianificate di windows! (:

    E' gratuito e senza pubblicità, ti salva un filettino di configurazione che quando vuoi puoi aprire e modificare a piacimento.

    Veramente ottimo, un saluto!

    giovedì 6 dicembre 2012 10:50
  • Scusa la domanda, ma... Hai mai provato a fare un restore?

    Alberto Dallagiacoma
    My Italian Blog: http://blogs.ugidotnet.org/alby
    Twitter: http://twitter.com/albertodall
    DotDotNet - User Group .NET Emilia Romagna: http://www.dotdotnet.org

    giovedì 6 dicembre 2012 17:10
  • Rinnovo il consiglio di SQL Backup & FTP, ed in ogni caso (li ho visti dopo).. non copiarti solo gli mdf, fai un vero e proprio backup.. (:
    venerdì 7 dicembre 2012 09:31
  • Ciao,

    io utilizzo un sistema abbastanza efficace che mi permette di storicizzare i backup e tenerne d'occhio il numero di copie.

    Spero che possa fare al caso tuo; ovviamente dovrai "metterci" le mani per adattarlo meglio alle tue esigenze, ma diciamo che come falsa riga dovrebbe essere sufficiente.

    Prima di tutto crea un file .bat, per esempio BackupDaily.Bat (che andrai a schedulare come vuoi) contenente le seguente istruzione:

    SQLCMD -S .\SQLEXPRESS -E -i C:\BackupDaily.sql

    Ora crea il file BackupDaily.sql che abbiamo menzionato al passaggio precedente nel seguente modo:

    declare @name as nvarchar(255)
    declare @database_name as nvarchar(255)

    set @database_name=N'MioDatabaseName'
    set @name = N'C:\SQLBackup\MioDatabaseName_' + CONVERT(varchar(8), getdate(), 112) + '_' + replace(CONVERT(varchar(8), getdate(), 108),':','') + '.bak'

    BACKUP DATABASE MioDatabaseName TO DISK = @name WITH NOFORMAT, INIT, NAME = N'MioDatabaseName-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10, CHECKSUM

    declare @backupSetId as int
    select @backupSetId = position from msdb..backupset where database_name= @database_name and backup_set_id=(select max(backup_set_id) from msdb..backupset where database_name=@database_name )
    if @backupSetId is null begin raiserror(N'Verify failed. Backup information for database ''?'' not found.' , 16, 1) end
    RESTORE VERIFYONLY FROM DISK = @name WITH FILE = @backupSetId, NOUNLOAD, NOREWIND
    GO

    Ora schedula in operazioni pianificate l'avvio del tuo BackupDaily.Bat.

    A questo punto ogni volta che viene lanciato creerà una copia di backup.

    Ora non ti resta che creare un file, ad esempio EliminaStorico.Bat, contenente le istruzioni per eliminare i files più vecchi di tot giorni.

    Puoi usare l'istruzione ForFiles

    Spero che possa esserti stato d'aiuto.


    -- Sandro Bizioli http://blogs.dotnethell.it/sandro/

    venerdì 7 dicembre 2012 17:00
  • Se si tratta di una edizione Express potresti valutare anche l'utilizzo di ExpressMaint http://expressmaint.codeplex.com/ che permette di eseguire pianificazioni senza creare manualmente degli script. Se invece si tratta di una edizione completa puoi utilizzare direttamente i piani di manutenzione...
    domenica 9 dicembre 2012 17:57
    Moderatore