sábado, 13 de febrero de 2010

Libros: Data Modeling con SQL Server

El proceso de cómo almacenar información sobre la estructura lógica que va a representar una base de datos es lo que se conoce como Data Modeling. Puede verse como aquellos fundamentos que permiten pasar del planteamiento de un modelo abstracto que cubra unas necesidades reales, a su mapeo o implementación sobre una estructura de memoria.

En el libro “A Developer's guide to Data Modeling for SQL Server” (de Eric Johnson y Joshua Jones) se pone de manifiesto cómo a menudo la improvisación y la comodidad a la hora de desarrollar una base de datos, o bien al involucrarse en un cambio de plataforma, da resultados desastrosos. Se incide por ello en la idea de que el diseño de una base de datos debería ser independiente siempre de la plataforma sobre la que se va a implementar, precisamente por esas necesidades que pueden plantearse de cambio de soporte. Esto es algo bastante común dados los cada vez más cortos periodos de renovación exigidos en muchos sistemas. Y es en todo ese respaldo teórico que representa el Data Modeling donde está la clave para llegar a una base de datos con un diseño sólido.

El libro se divide en cuatro secciones que abarcan todo el proceso de diseño. En un principio se tratan de introducir los motivos por los que darle la debida importancia a ese proceso es vital: consistencia de los datos, escalabilidad, fácil manejo de los datos a posteriori o mejoras en el funcionamiento del sistema. Para lograrlos son necesarias ciertas bases teóricas que se explican detalladamente a continuación, abarcando elementos físicos y lógicos necesarios así como la normalización del modelo de datos.

La siguiente sección trata de cómo llevar una necesidad dentro del ámbito empresarial o institucional a la práctica, en forma del producto a desarrollar. En este proceso es muy importante tener un punto de partida que interpretar después. Por ello, para poder definir qué queremos hacer, se especifican diferentes formas de recolección de información, algunas desde el mismo escenario en el que se generan los datos a almacenar: entrevistas, observación, casos de estudio o experiencias previas.

El siguiente paso es plantear el modelo lógico que va a ser implementado, utilizando diagramas y definiendo las entidades, relaciones o atributos que correspondan. En este punto se dedica un capítulo a mencionar problemas que suelen surgir debido a decisiones previas erróneas que salen a relucir al definir la estructura lógica y también cómo solventarlos. En el último punto se lleva el modelo lógico a lo que el texto denomina modelo físico, es decir, reflejar el trabajo anterior sobre la plataforma elegida, en este caso SQL Server. Y aquí será necesario asignar nombres a los objetos de la base de datos siguiendo unas determinadas directrices, creando todos los índices necesarios.

Por último se revisa el nivel de abstracción, con el objetivo de ocultar al usuario detalles de la implementación que no le afectan y proporcionar flexibilidad y extensibilidad a la solución, además de representar una capa adicional de seguridad. En los anexos se ponen ejemplos bastante ilustrativos y se hace mención a normas usuales en la nomenclatura de SQL Server.

Hasta aquí se ha hablado de muchos aspectos generales de SQL Server, pero no se habían mencionado las directrices a seguir cuando se pretende implementar una base de datos. Para aquellos formados en el trabajo con ellas, la mayoría de ideas que se exponen les resultarán familiares, y en general en este libro se tiene un manual de operación de gran utilidad para adoptar buenos hábitos a la hora realizar este tipo de desarrollos. Y esto, la organización y los buenos hábitos, son fundamentales para obtener un producto final de calidad, sobre el que trabajar en adelante con comodidad.

viernes, 12 de febrero de 2010

Libros: SQL Server Profiler & Rendimiento

Dentro de las tareas relativas a la administración de una base de datos, deben tenerse también en cuenta aquellas que permiten mejorar su rendimiento. Manteniendo cierto control sobre las operaciones que se realizan en el sistema, puede realizarse un seguimiento exhaustivo de cómo se están llevando a cabo en él distintas operaciones. Y esto puede hacerse sin más que supervisar una instancia del motor de la base de datos o de los servicios de análisis y capturar y guardar los datos obtenidos con vistas a ser analizados. SQL Server proporciona una herramienta para realizar esta labor, que se denomina SQL Server Profiler.

