viernes, 11 de febrero de 2011

Backup automáticos de bases de datos SQL Server 2008

Hace mucho tiempo que he tenido la necesidad de generar copias de seguridad (Backup) de las bases de datos que estoy utilizando, en muchos lugares han publicado opciones que son funcionales pero que no utilizan las herramientas que SQL Server tiene, gracias a todos los lugares que visite se me vino una idea a la mente!!! se las detallo a continuación:

Primero les comentare un poco acerca de lo que utilice para tener en el servidor la programado para la generación de copias de seguridad automáticas lo que se necesita es lo siguiente;

1.Script para la generación de los BACKUP.
2. Agente de SQL Server.

El primer paso es crear el script que genera el respaldo de la base de datos, les dejo el script para que ustedes remplacen las variables necesarias de manera que les sirva en su objetivo:
 
USE nombre_de_su_base;
GO
declare @fecha varchar(MAX)
declare @archivo varchar(MAX)
set @fecha = CONVERT(Varchar(max), GETDATE(),102)+'_'+SUBSTRING(CONVERT(varchar(10), getdate(),108),1,2)+SUBSTRING(CONVERT(varchar(10), getdate(),108),4,2)+'horas'
set @archivo ='C:\nombredelacarpetaBACKUP\nombre_de_su_base'+@fecha+'.bak'
BACKUP DATABASE nombre_de_su_base
TO DISK = @archivo
   WITH FORMAT,
      MEDIANAME = 'D_SQLServerBackups',
      NAME = 'Full Backup of nombre_de_su_base';
GO

Explico un poco el código:
Se han creado dos variables @fecha y @archivo, @fecha es la fecha en la que sea creado el respaldo, es una buena practica ponerle la fecha para identificar la antigüedad del respaldo. La otra variable es @archivo la cual contiene la ruta en la que se guardara el respaldo, si lo hacen directamente en la raíz de la unidad "C" es posible que tengan problemas de permiso de escrituras, por eso les recomiendo que coloquen el respaldo en una carpeta. Donde dice  "nombre_de_su_base" deben cambiarlo por nombre  de la base a la cual se le generara un respaldo de seguridad.
El resto del código es Transact-SQL, les dejo la siguiente URL para enriquezcan mas los conocimiento del mismo: http://msdn.microsoft.com/es-es/library/ms189826(v=SQL.90).aspx

Como segundo paso debemos configurar el Agente de SQL Server  para programar una tarea que será que encargada de ejecutar el Script que sea especificado en el paso uno,  para ello haremos lo siguiente:

1. Iniciar sesión en el SQL Server Management para poder tener acceso a la configuración del Agente de SQL Server.

2. Al entrar al SQL Server Management observaremos en el explorar de objetos que el agente de SQL Server que encuentra al final del arbol  del explorar


Al dar click en icono del + se desplegara un submenu y en el esta la opción de Trabajos que es lo que nos interesa.

3. Al desplegar el SubMenu del Agente de SQL Server se debe crear un nuevo trabajo, para ello debemos dar click derecho para que se desplique  lo siguiente:


Como pueden observar tenemos la opción de Nuevo trabajo, demos click ahí para dar inicio la configuración del nuevo trabajo o tarea. 

4. Cuando damos click en Nuevo trabajo aparecerá la siguiente ventana:


En la ventana llamada "Nuevo trabajo" se especificara el nombre que tendrá la tarea que ejecutara el script para generar los respaldos de la base, adicional al nombre es recomendable que se escriba una breve descripción de la funcionalidad.

5. Al haber especificado en nombre de la tarea, damos click en la opción "Pasos" que se encuentra ubicada en la parte superior izquierda de la ventana "Nuevo trabajo", para configurar esa opción se hace lo siguiente:


En la ventana "nuevo paso" especificamos el nombre, la base de datos a la cual se le hará el respaldo y en la parte donde dice "Comando" hay que copiar el Script ya modificado a su conveniencia y damos un click en el botón Aceptar.

6. Ahora es el momento de programar la frecuencia con la que se generar los respaldo de seguridad, para ello damos click en la opción "Programaciones", para configurar una programación hacemos lo siguiente:  


En la ventana "Nueva Programación de trabajo" especificamos un nombre para poder identificar la programación, en la sección "Frecuencia" especificamos con que frecuencia queremos que se ejecute la tarea, para los respaldos de la base es recomendable que se haga diario o según la necesidad, si seleccionan  con una frecuencia diaria  en la sección  "Frecuencia Diaria" pueden especificar la hora de inicio y fin y otros datos más que que puede ser de utilidad. una ves sea hecho todas las especificaciones de la programación damos aceptar y luego aceptar para terminar con la configuración del Agente de SQL Server.

Bueno es todo lo que hay que hacer para tener la generación  de copias de seguridad de las bases de datos... Espero le ayude.... 

Exitos y que Dios les bendiga...

 

