SQL Server 2008 Express - La migliore soluzione di backup?


20

Quali soluzioni di backup consiglieresti di utilizzare SQL Server 2008 Express ? Sono abbastanza nuovo su SQL Server, ma poiché provengo da un background MySQL ho pensato di impostare la replica su un altro computer e di eseguire i backup Xcopy di quel server.

Ma purtroppo la replica non è disponibile in Express Edition.

Il sito è fortemente accessibile, quindi non ci devono essere ritardi e tempi di inattività. Sto anche pensando di fare un backup due volte al giorno o qualcosa del genere.

Cosa raccomanderesti? Ho più computer che posso usare, ma non so se questo mi aiuta dal momento che sto usando la versione Express.


Qualcuno sa se ci sono problemi con il solo utilizzo di Windows Server Backup per fare questo?
James,

Risposte:


30

SQL Server Express 2008 supporta i backup del database. Manca SQL Agent, che consente di pianificare i backup e la procedura guidata del piano di manutenzione per la creazione di attività di backup.

È possibile eseguire il backup dei database in due modi diversi:

  1. Utilizzare Microsoft SQL Server Management Studio Express che ha l'opzione di backup nel menu di scelta rapida per ciascun database in "attività".
  2. Utilizzare T-SQL per scrivere manualmente lo script di backup. Leggi la documentazione MSDN per il comando BACKUP T-SQL .
    Sintassi qualcosa di simile:BACKUP DATABASE MyDatabase TO DISK='C:\MyDatabase.bak';

Se si desidera pianificare i processi di backup, è necessario scrivere uno script T-SQL e quindi utilizzare la Pianificazione attività di Windows per chiamare SQLCmd per eseguire lo script su ciò che ogni programma è interessato:

 sqlcmd -s server_name\sqlexpress -i C:\SqlJobs\backup.sql -o C:\Logs\output.txt

1
La sintassi di BACKUP è simile al seguente: DATABASE DI BACKUP MyDatabase TO DISK = 'C: \ MyDatabase.bak';
Martin Marconcini,

Grazie per questa informazione ragazzi, ho intenzione di provarlo.
alex

quando si utilizza lo script T-sql, assicurarsi che i nomi dei db non contengano spazi.
redknight

+1 Ancora un po 'di informazioni: non dimenticare di menzionare il nome dell'istanza tramite il -S ".\SomeInstance"se ricevi errori di accesso da sqlcmd.
Tomalak,

Sarebbe utile, per il resto di noi, giungere a questa domanda cercando la stessa risposta, se includessi l'SQL che usi per eseguire un backup.
Ian Boyd,

6

Uso SQLBackupAndFTP - prodotto fantastico e semplice.


sqlbackupandftp è il migliore .. se vuoi tornare indietro + comprimere + eliminazione automatica (dopo giorni specifici)
suraj jain

Sì, lo uso anche io. Funziona bene.
Alan B,

5

Sono stato scritto script di backup per uso personale, installa come indicato in post da splattne :

