Copia de seguridad de SQL DB con más frecuencia

10

Actualmente tengo una tarea programada que se activa cada noche a las 2 AM que llama a SQLCMD.exe y le pasa un script .sql para ejecutar la copia de seguridad (que se muestra a continuación). Somos una empresa bastante pequeña con necesidades crecientes debido al gran crecimiento en el lado comercial. La pérdida de 1 día de datos en este punto costaría decenas de miles de dólares frente a unos cientos este año el año pasado. Hasta que pueda migrar esta plataforma de base de datos a una solución diferente donde la duplicación de datos se produce con mayor redundancia como SQL Azure, ¿qué es lo mejor que puedo hacer para obtener copias de seguridad más frecuentes? ¿Este script a continuación obliga a la base de datos a estar fuera de línea? ¿Puedo ejecutar este script con usuarios que interactúan con la base de datos?

USE CompanyCRM;
GO
BACKUP DATABASE CompanyCRM
TO DISK = 'D:\CRMBackups\CompanyCRMCRM.Bak'
   WITH FORMAT,
      MEDIANAME = 'CompanyCRM_Backup',
      NAME = 'Full Backup of CompanyCRM';
GO

Actualizar

Wow, obviamente una comunidad de DBA mucho más dedicada aquí que en SO. Gracias por los comentarios hasta ahora. Lo único que falta son los "cómo". He mostrado el comando SQL anterior que estoy usando para hacer copias de seguridad diarias, pero los ejemplos de copia de seguridad de registro incremental son MIA. Este no es un DB grande, actualmente se ejecuta en SQLExpress. Cuando digo HA o SQL Azure, me refiero específicamente a la arquitectura que no tenemos como pequeña empresa. Esta instancia se está ejecutando actualmente en nuestro ÚNICO servidor. Si ese servidor falla, nuestro tiempo de recuperación se convierte en un punto conflictivo. Es por eso que SQL Azure se vuelve atractivo.

RSolberg
fuente
edité mi respuesta a su actualización, espero que ayude

Respuestas:

5

EDITAR, desde su actualización

Como ha dicho que puede perder 1 día de datos, simplemente pondría las bases de datos en modo de recuperación SIMPLE. Luego puede hacer un COMPLETO cada mañana y / o noche. Si desea cubrirse durante el día, puede hacer una copia de seguridad diferencial de la base de datos, una de esas solo por si acaso. Esto capturará cualquier cambio realizado desde la copia de seguridad completa. Si conozco un marco de tiempo en el que está ocurriendo una gran cantidad de información, podría lanzar este tipo de copia de seguridad allí después de que se complete. Puede ahorrar tiempo a la gente en la recuperación para que no tengan que ingresar datos adicionales.

Como este es su único servidor, me aseguraría de que esté ejecutando DBCC CHECKDB en las bases de datos. Las copias de seguridad no sirven de nada cuando descubres que están corruptas (creo que alguien también mencionó esto). Probablemente puede encontrar algunas secuencias de comandos para configurar una tarea programada para verificar el ERRORLOG de SQL para el mensaje DBCC para detectar cualquier error. SQL Server no le advertirá de forma nativa sobre los errores que devuelven los mensajes DBCC, por lo que, a menos que verifique manualmente cada vez que un script lo haga, puede ayudar.

El comando de copia de seguridad diferencial:


USE CompanyCRM; 
GO 
BACKUP DATABASE CompanyCRM 
   TO DISK = 'D:\CRMBackups\CompanyCRMCRM_diff.Bak'    
WITH FORMAT, DIFFERENTIAL,
MEDIANAME = 'CompanyCRM_Backup',       
NAME = 'Full Backup of CompanyCRM'; 
GO 

fuente
1
@Shawn: OP dijo que "Perder 1 día de datos en este momento costaría decenas de miles de dólares frente a un par de cientos esta vez el año pasado", ¿dónde dijo que puede perder 1 día de datos?
Marian
8
  • Las copias de seguridad en SQL Server no interrumpen. Es decir, la base de datos permanece operativa. Lee la documentación.
  • Haga una copia de seguridad completa todos los días, seguida de copias de seguridad de LOG enviadas (copiadas) (nuevamente, la documentación tiene ... documentación) más regularmente, como cada 15 minutos más o menos.
TomTom
fuente
44
Creo que la copia de seguridad es algo para lo que no necesita un tutorial, pero una lectura completa de la documentación es crítica para el negocio Y es, en serio, importante. No cocinar huevos al estilo. Contrata a un profesional.
TomTom
2
Lástima que no pueda votar las respuestas en este sitio ...
RSolberg
1
@RSolberg: la respuesta de TomTom es válida, junto con los otros consejos que ya recibió. Sugeriría que no espere que ninguno de los respondedores le muestre realmente la sintaxis básica de la copia de seguridad. Aunque veo que Shawn tuvo la amabilidad de hacerlo. Diseñar una estrategia de BACKUP no es suficiente. Debe emparejarlo con una estrategia de RESTAURACIÓN para que todo sea válido cuando lo necesite.
Marian
2
@RSolberg: perdón por molestarte. Esto no está destinado. Pero, ¿cómo no ayudó esta comunidad? Tienes respuestas buenas y válidas (y comentarios). Su propio mensaje fue: "Perder 1 día de datos en este momento costaría decenas de miles de dólares frente a un par de cientos esta vez el año pasado". Por lo tanto, necesita una estrategia sólida de copia de seguridad y restauración para no llegar allí. Una estrategia sólida proviene de conocer muy bien los conceptos básicos. Que provienen de la lectura y comprensión del manual. Lo siento si entendiste algo más!
Marian
2
Estoy de acuerdo con @RSolberg en que la mayoría de las respuestas aquí no muestran "cómo" hacerlo, pero eso también se debe a que a la pregunta le faltaba algún detalle "qué" no entendió Russell. Tiene que contarnos un poco más sobre lo que necesita, pero estoy de acuerdo con usted en que el sitio aquí no se trata de "RTFM n00b". Además, como señaló, tiene 10k en Desbordamiento de pila , por lo que seguramente comprenderá marcar comentarios que son groseros o perjudiciales. En el futuro, deberías hacerlo antes, en lugar de desbordarte de frustración.
jcolebrand
6

