SQL Server 2008 Express - “Melhor” solução de backup?


20

Quais soluções de backup você recomendaria ao usar o SQL Server 2008 Express ? Eu sou muito novo no SQL Server, mas como sou do MySQL , pensei em configurar a replicação em outro computador e apenas fazer backups do Xcopy desse servidor.

Infelizmente, porém, a replicação não está disponível na Express Edition.

O site é muito acessado, portanto, não deve haver atrasos nem tempo de inatividade. Também estou pensando em fazer um backup duas vezes por dia ou algo assim.

O que você recomendaria? Eu tenho vários computadores que posso usar, mas não sei se isso me ajuda, pois estou usando a versão Express.


Alguém sabe se há problemas ao usar o Backup do Windows Server para fazer isso?
— James

Respostas:


30

O SQL Server Express 2008 suporta backups de banco de dados. Falta o SQL Agent, que permite agendar backups, e o assistente de plano de manutenção para criar tarefas de backup.

Você pode fazer backup de bancos de dados de duas maneiras diferentes:

  1. Use o Microsoft SQL Server Management Studio Express, que tem a opção Backup no menu do botão direito do mouse para cada banco de dados em "tarefas".
  2. Use T-SQL para escrever manualmente seu script de backup. Leia a documentação do MSDN para o comando T-SQL BACKUP .
    Sintaxe algo como:BACKUP DATABASE MyDatabase TO DISK='C:\MyDatabase.bak';

Se você deseja agendar suas tarefas de backup, é necessário escrever um script T-SQL e, em seguida, usar a Agenda de Tarefas do Windows para chamar SQLCmd para executar o script em todas as agendas de seu interesse:

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

11
A sintaxe BACKUP é mais ou menos assim: BACKUP DATABASE MyDatabase TO DISK = 'C: \ MyDatabase.bak';
— 5990 Martin Marconcini

Obrigado por esta informação pessoal, vou tentar isso.
— 5119 alexn

ao usar o script T-sql, verifique se os nomes de banco de dados não contêm espaços.
— redknight

+1 Mais uma informação: Não se esqueça de mencionar o nome da instância via -S ".\SomeInstance"se você receber erros de login no sqlcmd.
— 28610 Tomalak

Seria útil que todos nós chegássemos a essa pergunta procurando a mesma resposta, se você incluísse o SQL usado para executar um backup.
— Ian Boyd

6

Eu uso SQLBackupAndFTP - produto fantástico e simples.


sqlbackupandftp é melhor .. se vc quiser voltar + compressa + auto delete (depois de dias especificados)
— suraj jain

Sim, eu também uso isso. Funciona bem.
— 27713 Alan B #

5

Fui escrito um script de backup para uso próprio, instale conforme mencionado no post por 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

Eu uso o ExpressMaint e funciona muito bem como uma tarefa agendada. Basta passar os parâmetros apropriados para o tipo de trabalho que você está realizando.

O código fonte também está lá fora. Alteramos um pouco para adicionar uma entrada no log de eventos do aplicativo com falha.


1

Com base no post de UndertheFold, pesquisei no Google e encontrei os detalhes do ExpressMaint. Eu nunca tinha visto isso antes, então estou muito satisfeito por ter encontrado.

Para sua informação, a página da web é http://expressmaint.codeplex.com/

Em seguida, usei um dos exemplos que encontrei para criar esse arquivo em lotes que planejei executar durante a noite todos os dias.

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

Isso requer um backup, mantém cada backup ( -BU) por quatro dias, para que você obtenha um histórico se houver corrupção. Os logs ( -RU) são mantidos por uma semana.

Eu o uso há apenas algumas semanas, mas estou muito feliz com isso, pois é uma abordagem prática. Localmente, coloco os backups em um segundo disco e depois uso o JungleDisk para fazer um backup externo no armazenamento em nuvem do Amazon EC2 .


O problema com o expressmaint é que ele não suporta o SQL Server 2008 R2. Ele funcionará com 2008 e funcionará se você instalar 2008 e depois atualizar para o 2008 R2, mas não encontrará os bancos de dados em uma nova instalação do 2008 R2. É um bug conhecido com um patch enviado, mas o executável não foi atualizado com o patch.
— James

1

Você pode usar o DBSave . É uma ótima ferramenta freeware para fazer backup e restaurar o MS SQL Server. É muito simples de configurar e usar.


0

Estou usando um trabalho do agendador do Windows para fazer backup do banco de dados expresso do SQL Server a cada poucas horas, usando um arquivo em lotes. Parece funcionar bem.


Você também deve mencionar como um arquivo em lotes faz backup de um banco de dados.
— Ian Boyd

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.