SQL Server 2008 Express: ¿la "mejor" solución de respaldo?


20

¿Qué soluciones de respaldo recomendaría al usar SQL Server 2008 Express ? Soy bastante nuevo en SQL Server, pero como vengo de un entorno MySQL , pensé en configurar la replicación en otra computadora y simplemente tomar copias de seguridad de Xcopy de ese servidor.

Pero desafortunadamente la replicación no está disponible en la Edición Express.

Se accede mucho al sitio, por lo que no debe haber demoras ni tiempo de inactividad. También estoy pensando en hacer una copia de seguridad dos veces al día o algo así.

¿Qué recomendarías? Tengo varias computadoras que puedo usar, pero no sé si eso me ayuda, ya que estoy usando la versión Express.


¿Alguien sabe si hay problemas con solo usar Windows Server Backup para hacer esto?
James

Respuestas:


30

SQL Server Express 2008 admite copias de seguridad de bases de datos. Falta el Agente SQL, que permite programar copias de seguridad y el asistente del plan de mantenimiento para crear tareas de copia de seguridad.

Puede hacer una copia de seguridad de las bases de datos de dos maneras diferentes:

  1. Utilice Microsoft SQL Server Management Studio Express, que tiene la opción Copia de seguridad en el menú del botón derecho para cada base de datos en "tareas".
  2. Use T-SQL para escribir manualmente su script de respaldo. Lea la documentación de MSDN para el comando T-SQL BACKUP .
    Sintaxis algo como:BACKUP DATABASE MyDatabase TO DISK='C:\MyDatabase.bak';

Si desea programar sus trabajos de copia de seguridad, debe escribir un script T-SQL y luego usar el Programa de tareas de Windows para llamar a SQLCmd para ejecutar el script en cada programación que le interese:

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

1
La sintaxis de BACKUP se ve así: BASE DE DATOS DE BACKUP MyDatabase TO DISK = 'C: \ MyDatabase.bak';
Martin Marconcini

Gracias por esta información, chicos, voy a probar esto.
alexn 05 de

cuando use el script T-sql, asegúrese de que sus nombres db no contengan espacios.
Redknight

+1 Un poco más de información: no olvide mencionar el nombre de la instancia a través de -S ".\SomeInstance"si obtiene errores de inicio de sesión de sqlcmd.
Tomalak

Sería útil, para el resto de nosotros llegar a esta pregunta en busca de la misma respuesta, si incluye el SQL que utiliza para ejecutar una copia de seguridad.
Ian Boyd el

6

Yo uso SQLBackupAndFTP - producto fantástico y simple.


sqlbackupandftp es lo mejor ... si quieres volver + comprimir + eliminar automáticamente (después de días específicos)
suraj jain

Sí, yo también uso esto. Funciona bien.
Alan B

5

Me escribieron un script de respaldo para usarlo yo mismo, instalar como lo mencioné en la publicación de 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

Yo uso ExpressMaint , y funciona muy bien como una tarea programada. Simplemente pase los parámetros apropiados para el tipo de trabajo que está haciendo.

El código fuente también está disponible. Lo cambiamos ligeramente para agregar una entrada en el registro de eventos de la aplicación en caso de falla.


1

Basado en la publicación de UndertheFold, busqué en Google y encontré los detalles de ExpressMaint. No había visto esto antes, así que estoy muy contento de haberlo encontrado.

FYI, la página web es, http://expressmaint.codeplex.com/

Luego utilicé uno de los ejemplos que encontré para crear este archivo por lotes que he programado ejecutar durante la noche todos los días.

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

Esto toma una copia de seguridad, mantiene cada copia de seguridad ( -BU) durante cuatro días, por lo que obtiene un historial si hay corrupción. Los registros ( -RU) se guardan durante una semana.

Solo lo he estado usando durante algunas semanas, pero estoy muy contento con él, ya que es un enfoque de no intervención. Localmente puse las copias de seguridad en un segundo disco, luego uso JungleDisk para hacer una copia de seguridad externa al almacenamiento en la nube de Amazon EC2 .


El problema con expressmaint es que no es compatible con SQL Server 2008 R2. Funcionará con 2008 y funcionará si instala 2008 y luego actualiza a 2008 R2, pero no encontrará las bases de datos en una nueva instalación de 2008 R2. Es un error conocido con un parche enviado pero el ejecutable no se ha actualizado con el parche.
James

1

Puedes usar DBSave . Es una gran herramienta gratuita para hacer copias de seguridad y restaurar MS SQL Server. Es muy simple de configurar y usar.


0

Estoy usando un trabajo de planificador de Windows para hacer una copia de seguridad de la base de datos rápida de SQL Server cada pocas horas mediante un archivo por lotes. Parece funcionar bien.


También debe mencionar cómo un archivo por lotes realiza una copia de seguridad de una base de datos.
Ian Boyd el

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.