El libro “Mastering SQL Server Profiler” de Brad McGehee explica de forma detallada como sacarle el máximo partido a esta herramienta, lo que se traduce en aumentar el rendimiento de la base de datos. Hacer uso del Profiler de SQL Server permite saber por ejemplo cuándo determinadas consultas sobre el sistema ralentizan la velocidad de operación de la base de datos o conocer qué tipos de operaciones puedan llevarlo a situaciones de bloqueo, entre otras muchas acciones relativas a cómo es su funcionamiento.

En los primeros capítulos se realiza una breve introducción a la herramienta de modo que el usuario pueda conocer cómo trabaja. En este punto, además de permitir familiarizar al usuario con la terminología, se definen las “trazas”, elementos básicos de análisis a través de los que se pueden capturar datos basándose en clases de evento, y determinados filtros y columnas de datos. Después se pretende informar al lector de cómo utilizar las trazas. Y esto abarca realizar un filtrado eficiente o seleccionar sólo determinados eventos y columnas, que aporten de forma concreta sólo aquellos datos que se necesitan. Hacer esto es fundamental para no acumular información de más que después complique el análisis de la que realmente interesa y para no sobrecargar el sistema sin necesidad.

Tras estas primeras nociones, en el capítulo 3 se explica cómo hacer una traza para detectar consultas lentas y cómo analizar la información resultante para entender cómo hacer las mejoras pertinentes. En el siguiente capítulo se detallan una serie de situaciones problemáticas comunes y cómo identificarlas y corregirlas de modo que esto pueda llegar a hacerse antes, en la medida de lo posible, de forma preventiva.

En los últimos capítulos se hace referencia al trabajo global con lo visto hasta este punto, de modo que se puedan implementar auditorias sobre la base de datos, incluso permitiendo realizar las trazas utilizando directamente T-SQL sobre el sistema, en lugar de utilizar la interfaz del Profiler. Después se relacionan una serie de buenas prácticas generales que pueden servir al usuario para sacarle el máximo partido y en el último capítulo se incluye un extenso y detallado listado de eventos clasificados según categorías y de las columnas de las que se hace uso en la interfaz gráfica para caracterizar cada evento, intentando mostrar al lector cuáles son más útiles.

En definitiva en el libro se pretende que el usuario saque el máximo partido a SQL Server Profiler y, por ende, a su base de datos. Este tipo de gestión avanzada no supondrá grandes diferencias en el uso de sistemas de pequeña envergadura, pero sí en otros sistemas con grandes volúmenes de información y de consultas. Y además de esto siempre hay que tener en cuenta su labor más interesante: permitir al administrador conocer al detalle el funcionamiento de la base de datos en relación a los propósitos para los que fue diseñada.

martes, 9 de febrero de 2010

Libros: Empezando a trabajar con T-SQL

Cuando se trata de comenzar a trabajar en una nueva tecnología, o aplicación dentro de un determinado campo, resulta muy orientativo recurrir a determinados libros que ayuden a conocer las directrices generales del trabajo a realizar y solventar las dudas más comunes. Si además de esto aportan ejemplos de tareas, información sobre funciones y (en el caso que nos ocupa relativo a bases de datos) consultas utilizadas frecuentemente, u otro material práctico orientativo, serán de inmensa utilidad para el desarrollador.

En este caso vamos a hablar del libro “Beginning T-SQL with SQL Server 2005 and 2008” de Paul Turley y Dan Wood, y publicado por Wrox. Si resulta importante conocer todos los entresijos de la gestión de una base de datos implementada sobre SQL Server, también lo será conocer el lenguaje con el que se va a trabajar para tratar la información a almacenar. Para SQL Server se utiliza, como ya se mencionó en un post anterior, Transact-SQL. Se trata de una extensión de SQL que incorpora algunas propiedades adicionales respecto a este como control de flujo, variables locales, etc.

