P. 1
Backups de red Con SQL SERVER

Backups de red Con SQL SERVER

|Views: 7.967|Likes:
Publicado porKrasis Press
En este artículo JM Alarcón nos ofrece un manual paso a paso sobre cómo conseguir que nuestros backups de base de datos se realicen directamente contra una carpeta de Red o un NAS. SQL Server no lo soporta por defecto, pero con esta técnica lo conseguirás sin problema, obteniendo grandes ventajas.
En este artículo JM Alarcón nos ofrece un manual paso a paso sobre cómo conseguir que nuestros backups de base de datos se realicen directamente contra una carpeta de Red o un NAS. SQL Server no lo soporta por defecto, pero con esta técnica lo conseguirás sin problema, obteniendo grandes ventajas.

More info:

Published by: Krasis Press on Jan 07, 2010
Copyright:Attribution Non-commercial Share Alike

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF or read online from Scribd
See more
See less

06/14/2013

pdf

SQL Server: cómo hacer copias de seguridad directamente en unidades de red

José Manuel Alarcón Aguín

SQL SERVER: CÓMO HACER COPIAS DE SEGURIDAD DIRECTAMENTE EN UNIDADES DE RED
Nivel: Intermedio

por José Manuel Alarcón Aguín

Generalmente, lo que más nos interesa a la hora de realizar copias de seguridad es hacerlas hacia alguna máquina o dispositivo especializado de la red local, distintos a la máquina en la que se ejecuta nuestra aplicación o -en nuestro caso concreto- el servidor de datos. Así podremos recuperarlos desde cualquier otra máquina ante cualquier contingencia que surja. En los Data Center (y en muchas oficinas) suelen existir sistemas NAS (Network Attached Storage, almacenamiento en red) cuyo propósito es precisamente albergar las copias de seguridad. SQL Server, sin embargo, sólo ofrece soporte nativo para realizar copias de seguridad en unidades de disco o dispositivos de backup hardware locales. Esto siempre me ha parecido una seria limitación, ya que hacer copias de seguridad en local no me resulta útil en absoluto. Y tiene muchas limitaciones más (como no comprimir o cifrar las copias), aunque esto es bueno para las empresas que venden herramientas especializadas en ello, como la excelente SQL Backup de Red Gate Software. Lo que muchos hemos hecho toda la vida ha sido lo siguiente: haces el backup en una carpeta local y programas, un tiempo prudencial después, la ejecución de un archivo .bat que mueva la copia a una unidad de red usando comandos del sistema operativo. Esto funciona pero añade complejidad ya que hay que coordinar ambas acciones y hay más puntos de fallo. Además hay una cuestión adicional que a mí ya me ha ocurrido en servidores viejos: si el disco local no tiene espacio suficiente no puedes hacer copias de seguridad (no te caben), cuando a lo mejor tienes cientos de GB libres en el NAS que no puedes aprovechar :-( Lo ideal sería hacer la copia directamente en el NAS sin pasar por el disco local. En este artículo voy a contar cómo podemos conseguir precisamente esto: hacer backups de SQL Server directamente a la red. Además cuento cómo conseguir un backup diario, con un archivo para día de la semana, que se van sobrescribiendo automáticamente, por lo que conseguimos de manera sencilla una retención de 7 días. Las instrucciones que doy a continuación funcionan con SQL Server 2005 y 2008, y las he sacado a base de prueba y fallo durante bastante tiempo. No he encontrado en Internet instrucciones algunas que contemplen esta operación por completo, sobre todo en lo referente a los pequeños detalles (como la seguridad) que hacen que llegue a funcionar.

1.- Cuenta de ejecución de SQL Server
Lo primero que tenemos que hacer es asegurarnos de que nuestro sistema SQL Server va a tener acceso a la red local. Tanto el motor de bases de datos como el agente de SQL Server se ejecutan suplantando a un determinado usuario del sistema operativo.

Mucha gente instala SQL Server para que sus servicios se ejecuten bajo la cuenta de sistema, ya que ésta tiene acceso a cualquier recurso del sistema local, y simplifica la gestión. Esto, aparte de un posible problema de seguridad (en el que no voy a entrar en este texto), no es necesario en absoluto. Además hay una cuestión fundamental: la cuenta de sistema no tiene capacidades para acceder a la red. Por lo tanto si La cuenta de sistema no tiene nuestro servidor de datos se ejecuta bajo System no capacidades para acceder a la podremos realizar copias de seguridad a unidades de red. Network Service, sin red. embargo, sí nos sirve para La cuenta recomendada para ejecutar SQL Server y nuestros propósitos. conseguir acceso a la red es "Servicio de Red" (o, en inglés, "Network Service"). Esta cuenta tiene los permisos suficientes para ejecutar SQL Server sin problema y además nos sirve para nuestro propósito. Lo podemos cambiar desde la configuración de Servicios de SQL Server, en las propiedades de cada servicio:

Figura 1.- Propiedades del servicio Agente de SQL Server Si las copias de seguridad las vamos a hacer escribiendo el comando desde el SQL Management Studio, esta cuenta debemos asignarla al motor de SQL Server. Si, como es más común, las copias de seguridad serán automatizadas con el agente de SQL Server, es este servicio el que debe ejecutarse con una cuenta con acceso a la red. En cualquier caso (y sin ser

especialista en SQL Server), mi recomendación sería que pusiésemos ambos servicios a ejecutarse bajo esta cuenta.
NOTA: en realidad si creamos un usuario especial para ejecutar SQL Server y a éste le damos acceso a los recursos de red que nos interesen, ya tendríamos permiso para hacer los backups y todo lo que explico no sería necesario, pues podrías especificar la ruta remota sin más. Lo que explico aquí es cómo conseguir esto usando una instalación típica de SQL Server que se ejecuta con alguna de las cuentas predeterminadas (en este caso Network Service), y sin tener que crear un usuario especial sólo por el hecho de hacer copias a la red. Lo explicado aquí es más lioso pero ayuda a mantener separados la operación normal del gestor de datos y las copias de seguridad, que pienso que no deberían estar tan entrelazadas. En mi opinión debería ser todo más fácil y SQL Server debería ofrecer una opción para suplantar a un usuario específico a la hora de hacer copias (que es en el fondo lo que se consigue con este documento), lo haría que todo fuese más fácil.

2.- Creación de la cuenta para acceso a la red
Una cosa es la cuenta bajo la que se ejecuta el servidor y otra es la cuenta que usaremos para acceder al recurso de red. Tendrá que ser un usuario que tenga permisos de lectura y escritura en la carpeta compartida en la que queremos escribir el backup. Si las máquinas no están todas bajo un mismo dominio de Directorio Activo -es decir, utilizamos usuarios diferentes para cada máquina- debemos crear en la máquina en la Debemos crear en la máquina en que se ejecuta SQL Server una cuenta de usuario con el la que se ejecuta SQL Server una mismo nombre y clave que el que usaremos para cuenta de usuario con el mismo acceder a dicho recurso. Por ejemplo, si el NAS tiene un nombre y clave que el que usuario llamado "NAS\Backup" con clave "backup", usaremos para acceder a la red. deberemos crear también en local este mismo usuario. Cuando accedemos interactivamente desde el explorador de Windows al recurso remoto podemos escribir el usuario y la clave en la ventana que aparece, pero con el Script SQL que usaremos aquí, o disponemos del usuario también en local, o no funcionará.

3.-Habilitar el comando xp_cmdshell
Este comando permite ejecutar comandos del sistema operativo desde scripts T-SQL. Vamos a necesitarlo para habilitar el acceso a los recursos remotos. Por defecto viene desactivado y no podremos usarlo, ya que reviste bastante peligro puesto que otorga acceso a comandos del sistema que pueden ser muy peligrosos (como formatear el disco duro, por ejemplo). En SQL Server 2000 venía habilitado y las aplicaciones con problemas de seguridad debidas a inyección SQL y ejecutadas bajo cuentas con demasiados privilegios eran un agujero para la seguridad, por eso en la versión 2005 y posteriores se ha deshabilitado por defecto.

En nuestro caso lo necesitaremos, así que tenemos que habilitarlo. Para ello debemos lanzar las siguientes instrucciones T-SQL desde SQL Management Studio:
-- Permitir el cambio de opciones avanzadas de SQL Server EXEC sp_configure 'show advanced options', 1 GO -- Reconfigurar para que permita modificarlas. RECONFIGURE GO -- Habilitar la característica xp_cmdshell EXEC sp_configure 'xp_cmdshell', 1 GO -- Refrescar para que el cambio surta efecto RECONFIGURE GO

4.- Programar la copia de seguridad
Ahora ya tenemos las bases necesarias para que esto funcione, así que lo único que nos resta es crear una nueva tarea del agente SQL que se encargue de realizar la copia de seguridad. En el apartado de "pasos de la tarea" crearemos un nuevo paso con las siguientes instrucciones TSQL:
SET LANGUAGE us_english exec xp_cmdshell 'net use \\192.168.1.1\backups\SQL clave /user:backup' DECLARE @Archivo AS nvarchar(100) SET @Archivo = N'\\192.168.1.1\Backups\SQL\MiBaseDeDatos_' + DATENAME(WEEKDAY, GETDATE()) + '.bak' BACKUP DATABASE [MiBaseDeDatos] TO DISK = @Archivo WITH NOFORMAT, INIT, NAME = N'MiBaseDeDatos-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10; exec xp_cmdshell 'net use \\192.168.1.1\Backups\SQL /D'

Lo que estamos haciendo es poner el lenguaje actual en inglés. Yo suelo usar siempre el inglés para todo y tengo los sistemas en este idioma porque considero que tiene muchas ventajas. Tú, claro está, puedes usar el idioma que prefieras. El hecho de establecer el idioma explícitamente es para asegurarnos de que si transportamos el Script a otro servidor diferente los archivos de copia de seguridad van a tener nombres consistentes, ya que usaremos el día de la semana para crear un archivo .bak cada día (lunes, martes, y así sucesivamente). El comando xp_cmdshell de la segunda línea habilita la conexión a la carpeta de red \backups\SQL que está en nuestro NAS, con dirección IP 192.168.1.1. Podríamos haber usado el nombre de red (por ejemplo \\NAS o similar), pero con la IP nos aseguramos de que siempre va a funcionar, pues lo otro a veces he detectado que da problemas. En esta línea, por tanto, debes poner la ruta de red que quieres usar e indicar la clave y nombre de usuario que usaremos para acceder (ver punto 2). Las dos siguientes líneas declaran el nombre y la ruta del archivo de backup que vamos a crear. Lo que yo hago aquí es ponerle como sufijo el nombre del día de la semana en inglés, de forma que se me crean copias de seguridad diarias con el nombre "MiBaseDeDatos_Monday.bak", "MiBaseDeDatos_Tuesday.bak", y así sucesivamente. Con esto consigo tener una copia

completa cada día de la semana, con una retención de 7 días, que se va sobrescribiendo automáticamente cuando pasa una semana. Para mí esto es más que suficiente, pero si quisieras más retención o más de una copia diaria al día tendrías que buscar una forma alternativa para nombrar los archivos (por ejemplo, con el día del mes, o añadiéndole la hora). La siguiente línea es una instrucción T-SQL normal y corriente para crear una copia de seguridad, sólo que en este caso ya se hará directamente sobre la carpeta de red, y no en local, que es lo que deseábamos. Finalmente con xp_cmdshell, nos desconectamos del recurso de red. Esto es necesario para que no queden conexiones abiertas y nos impidan volver a reconectar en sucesivas ocasiones.

Acerca del autor
José Manuel Alarcón Aguín, ASP.NET Visual Developer MVP. Es ingeniero industrial y especialista en consultoría de empresa. Ha escrito varios libros, habiendo publicado más de 300 artículos sobre informática e ingeniería en publicaciones especializadas. Es colaborador de MSDN. José Manuel es también Instructor Certificado de Microsoft (MCT). Blog: www.jasoft.org Twitter: jm_alarcon

Acerca de campusMVP
CampusMVP te ofrece la mejor formación en tecnología Microsoft a través de nuestros cursos online y nuestros libros especializados, impartidos y escritos por conocidos MVP de Microsoft. Visita nuestra página y prueba nuestros cursos y libros gratuitamente. www.campusmvp.com

Reconocimiento - NoComercial - CompartirIgual (by-nc-sa): No se permite un uso comercial de este documento ni de las posibles obras derivadas, la distribución de las cuales se debe hacer con una licencia igual a la que regula esta obra original. Se debe citar la fuente.

You're Reading a Free Preview

Descarga
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->