RSS 2.0 Atom 1.0 CDF  
JASoft.org - SQL Server
El blog de José Manuel Alarcón Aguín. Programación .NET y mucho más...
 

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 dispositvos 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 mi 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 post 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), 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 nuestro servidor de datos se ejecuta bajo System no podremos realizar copias de seguridad a unidades de red.

La cuenta recomendada para ejecutar SQL Server y conseguir acceso a la red es "Servico 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:

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 esta cuenta. En cualquier caso (y sin ser especialista en absoluto en SQL Server), mi recomendación sería que pusiésemos ambos servicios a ejecutarse bajo esta cuenta.

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 no estamos bajo un mismo dominio de Directorio Activo -es decir, utilizamos usuarios diferentes para cada máquina- debemos crear en nuestra máquina local (en la que se ejecuta SQL Server) una cuenta de usuario con el mismo nombre y clave que el que usaremos para acceder a dicho recurso. Por ejemplo, si el NAS tiene un usuario llamado "NAS\Backup" con clave "backup", 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 ventan que aparece, pero con el Script SQL que usaremos aquí, o disponemos del usuario también en local, o no funcionará. El motivo no lo tengo muy claro, pero es así :-(

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 Serevr 2000 venía habilitado por defecto y las aplicaciones con problemas de seguridad debidas a inyeción SQL y ejecutadas bajo cuentas con demasiados privilegios eran una coladera, por eso en la versión 2005 y posteriores se ha deshabilitado por omisión.

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

Ya está.

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 T-SQL:

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 pero tú, claro está, puedes usar el idioma que prefieras. El hecho de establecer el idioma es para asegurarnos de que si transportamos el Script a otro servidor diferente los nombres de los archivos de copia de seguridad van a tener nombres consistentes, ya que usaremos el nombre del 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 queires usar e indicar la clave y nombre de usuario que usaremos para acceder (ver paso 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 mi 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.

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.

Espero que te resulte útil y que mis horas de prueba y error te ahorren a ti mucho tiempo. Si me loquieres agradecedr, ya sabes, matricúlate en alguno de nuestros cursos o compra alguno de nuestros libros ;-)

Por: José Manuel Alarcon | Wednesday, January 06, 2010 7:27:11 PM (Hora estándar romance, UTC+01:00)  #    Comments [2] - Trackback
Tags: SQL Server


Sígueme en:

:: Twitter JM Alarcón: tecnología, marketing, este blog y frikadas varias
:: Twitter campusMVP: los mejores recursos sobre tecnología Microsoft: trucos, artículos, noticias, vídeos...
:: Facebook campusMVP: los mismos mejores recursos pero en directamente en Facebook.
:: Boletín campusMVP Nuestra publicación electrónica, una vez al mes en tu buzón de correo.
 
Banner

La base de datos Northwind es utilizada en todo tipo de artículos, libros y cursos para ilustrar los conceptos básicos de trabajo con bases de datos Sql Server. Te la encuentras constantemente en todas partes.

Los programadores principiantes a veces tienen dificultades para instalarla y empezar a usarla. De hecho yo mismo me encuentro en ocasiones explicándoselo a alguno que otro que se encuentra algo perdido.

Por ello me he decidido a escribir un texto dirigido a absolutos principiantes que explica cómo descargar, instalar y aprender a conectarse a esta famosa base de datos de Microsoft.

Está colgado en Scribd para leer on-line e imprimir:

ARTÍCULO: Instalación de la base de datos Northwind - Principiantes

¡Espero que le sea útil a mucha gente!

Por: José Manuel Alarcon | Saturday, October 31, 2009 8:02:34 PM (Hora estándar romance, UTC+01:00)  #    Comments [0] - Trackback
Tags: SQL Server


Sígueme en:

:: Twitter JM Alarcón: tecnología, marketing, este blog y frikadas varias
:: Twitter campusMVP: los mejores recursos sobre tecnología Microsoft: trucos, artículos, noticias, vídeos...
:: Facebook campusMVP: los mismos mejores recursos pero en directamente en Facebook.
:: Boletín campusMVP Nuestra publicación electrónica, una vez al mes en tu buzón de correo.
 
Banner

Pues esto, pero con algún taco de por medio, fue lo que me pregunté la primera vez que quise utilizarlo en la versión 2008 de SQL Server.

En SQL Server 2005 estaba en el nodo de administración del SQL Server Management Studio, bien a la vista y fácil de localizar. Pero en 2008 en ese nodo no hay nada que se le parezca ?¿?¿

Era imposible que se o hayan cargado así que en algún sitio debía de estar ¿no?

Bueno la solución es fácil, ahora está en un botón de la barra de herramientas y en el menú contextual del nodo raíz con el nombre del servidor:

La verdad es que podían haber dejado el nodo en donde estaba también ¿no?

La buena noticia es que este nuevo monitor no tiene nada que ver con el anterior. Este es mucho más potente y da información muy valiosa, informándote incluso de las consultas que están tomando más tiempo y dándote pistas para optimizar las aplicaciones:

Espero que a alguno le ayude a encontrarlo si busca este tema en Google :-)

Por: José Manuel Alarcon | Friday, July 31, 2009 6:35:50 PM (Hora de verano romance, UTC+02:00)  #    Comments [0] - Trackback
Tags: SQL Server


Sígueme en:

:: Twitter JM Alarcón: tecnología, marketing, este blog y frikadas varias
:: Twitter campusMVP: los mejores recursos sobre tecnología Microsoft: trucos, artículos, noticias, vídeos...
:: Facebook campusMVP: los mismos mejores recursos pero en directamente en Facebook.
:: Boletín campusMVP Nuestra publicación electrónica, una vez al mes en tu buzón de correo.
 
Banner

SQL Server dispone de una versión embebida que es tan interesante como desconocida y poco utilizada. Se trata de SQL Server Compact Edition. La mayor parte de la gente la desecha como opción porque la asocia con crear aplicaciones para dispositivos móviles (como PDAs o teléfonos), pero lo cierto es que tiene una cantidad espectacular de aplicaciones en entornos de escritorio.

Para empezar esta versión ligera de SQL Server es gratuita y compatible con su hermano mayor, con multitud de características avanzadas como SGBD. No necesita tener instalado un servicio permanentemente en ejecución en el sistema y es extremadamente ligera (tanto que puedes usarla en un teléfono, así que eso lo dice todo). Una de las características más interesantes es la de todas las opciones de sincronización que ofrece, que nos permiten replicar y mantener en sincronismo datos entre sistemas homogéneos, por lo que la hace ideal para aplicaciones que deban trabajar conectadas de forma no permanente y para almacenamiento local.

Se le puede sacar partido para multitud de casos. Por ejemplo, imagínate una aplicación de TPV (ventas por terminal) que se usa en una red de tiendas y que almacena sus datos en una base de datos central. ¿Qué pasa cuando falla la conexión a Internet? ¿Te vas a quedar sin poder facturar?. Obviamente no. Pues en este caso SQL Server Compact es un gran aliado ya que te permitiría implementar en tu TPV de manera sencilla una solución de almacenamiento local sin instalación compatible con SQL Server que funcionase cuando no hay conexión y que sincronizase de manera automática los datos cuando vuelva a haber conectividad.

Microsoft SQL Server Compact 2008 SP1: Referencia CompletaEn general cualquier situación que requiera un almacenamiento avanzado, incluso con simultaneidad de acceso por parte de varios usaurios, pero que no justifique el hecho de instalar un SQL Server completo es el lugar apropiado para usar SQL Server Compact.

Y la aparición del Service Pack 1 para este entorno con la inclusión de soporte para Entity Framework o posibilidad de usarla en entornos de 64 bits la hacen más potente todavía.

Total, que el hecho de que esta BD sea tan infrautilizada nos ha llevado a sacar desde Krasis Press un nuevo libro específicamente dedicado al tema (y el más grande que hemos hecho hasta el momento, con bastante más de 400 páginas). Su autor, José Miguel Torres, es un gran experto en este campo con muchos años de experiencia real en este tipo de aplicaciones de Smart Client comentados. Además el libro se ha concebido como una referencia completa que inluye todo lo que necesitas para dominar el entorno: desde su puesta en marcha y utilización, hasta su despliegue en entornos de producción, pasando por utilización, el lenguaje SQL, su acceso con ADO.NET 3.5, entornos de sincronización y todo tipo de conceptos sobre arquitectura de aplicaciones. Incluye por supuesto las novedades del SP1 aparecido esta misma semana. ¡Más fresco imposible! :-)

Desde mi punto de vista un "must have" que todo programador de .NET debería conocer.

En la página del libro en Krasis Press tenéis toda la información, incluyendo un completo índice e introducción y el código fuente de ejemplo completo. Si lo compras te lo enviamos a casa por mensajero gratuitamente (dentro de la península) :-)

Por: José Manuel Alarcon | Friday, August 08, 2008 8:34:23 AM (Hora de verano romance, UTC+02:00)  #    Comments [1] - Trackback
Tags: Noticias Programación | SQL Server


Sígueme en:

:: Twitter JM Alarcón: tecnología, marketing, este blog y frikadas varias
:: Twitter campusMVP: los mejores recursos sobre tecnología Microsoft: trucos, artículos, noticias, vídeos...
:: Facebook campusMVP: los mismos mejores recursos pero en directamente en Facebook.
:: Boletín campusMVP Nuestra publicación electrónica, una vez al mes en tu buzón de correo.
 
Banner

Desde ayer los suscriptores de MSDN y Technet ya puede descargarse la versión definitiva de SQL Server 2008.

Se trata de una gran noticia :-)

Si eres suscriptor, ahí te dejo los enlaces:

Las versiones en otros idiomas distintos al inglés se irán colocando en las próximas semanas.

Por: José Manuel Alarcon | Thursday, August 07, 2008 10:47:58 AM (Hora de verano romance, UTC+02:00)  #    Comments [0] - Trackback
Tags: Noticias Programación | SQL Server


Sígueme en:

:: Twitter JM Alarcón: tecnología, marketing, este blog y frikadas varias
:: Twitter campusMVP: los mejores recursos sobre tecnología Microsoft: trucos, artículos, noticias, vídeos...
:: Facebook campusMVP: los mismos mejores recursos pero en directamente en Facebook.
:: Boletín campusMVP Nuestra publicación electrónica, una vez al mes en tu buzón de correo.
 
Banner
Page 1 of 2 in the SQL Server category Next Page
Copyright © 2010 José Manuel Alarcón Aguín. All rights reserved.