none
BACKUP SQL EXPRESS 2014 RRS feed

  • Domanda

  • buongiorno,

    il mio obiettivo è fare un backup giornaliero di un database sul mio server SQL Express ed uso questo script:

    USE MYDB;  
    GO
    
    DECLARE @name VARCHAR(50) -- database name 
    DECLARE @path VARCHAR(256) -- path for backup files  
    DECLARE @fileDate VARCHAR(20) -- used for file name
    DECLARE @fileName VARCHAR(256) -- filename for backup  
    
    -- specify database name
    SET @name = 'MYDB' 
    
    -- specify database backup directory
    SET @path = 'D:\SWSETUP\BACKUP\'  
     
    -- specify filename format
    SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112)
    
    SET @fileName = @path + @name + '_' + @fileDate + '.BAK'
    
    BACKUP DATABASE @name TO DISK = @fileName WITH INIT, NAME = '@name’, DESC = ’Backup @name', SKIP, CHECKSUM;
    
    GO

    E' corretto ? Sto creando un database completo ogni giorno ?

    Per eseguirlo nel task skeduler del server uso un .BAT così:

    SQLCMD -U sa -P mypassword -S SASSG25001\SQLEXPRESS -i BACKUP.sql


    • Modificato stefanomi74 lunedì 18 febbraio 2019 11:29
    lunedì 18 febbraio 2019 11:23

Risposte

  • Il Recovery Model lo puoi verificare sulle proprietà del tuo database,

    Vai su Sql Management Studio, Selezioni il database, tasto destro Properties (Proprietà) sul menu contestuale e nella finestra che appare

    sulla sinistra seleziona Options(Opzioni)

    Sulla Destra della finestra appaiono le opzioni del database una delle quali è il Recovery Mode

    (non so come tradotto se è in italiano).

     Se il Recovery Model è SIMPLE il tuo Backup è OK

    Se il recovery Model è FULL invece devi fare una operazione più complessa, infatti, per evitare che il Log delle Transazioni ( TuoDatabase.ldf nella cartella dove si trova il DB) cresca all'infinito, quando fai il Backup Full del tuo database devi fare anche il Backup del Log delle transazioni, in modo che questo venga troncato di tutte le transazioni che sono già state inserite sul DB e sono andate a buon fine.

    Il Recovery model SIMPLE Memorizza tutte le transazioni appena possibile ed automaticamente tronca il Log.

    Il Recovery model FULL Memorizza sempre tutte le transazioni appena possibile ma mantiene il log delle transazioni fino alle successive operazioni di Backup Full e Backup del Log con Truncate.

    La scelta del recovery model ovviamente dipende dal tipo di uso che fai del database, da quante transazioni vengono fatte su di esso, e da altri fattori ambientali.

    Saluti


    Sabrina C. - http://www.dotnetwork.it

    martedì 19 febbraio 2019 10:21
  • Ciao Stefano,

    lo script che usi mi sembra corretto per i database in Simple Recovery Model.

    Specificando l'opzione INIT si avrà questo comportamento: L'opzione INIT specifica che tutti i set di backup devono essere sovrascritti, mantenendo però l'intestazione supporto. Se si specifica INIT, vengono sovrascritti tutti i set di backup presenti nel dispositivo, se le condizioni lo consentono [https://docs.microsoft.com/it-it/sql/t-sql/statements/backup-transact-sql?view=sql-server-2017].

    Il migior test, però, rimane sempre il Restore completo (anche su altro server, se possibile) di uno dei backup che hai fatto :)

    Ciao


    Sergio Govoni

    Microsoft Data Platform MVP | MVP Profile | English Blog | Twitter | LinkedIn

    martedì 19 febbraio 2019 06:01
    Moderatore