Comienza con una breve introducción a las características principales de T-SQL y a la arquitectura y a los principios de diseño relacional de SQL Server. Después dedica un capítulo a diferentes herramientas utilizadas por la aplicación, como pueden ser SQL Server Management Studio o SQL Server Business Intelligence Development Studio entre otras. En los siguientes capítulos se entra de lleno a contar con detalle aspectos de T-SQL que van desde las sintaxis para la manipulación y definición de datos, hasta una muy completa descripción de los elementos necesarios para llevar a cabo las consultas. En este último aspecto también se incluyen consultas a tablas múltiples, scripting, transacciones varias y operadores, y servicios especiales que permiten utilizar servicios avanzados.

En algunos aspectos menos básicos en general se centran los últimos capítulos, donde se trata la creación y gestión de objetos para la base de datos y la optimización de las consultas, todo ello suponiendo adquiridos los conceptos más esenciales anteriormente. Para terminar se hace alusión al traslado de los conceptos anteriores a distintas aplicaciones reales en las que incluir una base de datos como la estudiada, y que abarcan desde aplicaciones en local hasta servidores web o soluciones integradas en multi-sistemas.

En los apéndices finales se catalogan las sintaxis de comandos, las variables del sistema a utilizar y las funciones de referencia. Se incluyen listados de procedimientos relacionados con diversas tareas como por ejemplo el mantenimiento de la base de datos, seguridad, búsqueda de textos completos o consultas distribuidas. También incorpora algunos scripts de ejemplo así como ejercicios relativos a consultas y sus soluciones, en general cuestiones relativas a la sintaxis T-SQL que pueden ayudar al usuario a ver las diferencias con SQL y orientarle de modo práctico en los diferentes capítulos.

Para terminar comentar que el libro exige tener un conocimiento inicial de SQL, pretendiendo ayudar a sus lectores a dar el salto a T-SQL y adquirir aquellos conceptos necesarios para manejar bases de datos relacionales con ese lenguaje, orientando todas las explicaciones a consultas y aplicaciones utilizadas en la práctica, es decir, relativas al trabajo diario en la empresa.

lunes, 8 de febrero de 2010

Artículos: Copias de seguridad

Una de las tareas más engorrosas con las que tendrá que lidiar un administrador de una base de datos puede ser la tarea de recuperación de desastres. Las causas del incorrecto funcionamiento del sistema pueden ser variadas, pero además de intentar evitar llegar a situaciones así mediante diferentes políticas de seguridad “activas”, resulta muy importante tomar otras medidas “de respaldo” que permitan dar una rápida respuesta para que la base de datos intente continuar operando con normalidad sin que sus usuarios se vean afectados. En estos términos se encajan los procesos de creación y actualización de copias de seguridad de los datos almacenados, así como las facilidades para implementar la estructura de la base de datos de forma rápida y coherente con el estado anterior, y la protección de esta información mientras se mantiene “en la sombra”, entre otras. Lo ideal sería no tener que hacer uso de ninguna de estas medidas, pero implementarlas es básico en un entorno que pretenda dar un nivel de prestaciones aceptable.

En estas circunstancias se encuadran los artículos “Why bother with backup” y una segunda parte “SQL Server backup” de Douglas Reilly. En el primero de ellos el autor trata de dar una serie de razones por las que resulta de vital importancia mantener una copia de seguridad del sistema, contando algunos casos particulares de pérdidas por malos hábitos al actualizar los respaldos y en general las consecuencias que puede tener perder gran cantidad de información crítica. Uno de los aspectos interesantes que se tocan, es el ver la relación entre la probabilidad de perder más o menos información dependiendo del momento en el que esta haya sido generada. Esto está directamente relacionado con la frecuencia de actualización de la copia de seguridad, de modo que los datos que se han generado más recientemente tendrán una probabilidad muy alta de perderse, mientras que según se avanza hacia atrás en el tiempo esos datos se supone que deberán estar respaldados y la probabilidad de pérdida disminuye progresivamente.