Lo primero que debe hacer es calcular cuántos datos puede permitirse perder. Hasta entonces, no tendrá idea de con qué frecuencia realizar copias de seguridad de la base de datos. Este no es un número que deberías tener. Esto es algo que la empresa (o el CEO de una empresa más pequeña) necesitaría decidir. El primer número con el que van a volver es 0 minutos. Lo que se puede hacer, pero será muy costoso. En realidad, la cantidad más pequeña de datos para la que puede realizar copias de seguridad es aproximadamente cada 2 minutos. Si la cantidad de datos que cambia en el sistema es lo suficientemente pequeña, puede hacer copias de seguridad cada minuto.

Para hacer copias de seguridad del registro de transacciones, que es lo que deberá hacer, deberá poner la base de datos en modo de recuperación COMPLETA.

Si puede permitirse perder 5 minutos de datos, entonces probablemente quiera hacer copias de seguridad completas diariamente y copias de seguridad del registro de transacciones cada 5 minutos. Si puede perder 15 minutos de datos, entonces querrá hacer copias de seguridad completas y copias de seguridad del registro de transacciones cada 15 minutos.

Otra opción sería hacer copias de seguridad completas semanales, copias de seguridad diferenciales diarias y copias de seguridad del registro de transacciones cada x minutos, como mencioné anteriormente.

Tenga en cuenta que cuanto más a menudo necesite hacer copias de seguridad, más archivos necesitará restaurar en caso de falla de la base de datos o eliminación de datos. Puede tener sentido hacer copias de seguridad diferenciales durante todo el día para acortar la cantidad de tiempo que lleva restaurar la base de datos.

Todas las copias de seguridad que utilizan la base de datos BACKUP y la instrucción BACKUP LOG se realizan en línea y no impiden que los usuarios accedan a la base de datos.

mrdenny
fuente
De hecho, soy bastante capaz de evaluar la cantidad de datos que podemos perder. Las pequeñas empresas requieren que la gente use muchos sombreros, ya que el CIO tiendo a involucrarme diariamente con las decisiones de la línea de negocios.
RSolberg
1
Eso hará que la discusión sea mucho más corta entonces.
mrdenny
3

Digamos que tiene un escenario comercial común con su horario más ocupado: 9 am-5pm de lunes a viernes. Entonces sugeriría: copia de seguridad completa el domingo por la noche. Copias de seguridad diferenciales a las 8 a.m., 6 p.m. y 1 a.m. (para reducir el tiempo de recuperación). Registre copias de seguridad cada hora o según lo que requiera su empresa.

Dependiendo de su período de retención, debe tener un trabajo de limpieza automática para borrar los archivos de respaldo antiguos. Todo esto se puede crear utilizando planes de mantenimiento SQL. Consulte este enlace para SQL 2005 .

Debe almacenar sus copias de seguridad en algún tipo de disco redundante (duplicado), o puede usar cintas para el almacenamiento externo. Los usuarios pueden continuar trabajando en el sistema mientras se ejecutan las copias de seguridad.

StanleyJohns
fuente
2

No haría una copia de seguridad completa todas las noches. Si se trata de una base de datos grande, eso podría llevar mucho tiempo, sin mencionar que ocuparía mucho espacio en los medios. Haga una copia de seguridad completa cada fin de semana y una copia de seguridad diferencial cada noche. Luego haga una copia de seguridad del registro de transacciones (suponiendo que su base de datos esté en recuperación completa) cada hora, o cada media hora, pero asegúrese de que estos archivos .bak y .trn residan en un disco separado en caso de falla del disco.

Thomas Stringer
fuente
Se perdieron las etiquetas, esta no es una gran base de datos. Actualmente se está ejecutando en una instancia de SQLExpress.
RSolberg
1
¿Decenas de miles de dólares en Express? ¡Interesante!
Andrei Rînea
Realmente no. Dependiendo de lo que almacene (sin textos, sin binarios), eso es 10 gigabytes de datos. Puede ejecutar un sistema de contabilidad para una gran empresa, en serio una gran empresa, en 10 gigabytes. Una tienda en línea con 100.000 pedidos por día puede hacer fácilmente la compra en 10 gigabytes.
TomTom
1

¿Puede sincronizar en la nube su carpeta de copias de seguridad por la noche para obtener almacenamiento fuera del sitio? Dado que estoy bastante seguro de que esto es para una empresa de atención médica, ¿hay alguna que sea lo suficientemente segura como para cumplir con HiPA? ¿O tal vez solo los superciframos?

¿El script al menos pone una copia de la copia de seguridad en un recurso compartido de red? De esa manera, si la caja física explota ...


fuente
Sí a todo lo anterior. Realmente realizamos copias de seguridad en una unidad de red que se duplica y copiamos datos de ese entorno a un centro de datos seguro.
RSolberg