¿Puedo tener copias de seguridad completas en varios discos?


8

Actualmente, solo tengo un archivo de respaldo, IMTDB.bak, y está en el mismo HDD que la base de datos. Quiero aumentar la redundancia de esta copia de seguridad de la base de datos esencialmente "copiándola" en otro disco, pero aparece el error "La copia de seguridad falló para el servidor. El medio está formateado para admitir 2 familias de medios". Creo que esto significa que cuando creé la copia de seguridad, solo está destinada a colocar la copia de seguridad en una unidad, y no puedo agregar más retroactivamente. Quiero migrar la copia de seguridad a esta otra unidad (realmente solo copiarla), pero no quiero tener que eliminar la copia de seguridad actual para hacerlo.

¿Qué debo hacer? ¿Estoy seguro de simplemente copiar IMTDB.bak a una carpeta en la otra unidad?


Por supuesto. Usar el explorador para copiar el archivo de una ubicación a otra no es un problema en absoluto. Es posible que desee ver la automatización del proceso, tal vez con el Programador de Windows.
Max Vernon

Dónde / cómo ve este error: "Error en la copia de seguridad del servidor, los medios están formateados para admitir 2 familias de medios"
Max Vernon

Cuando vaya a Tareas -> Hacer copia de seguridad e intente hacer "Agregar" y seleccione el disco que tengo.
ijustlovemath

Agregar otro disco allí simplemente extenderá la copia de seguridad en varios discos, reduciendo aún más la confiabilidad del archivo de copia de seguridad, ya que si alguno de los dos discos falla, el archivo de copia de seguridad quedará inutilizable. Haga lo que @Kin sugiere en su respuesta y use el BACKUP DATABASEcomando T-SQL para hacer una copia de seguridad en dos ubicaciones simultáneamente.
Max Vernon

Respuestas:


12

Como no está familiarizado con el BACKUP DATABASEcomando T-SQL , pensé en agregar algunos detalles al respecto.

Probablemente desee ejecutar algo similar a la siguiente declaración a través del servicio del Programador de tareas de Windows, ya que no tiene acceso al Agente SQL Server (veo en sus otras preguntas, usa SQL Server Express).

BACKUP DATABASE [xyz]
TO DISK = 'C:\somepath\mybackupfile.bak'
MIRROR TO DISK = 'D:\somepath\myotherbackupfile.bak'
WITH FORMAT
    , INIT
    , SKIP
    , STATS = 1;

Es posible que desee considerar encarecidamente que la MIRROR TOcláusula apunte a alguna ubicación que no esté en su máquina local, ya que si pierde su máquina local por completo, es posible que no pueda acceder a ninguno de los archivos de copia de seguridad. La especificación de una MIRROR TOcláusula requiere que especifique la FORMATpalabra clave en la WITHcláusula la primera vez que ejecuta esa declaración de respaldo.

Puede usar el nombre de un recurso compartido de Windows, \\SomeServer\SQLBackups\MyBackupFile.baksiempre y cuando los permisos de seguridad en el recurso compartido permitan el acceso al servicio del Programador de Windows.

La WITH FORMAT, INITparte le dice a SQL Server que sobrescriba cualquier copia de seguridad existente que pueda estar en los archivos de copia de seguridad. Puede cambiar esto a WITH NOINITuna vez que haya completado la primera copia de seguridad reflejada si desea que se guarden varias copias de seguridad (es decir, copias de seguridad de diferentes momentos) en esos archivos. NOSKIPle dice a SQL Server que no verifique la caducidad de la copia de seguridad, entre otras cosas. STATS = 1mostrará la salida en 1incrementos porcentuales. Puedes cambiar este número a lo que quieras. Utilizo 1para bases de datos muy grandes, ya que da alguna indicación de progreso.

Para que esto se ejecute a través del servicio del Programador de tareas de Windows, deberá guardar ese comando (una vez que lo haya probado en SQL Server Management Studio) en un archivo en su disco; Digamos que es C:\somefolder\BackupMyDB.sql. Luego querrá agregar el siguiente comando al Programador de Windows:

<path to sqlcmd>sqlcmd -S localhost -E -i C:\somefolder\BackupMyDB.sql

Querrás que esa tarea "se ejecute como" tú.

Una vez que hayas hecho todo eso, debes considerar seriamente intentar restaurar la copia de seguridad en otra máquina para que entiendas cómo hacerlo. Tener copias de seguridad es solo una parte de un plan de recuperación ante desastres; la parte posiblemente más importante es probar ese plan.

El proceso de restauración usaría un comando similar a:

RESTORE DATABASE [xyz]
FROM DISK = 'D:\somepath\myotherbackupfile.bak'
WITH RECOVERY
    , STATS = 1;

Tenga RESTORE DATABASEen cuenta que si se ejecuta en la máquina donde reside su base de datos actual, puede sobrescribir la base de datos actual sin confirmación ni advertencia, así que asegúrese de evaluar cuidadosamente el nombre de la base de datos, [xyz]en mi ejemplo, y las otras opciones que utiliza. (En realidad, esto no sobrescribirá la base de datos existente a menos que agregue la REPLACEpalabra clave a la WITHcláusula; solo quiero enfatizar que sea cuidadoso).


¡Gracias! Dado que mi archivo .bak ya tiene algunas copias de seguridad, ¿el espejo creado automáticamente incluirá esas copias de seguridad? ¿O solo el más reciente?
ijustlovemath

Sugeriría mover ese archivo a algún lugar si desea conservarlo, ya que MIRRORrequiere que formatee el archivo de copia de seguridad la primera vez que lo use, lo que eliminará las copias de seguridad que estén en ese archivo.
Max Vernon

1
Gracias de nuevo por los detalles en tu publicación. ¡Realmente útil para un novato sin ningún otro recurso!
ijustlovemath

el gusto es mio. No puedo enfatizar lo suficiente la importancia de una estrategia de respaldo y restauración probada y confiable . Le recomendé probar la restauración en otra máquina para que no tenga la posibilidad de bloquear su base de datos existente, lo cual es fácil de hacer cuando está aprendiendo.
Max Vernon

5

Puede usar backup database .... MIRROR TO DISK =para hacer una copia de seguridad de la base de datos en una ubicación adicional.

¿Estoy seguro de simplemente copiar IMTDB.bak a una carpeta en la otra unidad?

Sí, puede hacerlo una vez que finalice la copia de seguridad.

Nota: Asegúrese de estar utilizando T-SQL en lugar de la GUI que tiene opciones de copia de seguridad limitadas expuestas.


¿Cuáles son las opciones recomendadas aquí? Mi DB es muy simple, solo cuatro tablas, tres de las cuales solo tienen 90,000 filas, la cuarta con ~ 75M. También es un tamaño fijo; no se le agregarán más datos. Solo ejecutaré consultas en su contra.
ijustlovemath

55
Te sugiero que pongas tu db en read_onlymodo y solo tomes una última copia de seguridad con COMPRESSION. Guárdelo en un lugar seguro.
Kin Shah
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.