Backup SQL contra dispositivos de red

febrero 16, 2012 13:36 by Admin
  Desde SQL no podemos activar un trabajo de mantenimiento realizando backup de nuestros datos a una unidad de red tipo NAS, por lo que, realizar un desembolso de este tipo para estas tareas resulta del todo inviable. SQL no nos reconoce la unidad aun mapeándola como unidad de red, solo reconocerá los discos físicos del servidor. Por tanto, hemos invertido en un NAS de red pero no podemos volcar nuestros backup de SQL directamente desde una tarea de backup de SQL. Podemos optar por la opción más trabajosa y que nos exige un cálculo del tiempo para sincronizar tareas y es, realizar una copia normal en un disco del servidor y posteriormente, mediante un script mover esos datos a otra ubicación. Descartamos por tanto realizar copias de SQL en dispositivos de red? Definitivamente NO, se puede hacer, como? Aquí te explicamos como realizarlo. Es necesario implementar el CmdShell en SQL, pero OJO en muchos sitios activar esta característica está catalogado como un agujero de seguridad, y ciertamente lo es, puesto que si un buen hacker se hace con el control de nuestra base de datos, puede acceder a disco mediante comandos cmdshell y eliminar, cambiar o renombrar ficheros. Esta recomendación queda a criterio de cada administrador de Bases de Datos. Por tanto, aunque no es recomendable su uso, por ejemplo para una granja de servidores web, en los que el acceso a registros de la base de datos se hace a través de programación, si somos pulcros en nuestra programación, podremos ejecutarlos sin problemas. Sería bueno que MS evolucionara el SQL para que reconociera, al menos las unidades mapeadas de red, bueno, vamos a meternos en materia. Activar CmdShell en SQL 2005: EXEC master.dbo.sp_configure 'show advanced options',1 RECONFIGURE EXEC master.dbo.sp_configure 'xp_cmdshell',1 RECONFIGURE Activar CmdShell en SQL 2008: USE master GO EXECUTE sp_configure 'show advanced options', 1 RECONFIGURE WITH OVERRIDE GO EXECUTE sp_configure 'xp_cmdshell', '1' RECONFIGURE WITH OVERRIDE GO EXECUTE sp_configure 'show advanced options', 0 RECONFIGURE WITH OVERRIDE GO Una vez ejecutado ya tenemos acceso a los comandos CMD. Como configurar nuestro backup: Vamos de nuevo a la consola del SQL y nos vamos a los planes de mantenimiento y creamos un nuevo plan que llamaremos Copias_red En el cuadro de herramientas que tenemos en la parte inferior izquierda de nuestra consola de SQL arrastramos al subplan un elemento Tarea Ejecutar Instruccion T-SQL, en Ingles estará como Execute T-SQL Statement Task. Abrimos la tarea y establecemos que la conexión sea con el servidor local. El código que vamos a implementar es el siguiente: SET LANGUAGE spanish execxp_cmdshell ‘net use \\xxx.xxx.xxx.xxx\recurso password/user:nombre de usuario’ DECLARE @Archivo AS nvarchar(100) SET @Archivo = N'\\xxx.xxx.xxx.xxx\recursocompartido\nombrefichero' + DATENAME(WEEKDAY, GETDATE()) + '.bak' BACKUP DATABASE [NOMBREBBDD] TO  DISK = @Archivo WITH NOFORMAT, INIT,     NAME = N'NOMBREBBDD-Full Database Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10; exec xp_cmdshell 'net use \\xxx.xxx.xxx.xxx\recurso /D' En este script tendremos que cambiar SET LANGUAGE spanish por english si queremos los nombres del día en inglés  \\xxx.xxx.xxx.xxx\recurso por la ruta UNC por la IP del disco de red y recurso compartido password, por la password del recurso nombre de usuario por el usuario, si fuera miembro de un dominio pues dominio\usuario nombredefichero por el nombre del fichero que va a tener el backup, esto seguido del nombre del día de la semana, con esto aseguramos tener una semana completa de backup y que posteriormente los vaya sobreescribiendo.NOMBREBBDD, lo sustituimos por el nombre de la base de datos de la que queremos realizar el backup.  Finalmente el comando exec xp_cmdshell 'net use \\xxx.xxx.xxx.xxx\recurso /D' es para desconectarnos del recurso de red. Una vez introducido nuestro script, programamos el momento de realizar el backup y listo, ya tenemos nuestras copias en nuestro dispositivo de red.   Espero que os haya servido Alberto