20 comentarios:

  1. DESDE YA MUCHAS GRACIAS AMIGO XQ LO USO PARA HACER LOS BACKUPS EN LOS SERVERS DE MI TRABAJO.PERO COMO PUEDO HACER PARA QUE SOBREESCRIBA EL ARCHIVO .BAK Y NO GENERE TODOS LOS DIAS UN NUEVO ARCHIVO SINO TENGO QUE BORRAR EL BACKUP DEL DIA ANTERIOR SINO NO ME LLENA EL HDD. GRACIAS Y ESPERO RESPUESTA

    ResponderEliminar
    Respuestas
    1. En la opcion donde dice get date, te coloca la fecha con dias,horas; si modificas esa opcion te lo guarda solo con la fecha y el dia, asi que si generas mas de 1 backup al dia, el más reciente reemplazara al anterior. ahora si quieres evitar borrar manualmente el .bak del dia anterior existe otro script no igual a este donde le indicas la periodicidad para que se borre automatico.

      EXECUTE master.dbo.xp_sqlmaint N'-PlanID 075177D6-9B95-4CBC-BB45-05108D1D52C2 -WriteHistory -VrfyBackup -BkUpMedia DISK -BkUpDB "\\SISTEMAS\e$\Backup" -DelBkUps 8HOURS -BkExt "BAK"'

      Eliminar
    2. Puedes usar este simple script, sobre escribe siempre:
      use nombre base de datos
      BACKUP DATABASE [nombre base de datos] TO DISK = N'C:\BackupMySQL\Ayer\Backup.bak' WITH NOFORMAT, INIT, NAME = N'Silge-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10
      GO

      En ese script graba en el directorio "Ayer", puedes poner el nombre que mas te guste.

      Eliminar
    3. Compunare, 04148773055 Amigo re genera diariamente un backup solo busca la ultima fecha y listo exito

      Eliminar
  2. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  3. Hola amigo yo estoy desarrollando una aplcacion en poer builder 10.5 quisiera q me ayudes si es posible como crear y restaurar backups desde este entorno y sino es el caso aqui ya esta como hacer las copias programadas y esta super esta info y se te agradece pero quisiera el code para hacer una restauracion tambien programada se te agradeceria infinitamente ya q soy nuevo en esto mi correo es isma1027@hotmail.com gracias de antemano

    ResponderEliminar
    Respuestas
    1. Este comentario ha sido eliminado por el autor.

      Eliminar
    2. Hola amigo si te entiendo bien en esta pagina esta lo que necesitas: http://solocodigofuente.com/ejemlos-de-codigos-fuente-en-power-builder/crear-copia-de-seguridad-restaurar-adjuntar-una-base-de-datos-en-power-builder-105/

      Yo hasta el momento no me he visto con la necesidad de hacer backups desde una aplicación pero espero la info. te ayude con problema....

      Eliminar
  4. Este blog lo cree yo y ya no le podre dar continuidad, por motivos de extravió de contraseña... Por esa razón he creado otro que se llama: http://elprogramadornsv.blogspot.com/, ahi esta y otra inf. les invito a que pasen....

    ResponderEliminar
  5. muchas gracias, por ambos blogs, copiare la informacion. la posteare en mi perfil y pondre de fuente este u el otro blogspot.

    ResponderEliminar
  6. hola como puedo realizar los backup en unidades compartidas de otras pc en la red.

    ResponderEliminar
    Respuestas
    1. Hola, aqui tengo unos links que encontré con esa solución, ya los aplique y si funcionan correctamente.


      Ligas:
      http://itcordoba.wordpress.com/2012/04/12/backup-sql-server-2008-r2-en-dispositivos-de-red/
      http://blog.manglar.com/backup-para-sql-server-en-dispositivos-de-red/
      http://technet.microsoft.com/en-us/library/gg651155%28v=ws.10%29.aspx


      EXEC sp_configure 'show advanced options', 1
      GO
      RECONFIGURE
      GO
      EXEC sp_configure 'xp_cmdshell', 1
      GO
      RECONFIGURE
      GO


      --Esta linea agrega el dispositivo fisico de red como una unidad en SQL no se visualiza en windows
      --EXEC xp_cmdshell 'net use N: \\server\file Password /user:user_db\password_db'

      --si deseas eliminar todas las unidades que han sido agregadas
      EXEC xp_cmdshell 'net use /delete * /Y'
      --si deseas eliminar una unidad específica agregada
      --EXEC xp_cmdshell 'net use N: /delete'

      Eliminar
  7. hoye brother como puede respaldar varias bases ala ves con un backup

    ResponderEliminar
  8. Compadree, ¿se puede dentro del mismo Script, generar solo 3 backup dentro de una carpeta? ¿y que al generar una cuarta, la mas antigua se elimine?... Espero que me puedas ayudar, graciaas

    ResponderEliminar
  9. hola buen dia. despues de este proceso, despues de llevar esta BD a otro servidor, como puedo programar un Restore de esta BD, estoy realizando estas tareas para mantener actualizada al dia una BD de contingencia de la de produccion.

    Gracias

    ResponderEliminar
  10. Aqui hay una forma un tanto mas facil !

    http://jalayo.wordpress.com/2010/08/31/crear-respaldos-automaticos-en-sql-server-2005-y-2008/

    ResponderEliminar
  11. Hola muy buen post, pero en sql express no esta habilitado el agente, existira alguna otra opcion

    ResponderEliminar
    Respuestas
    1. a mi tampoco me aparece el agente en sql express sin embargo el mismo programa en otros computadores de mis compañeros, si aparece

      Eliminar
  12. Muchas gracias, funcionó de mil maravillas, gracias , gracias. :)

    ResponderEliminar
  13. Buenas amigos, excelente!! Tutorial . . serian tan amables de apoyarme con realizar un backup diario incremental, pero en Microsoft SQL Server 2003,

    Saludos

    ResponderEliminar