En la segunda parte, se centra en describir de forma global esa relación entre las pérdidas de datos y el coste que tendría evitarlas, para más adelante repasar varios escenarios que podrían llevar a la pérdida de información: datos que se borran por error o de forma malintencionada, discos duros dañados o que comienzan a fallar, o situaciones de desastre donde agentes externos puedan dañar los servidores. En todos estos casos se requiere definir correctamente las medidas de respuesta que permitan garantizar la disponibilidad de acceso a la información, y lo que es más importante, hacer que las pérdidas sean mínimas.

Una tercera parte de esta serie de artículos, “Minimizing the need to restore a backup”, comenta algunos aspectos que tratan de minimizar el riesgo de perder los datos del sistema por fallos en los soportes físicos. Se apunta por ejemplo a mantener una alimentación redundante o a la utilización de discos duros con determinadas cualidades. En esta dirección se mencionan los diferentes niveles de discos duros RAID existentes, que utilizados en combinación soportan tolerancia a fallos y otra serie de beneficios centrados en proporcionar redundancia a los datos almacenados. Por último también se hace mención al modo de configurar SQL Server respecto a los dispositivos elegidos, referido al tipo de partición a utilizar, distribución de los datos, etc.

En definitiva todas estas consideraciones tratan de hacer que el sistema se resienta lo menos posible de una situación problemática. Otras medidas relacionadas sobre las que se han escrito artículos comentan la necesidad de verificar la integridad de la información almacenada, ya que si no fuese así los datos estarían dañados y por tanto sería necesario recuperarlos a un estado original estable, o a la encriptación de la información relativa a la copia de seguridad para garantizar su confidencialidad. En cualquier caso, no deja de tratarse de medidas de seguridad que, como se dijo al principio, tienen un papel en un segundo plano de cara a los usuarios pero en la mayoría de las ocasiones resultan críticas para garantizar un sistema preparado para afrontar condiciones adversas inusuales.

viernes, 5 de febrero de 2010

Artículo: Nuevos tipos de datos en SQL Server 2008

En este artículo cuyo título es “SQL Server 2008: The New Data Types”, de Brad McGehee, se hace una revisión de los nuevos tipos de datos que incorpora SQL Server en su última versión. Los tipos que se presentan tratan de resolver problemas de versiones anteriores para almacenar determinada información, y son los que se exponen a continuación:

- Hora/Fecha: Se incorporan cuatro nuevos tipos relativos a variables temporales que permiten facilitar las operaciones a realizar con ellas. Estos son, DATE, TIME, DATETIME2 y DATETIMEOFFSET.

- Relativos a información espacial: Dos nuevos tipos GEOMETRY y GEOGRAPHY que podrán albergar información basada en localizaciones, como podrían ser unas coordenadas GPS.

- Estructuras jerárquicas: Tipo HIERACHYID que permite modelar de forma jerárquica datos que siguen una estructura en forma de árbol. Este tipo resulta de vital importancia en modelos organizacionales como los que predominan en empresas e instituciones.

- Soporte a datos sin estructura definida: El tipo FILESTREAM es una extensión del tipo VARBINARY(MAX) que se incorporaba en versiones anteriores. Quizás es el tipo más representativo de las novedades, ya que solventa numerosas problemáticas que surgían anteriormente con las referencias en memoria a la hora de almacenar en la base de datos algunos archivos como pueden ser los multimedia. Es por ello que en el artículo se le presta más atención que al resto.

Entre los asuntos que trata el artículo, relativos a este último tipo de datos se incluye cómo utilizarlo, ya que previamente deberá activarse tanto en la base de datos en general como en las tablas, de forma que el sistema reconozca la nueva funcionalidad. También se muestran ejemplos de cómo configurar su nivel de acceso, o relativos al código Transact-SQL utilizado para crear una base de datos que incluya el nuevo tipo, o simplemente una tabla.