----- Version: 2.0 - 2009-12-12 - SQL 2000 Compatible
----- Pham Kim Ngan (jbngan@gmail.com)
----- Usage:
-- Copy 7za.exe (http://www.7-zip.org/download.html - Command Line Version) to @CFG_BACKUP_PATH
-- Modify @CFG_BACKUP_PATH = <Backup Store Path> - no long filename/directory please
-- Modify @CFG_DAYS_DELETE = Days to keep backups
-- Enable 'xp_cmdshell' (SQL 2005/EXPRESS or higher)

----- Configuration Variables
DECLARE @CFG_BACKUP_PATH NVARCHAR(256)
DECLARE @CFG_DAYS_DELETE INT

SET @CFG_BACKUP_PATH = 'C:\DatabaseBackup'
SET @CFG_DAYS_DELETE = 30

DECLARE @Today DATETIME
DECLARE @TodayName CHAR(8)
SET @Today = GETDATE()
SET @TodayName = CONVERT(CHAR(8), @Today, 112)

DECLARE @id INT
DECLARE @name VARCHAR(50)
DECLARE @path VARCHAR(256)
DECLARE @cmd VARCHAR(256)

----- Create Temporarity Directory
DECLARE @TempDir VARCHAR(256)
SET @TempDir = @CFG_BACKUP_PATH + '\' + CONVERT(VARCHAR(256), NEWID())
SET @cmd = 'md ' + @TempDir
EXEC xp_cmdshell @cmd, no_output

----- List of current databases, only 'ONLINE' databases to be backup
DECLARE @dbList TABLE
    (
      dbno INT IDENTITY,
      dbname NVARCHAR(256)
    )

INSERT  INTO @dbList ( dbname )
        SELECT  name
        FROM    master.dbo.sysdatabases
        WHERE   ( name NOT IN ( 'tempdb' ) )
                AND DATABASEPROPERTYEX(name, 'Status') = 'ONLINE'


------ Starting backup, one by one
SELECT  @id = dbno,
        @name = dbname
FROM    @dbList
WHERE   dbno = 1
WHILE @@ROWCOUNT = 1
    BEGIN
        PRINT N'++ Backup: ' + @name
        SET @path = @TempDir + '\' + @name + '.bak'

        BACKUP DATABASE @name TO DISK = @path

        SELECT  @id = dbno,
                @name = dbname
        FROM    @dbList
        WHERE   dbno = @id + 1
    END

PRINT N'++ Compressing: ' + @TempDir

----- Delete output file if existed
SET @cmd = 'del /f /q ' + @CFG_BACKUP_PATH + '\' + @TodayName + '.ZIP'
EXEC xp_cmdshell @cmd, no_output

DECLARE @Count INT
DECLARE @StartTime DATETIME
SET @StartTime = GETDATE()
----- Compress, -mx1 = Set Compression Ratio to 1 (very low)
SET @cmd = @CFG_BACKUP_PATH + '\7za.exe a -bd -y -tzip -mx1 '
SET @cmd = @cmd + @CFG_BACKUP_PATH + '\' + @TodayName + '.ZIP ' + @TempDir + '\*.bak"'
EXEC xp_cmdshell @cmd, no_output

SET @Count = DATEDIFF(second, @StartTime, GETDATE())
PRINT N'++ Compression Time: ' + CONVERT(VARCHAR, @Count) + ' seconds'
SET @Count = DATEDIFF(second, @Today, GETDATE())
PRINT N'++ Total Execution Time: ' + CONVERT(VARCHAR, @Count) + ' seconds'

---- Delete temporarity directory
SET @cmd = 'rd /s /q ' + @TempDir
EXEC xp_cmdshell @cmd, no_output

---- Delete previous backup versions
DECLARE @OlderDateName CHAR(8)
SET @OlderDateName = CONVERT(CHAR(8), @Today - @CFG_DAYS_DELETE, 112)

----- List all .ZIP files
CREATE TABLE #delList
    (
      subdirectory VARCHAR(256),
      depth INT,
      [file] BIT
    )
INSERT  INTO #delList
        EXEC xp_dirtree @CFG_BACKUP_PATH, 1, 1
DELETE  #delList
WHERE   RIGHT(subdirectory, 4) <> '.ZIP'

SELECT  @Count = COUNT(1)
FROM    #delList
PRINT N'++ Number of Backups: ' + CONVERT(NVARCHAR, @Count)

SELECT TOP 1
        @name = subdirectory
FROM    #delList
WHERE   LEN(subdirectory) = 12
        AND RIGHT(subdirectory, 4) = '.ZIP'
        AND REPLACE(subdirectory, '.ZIP', '') < @OlderDateName

WHILE ( @@ROWCOUNT = 1 ) 
    BEGIN
        PRINT N'++ Delete Older Backup: ' + @name
        SET @cmd = 'del /f /q ' + @CFG_BACKUP_PATH + '\' + @name
        EXEC xp_cmdshell @cmd, no_output

        DELETE  #delList
        WHERE   subdirectory = @name

        SELECT TOP 1
                @name = subdirectory
        FROM    #delList
        WHERE   LEN(subdirectory) = 12
                AND RIGHT(subdirectory, 4) = '.ZIP'
                AND REPLACE(subdirectory, '.ZIP', '') < @OlderDateName
    END

DROP TABLE #delList

PRINT N'++ Done.'
PRINT ''
PRINT ''
PRINT ''

2

Uso ExpressMaint e funziona perfettamente come attività pianificata. Basta passare i parametri appropriati per il tipo di lavoro che stai facendo.

Il codice sorgente è anche là fuori. L'abbiamo leggermente modificata per aggiungere una voce nel registro eventi dell'applicazione non riuscita.


1

Sulla base del post di UndertheFold ho cercato su Google e ho trovato i dettagli di ExpressMaint. Non l'avevo mai visto prima, quindi sono molto contento di averlo trovato.

Cordiali saluti, la pagina web è http://expressmaint.codeplex.com/

Ho quindi usato uno degli esempi che ho trovato per creare questo file batch che ho programmato di eseguire durante la notte ogni giorno.

c:\expressmaint\expressmaint -S (local)\SQLExpress -D ALL_USER -T DB -R E:\backups\sqlexpress\backupreports -RU WEEKS -RV 1 -B E:\backups\sqlexpress -BU DAYS -BV 4 -V -C

Questo richiede un backup, mantiene ogni backup ( -BU) per quattro giorni, in modo da ottenere una cronologia in caso di corruzione. I registri ( -RU) vengono conservati per una settimana.

Lo uso solo da alcune settimane, ma ne sono rimasto molto soddisfatto, in quanto è un approccio a mani libere. A livello locale inserisco i backup su un secondo disco, quindi utilizzo JungleDisk per eseguire un backup fuori sede nell'archivio cloud Amazon EC2 .


Il problema con expressmaint è che non supporta SQL Server 2008 R2. Funzionerà con il 2008 e funzionerà se installi il 2008 e poi esegui l'aggiornamento a 2008 R2, ma non troverà i database su una nuova installazione di 2008 R2. È un bug noto con una patch inviata ma l'eseguibile non è stato aggiornato con la patch.
James,

1

Puoi usare DBSave . È un ottimo strumento freeware per il backup e il ripristino di MS SQL Server. È molto semplice da installare e da utilizzare.


0

Sto usando un lavoro dello scheduler di Windows per eseguire il backup del database espresso di SQL Server ogni poche ore utilizzando un file batch. Sembra funzionare bene.


Dovresti anche menzionare come un file batch esegue il backup di un database.
Ian Boyd,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.