SQL Server como hacer copias de seguridad directamente en unidades de red 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 concretoco ncreto- el servidor de datos. Así podremos recuperarlos desde cualquier otra máquina ante cualquier contingencia contingenc ia que surja. En los Data enter !" en muchas o#icinas$ suelen e%istir sistemas &A' ! Network Attached Storage, Storage, almacenamiento en red$ cu"o propósito es precisamente al(ergar las copias de seguridad. ')* 'erver, sin em(argo, sólo o#rece soporte nativo para realizar copias de seguridad en unidades de disco o dispositvos de (ac+up hardare locales. Esto siempre me ha parecido una seria limitación, "a que hacer copias de seguridad en local no me resulta til en a(soluto. tiene muchas limitaciones más !como no comprimir o ci#rar las copias$, aunque esto es (ueno para las empresas que venden herramientas especializadas en ello, como la e%celente ')* /ac+up de 0ed Gate 'o#tare.. 'o#tare *o que muchos hemos hecho toda la vida ha sido lo siguiente1 haces el (ac+up en una carpeta local " programas, un tiempo prudencial despu2s, la ejecución de un archivo .(at que mueva la copia a una unidad de red usando comandos del sistema operativo. Esto #unciona pero a3ade complejidad "a que ha" ha " que coordinar am(as acciones " ha" más puntos de #allo. Además ha" una cuestión adicional que a mi "a me ha ocurrido en servidores viejos1 si el disco local no tiene espacio su#iciente no puedes hacer copias de seguridad !no te ca(en$, cuando a lo mejor tienes cientos de G/ li(res en el &A' que no puedes aprovechar 1-! *o ideal sería hacer la copia cop ia directamente en el &A' sin pasar por el disco local. En este post vo" vo " a contar cómo podemos conseguir precisamente esto1 hacer backups de SQL Server directamente a la red. Además cuento cómo conseguir un (ac+up diario, con un archivo para día de la semana, que se van so(rescri(iendo automáticamente, por lo que conseguimos de manera sencilla una retención de 4 días. *as instrucciones que do" a continuación #uncionan con ')* 'erver 5667 " 5668, " las he sacado a (ase de prue(a " #allo durante (astante tiempo. &o he encontrado en 9nternet instrucciones algunas que contemplen esta operación por completo, so(re todo en lo re#erente a los peque3os detalles !como la seguridad$ que hacen que llegue a #uncionar. 1.- Cuenta de ejecución de SQL Server
*o primero que tenemos que hacer es asegurarnos de que nuestro sistema ')* 'erver va a tener acceso a la red local. :anto el motor de (ases de datos como el agente de ')* 'erver se ejecutan suplantando a
un determinado usuario del sistema operativo. ;ucha gente instala ')* 'erver para que sus servicios se ejecuten (ajo la cuenta de sistema, "a que 2sta tiene acceso a cualquier recurso del sistema local, " simpli#ica la gestión. Esto, aparte de un posi(le pro(lema de seguridad !en el que no vo" a entrar$, no es necesario en a(soluto. Además ha" una cuestión #undamental1 la cuen ta de sistema no tiene capacidades para acceder a la red.
'i las copias de seguridad las vamos a hacer escri(iendo el comando desde el ')* ;anagement 'tudio, esta cuenta de(emos asignarla al motor de ')* 'erver. 'i, como es más comn, las copias de seguridad serán automatizadas con el agente de ')* 'erver, es este servicio el que de(e ejecutarse con esta c uenta. En cualquier caso !" sin ser especialista en a(soluto en ')* 'erver$, mi recomendación sería que pusi2semos am(os servicios a ejecutarse (ajo esta cuenta. 2.- Creación de la cuenta para acceso a la red
>na cosa es la cuenta (ajo la que se ejecuta el servidor " otra es la cuenta que usaremos para acceder al recurso de red. :endrá que ser un usuario que tenga permisos de lectura " escritura en la carpeta
compartida en la que queremos escri(ir el (ac+up. 'i no estamos (ajo un mismo dominio de Directorio Activo -es decir, utilizamos usuarios di#erentes para cada máquina- de(emos crear en nu estra máquina local !en la que se ejecuta ')* 'erver$ una cuenta de usuario con el mismo nom(re " clave que el que usaremos para acceder a dicho recurso.
Este comando permite ejecutar comandos del sistema operativo desde scripts :-')*. amos a necesitarlo para ha(ilitar el acceso a los recursos remotos.
a está. $.- %rogramar la copia de seguridad
Ahora "a tenemos las (ases necesarias para que esto #uncione, así que lo nico que nos resta es crear una nueva tarea del agente ')* 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 :-')*1 SE/ L0(#+0#E us_english e.ec .p_cmdshell 'net use \\192.168.1.1\backups\SQL clave 1user2bac3up' 4ECL0%E 50rchivo 0S nvarchar6"778 SE/ 50rchivo 9 ('::";<"=>"":?ac3ups:SQL:@i?ase4e4atos_' A 40/E(0@E6BEE40D! #E/40/E688 A 'ba3' ?0C+P 40/0?0SE @i?ase4e4atosF /$ 4*S 9 50rchivo B*/, ($)$%@0/! *(*/! (0@E 9 ('@i?ase4e4atos-)ull 4atabase ?ac3up'! S*P! ($%EB*(4! ($+(L$04! S/0/S 9 "7G e.ec .p_cmdshell 'net use ::";<"=>"":?ac3ups:SQL 14'
*o que estamos haciendo es poner el lenguaje actual en ingl2s. o suelo usar siempre el ingl2s para todo " tengo los sistemas en este idioma porque considero que tiene muchas ventajas pero t, claro está, puedes usar el idioma que pre#ieras. El hecho de esta(lecer el idioma es para asegurarnos de que si transportamos el 'cript a otro servidor di#erente los nom(res de los archivos de copia de seguridad van a tener nom(res consistentes, "a que usaremos el nom(re del día de la semana para crear un archivo .(a+ cada día !lunes, martes, " así sucesivamente$. El comando %pBcmdshell de la segunda línea ha(ilita la cone%ión a la carpeta de red ?(ac+ups?')* que está en nuestro &A', con dirección 9< C5.C8.C.C.