Tutte le risposte

  • Ciao Stefano,

    lo script che usi mi sembra corretto per i database in Simple Recovery Model.

    Specificando l'opzione INIT si avrà questo comportamento: L'opzione INIT specifica che tutti i set di backup devono essere sovrascritti, mantenendo però l'intestazione supporto. Se si specifica INIT, vengono sovrascritti tutti i set di backup presenti nel dispositivo, se le condizioni lo consentono [https://docs.microsoft.com/it-it/sql/t-sql/statements/backup-transact-sql?view=sql-server-2017].

    Il migior test, però, rimane sempre il Restore completo (anche su altro server, se possibile) di uno dei backup che hai fatto :)

    Ciao


    Sergio Govoni

    Microsoft Data Platform MVP | MVP Profile | English Blog | Twitter | LinkedIn

    martedì 19 febbraio 2019 06:01
    Moderatore
  • Ciao,

    cosa significa "corretto per i database in Simple Recovery Model" ?

    Io ho provato a ripristinare, sembra funzionare. Ma siccome ho tante tabelle e dati come faccio a essere sicuro che il restore è completo ?

    Siccome voglio avere un file completo al giorno, INIT è corretto allora ?

    martedì 19 febbraio 2019 08:57
  • Il Recovery Model lo puoi verificare sulle proprietà del tuo database,

    Vai su Sql Management Studio, Selezioni il database, tasto destro Properties (Proprietà) sul menu contestuale e nella finestra che appare

    sulla sinistra seleziona Options(Opzioni)

    Sulla Destra della finestra appaiono le opzioni del database una delle quali è il Recovery Mode

    (non so come tradotto se è in italiano).

     Se il Recovery Model è SIMPLE il tuo Backup è OK

    Se il recovery Model è FULL invece devi fare una operazione più complessa, infatti, per evitare che il Log delle Transazioni ( TuoDatabase.ldf nella cartella dove si trova il DB) cresca all'infinito, quando fai il Backup Full del tuo database devi fare anche il Backup del Log delle transazioni, in modo che questo venga troncato di tutte le transazioni che sono già state inserite sul DB e sono andate a buon fine.

    Il Recovery model SIMPLE Memorizza tutte le transazioni appena possibile ed automaticamente tronca il Log.

    Il Recovery model FULL Memorizza sempre tutte le transazioni appena possibile ma mantiene il log delle transazioni fino alle successive operazioni di Backup Full e Backup del Log con Truncate.

    La scelta del recovery model ovviamente dipende dal tipo di uso che fai del database, da quante transazioni vengono fatte su di esso, e da altri fattori ambientali.

    Saluti


    Sabrina C. - http://www.dotnetwork.it

    martedì 19 febbraio 2019 10:21
  • come recovery model ho FULL.

    Cosa devo fare in più di:

    BACKUP DATABASE @name TO DISK = @fileName

    WITH INIT, NAME = 'MYNAME’, SKIP, CHECKSUM;

    Così come sto facendo non faccio un restore affidabile qualora si renda necessario ?
    • Modificato stefanomi74 martedì 19 febbraio 2019 10:34
    martedì 19 febbraio 2019 10:33
  • Qualcosa di simile a questo:

    BACKUP LOG [NomeTuoDatabase] TO  DISK = 
    	N'TuaCartella\Tuofile.bak'
    	WITH NOFORMAT, NOINIT,  NAME = N'TuoDatabase Log Backup'
    	, SKIP, NOREWIND, NOUNLOAD,  STATS = 10
    Che va eseguito dopo il backup full del database, credo tu possa mettere tutto in un File ma metti un GO dopo la prima parte.


    Sabrina C. - http://www.dotnetwork.it

    martedì 19 febbraio 2019 12:29
  • P.s.

    NOFORMAT, NOINIT puoi modificarle in base alle esigenze, se vuoi sovrascrivere il backup usa INIT


    Sabrina C. - http://www.dotnetwork.it

    martedì 19 febbraio 2019 12:30
  • Qualcosa di simile a questo:

    BACKUP LOG [NomeTuoDatabase] TO  DISK = 
    	N'TuaCartella\Tuofile.bak'
    	WITH NOFORMAT, NOINIT,  NAME = N'TuoDatabase Log Backup'
    	, SKIP, NOREWIND, NOUNLOAD,  STATS = 10
    Che va eseguito dopo il backup full del database, credo tu possa mettere tutto in un File ma metti un GO dopo la prima parte.


    Sabrina C. - http://www.dotnetwork.it


    Se non faccio questo il backup non è ripristinabile ? Io ho comunque provato il ripristino e sembrano esserci i dati.
    martedì 19 febbraio 2019 13:21
  • Il restore è fattibile, ma in full recovery mode il log continuerà a crescere perennemente e dopo un anno di funzionamento diverrà di Gigabyte.

    Se vuoi solo semplificarti la vita metti il recovery mode a SIMPLE

    saluti


    Sabrina C. - http://www.dotnetwork.it

    giovedì 21 febbraio 2019 12:59