Se resalta cómo la utilización de estos nuevos tipos puede cambiar la forma de trabajar de los usuarios de forma radical, y no es de extrañar, ya que estos cambios surgen precisamente de la necesidad por parte de los desarrolladores de incorporar nuevas soluciones que faciliten su trabajo y muevan a un escenario mucho más dinámico su labor.

El artículo se engloba dentro de una serie de escritos que pretenden dar a conocer las nuevas posibilidades que aporta SQL Server 2008, algo importante para lograr la consolidación de cualquier aplicación en el mercado. Su éxito, al final, se basa en la adaptación entre las ventajas de las nuevas características y las necesidades actuales de sus usuarios.

jueves, 4 de febrero de 2010

Artículo: "Deploying Database Developments"

Existen numerosos mecanismos para llevar a cabo el despliegue de una base de datos. Partiendo de una necesidad concreta, los planteamientos que pueden adoptarse en el desarrollo de la base de datos van desde la improvisación, con los problemas que ocasionará posteriormente, hasta complicadas soluciones que aseguren el correcto funcionamiento del sistema en el escenario planteado y su futura escalabilidad, si procediese. Todo ello partiendo de que ese escenario impondrá en muchos casos cuál será el sistema de gestión de bases de datos a utilizar, ya que dependerá de numerosos factores, como la capacidad de la base de datos, si será distribuida o no, los tipos de acceso, etc.

En el artículo “Deploying Database Developments” de Alexander Karmanov se describe una metodología de implementación de las muchas existentes, que ayuda a comprender como llevar a cabo el despliegue de la base de datos de modo que se consiga un proyecto sostenible a medio y largo plazo.

Aunque existen herramientas que permiten comparar esquemas de desarrollo y sincronizar su funcionamiento, se hace hincapié en que estas abarcan soluciones generales que no tienen por qué adaptarse a un caso particular, y lo que es más importante, que más adelante debe ser la figura del administrador la que pueda decidir llevar a cabo un cambio en la base de datos conociendo perfectamente los pros y contras de ese cambio. El éxito de esta operación estará ligado entonces al modelo de desarrollo utilizado por el administrador, y con ello, al uso de un modelo consistente, comprensible y coherente con posibles actualizaciones del sistema. Aunque el artículo se refiere a una base de datos de SQL Server, utilizando T-SQL y herramientas vinculadas a esta aplicación, los conceptos que pueden extraerse de él podrían extrapolarse a cualquier otro sistema de gestión.

En el artículo se diferencian dos clases de “despliegue” del sistema, uno orientado a una implementación completa del mismo y otro hacia un despliegue incremental, más orientado a actualizaciones y cambios que puedan llevarse a cabo sobre una base de datos ya existente.

Se recalca en todo momento la importancia de registrar las variaciones que puedan realizarse, poniendo especial interés en identificar a la base de datos con un número de “actualización”, algo así como un control de versiones que indexe los cambios y los identifique para disponer de ellos para posibles necesidades futuras (de modo que esta operación sea lo menos tediosa posible). En este proceso de registro recomienda la utilización de hasta cuatro ramas en los archivos de configuración que abarquen aspectos comunes en la implementación de cambios: en primer lugar un archivo que se refiera a la estructura troncal del sistema de modo que a partir de él se definan las estructuras necesarias para ejecutar instancias de SQL Server conocidas, luego otros dos archivos referidos a los scripts necesarios para inicialización de la base de datos (creación de objetos e inserción de los datos iniciales), y un último que que especifique usuarios y permisos del sistema.

Otro aspecto interesante mencionado en el artículo se refiere a la separación lógica del código fuente según su función. En primer lugar está el código referido al esquema de la base de datos, todos aquellos elementos en los que realizar cambios afecta directamente a los datos almacenados. Después están aquellas funciones definidas por el usuario para el acceso a los datos, sin que cambios en ellas supongan una modificación de los datos en sí, y aquellos scripts que permiten insertar datos de modo automático por ejemplo para inicializar las tablas. Por otro lado estará la información relativa a los grupos de ficheros necesarios en la creación de la base de datos, ligado directamente con el esquema planteado inicialmente. También se especifica otro grupo lógico para aquellas descripciones de las políticas de acceso y de permisos, y en última instancia otro grupo para los aspectos relativos a los cambios en el sistema que permitan realizar transiciones entre estados pasados. A partir de esta clasificación, se definen una serie de esquemas en la estructura de operación del desarrollo del sistema, de modo que quede clara la arquitectura de almacenamiento para actuar sobre ella con garantías.

