Copias de Seguridad Automáticos de SQL Server Express

March 20, 2018 | Author: ray_hino | Category: Backup, Microsoft Sql Server, Sql, Computer File, Window (Computing)


Comments



Description

Backups automáticos de SQL Server Express Backup SQL Server Express  SQL Server Express Es bien sabido que las versiones Express de SQL Server no disponen del agente de SQL Server para programar trabajos que se encarguen, entre otras cosas, de los backups de las diferentes bases de datos. Hace días, buscando sobre el tema encontré una solución muy simple que voy a compartir y explicar en ésta entrada. Para hacer backups automáticos de las bases de datos de SQL Server Express, basta seguir los siguientes pasos:  Entrar a SQL Server Management Studio Expres  Desplegar el nodo Server Objects y seleccionar el nodo Backup Devices como se indica en la imagen.  Clic derecho sobre Backup Devices y seleccionar la opción New Backup Device...  Sobre el campo Device name usar un nombre de dispositivo que se va a usar para el backup. Yo uso como nombre de dispositivo el mismo nombre de la base de datos a la cual le voy hacer backup con este procedimiento, pero es indiferente. Si quiere puede llamarlo potato. No importa. Seleccionamos la opción File para hacer backup al disco duro y hacemos clic en el botón ... para seleccionar la ruta de destino del backup. es como muy feo) G:\Backups SQL. En el campo File name indicamos el nombre del archivo de backup ¡CON SU EXTENSIÓN! En este caso he colocado el mismo nombre de la base de datos a la cual le voy hacer backup mediante este procedimiento. En este caso se seleccinó el directorio (eso de decir carpeta. . Para finalizar hacemos clic en el botón OK. Se abre la ventana para seleccionar la ruta de destino del backup. . La configuración del dispositivo de Backup debe quedar como indica la siguiente imagen. Para finalizar hacemos clic en el botón OK.  El dispositivo de backup que se acaba de crear debe verse listado como lo indica la siguiente imagen. . o <Base de Datos>: Indica el nombre de la base de datos a la cual se le hará backup. o <Instancia>: Corresponde al nombre de la instancia de SQL. o <Dispositivo de backup>: Nombre del dispositivo de backup en el cuál hará el backup. Para este caso concreto voy hacer backup de la base de datos NavoriSQL en el . omita este dato. Para hacer backup en este dispositivo ejecutamos el siguiente comando en una línea de comandos:  sqlcmd -S <Servidor>\<Instancia> -E -Q "BACKUP DATABASE <Base de Datos> TO <Dispositivo de backup>" Donde: o <Servidor>: Indica el nombre del servidor SQL. Si el servidor SQL no tiene instancia. . Por ejemplo: sqlcmd -S SERVIDOR -E -Q "BACKUP DATABASE NavoriSQL TO NavoriSQL" En el directorio seleccionado para los backups. debe quedar el backup de la base de datos.dispositivo de backup creado en este procedimiento que lleva su mismo nombre. Carece de otras características de alta . SQL Server Express: Hacer backups programados y con retención SQL Server Express es una excelente opción para trabajar con SQL Server en proyectos pequeños y medianos sin tener que pagar licencias. A cambio tiene ciertas limitaciones. No solo se limita a las versiones Express.BAT  Cabe apuntar que este procedimiento es válido para cualquier versión de SQL Server.BAT el comando que realiza el backup y mediante las tareas programas de Windows programar la ejecución de este archivo . El último paso sería insertar en un archivo . Por ejemplo. no permite utilizar más de 1 GB de RAM por instancia para caché de datos en memoria y el tamaño de cada base de datos gestionada no puede superar los 10 GB (que es un tamaño considerable para aplicaciones normales). Es una versión gratuita pero totalmente funcional del gestor de base de datos relacionales de Microsoft. Sabiendo la existencia de esta herramienta. Lo primero que tenemos que saber es que todas las ediciones de SQL Server incluyen una utilidad de línea de comandos que nos permite ejecutar instrucciones T-SQL arbitrarias contra cualquier base de datos. especialmente si queremos mantener un periodo de retención concreto (por ejemplo. Esta utilidad tiene muchos parámetros que nos permiten controlar su forma de trabajar.EXE" en el caso de SQL Server 2012 Express. pero ofrece toda la funcionalidad habitual (incluyendo integración de datos y reporting) y las herramientas de administración. Así podemos incluir scripts más complejos que una simple línea. Aquí podrás encontrar una comparativa de todas las ediciones de SQL Server. Dos que nos interesan especialmente son:  -S: nos permite especificar contra qué servidor/instancia se ejecutarán las sentencias T-SQL. En el menú contextual elige la opción de "Tareas·backup…": . y en este artículo voy a explicar cómo lograrlo de manera sencilla.  -i: permite especificar una ruta a un archivo (normalmente con extensión . generalmente ubicada en esta ruta: "C:\Program Files\Microsoft SQL Server\110\Tools\Binn\SQLCMD. conseguir backups gracias a ella es muy sencillo. Ábrelo. Construir las instrucciones T-SQL base para hacer el backup Lo primero es conseguir los comandos T-SQl para hacer un backup. 1. El agente nos permite programar tareas que se ejecutarán sobre las bases de datos cuando nosotros queramos.sql) que contiene las instrucciones T-SQL que queremos ejecutar contra el servidor. la realización de copias de seguridad. las copias de los últimos 7 días).exe. Esta carencia dificulta un poco. Lo más sencillo es usar las herramientas integradas en el Microsoft SQL Server Management Studio (MSSMS). Se trata de SQLCMD. busca la base de datos que te interesa copiar en el explorador de objetos y pulsa el botón derecho del ratón sobre ella. Por suerte esta carencia en concreto es muy fácil de solucionar. por ejemplo. Una de las cosas que no están disponibles con SQL Server es el Agente SQL.disponibilidad y replicación. Esto abre una nueva ventana desde la que podemos definir cómo queremos realizar el backup: . bak. pero puede ser cualquiera o incluso no tener extensión). como por ejemplo (muy recomendable) que se verifique el backup al terminar de hacerlo: .Desde esta ventana elegimos la base de datos a copiar y la ruta en la que queremos guardar dicha copia de seguridad (normalmente le damos como extensión al archivo . Además si pulsamos en la página "Opciones" en el lateral podemos configurar algunas cosas más. Por defecto nos copiará el código generado a una ventana del MSSMS. así que si seleccionamos esta opción en la lista desplegable de la parte inferior de la figura anterior. podemos obtener el código necesario para realizar el backup usando el botón "Script" de la parte superior de la ventana anterior.OJO: la edición Express no soporta la compresión de los backups. Una vez que tengamos seleccionadas todas las opciones que necesitemos. así: . se producirá un error al realizar el backup. empezando por el domingo (un 1) hasta el sábado (un 7).bak. Para ello vamos a retocar el script anterior de modo que cada día le cambie el nombre al archivo de copia de seguridad. . añadiéndole el número de día de la semana para obtener nombres estilo: SELF_1.bak. Lo interesante de las copias de seguridad es tener copias con una retención de varios días. del día de la semana en el que nos encontremos. GETDATE()) AS nvarchar(1)) + '. en este caso. de modo que podamos recuperar los datos desde cualquier copia de seguridad de la última semana. 2. En el script generado por el MSSMS bastará ahora por sustituir la ruta por el nombre de esta variable y ya lo tendremos listo (ojo: hay que sustituirlo en dos sitios: en el backup y en la verificación del backup en la parte inferior).bak' La función DATEPART con el valor weekday para el primer parámetro nos devuelve un número para cada día de la semana. SELF_2. Como le pasamos la fecha actual (GETDATE) como segundo parámetro lo que obtendremos en la variable @dest es cada día un nombre diferente para la base de datos. En este caso sería así: DECLARE @dest nvarchar(255) SET @dest = 'C:\BackupsBBDD\SELF_' + CAST(DATEPART(weekday. Para ello vamos a declarar una variable que servirá para guardar la ruta y el nombre del archivo de copia de seguridad. cambiándolo en función.bak y así sucesivamente. para poder comprobar datos anteriores o restaurar los datos a un estado anterior. Retocar el script para darle una semana de retención Supongamos que queremos hacer una copia de seguridad diaria y que queremos mantener las copias durante 7 días. SELF_3.Con esto obtendríamos una base de datos que se sobrescribiría en cada nueva copia. Dado que en caso de que un archivo exista de backup se sobrescribirá. Programar la tarea Ahora que ya tenemos un script para hacer la copia de seguridad.sql con las instrucciones para la copia de seguridad que acabamos de crear. escribiendo esta instrucción: "C:\Program Files\Microsoft SQL Server\110\Tools\Binn\SQLCMD. La última instrucción ">> log. cuánto ha tardado y cualquier otro mensaje que se derive de la ejecución del script.EXE" -S SERVIDOR\INSTANCIA -i "C:\BackupsBBDD\BackupSELF.txt" nos permite guardar el resultado de la ejecución en un archivo de texto que podemos consultar para ver cuándo se ha realizado cada copia. 3. E spor eso que me gusta colocarle al principio del script una instrucción más como esta: PRINT CAST(GETDATE() AS nvarchar) + ' . en la práctica con este script lo que conseguimos es que siempre haya 7 copias como máximo en el histórico.bat del paso anterior así como a qué hora del día lo vamos a hacer: .sql" >> log. En el parámetro -i debemos indicar la ruta al archivo .txt Debemos sustituir SERVIDOR\INSTANCIA por el nombre de nuestro servidor y la instancia de SQL Server sobre la que queremos trabajar.txt un mensaje al principio de cada copia de seguridad indicando la fecha de creación y el nombre del archivo. Lo único que tendremos que hacer es indicar que queremos ejecutar el archivo . y además hemos creado un .bat que nos permita ejecutar este código T-SQL cuando queramos.bat para ejecutarlo. Podemos incluir del mismo modo cualquier otra información que consideremos relevante. Crear un bat para realizar el backup Ahora que ya tenemos el código necesario para crear las copias de seguridad lo que debemos hacer es crear un archivo . 4. Para ello usaremos SQLCMD. lo único que nos falta es crear una tarea programada para poder lanzarla con la periodicidad que nos convenga (en principio cada día). Para ello abrimos el administrador de tareas programadas del sistema y creamos una nueva tarea.COPIA DE SEGURIDAD INICIADA AL ARCHIVO: ' + @dest De este modo aparecerá en el archivo Log.EXE. Con esto habremos conseguido que todos los días a las 2:00 de la mañana se realice una copia de seguridad de la base de datos. con una retención de 7 días: . lunes (2). Podemos jugar con los distintos valores del primer parámetro de DATEPART para conseguir otros periodos. sería tan fácil como cambiar el parámetro de DATEPART por "day" de modo que se pusiera el número de día del mes. no te pierdas estos dos cursos de campusMVP (en inglés):  SQL Server 2012 fundamentals for developers  Hands on SQL Server 2012: Expert Programming and Design (también sirve para preparar las certificaciones 70-461 y 70-464) . como por ejemplo. etc… Si quisiésemos un periodo de retención de un mes. martes 83). si hacemos más de una copia al día. por ejemplo.Cada uno de esos archivos se corresponde con la copia de seguridad del domingo (1). añadirle la hora de modo que tengamos más de un archivo diario Si quieres aprender a programar bien SQL Server. Pues bien el agente de tareas es el que se encarga de llevar a cabo todas las tareas relacionadas con el mantenimiento de la base de datos ya sea realizar copias de seguridad programadas (diarias. ¿Y para que sirve el agente de tareas? os preguntareis otros. es necesario un conocimiento previo del lenguaje SQL. indexar la base de datos.bak’ BACKUP DATABASE nombredelabasededatos TO DISK = @ruta WITH FORMAT. Para realizar este ejercicio.bak’ WITH FORMAT. CURRENT_TIMESTAMP . Siempre que trabajemos con una base de datos hay que tener un respaldo por si acaso el ordenador falla y hubiera que restaurarla en otro pc o para poder evitar cualquier pérdida accidental de los datos.Crear copia de seguridad programada en Sql Server Express 2008 Como muchos ya os habréis dado cuenta. Lo que se encuentra en letra naranja es lo que tendremos que cambiar para indicar el nombre de la base de datos a respaldar y el nombre de la copia de seguridad. set @fecha = CONVERT (nvarchar. Por ello vamos a ver previamente como se realizaría una copia de seguridad completa normal de una base de datos a una ruta concreta: BACKUP DATABASE nombredelabasededatos TO DISK = ‘C:\nombredelabasededatos. . mensuales…). etc… En nuestro caso lo que buscamos de manera más urgente es poder realizar copias de seguridad programadas para evitar accidentes como la pérdida de información o borrado accidental o no de la base de datos. 112) set @ruta = ‘C:\’ + @fecha + ‘nombredelabasededatos. El funcionamiento es realizar la copia de seguridad con el nombre de la base de datos que queremos respaldar e indicar la ruta en la que queremos que se guarde la copia de seguridad (por ejemplo en c:\). la versión Sql Server Express 2008 no incluye el agente de tareas. semanales. declare @fecha as nvarchar (50). Una vez tenemos claro el funcionamiento de la copia de seguridad. vamos a darle una fecha antes del nombre para poder crear una copia cada día y poder distinguirlas en formato año/mes/día: declare @ruta as nvarchar (50). realizar una programación para limpiar registros. Creamos con el bloc de notas un archivo y lo llamamos “tarea. Editar .bak’ BACKUP DATABASE nombredelabasededatos TO DISK = @ruta WITH FORMAT.declare @fecha as nvarchar (50). establecemos el valor con set que van a tener cada una.Ejecutamos el archivo para comprobar que no hemos cometido ningún error de código.Una vez estemos en modo edición.bat para ejecutar el código mediante la consola de comandos de windows conocida como CMD y así con el programador de tareas de windows poder programar la tarea. CURRENT_TIMESTAMP . Ahora vamos a crear un archivo .bat 2. insertamos el siguiente código: ECHO ejecutando tarea ECHO. 1. 112)set @ruta = ‘C:\’ + @fecha + ‘nombredelabasededatos.Aquí lo que hemos hecho es declarar dos variables una con la ruta y otra con la fecha para que quede claro su uso de manera muy sencilla. Le damos botón derecho y editar. Declaramos las variables como nvarchar. en el caso de la fecha hay que convertir el formato datetime que usa current_timestamp a nvarchar que es cadena y luego lo utilizaremos en ese formato para anteponerlo al nombre y así distinguir los diversos archivos de las copias de seguridad. .set @fecha = CONVERT(nvarchar. 4.bat” (sin las comillas). a no ser que se haya cambiado en la instalación) y nombre de la base de datos a respaldar. pause osql -S “nombredelainstanciasql\sqlexpress” -E -Q “declare @ruta as nvarchar (50).” ECHO tarea ejecutada pause CLS EXIT 3.Cambiamos lo que está escrito en naranja por lo que corresponda a la información de nuestra instancia de Sql Server Express 2008 (suele ser el nombre del equipo /sqlexpress. Y en el caso de la variable ruta hemos indicado simplemente la ruta donde se va a guardar el archivo con su fecha y nombre correspondiente. CURRENT_TIMESTAMP .bak’ BACKUP DATABASE nombredelabasededatos TO DISK = @ruta WITH FORMAT.Cmd 5.declare @fecha as nvarchar (50).” ECHO tarea ejecutada CLS EXIT Ahora vamos como paso final a programar la tarea para que se ejecute a diario.Para ello entramos en Inicio – Programas – Accesorios – Herramientas del sistema y pulsamos click en Tareas programadas. Así que volvemos al fichero y lo editamos borrando las pause.set @fecha = CONVERT(nvarchar. nos quedaría así: ECHO ejecutando tarea ECHO. 112)set @ruta = ‘C:\’ + @fecha + ‘nombredelabasededatos. 1. Si nos fijamos en la imagen hay unas flechas que nos indican lo que en el código significa pause.Si nos aparece como en la imagen y nos crea la copia de seguridad con éxito tendremos que hacer un cambio en el código para quitarle las pausas de comprobación y que lo haga directamente sin pulsar ninguna tecla. . sqlcmd -S “nombredelainstanciasql\sqlexpress” -E -Q “declare @ruta as nvarchar (50). Ahora es el momento de seleccionar que hora y con que frecuencia así como cuando se debe iniciar la tarea. 3.Le damos a agregar una nueva tarea y cuando nos salga el asistente pulsamos siguiente.Tareas Programadas 2.bat que hemos creado y pulsamos siguiente de nuevo. 4.Pulsamos en la siguiente pantalla a diario para que se ejecute todos los dias y le damos a siguiente. Seleccionamos en examinar el archivo tarea. Pulsamos en siguiente una vez configurado y nos va a pedir un nombre de usuario del equipo y una contraseña del usuario. . pulsamos siguiente y pulsamos finalizar. 112) OPEN BBDDUsuarios_cursor Fetch NEXT FROM BBDDUsuarios_cursor INTO @nombreDB WHILE @@FETCH_STATUS = 0 BEGIN set @ruta = ‘C:\Backup\’ + @fecha + ‘_’ + @nombreDB + ‘.”>Para obtener más información.dbo.De este modo quedaría completado el capítulo de como crear una programación de un backup en Sql Server Express 2008.aspx Debido a las últimas peticiones he decidido incluir el Script para hacer backup de todas las bases de datos de usuario. sqlcmd -S “nombredelainstanciasql\sqlexpress” -E -Q “DECLARE BBDDUsuarios_cursor Cursor FOR SELECT name FROM master.”>En su lugar.’model’.com/es-es/library/ms162806.microsoft.’msdb’. declare @fecha as nvarchar (50). set @fecha = CONVERT(nvarchar. sqlcmd Utility.’tempdb’) declare @nombreDB varchar(50).declare @ruta as nvarchar (50). CURRENT_TIMESTAMP .sysdatabases WHERE name NOT IN (‘master’. http://msdn. Espero que os sirva y así poder haberos ayudado. ACTUALIZACIÓN: Importante Esta característica se quitará en una versión futura de SQL Server. Fetch NEXT FROM BBDDUsuarios_cursor INTO @nombreDB END CLOSE BBDDUsuarios_cursor DEALLOCATE BBDDUsuarios_cursor” ECHO tarea ejecutada CLS EXIT . use sqlcmd. Evite utilizar esta característica en los nuevos trabajos de programación y planee modificar las aplicaciones que actualmente la utilizan. vea sqlcmd (utilidad). recordad que para que funcione debéis cambiar el nombre de la instancia: ECHO ejecutando tarea ECHO. sqlcmd instead.bak’ BACKUP DATABASE @nombreDB TO DISK = @ruta WITH FORMAT.
Copyright © 2024 DOKUMEN.SITE Inc.