20 votos

SQL Server 2008 Express - "Mejor" solución de copia de seguridad?

¿Qué soluciones de copia de seguridad te recomiendo, cuando se utiliza SQL Server 2008 Express? Soy bastante nuevo en SQL Server, pero como vengo de un MySQL fondo pensé en la configuración de la replicación en otro equipo y acaba de tomar Xcopy copias de seguridad del servidor.

Pero por desgracia, la replicación no está disponible en la Edición Express.

El sitio es muy visitada, así tiene que ser sin retrasos y el tiempo de inactividad. También estoy pensando en hacer una copia de seguridad dos veces al día o algo así.

¿Qué recomendaría usted? Tengo varios equipos que pueden utilizar, pero no sé si eso me ayuda ya que estoy usando la versión Express.

30voto

Bob Puntos34449

SQL Server Express 2008 es compatible con la base de datos de copias de seguridad. Falta de Agente de SQL, que permite programar las copias de seguridad, y el plan de mantenimiento asistente para la creación de tareas de copia de seguridad.

Usted puede copias de seguridad de bases de datos de dos maneras diferentes:

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

Si desea programar sus trabajos de copia de seguridad, tienes que escribir un script de T-SQL y, a continuación, utilizar la Programación de Tareas de Windows para llamar SQLCmd para ejecutar la secuencia de comandos en lo que cada programa que usted está interesado en:

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

5voto

Aleksandar Puntos721

Yo estaba escribió script de copia de seguridad para el mismo uso, instalar como metioned en el 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 ''

2voto

CPU_BUSY Puntos1978

Yo uso ExpressMaint, y funciona muy bien como una tarea programada. Acaba de pasar los parámetros adecuados para el tipo de trabajo que usted está haciendo.

El código fuente está ahí fuera. Hemos cambiado un poco para agregar una entrada en el registro de sucesos de aplicación en caso de error.

1voto

Guppy Puntos93

Basado en UndertheFold del post me hizo buscar un poco en google y encontrar los detalles de ExpressMaint. Yo no había visto esto antes, así que estoy muy contento de haber encontrado.

Para su INFORMACIÓN, la página web es, http://expressmaint.codeplex.com/

A continuación, he usado uno de los ejemplos que he encontrado para crear este archivo de proceso por lotes que he programado para que se ejecute 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 lleva a una copia de seguridad, hace que cada copia de seguridad (-BU) durante cuatro días, por lo que obtener una historia si no hay corrupción. Los registros (-RU) se mantienen durante una semana.

Sólo he estado usando durante un par de semanas, pero he estado muy contento con él, ya que es un enfoque de no intervención. Localmente pongo las copias de seguridad en un segundo disco, me, a continuación, utilizar JungleDisk para hacer una copia de seguridad remota a la de Amazon EC2 de almacenamiento en la nube.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by:

;