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.