Se hace especial referencia a la necesidad de hacer uso de scripts para llevar a cabo modificaciones que afecten a distintos elementos de la base de datos y sobre todo para cargar datos en ella. En este punto pueden entrar a escena algunas herramientas ETL (Extract, Transform and Load) como SSIS (SQL Server Integration Services) para asegurar procesos de sincronización entre múltiples instancias de una base de datos u otras acciones que faciliten la labor del administrador.

El artículo incluye un ejemplo de creación de una base de datos muy interesante que permite ver aquellos puntos tratados de forma práctica.

Este artículo resulta importante para conocer ciertos puntos de partida a la hora de desarrollar una base de datos, recalcando la organización y el control sobre su estructura y sobre todos los cambios o actualizaciones que puedan llevarse a cabo. Dichas modificaciones responderán a variaciones en las necesidades del sistema, sin olvidar que estas harán que deban cambiarse funciones de acceso, scripts y demás componentes de administración y/o control. En última instancia estas medidas repercuten en tres aspectos fundamentales que están directamente ligadas al rendimiento de una empresa: eficiencia, escalabilidad y seguridad.

miércoles, 3 de febrero de 2010

Referencias web: Blogs

Entre las múltiples referencias que pueden encontrarse en la web cabe destacar, además del intercambio de mensajes en foros y artículos, todas las aportaciones que distintos profesionales ligados en su actividad laboral a SQL Server realizan desde los numerosos blogs ligados al tema. Algunos de ellos pueden encontrarse en las páginas vistas en referencias anteriores, aunque aquí se hará mención a dos blogs concretos de los más interesantes escritos en castellano.

El primero de los visitados se denomina “PortalSQL: Compartiendo Conocimiento”:

http://www.portalsql.com/

Cabe destacar la relación que suelen tener la mayoría de usuarios profesionales de SQL Server con el concepto de Business Intelligence (BI), vinculado al análisis de los datos propios de una empresa u organización mediante diferentes herramientas con el objetivo último de ofrecer un conocimiento global de la actividad que ayude en la toma de decisiones administrativas. Y en esta labor, como es natural, tienen un papel muy importante las bases de datos como fuente de información, y en su gestión efectiva estará la clave de que ese análisis de datos sea un éxito.

Por ello en este blog se recalcan asuntos como la utilización de Analisys Services y su vínculo temporal o servicios de integración (IS), entre otros temas posteados. El blog retomó hace poco su actividad, después de varios meses, y tras un proceso de migración, estando actualmente al día con contenidos muy interesantes.



Un segundo blog se denomina “SQL Server Si!” y se vincula directamente a SQL Server y a la BI propia de Microsoft:

http://www.sqlserversi.com/

Debido a que no ha tenido los problemas de migración del anterior, el volumen de contenidos es mayor. Contiene una sección interesante con sus propios videos gratuitos y muy orientativos de un curso de SQL Server. Los temas que trata van desde la BI en general, Datawarehouse, SSIS, Reporting Services, hasta numerosas referencias a la última versión de SQL Server 2008. Un claro ejemplo de estas últimas es el último post hasta la fecha en el que se hace referencia a la migración de SQL Server 2005 a la versión 2008 con 4 segundos de parada en un entorno 24x7, un proyecto de manos del departamento de motor relacional Solid Quality Mentors, como se explica en el blog.

Tras haber visto en general la información aportada por los blogs, se reconoce la importancia de estos artículos como una gran herramienta para la difusión de las posibilidades que aportan las nuevas aplicaciones, lo que ayuda a que otros usuarios vinculados al sector puedan llegar a decantarse por ellas a partir de las experiencias u opiniones expuestas en estos posts.