Microsoft Sql Server 2008 Step by Step (Español)

February 14, 2017 | Author: sigma147 | Category: N/A
Share Embed Donate


Short Description

Download Microsoft Sql Server 2008 Step by Step (Español)...

Description

PUBLICADO POR Microsoft Press Una división de Microsoft Corporation Una manera Microsoft Redmond, Washington 98052-6399 Copyright © 2009 por Mike Hotek Todos los derechos reservados. Ninguna parte del contenido de este libro puede ser reproducida o transmitida en cualquier forma o por cualquier medio sin el permiso por escrito del editor. Biblioteca del Congreso Número de control: 2008935428 Impreso y encuadernado en los Estados Unidos de América. 1 2 3 4 5 6 7 8 9 QWT 3 2 1 0 9 8 Distribuido en Canadá por H.B. Fenn y Company Ltd. Un registro de catálogo CIP para este libro está disponible en la Biblioteca Británica. Los libros de Microsoft Press están disponibles a través de librerías y distribuidores en todo el mundo. Para más información sobre ediciones internacionales, póngase en contacto con su oficina Microsoft Corporación local, o contáctese con Microsoft Press International directamente por fax al (425) 936-7329. Visite nuestro sitio Web en www.microsoft.com / MSPRESS. Envíe sus comentarios a [email protected]. Microsoft, Microsoft Press, Active Directory, ActiveX, Excel, Internet Explorer, MSDN, PowerPoint, SQL Server, Visio, Visual Basic, Visual C #, Visual Studio, Windows, Windows Server y Windows Vista son marcas comerciales registradas o marcas comerciales del grupo de compañías Microsoft. Otros nombres de productos y compañías mencionados aquí pueden ser las marcas comerciales de sus respectivos propietarios. Los ejemplos de compañías, organizaciones, productos, nombres de dominio, direcciones de correo electrónico, logotipos, personas, lugares y eventos mencionados son ficticios. No se pretendió y no se debería deducir asociación con ninguna compañía, organización, producto, nombre de dominio, dirección de correo electrónico, logotipo, persona, lugar o evento real. Este libro expresa las visiones y opiniones del autor. La información contenida en este libro se proporciona sin ninguna garantía expresa, estatutaria o implícita. Ni los autores, Microsoft Corporation, ni sus revendedores o distribuidores se hacen responsable de los daños y perjuicios causados o presuntamente causados directa o indirectamente por este libro. Adquisiciones Editor: Ken Jones Editor de desarrollo: De Sally Stickney Editor del proyecto: Denise Bankaitis Producción editorial: S4Carlisle Publishing Services Revisor técnico: Randall Galloway, los servicios de revisión técnicos fueron prestados por “Content Master”, un miembro del CM Group, Ltd. Cubierta: Tom Diseño Draper

Body Part No. X15-12274

Para Genilyn, Haces que todo valga la pena.

Mapa de contenidos Parte I

1 2 3

Parte II

4 5 6 7

Parte III

8 9 10

Parte IV

11 12 13 14 15 16 17

Parte V

18 19 20

Introducción a Microsoft SQL Server 2008 Descripción general de Microsoft SQL Server. . . . . . . . . . . . . . . . . . . . . . . . .. . 3 Instalación y configuración de SQL Server 2008. . . . . . . . . . . . . . . . ……...…. 15 Uso de las herramientas de SQL Server 2008. . . . . . . . . . . . . . . . . . . . . . . . . 31

Diseñar bases de datos Creación de bases de datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . 51 Diseñar tablas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . 63 Índices. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 Particiones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..103

Recuperar y manipular datos Recuperación de datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 Recuperación de datos avanzada. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .137 Manipulación de datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. .153

Diseñar avanzado de objetos de base de datos Vistas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . 179 Procedimientos almacenados. . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . 185 Funciones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . 199 Triggers. (Desencadenadores). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 Instantáneas de base de datos. . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . 219 Service Broker (Intermediario) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .225 Indexado de Full-Text (texto completo). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 ........

Base de Datos Seguridad. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . ... . . . . . . . . . . . 259 Administración basada en directivas. . . . . . . . . . .. . . . . . . . .. . . . . . . . . . . . 289 Recuperación de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . .. .. . . . . . . . . . . . 301

v

vi

Mapa de contenidos

21 Agente SQL Server. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . 319 22 Vistas de administración dinámica. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333

Visión general de alta disponibilidad

Parte VI

23 Alta disponibilidad. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . 345 Parte VII

24 25 26

Inteligencia de Negocios

SQL Server Integration Services. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377 SQL Server Reporting Services. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413 SQL Server Analysis Services. . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . 451

Tabla de contenidos Agradecimientos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Introducción. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Parte I

1

. . . . . . . . . . . xvii

. . . . . . . . . . . . . . . . . . . . Xix

Introducción a Microsoft SQL Server 2008 Descripción general de Microsoft SQL Server. . . . . . . . . . . . . . . . . . . . . . . .. . . 3 Motor de base de datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Motor de almacenamiento. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

Subsistema de seguridad. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Interfaces de programación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Service Broker. (intermediario) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 Agente SQL Server. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . 6 Replicación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . 6 Alta disponibilidad. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . 7 El motor relacional de SQL Server 2008. . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . 8 Business Intelligence (Inteligencia de negocios) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 Servicios de integración (Integration Services) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Servicios de Reporte (Reporting Services) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Servicios de Análisis (Analysis Services). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 Capítulo 1 Referencia rápida. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

2

Instalación y configuración de SQL Server 2008. . . . . . . . . . . . . .. . . . . . . . . . 15 Ediciones de SQL Server 2008. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Requisitos de infraestructura. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 Cuentas de servicio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 Secuencias de intercalación. (Collation Sequences) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 Modos de autenticación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . 19 Instancias de servidor SQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 Actualización a SQL Server 2008. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . …… ….20 Actualización “En el lugar” (in-place) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 Actualización “Al lado del otro” (Side-by-Side). . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

¿Qué piensa usted de este libro? Queremos escucharlo! Microsoft está interesado en escuchar sus comentarios así podemos mejorar continuamente nuestros libros y los recursos de aprendizaje para usted. Para participar en una breve encuesta en línea, por favor visite:

www.microsoft.com/learning/booksurvey/

vii

viii

Tabla de contenidos

Instalación de SQL Server 2008. . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 Instalar bases de datos de ejemplo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 Capítulo 2 Referencia rápida. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

3

Uso de las herramientas de SQL Server 2008. . . . . . . . . .. . . . . . . . . . . . 31 Documentación de SQL Server. . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . 31 Herramientas de administración de SQL Server 2008. . . . . . . . . . . . . . . . . . . . . . . . 34 Gestor de configuración de SQL Server (Configuration Manager) . . . . . . . . . . 35 SQL Server Management Studio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 Correo de Base de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 Herramientas de gestión del rendimiento. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 Analizador (Profiler) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 Asistente de puesta a punto (tuning) del motor de base de datos.. . . . . . . . . . . 44 Estudio de rendimiento. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 Herramientas de Business Intelligence. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 Business Intelligence Development Studio. (BIDS).. . . . . . . . . . . . . . . . . . . . . . 46 Capítulo 3 Referencia Rápida. . . . . . . . . . . . .. . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . 47

Parte II

4

Diseño de bases de datos Creación de bases de datos. . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 Bases de datos del sistema SQL Server. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 Estructura de bases de datos de SQL Server . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . 53 Los archivos de base de datos. . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . 53 Los grupos de archivos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 56 Creación de una base de datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 Mover bases de datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... .. . . . 59 Separar (detach) una base de datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 Adjuntar (attach) una base de datos. . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . 60 Capítulo 4 Referencia Rápida. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

5

Diseñar tablas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 Nombrar objetos. . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 Esquemas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . 64 Tipos de datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . 67 Los datos numéricos. . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 Los datos “carácter”. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 Datos Fecha y hora. . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . 71 Datos del tipo binario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . 72 XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72

Tabla de contenidos

ix

Los datos FILESTREAM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 Tipo de datos espaciales. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 Tipo de datos “hierarchyID” (jerarquía) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 Propiedades de columna. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 Creación de tablas. . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 Columnas calculadas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . 77 Columnas “sparse” (espacio escaso). . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . 78 Restricciones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 Claves principales. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 Restricciones UNIQUE. (valor único) . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . 81 Restricciones CHECK. (de verificación).. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 Restricciones predeterminadas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 Las claves externas o foráneas .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 Diagramas de bases de datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 Capítulo 5 Referencia Rápida. . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86

6

Índices. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . 87 Estructura de índice. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 Los árboles balanceados (B-trees). . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . 88 Niveles de indexación. . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . 89 Índices agrupados. (cluster). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 Los índices no agrupados. . (nonCluster). . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . 93 Mantenimiento de Índices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . 93 Columnas incluidas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . 95 Cobertura de los índices. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . 95 Índices filtrados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .97 Creación de índices en línea. . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 Gestión y Mantenimiento de Índices. . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 Fragmentación de índices. . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 Factor de llenado. . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 Desfragmentación de un índice. . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . 100

Deshabilitar un índice. . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 Índices XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 Índices espaciales. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 Capítulo 6 Referencia Rápida. . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102

7

Particiones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . 103 Funciones de partición. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . 103 Esquemas de partición. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 Los grupos de archivos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105

Tabla de contenidos

x

Particionar tablas e índices. . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 Copia de seguridad y restauración parcial. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 Creación de un índice con particiones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 Gestión de particiones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . 110 Operadores Dividir y combinar. (SPLIT y MERGE). . . . . . . . . . . . . . . . . . . . . . . . . . 110 Modificación de un esquema de partición. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 Alineación de Índice. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 Operador Conmutar (SWITCH). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . 111 Capítulo 7 Referencia rápida. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . 117

Parte III

8

Recuperar y manipular datos Recuperación de datos. . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . 121 Declaración General de SELECT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . 121 Ordenar Resultados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . 126 Filtrar datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . 127 Recuperación de más de una tabla. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . 131 Recuperación de resultados únicos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 Capítulo 8 Referencia Rápida. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 135

9

Recuperación de datos avanzada. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 Declaración General de SELECT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 Agregación de datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 Agregación de permutaciones múltiples. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 Filtrado de Agregados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . 143 Ejecución de Agregados. . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . 144 Cálculo de tablas dinámicas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 Clasificación de datos. (ranking). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 Agregación de conjuntos de resultados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 Expresiones de tabla comunes. . . . . . . . . . . . . .. . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . 149 Consulta de datos XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 Capítulo 9 Referencia rápida. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152

10 Manipulación de datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 Inserción de datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 INSERT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 SELECT INTO. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 Actualización de los datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 Eliminación de datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . 161 TRUNCATE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164

Tabla de contenidos

Sentencia “combinar” (MERGE) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 Cláusula “salida” (OUTPUT) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 Manejo de transacciones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 Seguimiento de cambios. . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 Seguimiento de cambios. .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 Captura de datos modificados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 Capítulo 10 Referencia Rápida. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176

Parte IV

11

Diseñar objetos avanzados de base de datos Vistas. . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 Creación de una vista. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 Sustitución de consultas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 Modificar datos mediante una vista. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 Creación de una vista indexada. . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182 Sustitución de consultas. . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 Capítulo 11 Referencia rápida. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184

12

Procedimientos almacenados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 Crear procedimientos almacenados. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . 185 Comentando Código. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . 186 Variables, parámetros y códigos de retorno. . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . 186 Variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 Parámetros. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 Códigos de retorno. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 Ejecutar procedimientos almacenados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 Construcciones de flujo de control. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .189 Manejo de errores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 Ejecución dinámica. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 Cursores. . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194 Procedimientos CLR. . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196 Construyendo un procedimiento administrativo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196 Capítulo 12 Referencia rápida. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198

13

Funciones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . 199 Funciones del sistema. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . 199 Crear una función. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . .. . . . 200 Recuperando datos desde una función. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . 204 Capítulo 13 Referencia rápida. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . 212

xi

xii

Tabla de contenidos

14

Triggers.(Desencadenadores) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 Desencadenadores DML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 Desencadenadores DDL. . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 Capítulo 14 Referencia rápida. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218

15

Instantáneas de base de datos. . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . 219 Creación de una instantánea de base de datos. . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . 219 Tecnología “copiar al escribir” (Copy-on-Write). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 Revertir datos utilizando una instantánea de base de datos . . . . . . . . . . . . . . . . . . . . . . . . . . 222 Capítulo 15 Referencia rápida. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . 223

16 Servicio Broker (Intermediario).. . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . 225 Arquitectura de servicio Broker. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 Descripción de mensajería. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 Componentes de Service Broker. . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . 227 Interacción de aplicación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . 228 Tipos de mensajes y Contratos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . 229 Tipos de mensajes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 Contratos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . 232 Colas y Servicios. . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 Colas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 Servicios. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . 234 Conversaciones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 Enviar y recibir mensajes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . .. . . 236 Envío de mensajes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 Recepción de mensajes. . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . .. . . 237 Cola de activación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . 242 Priorización. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245 Capítulo 16 Referencia rápida. . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246

17

Indexación de texto completo.(full-text) . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . 247 Catálogos de full-text. . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 Índices de texto completo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249 Consulta de datos de texto completo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251 FREETEXT (texto libre).. . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . 252 CONTAINS (contiene). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 Capítulo 17 Referencia rápida. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255

Tabla de contenidos

Parte V

xiii

Base de Datos

18 Seguridad. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . 259 Configuración de la superficie de ataque. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 Puntos finales (Endpoints) . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260 Tipos de endpoints y cargas útiles (payloads).. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 Acceso de Endpoint. . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 Endpoints TCP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262 Principales (Principals), elementos que pueden protegerse (Securables) y permisos. . . . . 264 Principales. . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264 Suplantación de identidad (Impersonation).. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 Elementos que pueden protegerse (Securables).. . . . . . . . . . . . . . . . .. . . . . . . . . . . . 273 Permisos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274 Cadenas de propiedad. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277 Seguridad CLR. . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279 Cifrado de datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . 280 Llaves maestras. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . 281 Algoritmos hash. . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282 Claves simétricas. . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284 Certificados y claves asimétricas. . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . 285 Encriptación de datos transparente. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286 Administración de claves de encriptación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287 Capítulo 18 Referencia rápida. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288

19

Administración basada en directivas. . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . 289 Descripción general de administración basada en directivas. . . . . . . . . . . . . . . . . . . . . . . . . 289 Facetas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290 Condiciones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290 Objetivos de la política. . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293 Políticas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295 Categorías de políticas. . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297 Política de cumplimiento (compliance).. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298 Capítulo 19 Referencia rápida. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300

20

Recuperación de datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301 Copias de seguridad de las bases de datos. . . . . . . . . .. . . . . .. .. . . . . . . . . . . . . . . . . . . . . . 301 Tipos de copia de seguridad. . . . . . . . . . . . . . . . . .. . . . . . . . .. . . . . . . . . . . . . . . . . . . 302 Corrupción de página. . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . 308 Modelos de recuperación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309 Restauración de la base de datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311

xiv

Tabla de contenidos

Restaurar una copia de seguridad completa. . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . 311 Restaurar una copia de seguridad diferencial. . . . . . . . . . . . . .. . . . . . .. . . . . . . . . . 314 Restaurar una copia de seguridad del registro de transaccioness. . . . .. . . . . . . . . . 315 Capítulo 20 Referencia rápida. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317

21

Agente SQL Server. . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319 Crear trabajos. (jobs) . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319 Pasos de los jobs. . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319 Programación de jobs. (Schedules) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320 Operadores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . .. . . . 321 Creación de planes de mantenimiento. . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . .. . . 325 Creación de alertas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . 329 Capítulo 21 Referencia rápida. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332

22 Vistas de administración dinámica. . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . 333 Listado de “vistas de gestión dinámica” DMV (Dynamic Management Views)... . . . . . . . . . . 333 Recuperar metadatos de objetos. . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . 334 Diagnóstico de base de datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336 Tamaño del objeto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . 336 Índices. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . .. . . 337 Estadísticas de ejecución de consultas. . . . . . . . . . . . . . .. . . . . . .. . . . . . . . . . . . .. . . 339 Capítulo 22 Referencia rápida. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341

Parte VI

23

Visión general de alta disponibilidad Alta disponibilidad. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345 Failover Clustering.( Agrupamiento a prueba de fallos) . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . 345 Componentes de la instancia Cluster a prueba de fallos. . . . . . . . . . . . . .. . . . . .. . . . . 345 Configuración de la red. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . 346 Configuración de disco. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346 Configuración de seguridad. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346 Controles “de salud”. (Health) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347 Clúster a prueba de fallos . . . . . . .. . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . 348 Espejado de la base de datos (Database Mirroring). . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348 Roles del espejado de base de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349 Endpoints del espejado de base de datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350 Modos de operar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351 Almacenamiento en caché. . . . .. . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . 353 Redirección transparente de Cliente (Transparent Client Redirect) . .. . . . . . . . . . . . . . 354 Páginas corruptas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . 354

Tabla de contenidos

Instantáneas de base de datos. . . . . . . . . . . . . . . . . . . . . . .. . . . . . .. . . . . . . . . . . 354 Inicialización de Database Mirroring. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355 Envío de registros (log shipping).. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356 Componentes de log shipping. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356 Inicio de log shipping. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357 Replicación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . 363 Componentes de replicación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364 Roles de replicación. . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . 365 Agentes de replicación. . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . 365 Métodos de replicación. . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . 366 Capítulo 23 Referencia rápida. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373

Parte VII

Inteligencia de Negocios

24 SQL Server Integration Services. . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . 377 Descripción del BIDS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . 378 Tareas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380 Transforma. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . 382 Construcción de un paquete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385 Conexiones. . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386 Flujo de control. . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390 Flujo de datos. . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394 Conversión de datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401 Manejo de excepciones. . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . 403 Configuración. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . 406 Implementación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409 Capítulo 24 Referencia rápida. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411

25 SQL Server Reporting Services. . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . 413 Configuración de Reporting Services. . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . 413 Sitio web de Reporting Services. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . 417 Creación de informes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418 Creación de un informe. . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . 418 Formato. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423 Cálculos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429 Elementos interactivos. . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 431 Parámetros. . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434 Implementar informes. . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439 Suscripciones a informes. . .. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441 Informes vinculados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443

xv

xvi

Tabla de contenidos

Cache de Informes e instantáneas. . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . .444 Capítulo 25 Referencia rápida. . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . 449

26

SQL Server Analysis Services. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451 Data Warehousing Visión general. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . 451 Procesamiento analítico en línea (OLAP). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452 Modelo Dimensional. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453 Cubos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . .. . . . 454 Dimensiones, medidas y cálculos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . 462 Jerarquías. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467 KPIs, Particiones, perspectivas y traducciones. . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . 470 Los indicadores clave de rendimiento (KPI). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470 Particiones. . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471 Perspectivas. . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471 Traducciones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471 Data Mining. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 472 Algoritmos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473 Modelos y estructuras de minería. . . . . .. . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . 474 Minería de Datos desmitificada. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483 Capítulo 26 Referencia rápida. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485

Indice (en inglés).. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487

¿Qué piensa usted de este libro? Queremos saber de usted! Microsoft está interesado en escuchar sus comentarios así podemos mejorar continuamente nuestros libros y los recursos de aprendizaje para usted. Para participar en una breve encuesta en línea, por favor visite:

www.microsoft.com/learning/booksurvey/

Agradecimientos Gracias a todos mis lectores de más o menos la última década, es difícil creer que este será el octavo libro que he escrito y no sería posible sin ustedes. Me gustaría dar las gracias al talentoso e increíblemente paciente equipo editorial de Microsoft Press - Denise Bankaitis y Sally Stickney. Especialmente me gustaría agradecer a Ken Jones, que ha pasado por cuatro libros conmigo y tiene un talento excepcional para mantener las cosas en movimiento sin problemas, a través de todas las diversas pruebas que se presentan durante los procesos de creación y edición. Mis palabras y pensamientos, probablemente serían un caos ininteligible sin la ayuda de Randall y Cristian, que no sólo suaviza las asperezas, sino que además le da sentido a muchas de mis misivas de las 3 A.M., que seguramente habrían cuestionando mi cordura.

xvii

Introducción Microsoft SQL Server ha sido la base de datos insignia de Microsoft durante más de 15 años. Antes de que se lance la próxima versión de SQL Server, SQL Server 2008 estará celebrando el cumpleaños número 20 de SQL Server. En este momento, SQL Server ha crecido desde manejar pequeñas tareas departamentales hasta dar servicio a las mayores bases de datos en el planeta. El lanzamiento de SQL Server 2000 produjo una evolución dramática de Microsoft SQL Server. Ya no es una simple "base de datos", Microsoft SQL Server es ahora una completa solución de arquitectura de datos, capaz de gestionar el almacenamiento de datos y las necesidades de cualquier organización.

SQL Server 2005 amplió la plataforma de datos con nuevas e impresionantes capacidades en programación, Integración con . NET, alta disponibilidad, la instrumentación de administración e inteligencia de negocios. Tan dramáticas fueron las mejoras en las funciones, que al tiempo que conserva el mismo "look and feel" de Microsoft SQL Server, Microsoft puso en producción una plataforma de datos completamente nueva.

SQL Server 2008 recoge la rápida innovación mediante la mejora de cientos de características existentes, mientras que al mismo tiempo agrega cientos de más. SQL Server 2008 también presenta una altamente escalable y adaptable plataforma de arquitectura de datos contra la que se puede construir cualquier aplicación imaginable. Sin embargo, con estas características nuevas y mejoradas vienen los desafíos para Los profesionales de TI. Sé por casi dos décadas de experiencia trabajando con y enseñando Microsoft SQL Server en organizaciones de todos los tamaños y abarcando todas las industrias, que si los usuarios no entienden cómo usar el producto de manera eficaz, ellos y su organización no serán capaz de obtener los beneficios completos de este producto de gran alcance. Al mismo tiempo, el rol y el conjunto de habilidades de un DBA están cambiando rápidamente. Aunque puede ser aceptable para un consultor enfocarse en un área muy específica, como en el ajuste del rendimiento (tuning), en el motor de almacenamiento, o la creación de informes; la mayoría de las empresas están empezando a insistir, en que sus DBAs sepan cómo diseñar, codificar y administrar soluciones que utilicen todas las características que se incluyen en SQL Server - desde la construcción de una tabla a hasta la construcción de un modelo de minería de datos.

Escribí este libro porque quería proporcionar, el primer tour completo de las características enteras disponibles en Microsoft SQL Server, a partir de las bases de datos relacionales que están en el núcleo de toda organización, a través de las capacidades únicas de gestión, y terminando con un conjunto de plataformas de análisis extraordinariamente poderosas que comprenden el núcleo de la Plataforma Microsoft Business Intelligence. Armado con esta información, usted será capaz de:

Ser Arquitecto, proteger y administrar bases de datos relacionales Recuperar y manipular datos. Expandir las capacidades de su aplicación con objetos programables Asegurar y recuperar los datos de su empresa Asegurarse que la plataforma de base de datos funcione bien y sea resistente. Transformar sus datos de negocio en inteligencia de negocios xix

xx

Introducción

¿Para quién es este libro? El objetivo de este libro es enseñar los fundamentos de la plataforma de datos SQL Server 2008. SQL Server contiene características que atraen a cualquier persona involucrada con el almacenamiento o manipulación de datos dentro de una organización. Este libro está dirigido a los profesionales de TI, quienes pueden ser nuevos en SQL Server o nuevos en SQL Server 2008. Los profesionales experimentados en SQL Server van a encontrar una gran cantidad de información que es aplicable a sus puestos de trabajo. Ningún libro puede posiblemente incluir todas las complejidades de SQL Server 2008. En su lugar, el foco está en proporcionar una visión general de cada función con la suficiente profundidad para que pueda construir aplicaciones SQL Server. A medida que avance a través de este libro, usted aprenderá cómo instalar cada uno de los componentes, configurar y gestionar instancias, y construir bases de datos. Se le guiará a través de cada una de las “herramientas cliente” que se suministran con SQL Server, y voy a explicar cómo cada herramienta le permite desarrollar y administrar su entorno de base de datos. Usted aprenderá a manipular datos, asegurar sus bases de datos, gestionar y proteger sus datos, y distribuir su plataforma de datos para que sea más escalable, redundante y tolerable a fallos. Usted aprenderá a integrar sus datos de SQL Server con una variedad de fuentes, elaborar informes para servir a sus líneas de negocio, y, finalmente, alimentar todos estos datos dentro de un poderoso sistema de análisis y minería de datos para ofrecer información “para la acción” a las líneas de negocio, en tiempo casi real.

¿Cómo está organizado este libro? Este libro está organizado en siete partes, junto con tres artículos en línea que le permiten centrarse en porciones específicas dentro de la plataforma del servidor SQL, así como funciones específicas de trabajo, de la siguiente manera: La primera parte describe los componentes básicos disponibles en SQL Server junto con las instrucciones sobre la instalación de cada componente. También obtendrá una visión general de cada herramienta que se incluye en SQL Server y que se van a utilizar durante todo el libro. La segunda parte muestra cómo crear y configurar bases de datos para proporcionar la base para las estructuras de tablas e índices que forman la columna vertebral de cada aplicación de base de que se va a crear. La tercera parte le enseña a manipular y recuperar datos. La cuarta parte es una introducción a las estructuras fundamentales de programación disponibles: procedimientos almacenados, vistas, funciones y disparadores. La quinta parte explica cómo asegurar, gestionar, realizar copias de seguridad y recuperar bases de datos. La sexta parte proporcionará una introducción a las tecnologías de alta disponibilidad que se incluyen con SQL Server, como agrupación (clustering), copia de base de datos y traspaso de registros (log shipping). La séptima parte abarca las tres tecnologías de inteligencia de negocios - Servicios de integración (SSIS), Servicios de Reportes (SSRS) y Servicios de Análisis (SSAS).

Introducción

xxi

El material extra está disponible en línea en tres artículos, “Performance Analysis and Tuning”, ("Análisis de rendimiento y Afinación"), “Performance and Data Capture Tools” ("Herramientas para rendimiento y captura de datos ") y “Performance Analysis Tools” ("Herramientas de análisis de rendimiento"); en el sitio web de la “Prensa online de Microsoft Windows Server y Cliente”: www.microsoft.com/aprendizaje/books/online/ ServerClient

¿Cómo encontrar su mejor punto de partida en este libro? Este libro está diseñado para ayudar a desarrollar habilidades en varias áreas esenciales. Puede utilizar este libro, tanto si usted es nuevo en SQL Server como si está cambiando desde otro sistema de base de datos. Utilice la siguiente tabla para encontrar el mejor punto de partida.

Si usted es un (a)

Siga estos pasos

1. Instale los archivos de prácticas que se describen en la siguiente sección, DBA, arquitecto de base de datos, desarrollador de bases "Instalación y uso de los archivos de práctica. " de datos, ingeniero de base 2. Trabaje con los capítulos de las partes uno a la cuatro secuencialmente. de datos, o analista de datos

3. Complete las partes cinco a siete, junto con los tres artículos en línea, según lo dicte su nivel de experiencia e interés.

Application Developer (Desarrollador de aplicaciones)

1. Instale los archivos de prácticas que se describen en la siguiente sección, "Instalación de y uso de los archivos de práctica. " 2. Repase (sin entrar demasiado en detalle) los capítulos de la primera parte para tener una visión general de la instalación SQL Server y las herramientas disponibles, y luego concéntrese en los capítulos de las Partes dos a cuatro. 3. Complete las Partes cinco a siete, junto con los 3 artículos en línea según lo marque su nivel de experiencia e interés.

Administrador de sistemas, Administrador de red, o administrador de seguridad

1. Instale los archivos de prácticas que se describen en la siguiente sección, "Instalación y uso de los archivos de práctica. " 2. Trabaje con los capítulos de la primera parte. 3. Repase (sin entrar demasiado en detalle) los capítulos de las Partes 2 a 4. 4. Trabaje con los capítulos de la quinta parte. 5. Complete con las Partes Seis y Siete, junto con los tres artículos en línea, según lo marque su nivel de experiencia e interés.

Analista de negocios (B.A.)

1. Instale los archivos de práctica que se describen en la siguiente sección, "Instalación de y uso de los archivos de práctica. " 2. Repase (sin entrar demasiado en detalle) los capítulos de las partes 1a 6. 3. Trabaje con los capítulos de la Parte 7 según lo dicte su nivel de experiencia e interés. 4. Complete con los tres artículos en línea según lo dicte su nivel de experiencia e interés.

IT Management (Gerente TI)

1. Trabaje con el Capítulo 1.

Hace referencia al libro después de trabajar a través de los ejercicios

1. Utilice el índice o tabla de contenidos para encontrar información acerca de temas particulares.

2. Repase el resto de los capítulos y artículos en línea según su nivel de experiencia y de interés.

2. Lea las secciones de referencia rápida al final de cada capítulo para encontrar una breve revisión de la sintaxis y técnicas presentadas en el capítulo.

xxii

Introducción

Convenciones y características en este libro Este libro presenta la información utilizando las convenciones diseñadas para hacer que la información sea legible y fácil de seguir. Antes de comenzar, lea la siguiente lista, que explica las convenciones que verá a través de todo el libro y que señala características útiles que es posible que desee utilizar.

Convenciones Cada ejercicio es una serie de tareas. Cada tarea se presenta como una serie de pasos numerados (1, 2, y así sucesivamente). Una viñeta redonda (•) indica un ejercicio que tiene un solo paso. Notas etiquetadas como "Tip" (consejo), proporcionan información adicional o métodos alternativos para completar satisfactoriamente un paso. Notas etiquetadas con "importante" lo alertan sobre información que usted necesita comprobar antes de continuar. El texto que usted “escribe” aparecerá en negrita. Un signo más (+) entre dos nombres de teclas significa que debe pulsar las teclas al mismo tiempo. Por ejemplo, "Pulse Alt + Tab" significa que usted mantenga pulsada la tecla Alt mientras se presiona la tecla Tab.

Otras características Las barras laterales en todo el libro, proporcionan información con mayor profundidad sobre el ejercicio. Las barras laterales pueden contener información de referencia, consejos de diseño o características relacionadas con la información que se discute. Cada capítulo termina con una sección de referencia rápida. La sección de referencia rápida contiene recordatorios rápidos sobre cómo realizar las tareas que aprendió en el capítulo.

Requisitos del sistema Usted necesitará el siguiente hardware y software para realizar los ejercicios de práctica en este libro:

Microsoft Windows Vista Home Basic Edition o superior, Windows Server 2008 Standard edition o superior, Windows Server 2003 SP2 o superior, o Windows XP Professional SP2 o superior.

Nota SQL Server 2008 no se admite en Windows Server 2008 Server Core edition.

Introducción

xxiii

Microsoft SQL Server 2008 Evaluation Edition, SQL Server 2008 Developer Edition, o SQL Server Enterprise Edition 208.

Nota Puede utilizar otras ediciones de SQL Server 2008, sin embargo, estará limitado al conjunto de características soportadas por la edición de SQL Server que tenga instalada.

Procesador Pentium III 2,0 GHz o más rápido 1 GB de RAM física disponible 2 GB de espacio disponible en disco Videos (800 × 600 o mayor resolución) monitor con 256 colores como mínimo CD-ROM o DVD-ROM Ratón Microsoft o dispositivo compatible También tendrá que tener acceso de administrador en el equipo para configurar SQL Server 2008.

Bases de datos de ejemplo Todos los ejemplos en este libro utilizan las bases de datos de muestra AdventureWorks y AdventureWorksDW. Dichas bases de datos de ejemplo ya no se incluyen con SQL Server sino que deben ser descargadas desde el sitio web de CodePlex en http://www.codeplex.com/SQLServerSamples

Consejo: Además de las bases de datos de muestra, el sitio de CodePlex contiene decenas de jemplos, muestras de aplicaciones y add-ons (complementos) que en gran medida pueden mejorar su experiencia en SQL Server.

Ejemplos de código El CD que acompaña el interior de este libro contiene los ejemplos de código que utilizará mientras realiza los ejercicios. Mediante el uso de los ejemplos de código, no perderá tiempo creando ficheros ya que no es relevante para el ejercicio. Los archivos y las instrucciones paso a paso en las lecciones le permiten aprender haciendo, que es una forma fácil y eficaz para adquirir y recordar las nuevas habilidades.

Contenidos Digitales para lectores de libros digitales: Si usted compró una edición exclusivamente digital de este libro, puede disfrutar de los contenidos de selección de CD que acompaña la edición de impresión Visite http://go.microsoft.com/fwlink/?LinkId=129790 para obtener su contenido descargable. Este contenido está siempre actualizado y disponible para todos los lectores.

xxiv

Introducción

Instalación de los ejemplos de código Siga estos pasos para instalar los ejemplos de código y el software requerido en el equipo para utilizarlo con los ejercicios. 1. Retire el CD que acompaña el paquete dentro de este libro e insértelo en su lectora de CD-ROM o DVD.

Nota Un acuerdo de licencia de usuario final se abrirá automáticamente. Si este acuerdo no aparece, abra Mi PC en el escritorio o en el menú Inicio, haga doble clic en el icono de la lectora de CD-ROM y, a continuación, haga doble clic en StartCD.exe.

2. Revise el contrato de licencia de usuario final. Si acepta los términos, seleccione “aceptar” y luego haga clic en Siguiente. Aparecerá un menú con las opciones relacionadas con el libro. 3. Haga clic en Instalar ejemplos de código. 4. Siga las instrucciones que aparecen. Los ejemplos de código se instalan en la siguiente ubicación en el equipo: Documents\Microsoft Press\SQL Server 2008 Step by Step.

Usando los ejemplos de código Cada capítulo de este libro explica cuándo y cómo utilizar las muestras de código para ese capítulo. Cuando llega el momento de utilizar un ejemplo de código, el libro listará las instrucciones sobre cómo abrir los archivos.

Desinstalación de los ejemplos de código Siga estos pasos para eliminar los ejemplos de código de la computadora. 1. En el Panel de control, abra Agregar o quitar programas si se ejecuta Windows XP o “Programas\Desinstalar un programa” si se ejecuta Windows Vista. 2. En la lista de programas instalados actualmente en Windows XP, o de la lista de “desinstalación o cambiar un programa” en Windows Vista, seleccione . 3. Haga clic en “Quitar” en Windows XP o haga clic en “Desinstalar/Cambiar” en Windows Vista. 4. Siga las instrucciones que aparecen para quitar los ejemplos de código.

Introducción

xxv

Buscar contenido adicional en línea A medida que surja nuevo material o se actualice el existente, que complementa este libro, se publicarán en línea en el sitio de “Microsoft Press Online Web Developer Tools”. El tipo de material que se puede encontrar incluye actualizaciones de contenido de libros, artículos, enlaces a contenido complementario, erratas, capítulos de ejemplo, y más. Este sitio Web está disponible en www.microsoft.com/learning/books/online/ServerClient, y se actualiza periódicamente.

Soporte para este libro Cada esfuerzo, se ha hecho para asegurar la exactitud de este libro y del contenido del CD complementario. A medida que se realicen correcciones o cambios, se añadirán en artículos de la base de conocimientos de Microsoft. Microsoft Press proporciona soporte para libros y CDs en el siguiente Sitio web:

http://www.microsoft.com/learning/support/books/default.mspx.

Preguntas y comentarios Si tiene comentarios, preguntas o ideas sobre el libro o el CD que acompaña, o bien preguntas que no son contestadas al visitar los lugares web arriba mencionados, por favor envíe un e-mail a Microsoft Press:

[email protected] O por correo postal a: Microsoft Press Atención: Editor de la serie “Programación de Microsoft SQL Server 2008 paso a paso”. Redmond, WA 98052-6399.

Por favor tenga en cuenta que el soporte del producto de software de Microsoft no se ofrece a través de las direcciones arriba mencionadas.

Parte I

Introducción a Microsoft SQL Server 2008 En esta parte: Capítulo 1: Descripción general de Microsoft SQL Server. . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Capítulo 2: Instalación y configuración de SQL Server 2008. . . . . . . . . . . . . . . . . . . . . . . . 15 Capítulo 3: Uso de las herramientas de SQL Server 2008. . . . . . . . . . . . . . . . . . . . . . . . . . 31

1

Capítulo 1

Descripción general de MS SQL Server Después de completar este capítulo, usted será capaz de: Elegir los componentes de SQL Server apropiados para las necesidades de su negocio. Conocer el alcance de la instalación y la arquitectura de componentes. En un pasado no muy lejano, muchas personas que trabajaban dentro de los departamentos de TI tuvieron que luchar interminables batallas dentro de sus organizaciones para obtener financiación para los sistemas, implementación de proyectos y contratación del personal para gestionar toda la tecnología. El primer punto del siempre presente “hacha” al presupuesto era todo el departamento de TI. Esta precaria situación era el resultado de ejecutivos miopes viendo la infraestructura de TI estrictamente como un centro de costo que drena fondos de las operaciones de negocios "más importantes".

Mientras que los departamentos de TI se encuentran todavía en una continua batalla para su financiación, al menos se torció su imagen, y así es que las organizaciones consideran ahora su infraestructura de TI como un factor necesario en la conducción de sus ventajas competitivas. Con las "recién descubiertas" ventajas en la Infraestructura de TI, ha llegado una proliferación de aplicaciones y sistemas que necesitan almacenar grandes cantidades de datos a la vez que requieren un acceso rápido a los datos con el fin de dar servicio a los requerimientos del negocio. Las demandas de las aplicaciones de negocio han impulsado una explosión de tecnología SQL Server.

SQL Server solía ser un producto razonablemente sencillo que consistía en un motor de base de datos para el procesamiento de transacciones en línea (OLTP), junto con los componentes de réplica para distribuir los datos. Durante varios ciclos de producción, SQL Server se ha convertido en una plataforma de largo alcance de datos, capaz de dar servicio de almacenamiento de datos, manipulación y presentación de las necesidades de una empresa.

En este capítulo, usted aprenderá acerca de los componentes principales de la plataforma de datos SQL Server. Usted también aprenderá cómo cada componente entra en un plan de arquitectura de datos general para satisfacer necesidades de su negocio.

Motor de base de datos El motor de base de datos es el servicio principal que proporciona el servidor SQL, el cual le permite almacenar, recuperar, procesar y proteger los datos. Los servicios del Motor de base le permiten crear aplicaciones de alto rendimiento de base de datos para el procesamiento de transacciones en línea (OLTP) y el soporte en línea de procesamiento analítico (OLAP).

3

4

Parte I Introducción a Microsoft SQL Server 2008

Motor de Almacenamiento El motor de almacenamiento se encuentra en el corazón de SQL Server, controlando cómo se almacenan los datos en el disco y estando a disposición de las aplicaciones. A pesar que el motor de almacenamiento es un componente interno con el que usted no interactúa directamente, contiene componentes vitales para el almacenamiento y la gestión de sus datos.

El motor de almacenamiento administra el almacenamiento de datos basado en las definiciones los tipos de datos de tabla y columna. Para mejorar el rendimiento de las consultas, puede crear y mantener índices. Puede dividir grandes tablas e índices a través de múltiples estructuras de almacenamiento, aprovechando el particionamiento. Las instantáneas de bases de datos le permiten generar rápidamente una copia de la base de datos en un punto en el tiempo y de sólo lectura. El acceso multiusuario a los datos es arbitrado a través de las capacidades de bloqueo y gestión de transacciones, para garantizar el acceso consistente de datos. Para proteger los datos contra pérdidas catastróficas, puede realizar una copia de seguridad de toda o parte de una base de datos y tener la capacidad para restaurar los datos que han sido dañados.

Aunque no es una lista exhaustiva, algunos de los elementos del motor de almacenamiento que se explican en este libro se muestran en la Tabla 1-1. TABLA 1-1

Características del motor de almacenamiento

Descripción de características Bases de datos, grupos de archivos y archivos.

Capítulo referencia 4

Tablas, tipos de datos y propiedades de almacenamiento de datos 5 Índices

6

Particionamiento

7

Arquitectura interna de datos

7

Bloqueo y gestión de transacciones

10

Instantáneas de base de datos

15

Copia de seguridad de datos y recuperación

20

Subsistema de seguridad SQL Server 2008 incluye una infraestructura de seguridad muy potente y flexible que asegura que sus datos e instancias estén protegidos de intrusión. SQL Server puede controlar la manera que a los clientes se les permite autenticar, mediante la aplicación de las credenciales de Windows o permitir inicios de sesión de SQL Server internos. Puede activar o desactivar varias funciones del motor de SQL Server para garantizar que sólo el subconjunto de características necesario para soportar sus aplicaciones, esté disponible. Puede establecer permisos en múltiples niveles para controlar la capacidad de lectura/escritura de datos, así como manipular los objetos dentro de una instancia de SQL.

Capítulo 1 Descripción general de Microsoft SQL Server

5

Puede proteger los datos almacenados en sus bases de datos mediante el cifrado a través de una variedad de mecanismos incluyendo soporte integrado de cifrado de clave, para productos de terceros. Un sistema completo de auditoría se encuentra disponible para realizar el seguimiento del uso de los permisos elevados, así como cualquier cambio de permisos que pueda asignar. Por último, puede implementar políticas dentro de su entorno, no sólo para estandarizar las instalaciones y configuraciones, sino también para hacer cumplir los elementos de sus políticas de seguridad. Usted va a interactuar con el subsistema de seguridad desde el momento en que comience la instalación y configuración de instancias de SQL Server en el Capítulo 2, "Instalación y configuración de SQL Server 2008". Va a separar objetos en grupos lógicos de seguridad en el capítulo 5, "Diseño de tablas". Una vez que usted ha conseguido estar cómodo con muchas de las funciones de programación y almacenamiento de SQL Server, estará listo para tomar el tour de punta a punta de las capacidades de seguridad restantes que se describen en el Capítulo 18, "Seguridad" y en el Capítulo 19, "Administración basada en directiva".

Algunos de los elementos del subsistema de seguridad que se explican en este libro se enumeran en la Tabla 1-2. TABLA 1-2

Características de la seguridad

Descripción de características

Capítulo de referencia

Métodos de autenticación

2

Cuentas de servicio

2

Activación y desactivación de funciones (Configuración de superficie)

2

Esquemas

5

Principios, elementos que pueden protegerse y permisos

18

Cifrado de datos

18

Firmas de código

18

Auditoría

18

Configuración de política, gestión y aplicación

19

Interfaces de programación A través de Transact-SQL (T-SQL), usted tiene acceso a una programación rica, simple y potente. Si el lenguaje T-SQL no satisface sus necesidades, puede ampliar las características del servidor mediante el aprovechamiento de las capacidades de los lenguajes de programación dentro del “common language runtime” (CLR) tales como Microsoft Visual Basic o Microsoft Visual C #.

Las capacidades del lenguaje XML se integran directamente en el motor, lo que le permite almacenar y consultar datos XML, así como devolver conjuntos de resultados en una variedad de formatos XML. El código puede ser modularizado, almacenado en el servidor, y accedido desde sus aplicaciones mediante el aprovechamiento de vistas, procedimientos almacenados, funciones y desencadenadores. Las capacidades de búsqueda de texto-completo le permiten construir interfaces de consulta a través de grandes volúmenes de datos de texto no estructurados.

6

Parte I Introducción a Microsoft SQL Server 2008

La Tabla 1-3 enumera algunos de los elementos de programación que se utilizan en este libro. TABLA 1-3

Características de programación del servidor SQL.

Descripción de características

Capítulos de Referencia

INSERT / UPDATE / DELETE / MERGE

10

Seguimiento de cambio de datos

10

SELECT / JOINS / Criterios de QUERY / SORTING / Subconsultas

8y9

Funciones del sistema / Agregados / expresiones de tabla comunes

9

Datos espaciales

9

CUBE / ROLLUP / EXCEPT / INTERSECT / XML

9

Vistas

11

Procedimientos almacenados

12

Funciones

13

Disparadores

14

Instantáneas de base de datos

15

Texto completo

17

Service Broker (Servicio “agente o intermediario”) Service Broker se introdujo en SQL Server 2005 para proporcionar un sistema de cola de mensajes integrado en la plataforma de datos SQL Server. Basado en los mensajes definidos por el usuario y las acciones de procesamiento, se puede aprovechar Service Broker para proporcionar capacidades de procesamiento de datos asíncronos. Service Broker se trata en detalle en el Capítulo 16, "Service Broker".

Agente de SQL Server El Agente de SQL Server es el motor de programación y alertas. Uno de los componentes básicos del Agente SQL Server es la capacidad de crear “Jobs” flexibles que pueden tener varios pasos y dependencias entre los pasos del job que se puede ejecutar en varios “schedules” (programaciones). Puede configurar alertas basadas en una variedad de condiciones que pueden llevar a cabo acciones automatizadas o enviar mensajes a los registros (logs) de errores u operadores configurados. En el capítulo 21, "Agente SQL Server" aprenderá mucho más sobre él.

Replicación Casi desde su inicio, SQL Server ha sido capaz de distribuir copias de datos, así como mantener todas las copias sincronizadas con el conjunto de datos maestros. A través de los años, la capacidades de distribución de SQL Server se han expandido desde el mantenimiento de múltiples copias de sólo lectura a ser capaz de hacer los cambios de datos en toda la red de bases de datos al tiempo que el motor de replicación sincroniza todos los cambios en el ambiente.

Capítulo 1 Descripción general de Microsoft SQL Server

7

A través de la replicación de “instantáneas”, el motor de replicación incluye soporte para hacer periódicamente instantáneas de un conjunto de datos que se aplican a múltiples máquinas. Después de la aplicación de una instantánea inicial, la replicación transaccional transfiere los cambios incrementales de datos desde el publicador hacia cada suscriptor. La replicación transaccional también tiene capacidades adicionales: permitir que los cambios sean hechos a un suscriptor y sincronizado de nuevo a un publicador (editor), y dejar que una arquitectura peer-to-peer sea implementada por medio de muchas instancias de SQL Server se pueden replicar entre sí como iguales. La replicación de mezcla (merge) permite a los usuarios móviles, desconectados, tomar conjuntos locales de datos, realizar cambios a nivel local, y luego sincronizar todos los cambios con el servidor.

Libros enteros se pueden hacer y se han escrito sobre el motor de replicación de SQL Server, y mientras que la cobertura completa de este tema va más allá del alcance de este libro, aquí recibirá una introducción a sus características en el Capítulo 23, "Alta disponibilidad".

Alta disponibilidad Para satisfacer las necesidades de la mayoría de los exigentes requisitos de tiempo de actividad de las aplicaciones, SQL Server proporciona varias tecnologías para garantizar la disponibilidad de los datos: la conmutación por error, la copia de base de datos, el envío de registros, y la replicación. Las instancias de SQL Server en clúster por conmutación por error, las cuales se construyen en la parte superior de los servicios de clústeres de Windows (y aprovecha sus capacidades), proporcionan capacidades de falla de hardware automatizado. Con la conmutación por error, la instancia está protegida en caso de una falla de hardware. El espejado (Mirroring) de base de datos se basa en los procesos internos de gestión de registro (logs) en el motor de almacenamiento, para mantener una segunda copia de una base de datos con una latencia extremadamente baja. La base de datos espejada se puede ejecutar en un modo sincrónico, lo que garantiza que las transacciones no se pierden nunca si ocurre un fallo en la base de datos primaria. El traspaso de registros se basa en la “copia de seguridad/restauración” del motor junto con el Agente SQL Server, para programar aplicaciones automatizadas de copias de seguridad del registro de transacciones en un servidor secundario. La replicación aprovecha las capacidades compatibles con el motor de replicación, descriptos anteriormente, que le permite mantener una copia de la totalidad o una parte de una base de datos. En una instancia, se puede aplicar el espejado de base, el traspaso de registros (logs), y la réplica para proporcionar copias redundantes de bases de datos completas o subconjuntos de bases de datos, que pueden ser utilizadas en el caso de una falla en la plataforma de base de datos primaria. Las características de alta disponibilidad disponibles en SQL Server 2008 se explican con más detalle en el capítulo 23.

8

Parte I Introducción a Microsoft SQL Server 2008

El motor relacional de SQL Server 2008 En la tabla 1-4 se enumeran algunos de los cambios en SQL Server 2008, junto con los capítulos en los que estas características se tratan en mayor detalle. TABLA 1-4

Nuevas características en el motor relacional

Descripción de características

Capítulos Referenciado

Tipo de datos “Jerarquía” (Hierarchy) para permitir el almacenamiento de datos jerárquicos

5

Tipo de datos FILESTREAM para almacenar datos de gran tamaño, no estructurados en el sistema operativo, mientras que permanecen bajo el control transaccional de SQL Server

5

Tipos de datos DATE y TIME para almacenar sólo los componentes necesarios para una aplicación, en lugar de ambos.

5

Los tipos de datos espaciales GEOMETRY y GEOGRAPHY permiten el almacenamiento de datos basados en Geometría euclidiana y en un sistema de coordenadas GPS, respectivamente. Las columnas SPARSE y los conjuntos de columnas, permiten la optimización en el almacenamiento de columnas que aceptan valores NULL. Se pueden crear índices filtrados en un subconjunto de filas de una tabla SWITCH permite particiones en una tabla que está participando en replicación transaccional para ser “conmutada” (switched)

5y9 6 6 7 y 23

El seguimiento de cambios proporciona un mecanismo asíncrono para capturar un registro de los cambios. Y consultarse más tarde por las aplicaciones interesadas sólo en lo que ha cambiado Los constructores de registros (Row constructors) permiten valores múltiples en una sola instrucción de inserción

10

La sentencia MERGE permite llevar a cabo operaciones INSERT, UPDATE, y DELETE en una sola sentencia.

10

Los conjuntos de agrupación permiten la agregación de datos en múltiples niveles dentro de una sola declaración SELECT.

9

Los parámetros de valores de tabla permiten que las tablas sean pasadas como parámetros de entrada a las funciones y procedimientos almacenados.

10

12 y 13

Las conversaciones pueden ser priorizados, para permitir que mensajes de mayor prioridad sean distribuidos antes que los de menor prioridad.

16

El motor de “texto completo” que permite consultas en texto no estructurado, ha sido completamente reconstruido.

17

La administración de claves extensibles permite a otros proveedores registrar sus dispositivos de gestión de claves dentro de SQL Server para que se puede así acceder directamente a través de T-SQL.

18

El cifrado de datos transparente permite a los administradores de bases de datos (DBAs) cifrar los datos en el disco y dentro de copias de seguridad automáticamente, sin impacto a las aplicaciones

18

Un subsistema de auditoría configurable por el usuario tiene todas las capacidades necesarias para almacenar, administrar y revisar los rastros de la auditoría.

18

La gestión basada en políticas permite a los DBA’s configurar un conjunto de mejores prácticas y configuraciones que se comprueban, aplican, controlan, e informan.

19

Los servidores de configuración se pueden crear para simplificar la gestión de los grupos de instancias de SQL Server.

19

Capítulo 1 Descripción general de Microsoft SQL Server TABLA 1-4

9

Nuevas características en el motor relacional

Descripción de características

Capítulos Referenciado

Las copias de seguridad pueden ser comprimidas así como encriptadas.

20

Nuevas vistas de administración dinámica (DMV) ayudan en la solución de problemas y en el monitoreo del sistema.

22

El filtrado optimizado de mapas de bits permite que los filtros de mapas de bits sean dinámicamente colocados dentro de planes de consultas en paralelo.

Artículo Online

Las “guías de planificación” fueron introducidas en SQL Server 2005 para permitir a los administradores especificar un plan para ser usado por el optimizador. SQL Server 2008 mejora la función “guías de planificación” con un mejor seguimiento, eventos de perfil, contadores del sistema y la validación. SQL Server Extended Events le permitirá configurar puntos de seguimiento dentro de un proceso de host de servidor para diagnosticar problemas

Artículo Online

El regulador de recursos le permite restringir la cantidad de recursos, como por ejemplo memoria o CPU, que las peticiones entrantes pueden utilizar.

Artículo Online

Artículo Online

Mirroring de base de datos tiene varias mejoras en el rendimiento del buffer de registro de envío y recepción, junto con la capacidad de recuperar automáticamente las páginas dañadas en el espejo

23

La replicación Peer-to-peer (punto a punto) ahora incluye capacidades de detección de conflictos.

23

Para las plataformas de hardware compatibles con el agregado de un procesador “en caliente”, SQL Server 2008 puede dinámicamente reconocer los nuevos procesadores que están disponibles

N/A

Las características designados como “artículos en línea” están disponibles para su descarga gratuita desde Microsoft Press On line Windows Server y el sitio Web cliente en www.microsoft.com/learning/books/online/ServerClient. N / A indica que una característica que está más allá del alcance de este libro

Inteligencia de negocios La lista de los servicios de inteligencia de negocios (BI) es relativamente nueva en el servidor SQL Server. A medida que el papel de las TI se ha disparado en las empresas, también lo han hecho el número y el alcance de aplicaciones de almacenamiento de datos. El desafío para cada organización es que cada línea de aplicación de negocio generalmente tenga sistemas de almacenamiento de datos diseñado específicamente para una aplicación. Si bien la especificidad de la línea de diseños de negocio permite a las aplicaciones un servicio rápido para necesidades específicas, se crea un problema a nivel de organización.

Es posible que haya información de clientes repartidos en decenas o cientos de bases de datos en diversas plataformas de sistema de gestión de base de datos (DBMS). También puede haber información de apoyo de ventas almacenada en una variedad de hojas de cálculo y la comunicación con el cliente podría extenderse a través de varios sistemas de correo electrónico y aplicaciones de gestión de contactos. Los programas de fabricación podrían existir dentro de varios sistemas de gestión de proyectos y de planificación de recursos empresariales (ERP). Para utilizar todos los datos operativos producidos dentro de cualquier organización, hay una necesidad de traer grandes cantidades de información (que está distribuida a través de sistemas dispares), en un único y coherente, conjunto de datos.

10

Parte I Introducción a Microsoft SQL Server 2008

El objetivo de los servicios prestados por la plataforma de inteligencia de negocios es permitir a los departamentos de TI, crear potentes aplicaciones de análisis de datos al tiempo que consolida la información corporativa en un sistema único análisis. Las capacidades de BI abarcan tres componentes que permiten a las empresas: Integrar, depurar y transformar datos de múltiples fuentes Construir reportes ad hoc o automatizados Proporcionar exploración y análisis de datos de gran alcance Búsqueda para patrones de optimización de negocio dentro de grandes volúmenes de datos

Servicios de integración Con SQL Server 2005 se incluye la primera versión de Microsoft de la próxima generación en la plataforma de integración de datos: “SQL Server Integration Services” (SSIS). Mientras que su predecesor, Data Transformation Services (DTS), fue usado ampliamente en muchas organizaciones para mover la información, SSIS tomó esta utilidad a un nuevo nivel, permitiendo a las organizaciones construir plataformas potentes y flexibles de integración de datos y aplicaciones que iban mucho más allá de las simples tareas de movimiento de datos que se hacían con DTS.

SSIS incluye todas las capacidades de clase empresarial que se pueden encontrar en aplicaciones de extracción, transformación y carga (ETL), al tiempo que permite a las organizaciones construir aplicaciones que puedan gestionar bases de datos, recursos del sistema, responder a los eventos de la base de datos y del sistema, e incluso interactuar con los usuarios.

SSIS tiene una variedad de tareas para permitir a los paquetes cargar o descargar archivos mediante el protocolo (FTP), manipular archivos en directorios, archivos de importación entre bases de datos o bien exportación de datos hacia los archivos. SSIS también puede ejecutar aplicaciones, interactuar con servicios web, enviar/recibir mensajes de Microsoft Message Queue (MSMQ), y responder a eventos de Windows Management Instrumentation (WMI). Los “contenedores” le permiten a SSIS ejecutar tareas enteras (flujos de trabajo) dentro de un bucle con una variedad de entradas (inputs) a partir de un simple contador de archivos en un directorio o a través del resultado de una consulta (query). Se incluyen además tareas especializadas para copiar objetos de SQL Server en un determinado entorno, así como gestionar las copias de seguridad de la bases de datos, re-indexación y otros tipos de operaciones de mantenimiento. Si SSIS no viene con una tarea ya diseñada para satisfacer sus necesidades, usted puede escribir sus propios procesos mediante “Visual Studio Tools for Applications” (VSTA), o incluso diseñar sus propias tareas personalizadas que se pueden registrar y utilizar dentro de SSIS.

Las restricciones de precedencia permiten configurar flujos de trabajo más complicados donde el procesamiento se puede dirigir en base a si un componente tiene éxito, falla, o simplemente finaliza su ejecución. Además de la ruta estática basada en el estado de finalización de una tarea, puede también combinar expresiones para hacer rutas de flujo de trabajo condicional. Los controladores de eventos le permiten ejecutar flujos de trabajo completos en respuesta a los acontecimientos que ocurren a nivel de paquete o de tarea, como también ejecutar automáticamente un flujo de trabajo que mueve un archivo a un directorio cuando no se puede procesar, registrar los detalles del error y enviar un correo electrónico a un administrador.

Capítulo 1 Descripción general de Microsoft SQL Server

11

Las configuraciones de paquetes le permiten a los desarrolladores mostrar las propiedades internas que pueden ser modificadas para los diversos ambientes en los que un paquete será ejecutado. Al exponer propiedades en una configuración, los administradores tienen una forma sencilla de re-configurar un paquete, como en el caso de un cambio de los nombres de las bases de datos o directorios del servidor, sin necesidad de modificar el paquete. Más allá de las tareas de flujo de trabajo, SSIS viene con amplia cantidad de componentes para el movimiento y manipulación de datos. Si bien es posible que usted pueda simplemente mover los datos de un lugar a otro dentro de una tarea de flujo de datos, también se pueden aplicar una amplia variedad de operaciones a los datos a medida que mueven a través del motor. Usted puede depurar datos no válidos, realizar cálculos extensos, y convertir los tipos de datos cuando los datos se mueven a través del flujo. Puede dividir los flujos de datos entrantes a múltiples destinos en base a una condición. La tarea de flujo de datos tiene la capacidad de realizar búsquedas (lookups) de datos contra las fuentes, ya sea para validar los datos entrantes, incluir información adicional o validar los datos que se envían a un destino. La aplicación de búsquedas difusas (fuzzy lookups) y agrupación difusa (fuzzy grouping) le permite usar las capacidades flexibles de "coincidencia" (matching) y agrupación más allá de los simples “caracteres comodín” (wildcards). También puede combinar varios flujos de datos entrantes y enviarlos a un solo destino. Así como múltiples flujos entrantes se pueden combinar, también se puede tomar un flujo de datos único y difundirlo a múltiples destinos. Dentro de una tarea de flujo de datos SSIS, también puede: reasignar caracteres (remap), conjuntos de datos “pivote/un-pivote”, calcular los agregados, ordenar datos, obtener datos de muestra y realizar minería de texto. Si SSIS no tiene un adaptador de datos capaz de manejar el formato de los datos origen o destino o no tiene una transformación adaptable a la lógica que necesita llevar a cabo, existe un componente de script que se incluye y que le permite obtener las capacidades completas de Visual Studio Tools para Aplicaciones para aplicar en sus datos.

Usted aprenderá acerca de las diversas capacidades de SSIS en el capítulo 24.

Integration Services en SQL Server 2008 Tan poderoso y amplio como SSIS fue en SQL Server 2005, SQL Server 2008 expande todas las capacidades de esta plataforma de integración de datos de clase mundial. Algunas de las nuevas características de SQL Server 2008 aparecen en la Tabla 1-5.

TABLA 1-5

Nuevas características de Integration Services

Descripción de las características VTSA admite secuencias de comandos para que pueda utilizar Visual Basic.NET o C #. NET para crear scripts El mecanismo de captura de datos modificados del motor de almacenamiento se integra directamente en SSIS para permitir a los paquetes extraer y manipular sólo los datos que han cambiado. Nuevos tipos de datos fecha y hora te permiten aplicar precisión definida por el usuario, o desplazamientos de zona horaria El componente de origen y destino ADO.NET le permite enviar/recibir desde cualquier proveedor ADO.NET compatible Las transformaciones de búsqueda (Lookup transform) aprovechan las caches de datos para mejorar el rendimiento de las operaciones de búsqueda. Se pueden generar archivos de volcado (dump) a partir de los paquetes

12

Parte I Introducción a Microsoft SQL Server 2008

Reporting Services Las organizaciones de todos los tamaños necesitan tener acceso a las grandes cantidades de datos almacenados en toda la empresa de una manera coherente y estandarizada. Aunque sería bueno esperar a que todos sepan cómo escribir consultas a fuentes de datos para obtener los datos necesarios o tener desarrolladores a disposición para escribir interfaces de usuario para los datos que la compañía necesita, la mayoría de las organizaciones no cuentan con los recursos disponibles. Por lo tanto, los usuarios finales necesitan herramientas que estén disponibles para que puedan crear informes estandarizados que estén disponibles en toda la organización, así como proporcionar la capacidad para que los usuarios finales creen informes sobre una base ad hoc.

SQL Server Reporting Services (SSRS) llena el vacío en la entrega de datos al proporcionar una plataforma flexible para el diseño de informes, así como la distribución de los datos en toda la organización. El departamento de TI puede rápidamente crear informes complejos que se implementan en uno o más portales y se pueden acceder según reglas de seguridad flexibles. El departamento de TI también puede diseñar y publicar modelos de reportes que permiten a los usuarios finales crear sus propios informes sin necesidad de entender las complejidades subyacentes en una base de datos. Los reportes construidos por el departamento de IT, así como los construidos por los usuarios finales, se pueden implementar en un portal centralizado de informes que permite a los miembros de la organización acceder a la información que necesitan para hacer sus trabajos.

Los usuarios pueden acceder a los informes, los cuales son generados ya sea sobre la marcha o a partir de datos almacenados en caché, que se actualizan en un horario. Los usuarios también pueden configurar las suscripciones de un informe que permiten a SSRS configurar una programación para ejecutar el informe (formateado para su especificación) y luego enviarlo a un usuario en su canal de distribución preferido. Por ejemplo, un gerente de ventas puede crear una suscripción a un informe de ventas diarias de tal manera que se genere el informe a la medianoche después que toda la actividad de venta se cerró, lo tenga en formato PDF, y le llegue en su buzón de correo electrónico para su revisión por la mañana.

SSRS viene con dos componentes principales, el Servidor de informes y el Diseñador de informes. El servidor de informes es responsable de alojar todos los informes y la aplicación de la seguridad. Cuando los informes se solicitan, el servidor de informes se encarga de conectar a las fuentes de datos subyacentes, recopilar los datos y representar el informe en la salida final. La presentación (rendering)” de un informe se lleva a cabo ya sea a petición de un usuario o a través de una tarea programada que permita que el informe se ejecute durante las horas no pico.

Para que el servidor de informes tenga algo como para dar servicio a los usuarios, los reportes primero deben haber sido creados. El diseñador de informes es responsable de todas las actividades involucradas en la creación y depuración de informes. Los componentes incluidos le permiten a los usuarios crear una amplia gama de informes desde cuadros sencillos reportes de matriz, hasta informes con varios niveles de subinformes, reportes anidados, gráficos, informes vinculados, y enlaces a recursos externos. En sus informes, puede incrustar cálculos y funciones, tablas combinadas, e incluso variar el resultado del informe basado en el el usuario que accedió al reporte. El diseñador de informes es también responsable del diseño de modelos de reportes que proporcionan una potente capa semántica para ocultar las complejidades de una fuente de datos a los usuarios finales, para que puedan centrarse en la construcción de informes.

Usted aprenderá acerca de las diversas capacidades de SSRS en el Capítulo 25.

Capítulo 1 Descripción general de Microsoft SQL Server

13

Reporting Services en SQL Server 2008 Tan extensa como la plataforma de reportes en SQL Server 2005, SQL Server 2008 incluye muchas mejoras más importantes que le permiten desarrollar una gama más amplia de aplicaciones de informes utilizando componentes “listos para usar” (out-of-the-box). Algunas de las nuevas características de SSRS en SQL Server 2008 que usted aprenderá en el capítulo 25, se listan en la Tabla 1-6.

TABLA 1-6

Nuevas características de Reporting Services

Descripciones de las características Los administradores pueden establecer umbrales de memoria en el servidor de informes El servidor de informes ya no requiere IIS y de forma nativa puede alojar el entorno y aprovechar la biblioteca HTTP.SYS, al tiempo que permite el acceso URL a los informes y capacidades de gestión del servidor de reportes. Con la eliminación de IIS en la configuración, el servidor de informes se ocupa de todas las solicitudes de autenticación Los subinformes y las regiones de datos anidadas se pueden convertir a Excel. Puede convertir los informes a formatos Windows Forms, Web Forms, CSV, PDF, imágenes, Excel, Word y XML Los elementos de informe personalizados “Dundas”, son soportados por SSRS. Las variables pueden ser declaradas como globales o con alcance a grupos específicos. La tabla, la matriz, y las regiones de datos de lista, se han sustituido por una sola región Tablix con las capacidades de las tres. Los gráficos han sido mejorados para ofrecer más tipos de gráficos y un mayor control sobre los elementos del gráfico. Usted puede diseñar informes en el “Business Intelligence Development Studio” (BIDS) o con el nuevo Diseñador de informes independiente (stand-alone). Una nueva región de datos “medibles” está disponible con una funcionalidad similar a los indicadores clave de rendimiento (KPIs) que se utilizan en SQL Server Analysis Services en los cubos. Las capacidades de integración de SharePoint se amplían con la mejora de interfaces de programación.

Analysis Services Como el volumen de datos dentro de una organización explota, los usuarios necesitan herramientas que les permitan tomar decisiones de negocios en base a un tiempo casi real. Los usuarios no pueden esperar a que el sector de TI diseñe informes para los cientos de preguntas que pueden ser formuladas por un único usuario. Al mismo tiempo, TI no tiene los recursos para proveer a los cientos de informes que son necesarios para que las personas administren un negocio.

SQL Server Analysis Services (SSAS) fue creado para llenar la brecha entre las necesidades de información de los usuarios de negocio y la capacidad de TI para proporcionar datos. SSAS engloba dos componentes: OLAP y Data Mining. El motor OLAP le permite implementar, consultar y administrar cubos que han sido diseñados en el BIDS “Business Intelligence Development Studio”. Puede incluir múltiples dimensiones, jerarquías múltiples dentro de una dimensión, y elegir una variedad de opciones tales como cuales atributos están disponibles para su visualización y cómo son ordenados los miembros. Usted puede diseñar medidas como elementos aditivos simples, así como emplear elementos complejos, y esquemas de agregaciones definidos por el usuario.

14

Parte I Introducción a Microsoft SQL Server 2008

Mediante la adición de indicadores clave de rendimiento (KPI’s), puede proporcionar indicadores visuales para los usuarios finales, para que vean el estado de una entidad de negocio. Los cubos pueden contener perspectivas que definen un subconjunto de datos dentro de un único cubo, para simplificar así su visualización. La capa de meta datos incorporada le permite especificar traducciones de idioma en cualquier nivel dentro de un cubo, de modo que los usuarios puedan navegar por los datos en su idioma nativo. El motor de minería de datos extiende el análisis de negocios, para permitirles a los usuarios encontrar patrones y hacer predicciones. Usando cualquiera de los varios algoritmos de minería que vienen con SQL Server 2008, las empresas pueden ver la tendencia de los datos a través del tiempo, determinar qué factores influyen en las decisiones de compra, o incluso reconfigurar una experiencia de compra basada en patrones de compra, para maximizar el potencial de una venta. Usted aprenderá acerca de las diversas capacidades de SSAS en el Capítulo 26.

Analysis Services de SQL Server 2008 SQL Server 2008 ofrece importantes mejoras y nuevas capacidades para el motor de SSAS. Algunas de las nuevas características de SQL Server 2008 Analysis Services se enumeran en la Tabla 1-7. TABLA 1-7

Nuevas características de Analysis Services

Descripciones de las características Las extensiones de personalización le permiten añadir métricas a un cubo después de que se ha implementado, las cuales pueden ser compartidas con otros usuarios del cubo. El diseñador de agregación ayuda a diseñar y navegar nuevas agregaciones. El algoritmo de serie temporal de Microsoft puede ser configurado para utilizar ya sea el ARTxp por defecto o los nuevos Algoritmos ARIMA Puede consultar los datos en caché en un modelo de minería de la misma manera que puede consultar los datos “case” en las versiones anteriores. Puede realizar una validación cruzada de varios modelos de minería para determinar una mejor exactitud del modelo Es posible dividir los datos entre pruebas permanentes y conjuntos de entrenamiento.

Capítulo 1 Referencia rápida Si usted está interesado en

Referencia a esta sección del libro

Instalación de SQL Server 2008

Parte 1

Diseño de bases de datos, tablas e índices

Parte 2 Parte 3

Recuperar o manipular datos Diseñar procedimientos almacenados y otros objetos de código, Service Broker, o trabajar con texto completo

Parte 4

Configuración de la seguridad o la gestión del motor de base de datos

Parte 5

Tuning del rendimiento del Motor relacional La alta disponibilidad

Parte 8 Parte 6

Business intelligence

Parte 7

Capítulo 2

Instalar y Configurar SQL Server 2008 Después de completar este capítulo, usted será capaz de ■

Elegir la edición correspondiente de Microsoft SQL Server 2008 para sus necesidades de negocio.

■ ■

Seleccionar el sistema operativo apropiado y el hardware para apoyar su instalación. Configurar cuentas de servicio con el nivel apropiado de autoridad.



Configurar el modo en que los usuarios se autentican en una ■ ■

instancia. Configurar el idioma por defecto. Configurar los servicios de SQL Server.



Entender las opciones para actualizar SQL Server. En el capítulo 1 de Microsoft SQL Server, "Visión general de Microsoft SQL Server," usted aprendió acerca de los componentes que están disponibles en SQL Server 2008. En este capítulo, usted aprenderá sobre las ediciones que están disponibles y los requisitos de hardware correspondientes. Usted instalará todos los componentes que se incluyen con SQL Server 2008 de acuerdo con las mejores prácticas de configuración. Una vez instalado, usted aprenderá acerca de los pasos que se deben tomar, posteriores a la instalación.

Nota: para completar los pasos de este capítulo necesitará autorización de administrador en el equipo donde SQL Server será instalado.

Ediciones de SQL Server 2008 SQL Server 2008 está disponible en una variedad de ediciones. Cada edición está diseñada para satisfacer un conjunto de necesidades en función de las características requeridas para diversas aplicaciones dentro de una organización. La Tabla 2-1 en la página 16 enumera las ediciones disponibles de SQL Server.

15

16

Parte I Introducción a Microsoft SQL Server 2008 TABLA 2-1

Ediciones de SQL Server 2008

SQL Server Edition

Características

Enterprise, Developer, Evaluation

Diseñadas para las organizaciones más grandes, para satisfacer la mayor parte de aplicaciones exigentes. SQL Server Developer y SQL Evaluation contienen todas las características de la versión SQL Server Enterprise, pero tienen restricciones sobre cómo se pueden implementar. La edición Developer se puede utilizar sólo para desarrollar aplicaciones de SQL Server y no se pueden usar para producción. La edición de evaluación tiene una duración limitada a 180 días y se puede utilizar para evaluar las capacidades de SQL Server, pero no se pueden utilizar en producción o para desarrollar aplicaciones.

Estándar

Contiene la mayoría de las características de SQL Server que necesitan las pequeñas y medianas empresas.

Grupo de trabajo

Adecuado para uso departamental o pequeñas organizaciones que necesitan la funcionalidad básica de una plataforma de gestión de datos.

Express

Libre y redistribuible con aplicaciones para proporcionar almacenamiento local de datos. También puede ser utilizado como una plataforma de almacenamiento de datos básicos basado en servidor.

Express con Servicios avanzados

Tiene todas las capacidades de la edición Express + capacidades limitadas de Reporting Services junto con una versión Express de Management Studio.

Compacta

Libre, con Base de datos redistribuible integrada, construida principalmente para aplicaciones autónomas (stand-alone).

Nota Dado que las ediciones Developer y Evaluation de SQL Server contienen el mismo soporte que las funciones de la edición Enterprise, a menos que se indique específicamente, cualquier discusión en este libro que hace referencia a la edición Enterprise también aplican para las ediciones Developer y Evaluación.

Debido a que cada edición está dirigida a clases específicas de aplicaciones, así como las necesidades de organizaciones de distintos tamaños, la principal diferencia entre las ediciones de SQL Server es el conjunto de características y funcionalidades que soportan. Por ejemplo, la edición Enterprise es la única edición que soporta la minería de datos, el particionamiento, las instantáneas de bases de datos, las operaciones de mantenimiento en línea o en paralelo, la compresión, el regulador de recursos, replicación peer-to-peer, respaldo “en caliente” para agregar hardware, CPUs ilimitada, y hasta 16 nodos para el clúster de conmutación por error (failover). La edición Express contiene soporte para SQL Server Integration Services, SQL Server Analysis Services, más de una CPU, bases de datos superiores a 4 GB, y más de 1 GB de RAM sólo para nombrar algunas características.

Nota Los detalles completos de la compatibilidad de características / funcionalidad de cada edición de SQL Server pueden encontrarse en el sitio Web de Microsoft en http://www.microsoft.com/sql.

Capítulo 2 Instalación y configuración de SQL Server 2008

17

Requisitos de infraestructura SQL Server 2008 es compatible con varias versiones de Windows junto con arquitecturas de procesador Intel y AMD. La edición Developer y Evaluation de SQL Server son soportadas por las siguientes versiones de windows: Windows Vista Home Basic o superior Windows 2008 Server Standard Edition o superior Windows Server 2003 Standard Edition SP2 o superior Windows XP Professional SP2 o superior SQL Server 2008 Enterprise Edition sólo es soportado por las siguientes versiones de Windows: Windows 2008 Server Standard Edition o superior Windows Server 2003 Standard Edition SP2 o superior Nota La versión de 32 bits de SQL Server 2008 se puede instalar tanto en versiones de 32bits como de 64-bits de los sistemas operativos soportados. La versión de 64-bit sólo se puede instalar en las versiones de 64-bit de Windows.

Además de instalar un sistema operativo compatible, usted tendrá que asegurarse de que el Framework . NET 2.0 ha sido instalado. SQL Server 2008 también requiere 1,6 GB de espacio libre en disco.

Cuentas de servicio Todos los componentes Core de SQL Server se ejecutan como servicios. Para configurar correctamente cada componente, tendrá que crear varias cuentas de servicio antes de la instalación. Usted necesitará cuentas de servicio dedicadas para los siguientes componentes: Motor de base de datos SQL Server Agent Búsqueda de texto completo Integration Services Reporting Services Analysis Services En su primer ejercicio, creará cuentas de servicio que se utilizarán durante el proceso de instalación.

18

Parte I Introducción a Microsoft SQL Server 2008

Crear cuentas de servicio

1. Haga clic en Inicio, haga clic en Mi PC y seleccione Administrar. 2. Expanda Usuarios y grupos locales y seleccione Usuarios. 3. Haga clic en el panel de la derecha, y seleccione Nuevo usuario. 4. Especificar SQL2008SBSDE en el campo Nombre de usuario, proporcionar una contraseña segura, desactive “El usuario debe cambiar la contraseña en el siguiente inicio de sesión” y seleccione “La contraseña nunca caduca”. 5. Repita los pasos 3 y 4 para crear las cuentas de servicio que figuran en la Tabla 2-2. TABLA 2-2 Cuentas de servicio Nombre de la cuenta

Componente

SQL2008SBSDE

Database Engine

SQL2008SBSSQLAgent

SQL Server Agent

SQL2008SBSIS

Integration Services

SQL2008SBSFullText

Búsqueda de texto completo

SQL2008SBSRS

Reporting Services

SQL2008SBSAS

Analysis Services

Cuando se haya completado, la pantalla debe ser similar a esta:

Capítulo 2 Instalación y configuración de SQL Server 2008

19

Nota Utilizaré Windows XP Professional SP2 para todos los ejercicios de este libro. Usted tendrá que realizar los ajustes adecuados para la versión de Windows que esté utilizando. Además, si su máquina es un miembro de un dominio, sus cuentas de servicios deben ser cuentas de dominio, en lugar de cuentas locales, al instalar SQL Server 2008 en un entorno operativo.

Secuencias de intercalación (collation) Las secuencias de intercalación controlan la forma en que SQL Server trata los datos de caracteres para el almacenamiento, la recuperación, la clasificación y las operaciones de comparación. SQL Server 2008 le permite especificar una secuencia de intercalación para soportar cualquier idioma utilizado actualmente en todo el mundo. Las secuencias de intercalación se pueden especificar a nivel instancia, base de datos, tabla y columna. La única secuencia de intercalación obligatoria se define a nivel de instancia, que por defecto aplica a todos los demás niveles a menos que sea específicamente desbloqueada. Una secuencia de intercalación define el conjunto de caracteres que se soportan junto con mayúsculas y minúsculas, distinción de acentos, y la sensibilidad kana (silabarios japoneses). Por ejemplo, si utiliza la secuencia de intercalación de SQL_Latin1_General_CP1_CI_AI, obtendrá soporte para un conjunto de caracteres de Europa occidental que es insensible a mayúsculas, minúsculas y acento. SQL_Latin1_General_CP1_CI_AI tratará los caracteres e, E, è, é, ê, y ë, como el mismo carácter para la clasificación y operaciones de comparación, mientras que una secuencia de intercalación francesa con “sensibilidad a mayúsculas” (case-sensitive) (CS) y acentos sensible (AS), tratará cada uno como un carácter diferente.

Modos de autenticación Una de las opciones de configuración de instancia que deberá establecer durante la instalación es el modo de autenticación que SQL Server utilizará para controlar los tipos de conexiones permitidas. El modo de autenticación de SQL Server se puede configurar como: Sólo para Windows (seguridad integrada) Windows y SQL Server (modo mixto) Cuando SQL Server está configurado con autenticación de Windows, sólo podrá utilizar las cuentas de Windows para acceder a la instancia de SQL Server. Cuando SQL Server se configura en modo mixto, puede utilizar cualquiera de las cuentas de Windows o cuentas de SQL Server creadas para ingresar a la instancia de SQL Server.

Nota El capítulo 18, "Seguridad", trata sobre los inicios de sesión en más detalle.

20

Parte I Introducción a Microsoft SQL Server 2008

Instancias SQL Server La instancia define el contenedor para todas las operaciones que se realizarán en SQL Server. Cada instancia tiene su propio conjunto de bases de datos, credenciales de seguridad, ajustes de configuración, servicios de Windows, y otros objetos de SQL Server. SQL Server 2008 admite la instalación de hasta 50 instancias de SQL Server en una sola máquina. Usted puede instalar una instancia como la predeterminada junto con hasta 49 instancias con nombre adicionales o puede instalar 50 instancias con nombre (o sea que se tiene que escribir el nombre explícito de cada instancia cuando se hace referencia a cada una de ellas). Cuando se conecta a una instancia predeterminada de SQL Server, se utiliza el nombre de la máquina en la que la instancia está instalada. Al conectarse a una instancia con nombre, se utiliza la combinación del nombre del equipo y el nombre de la instancia (por ejemplo \ ). Las razones principales para la instalación de más de una instancia de SQL Server en un solo equipo son: Necesita instancias para pruebas de control de calidad o desarrollo. Necesita soportar paquetes de servicios múltiples o niveles de parches. Hay diferentes grupos de administradores a los que sólo se les permite acceder a un subconjunto de bases de datos dentro de la organización. Debe soportar múltiples conjuntos de opciones de configuración de SQL Server. Nota Sólo la edición Enterprise de SQL Server 2008 admite la instalación de múltiples instancias en un solo equipo.

Actualización a SQL Server 2008 Puede actualizar desde SQL Server 2000 o SQL Server 2005 a SQL Server 2008 utilizando ya sea una actualización "en el lugar” (in-place) o bien “en paralelo” (side-by-side). Consejo Antes de actualizar, ejecute el Asesor de actualizaciones, disponible en http://www.microsoft.com/sql, contra su instancia de servidor SQL Server 2000 y 2005 y el código base, para determinar posibles incompatibilidades.

Actualización “en el lugar“ (in-place) Una actualización “in-place” permite instalar SQL Server 2008 encima de una instancia ya existente de SQL Server 2000 o 2005. SQL Server realizará las siguientes acciones durante una actualización “in-place”:

Instala los binarios de SQL Server 2008 Actualiza las bases de datos de SQL Server 2000 o 2005.

Capítulo 2 Instalación y configuración de SQL Server 2008

21

Quita los binarios de SQL Server 2000 o 2005, los servicios y las entradas del registro. Inicia la instancia de SQL Server 2008 Al finalizar una actualización “in-place”, la instancia SQL Server 2000 o 2005 será reemplazada por la instancia SQL Server 2008. Sus bases de datos, la configuración de seguridad y las opciones de configuración se migrarán a la nueva instancia de servidor de SQL Server 2008. La anterior instancia de SQL Server 2000 o 2005 dejará de existir en la máquina.

Actualización “en paralelo” (Side-by-Side) Una actualización “side-by-side” le permite instalar una instancia de SQL Server 2008 sin afectar la instancia existente de SQL Server 2000 o 2005. Una vez instalada, usted tendrá que mover todas las bases de datos, los objetos y las configuraciones de SQL Server 2000 o 2005 a la instancia de SQL Server 2008.

Nota Revise los documentos técnicos de actualización en http://www.microsoft.com/sql, así como la documentación que se incluye con el Asesor de actualizaciones de SQL Server, para obtener información detallada sobre la actualización de SQL Server 2000 y

Si bien una actualización “side-by-side” implica muchos más pasos que tienen que llevarse a cabo manualmente, tiene la ventaja de dejar la instancia intacta de SQL Server 2000 o 2005. Además le permite mover bases de datos de SQL Server 2008 de una manera organizada “por etapas”. Nota No es posible actualizar las “bases de datos del sistema” utilizando el método de actualización side-by-side. Aprenderá acerca de las “bases de datos del sistema” en el Capítulo 4, "Creación de bases de datos."

Métodos de la actualización Cuando se realiza una actualización side-by-side, usted tiene tres métodos diferentes para elegir: 1. Copia de seguridad y restauración 2. Separar y adjuntar (Detach and attach) 3. Asistente para copiar objetos Cuando se actualiza utilizando el método “copia de seguridad y restauración”, usted tomará una copia de seguridad de su base de datos de SQL Server 2000 o 2005 y la restaurará en SQL Server 2008. Nota Usted aprenderá sobre “copia de seguridad y restaurar bases de datos” en el Capítulo 20, "Recuperación de datos".

22

Parte I Introducción a Microsoft SQL Server 2008

Cuando se actualiza utilizando el método de “separar y adjuntar”, separará las bases de datos de SQL Server 2000 o 2005, copiará los archivos de base de datos a una nueva ubicación, y adjuntará la base de datos a la instancia de SQL Server 2008.

Nota Usted aprenderá acerca de “separar y adjuntar bases de datos” en el capítulo 4, "Creación de bases de datos. "

Al Asistente para copiar objetos, que es una tarea disponible dentro de SQL Server Integration Services (SSIS), se puede acceder en una variedad de maneras. El Asistente para copiar objetos permite especificar los objetos de la base de datos junto con la configuración de migración que se utiliza.

Consejo Si necesita actualizar sólo una porción de base de datos SQL Server 2000 o 2005, el Asistente de copia de Objetos proporciona un directorio (path) para mover sólo el conjunto de objetos que se desea actualizar. Si está actualizando la base de datos entera SQL Server 2000 o 2005, el Asistente para copiar objetos proporciona un método menos eficaz de actualización.

Instalación de SQL Server 2008 Ahora que hemos cubierto la formación básica para las instancias de SQL Server, instalará su primera instancia del motor SQL Server, junto con Analysis Services, Reporting Services, Integration Services y todas las herramientas que se incluyen con SQL Server. Instalación de SQL Server 2008 Consejo Reinicie el equipo antes de iniciar el proceso de instalación de SQL Server para asegurarse de que usted no tiene ninguna solicitud de reinicio pendiente que bloquee el proceso de instalación de SQL Server.

1. Inicie la rutina de instalación de SQL Server. 2. Si aún no ha instalado el Framework . NET 3.5, la primera rutina de instalación iniciará instalación del Framework . NET 3.5, como se muestra aquí.

la

3. Una vez que el Framework NET 3.5 ha sido instalado, se lanzará la pantalla “Términos de licencia”. Seleccione “He leído y acepto las condiciones del Contrato de licencia” y haga clic en Siguiente. 4. Cuando aparezca la pantalla Requisitos previos de Instalación, haga clic en Instalar.

Capítulo 2 Instalación y configuración de SQL Server 2008

23

5. Una vez que se han instalado los requisitos previos, verá la pantalla principal de instalación, que se muestra aquí.

24

Parte I Introducción a Microsoft SQL Server 2008

6. Haga clic en el link “Nueva instalación stand-alone de SQL Server” para iniciar la instalación de SQL Server. 7. La instalación ejecutará una comprobación de la configuración del sistema. Una vez que la verificación se complete con éxito, la pantalla que se muestra deberá ser similar a la siguiente:

Nota Si alguno de los controles de configuración del sistema no funciona, tendrá que tomar las medidas apropiadas a la falla, con el fin de continuar con el proceso de instalación.

8. Una vez que haya revisado las reglas de soporte de instalación, haga clic en Aceptar. 9. Seleccione todas las características de SQL Server que mostramos en la siguiente imagen y haga clic en Siguiente. 10. Seleccione la opción “Instancia predeterminada” y haga clic en Siguiente. 11. Compruebe los requisitos de espacio en disco y haga clic en Siguiente.

Capítulo 2 Instalación y configuración de SQL Server 2008

12. Ingrese para cada servicio correspondiente, las cuentas de servicio que creó anteriormente (en este capítulo). Cuando esto se haya completado, la pantalla debe ser similar a la siguiente:

25

26

Parte I Introducción a Microsoft SQL Server 2008

13. Haga clic en la ficha Intercalación (Collation) para revisar el conjunto de secuencia de intercalación para el motor de base de datos y Analysis Services. Realice los ajustes que considere necesarios de acuerdo con el idioma soportado que usted necesita y haga clic en Siguiente. 14. Especifique el modo mixto y establezca una contraseña. Haga clic en el botón Agregar “currentuser” para agregar la Cuenta de Windows que está ejecutando la instalación, como administrador dentro SQL Server. Haga clic en el botón Agregar para agregar otras cuentas de Windows que desea como administradores dentro de SQL Server. Cuando se haya completado, la pantalla debe ser similar a la siguiente:

Nota La contraseña que especifique será asignada al usuario “sa” que ya viene incorporado al servidor SQL.

Importante Se recomienda que ejecute instancias de SQL Server en modo de autenticación de Windows en lugar de modo mixto. La razón por la que estamos especificando Modo mixto durante la instalación de ejemplo, es demostrar los inicios de sesión de SQL Server en el Capítulo 19, "Administración basada en directivas".

15. Haga clic en la ficha Directorios de Datos para revisar las configuraciones.

Capítulo 2 Instalación y configuración de SQL Server 2008

27

Nota Usted aprenderá acerca de “directorios de datos y log” en el Capítulo 4, "Creación de bases de datos."

16. Haga clic en la pestaña FILESTREAM, seleccione “Habilitar FILESTREAM para acceso Transact-SQL”, así como “Habilitar FILESTREAM para el acceso al flujo de archivos E/S”. Deje el conjunto de nombres de recurso compartido de Windows como el default “MSSQLSERVER “ y haga clic en Siguiente.

Nota Usted aprenderá sobre el tipo de datos FILESTREAM en el capítulo 5, "Diseño de tablas".

17. Haga clic en “Agregar usuario actual” (current-user) para agregar la cuenta que está ejecutando la instalación como un administrador dentro de Analysis Services. Añada cualquier otra cuenta de Windows que desee para tener acceso de administrador en Analysis Services. Revise la información de la ficha “Directorios de Datos” y haga clic en Siguiente. 18. Seleccione la opción “Instalar la configuración predeterminada del modo nativo” en la página “Configuración de Reporting Services” y haga clic en Siguiente. 19. Seleccione las opciones que desee en la “Página de reporte de uso y error” y haga clic en Siguiente. 20. Revise la información de la página “Listo para instalar” y haga clic en Instalar. 21. SQL Server iniciará la rutina de instalación para las diferentes opciones que especificó y mostrará el reporte de progreso. Durante la fase de instalación, la pantalla tendrá un aspecto similar al siguiente gráfico:

28

Parte I Introducción a Microsoft SQL Server 2008

Instalar bases de datos de ejemplo SQL Server 2008 no viene con ninguna base de datos de ejemplo. Usted tendrá que descargar las bases de datos AdventureWorks2008 y AdventureWorksDW2008 desde el sitio web de CodePlex. 1. Abra Internet Explorer y vaya a http://www.codeplex.com/MSFTDBProdSamples . Haga clic en la ficha “Versiones”.

Nota Las ubicaciones de los sitios web son exactas a la redacción de este libro. Sin embargo, los lugares pueden cambiar en el futuro. Si usted no puede encontrar la dirección de arriba, utilice el cuadro de búsqueda dentro del sitio web de CodePlex para encontrar la nueva ubicación.

2. Desplácese hasta la parte inferior de la página y descargue en el equipo local los archivos AdventureWorks2008*.msi y AdventureWorksDW2008 *.msi.

Importante El sitio web de CodePlex contiene rutinas de instalación para plataformas 32 bits, x64 y IA64 Descargue el archivo “.msi” que sea apropiado para su sistema operativo.

3. Ejecute las rutinas de instalación, para ambas descargas y use la ubicación de extracción predeterminada. 4. Haga clic en Inicio | Todos los programas | Microsoft SQL Server 2008 | SQL Server Management Studio. 5. Si no ha entrado, especifique el nombre de la máquina donde ha instalado la instancia de SQL Server en el ejercicio anterior y haga clic en Conectar. Su pantalla debería ser similar al siguiente:

Capítulo 2 Instalación y configuración de SQL Server 2008

29

6. Haga clic en el botón “Nueva consulta”, escriba el código siguiente y haga clic en el botón Ejecutar. EXEC sp_configure 'filestream_access_level', 2; GO RESTORE DATABASE AdventureWorks FROM DISK = 'C: \ Archivos de programa \ Microsoft SQL Server \ 100 \ Tools \ Samples \ AdventureWorks2008.bak 'WITH RECOVERY; GO RESTORE DATABASE AdventureWorksDW FROM DISK='C:\Program Files\ Microsoft SQL Server\100\Tools\Samples\AdventureWorksDW2008.bak' WITH RECOVERY; GO

7. Cuando expanda el nodo de base de datos, la pantalla debe ser similar a la siguiente:

Capítulo 2 Referencia rápida Para

Haga esto

Crear cuentas de servicio

Utilice la consola de administración de equipos (Computer Management) o la consola de Activación Usuarios y Computadoras.

Realizar una actualización del tipo Instale una instancia de SQL Server y luego o bien aplique el método de side-by-side. “copias de seguridad y restaurar” o bien el de “detach and attach” usando las bases de datos existentes en el servidor SQL 2000 o 2005. Si necesita actualizar selectivamente objetos dentro de una base de datos, utilice el Asistente para copiar objetos.

Capítulo 3

Uso de las herramientas de SQL Server 2008 Después de completar este capítulo, usted será capaz de Seleccionar la herramienta del Servidor SQL 2008 adecuada para una tarea determinada Administrar servicios de SQL Server 2008 Iniciar, navegar y utilizar SQL Server Management Studio Utilizar varios accesos directos para una mejor productividad Configurar el Correo electrónico de base de datos SQL Server 2008 incluye ocho herramientas independientes que se utilizan para configurar, administrar y supervisar Servicios de SQL Server. Dentro de este grupo de ocho herramientas básicas, también se pueden diseñar objetos de SQL Server y ejecutar código. La herramienta de mayor alcance, SQL Server Management Studio (SSMS), contiene cuatro herramientas adicionales diseñadas para la gestión y el seguimiento.

Nota Puede instalar las instancias de SQL Server Integration Services, Reporting Services, Analysis Services, y el motor de base de datos. Para simplificar la terminología, simplemente nos referiremos a una instancia de motor de base de datos como una “instancia de SQL Server”. Todos los otros casos serán referidos como una instancia SSIS, SSAS o SSRS.

Documentación SQL Server SQL Server 2008 incluye unos Libros en pantalla muy completos. Mientras que muchos no tienen en cuenta la documentación como una "herramienta", la frase "la información es poder" de inmediato nos viene a la mente. Hay una razón por la que se oye a alguien decir: "Lea el manual". Inmerecidamente, los “Libros Online” han recibido una muy mala reputación.

Los “Libros en pantalla” deberían ser su principal fuente de información acerca de SQL Server 2008, después de este libro, por supuesto. Los Libros en pantalla contienen explicaciones detalladas de cada función dentro de SQL Server, la sintaxis de cada comando, y miles de ejemplos de código que puede aplicar. Además, los Libros en pantalla de SQL Server integran una amplia gama de contenido en línea en la documentación local, con el fin de proporcionar una amplia información, constantemente actualizada que se puede aplicar dentro de su entorno. Si bien no vamos a gastar una significativa cantidad de tiempo pasando por los Libros en pantalla, vamos a explicar un par de características muy útiles y que a menudo se pasan por alto.

31

32

Parte I Introducción a Microsoft SQL Server 2008

Escondido en los Libros en pantalla, debajo del botón ¿Cómo puedo vincular?, se esconde un conjunto de varias docenas de tutoriales que le guiarán a través de importantes conjuntos de características tales como gestión basada en políticas, tipos de datos hierarchyID, diseño de cubos OLAP, implementación de Modelos de minería de datos, implementación de replicación y la construcción de paquetes SSIS o informes de SSRS, como se muestra en la Figura 3-1.

FIGURA 3-1 SQL Server 2008 tutoriales

También puede ver un grupo de tres enlaces en el extremo derecho de la barra de herramientas en la Figura 3-1. El primero de estos tres enlaces, “Haz una pregunta”, abrirá una ventana del explorador en el panel de la derecha y lo llevará al foro de “Microsoft Developer Network (MSDN)”. El foro MSDN le permite hacer cualquier pregunta acerca de SQL Server para la que no pueda identificar una respuesta o solución. Las preguntas son respondidas por voluntarios que incluyen miles de profesionales de SQL Server de todo el mundo, así como cientos de miembros del equipo de desarrollo de SQL Server.

El penúltimo enlace lo llevará otra vez a los foros de MSDN, pero se aplicará automáticamente un filtro para mostrar sólo aquellas preguntas que están involucradas, donde se puede hacer un fácil seguimiento del estado de sus preguntas.

El último enlace abrirá una ventana del explorador en el panel de la derecha y lo llevará a Microsoft Connect donde se pueden enviar comentarios sobre SQL Server o una característica particular así como publicar informes de error.

Capítulo 3 Uso de las herramientas de SQL Server 2008

33

Los informes de error enviados se revisan constantemente por el equipo de desarrollo de SQL Server para que de manera proactiva puedan proporcionar parches para la funcionalidad. La información del producto juega un papel importante en la planificación de la próxima versión de SQL Server.

Puede marcar los temas a los que hace referencia a menudo usando la función Favoritos de Ayuda. La función de Favoritos de Ayuda le permite guardar búsquedas frecuentemente ejecutadas, para su posterior reutilización.

Nota Dado que los libros Online de SQL Server contienen características para integrar la versión local de la ayuda con varios sitios Web, puede experimentar algunos problemas de rendimiento. Para mitigar cualquier problema de rendimiento, debería configurar como consulta default a los Libros en pantalla de la ayuda local antes de intentar consultar los recursos en línea.

En este procedimiento, configurará los Libros en pantalla para obtener un rendimiento óptimo.

Configurar los Libros en pantalla 1. Inicie los Libros en pantalla, seleccionando: Inicio | Todos los programas | Microsoft SQL Server 2008 | Documentación y tutoriales | SQL Server Books Online. 2. Seleccione Herramientas | Opciones. 3. Seleccione Online y configure como se muestra aquí.

34

Parte I Introducción a Microsoft SQL Server 2008

Herramientas de administración de SQL Server 2008 SQL Server 2008 incluye un conjunto de nueve herramientas para administrar instancias de SQL Server e interactuar con los datos: OSQL, SQLCMD, Tablediff, Bulk Copy Program (BCP), SQLDiag, Regulador de recursos (Resource Governor), SQL Server Configuration Manager, SSMS, y Correo electrónico de base de datos. OSQL es una utilidad de línea de comandos que se añadió a SQL Server 2000 como un reemplazo para ISQL. OSQL le permite conectarse y ejecutar consultas en una instancia de SQL Server sin requerir la sobrecarga de una interfaz gráfica.

Importante OSQL ha quedado en desuso a partir de SQL Server 2005. Mientras OSQL está aun disponible en SQL Server 2008, usted debería volver a escribir las rutinas de OSQL para utilizar SQLCMD.

SQL Server 2005 introdujo SQLCMD como la interfaz de línea de comando de consulta que reemplazó OSQL. Mientras OSQL permite enviar consultas interactivas desde una línea de comandos junto con capacidades de automatización muy limitados, SQLCMD proporciona una interfaz de automatización rica y completa con sustitución de variables y creación de código dinámico/ejecución.

Nota Una discusión de las características específicas de SQLCMD está más allá del alcance de este libro. Para más detalles acerca SQLCMD, vea el tema de libros en línea "utilidad sqlcmd."

Puede utilizar Tablediff.exe para comparar los datos entre dos tablas. Tablediff se puede ejecutar para que le avise si los datos o la estructura de dos tablas es diferente. Además, puede generar un archivo script que contiene las instrucciones necesarias para que la tabla de destino sincronice con la tabla de origen. Tablediff se utiliza principalmente dentro de las arquitecturas de replicación.

La utilidad BCP es la utilidad más antigua dentro del producto de SQL Server, que data desde la primera versión de SQL Server. BCP se ha mejorado con cada versión sucesiva, para manejar nuevos tipos de datos e instancias con nombre, pero la velocidad y la funcionalidad no ha cambiado. BCP se utiliza para exportar datos de una tabla a un archivo, así como importar datos de un archivo a una tabla. Si sus necesidades de importación y exportación son razonablemente simples y directas, BCP debe ser la única utilidad que usted necesita. Para obtener capacidades más avanzadas de importación y exportación, debe utilizar SQL Server Integration Services (SSIS).

Nota Usted aprenderá acerca de BCP y su primo de importación, BULK INSERT en el Capítulo 10, "Manipulación de Datos”. Usted aprenderá acerca de SSIS en el Capítulo 24," Business Intelligence ".

SQLDiag es una utilidad que recopila información de diagnóstico acerca de una instancia de SQL Server. SQLDiag está diseñado para capturar los contadores de rendimiento de Windows, registros de eventos, rastros del analizador de SQL Server (SQL Server Profiler traces), bloqueos de SQL Server y la información de configuración de SQL Server. Se utiliza principalmente como un motor de recopilación de datos para Microsoft Customer Service and Support (CSS) para resolver temas (issues), los datos recolectados pueden ser usados por un DBA para analizar temas de rendimiento y estabilidad.

Capítulo 3 Uso de las herramientas de SQL Server 2008

35

Nota Los detalles de SQLDiag están más allá del alcance de este libro. Por favor, consulte el artículo "SQLdiag Utility" de los Libros Online, para más información.

El “regulador de recursos” (Resource Governor) es una característica nueva en SQL Server 2005 que se encuentra dentro de SSMS. El propósito del regulador de recursos es permitir que un DBA configure las reglas relacionadas a la asignación de recursos, tales como procesador o memoria aplicada a las consultas específicas, usuarios o grupos de usuarios. El objetivo del regulador de recursos es permitir que las cargas de trabajo de alta prioridad tengan prioridad sobre otras cargas de trabajo, con el fin de proporcionar la mejor respuesta en base a las expectativas del usuario.

Nota Usted aprenderá sobre el regulador de recursos en el artículo, "Herramientas de Rendimiento y captura de datos", que se pueden encontrar en el sitio web “Prensa online de Microsoft Windows Server y Cliente” en www.microsoft.com/learning/books/online/ServerClient.

SQL Server Configuration Manager Mostrado en la Figura 3-2 de la página 36, SQL Server Configuration Manager es responsable de manejar servicios y protocolos de SQL Server. Las principales tareas que realizará con SQL Server Configuration Manager son las siguientes: Iniciar / Detener / Pausar / Reiniciar un servicio Cambiar las cuentas de servicio y contraseñas Gestionar el modo de inicio de un servicio Configurar parámetros de inicio del servicio Una vez que haya completado la instalación y configuración inicial de sus servicios SQL Server, la acción principal que se llevará a cabo con el Administrador de configuración de SQL Server es cambiar periódicamente las contraseñas de cuenta de servicio. Cuando se cambian las contraseñas de las cuentas de servicio, no es necesario reiniciar la instancia de SQL Server para que la nueva credencial de configuración tenga efecto.

Importante: los subprogramas (applets) de control de servicios de Windows también tienen entradas para servicios de SQLServer y le permiten cambiar las cuentas de servicio y las contraseñas. Nunca debería cambiar las cuentas de servicio o contraseñas de cuentas de servicio usando “Windows Service Control Applet”. Debe ser usado el SQL Server Configuration Manager, porque éste incluye el código para regenerar la clave maestra de servicio que es crítica para el funcionamiento de los servicios de SQL Server.

36

Parte I Introducción a Microsoft SQL Server 2008

FIGURA 3-2 Lista de servicios en el Administrador de configuración de SQL Server

Si bien se pueden iniciar, detener, pausar y reiniciar los servicios de SQL Server, SQL Server tiene una amplia cantidad de funciones de administración que le garantizan que rara vez, o nunca, sea necesario apagar o reiniciar el servicio de SQL Server. En este procedimiento, revisará las opciones y configuraciones disponibles para los servicios SQL Server.

Revisión de las opciones del servicio 1. Inicie SQL Server Configuration Manager, seleccione Inicio | Todos los programas | Microsoft SQL Server 2008 | Herramientas de configuración | SQL Server Configuration Manager. 2. En el panel izquierdo, seleccione Servicios de SQL Server. 3. Haga doble clic en el servicio de SQL Server que está en el panel de la derecha, para visualizar el cuadro de diálogo “Propiedades” que se muestra en la página 37. 4. Revise las opciones de cada una de las fichas. 5. Haga clic en Cancelar para cerrar el cuadro de diálogo Propiedades sin realizar ningún cambio.

Capítulo 3 Uso de las herramientas de SQL Server 2008

37

SQL Server Configuration Manager también le permite configurar los protocolos de comunicaciones disponibles para conexiones cliente. Además de la configuración de los argumentos específicos del protocolo, también puede controlar si las comunicaciones deben ser encriptadas o si una instancia responderá a una solicitud de enumeración, como se muestra en la Figura 3-3.

FIGURA 3-3 Propiedades de Protocolo

38

Parte I Introducción a Microsoft SQL Server 2008

Consejo: Las aplicaciones pueden transmitir un comando especial, denominado “solicitud de enumeración”, a través de una red para localizar los servidores SQL Server que se ejecutan en la red. Además de poder enumerar los servidores SQL es valioso en entornos de desarrollo y testing, en los casos donde pueden aparecer, desaparecer y ser reconstruida de forma relativamente frecuente, la enumeración no es deseable en un entorno de producción. Al desactivar las respuestas de enumeración mediante el establecimiento de la opción “Ocultar Instancia” en Sí, se evita que alguien utilice las técnicas de detección para localizar servidores SQL Server para un posible ataque.

SQL Server Management Studio SQL Server Management Studio es la herramienta principal que va a usar la mayor parte del tiempo. SSMS proporciona todas las capacidades de gestión de servicios de SQL Server junto con la capacidad para crear y ejecutar Transact-SQL (TSQL), expresiones multidimensionales del lenguaje (MDX), extensiones de minería de datos (DMX) y código XML for Analysis (XMLA). En esta sección se presenta una breve reseña de SSMS, como se muestra en la Figura 3-4, cada capítulo posterior en este libro extenderá su conocimiento sobre las capacidades de SSMS.

FIGURA 3-4 SQL Server Management Studio

En la siguiente práctica, se pondrá en marcha SSMS y se conectará a la instancia del motor de base de datos que instaló en el Capítulo 2, "Instalación y configuración de SQL Server 2008".

Capítulo 3 Uso de las herramientas de SQL Server 2008

39

Iniciar SSMS y conectarse a una instancia 1. Inicie SSMS seleccionando Inicio | Todos los programas | Microsoft SQL Server 2008 | SQL Server Management Studio. 2. Cuando se muestre el cuadro de diálogo “Conectar al servidor”, acepte las opciones predeterminadas y haga clic en Conectar.

Nota Debido a que sólo ha instalado una instancia predeterminada en este momento, este cuadro de diálogo debería mostrar ”Motor de base de datos” para el tipo de servidor, para el nombre del servidor y “Autenticación Windows” para la opción de autenticación. Ahora que se ha conectado a una instancia dentro SSMS, para todos los ejercicios restantes de este libro, vamos a suponer que usted puede realizar estos pasos y no repetirlos.

SSMS tiene una variedad de ventanas que puede abrir y colocar dentro de la interfaz con el fin de acceder a diversos conjuntos de características. La ventana “Servidores registrados” proporciona un lugar para almacenar la información de conexión para todos los servicios de SQL Server en su entorno. Una vez almacenado, puede hacer clic derecho en cualquier servidor e iniciar una conexión con el servidor ya sea en el Explorador de objetos o una ventana de consulta.

El Explorador de plantillas, que se muestra en el panel derecho de la Figura 3-4, permite el acceso a cientos de plantillas predefinidas para crear, modificar o eliminar objetos, así como consultar diversos objetos usando TSQL, MDX, XMLA, o DMX. Puede utilizar las plantillas que se suministran con SQL Server, modificarlas para incluir estándares de codificación específicos de su organización, y añadir plantillas o grupos adicionales de plantillas. El menú “Comunidad” en la barra de herramientas le permite iniciar una ventana del navegador en el centro del panel, para acceder a los foros de MSDN y a “Microsoft Connect” de la misma forma que anteriormente se comentó en el tema “Libros en pantalla”.

El menú Herramientas | Opciones de la barra de herramientas mostrará el cuadro de diálogo “Opciones”, como se muestra en Figura 3-5 en la página 40, para que pueda configurar el entorno de SSMS específicamente de la forma en que desea trabajar.

Configurar el entorno SSMS 1. Seleccione Herramientas | Opciones de la barra de herramientas. 2. Expanda la opción “Environment” del árbol y seleccione el nodo “General”. Utilice la lista desplegable de la opción “Al inicio” para configurar el aspecto y el look and feel del SQL Server Management Studio. 3. Expanda: Editor de texto | Todos los idiomas | Fichas (tabs). 4. Establezca el Tamaño de tabulación a 4.

40

Parte I Introducción a Microsoft SQL Server 2008

FIGURA 3-5 Cuadro de diálogo Opciones del SQL Server Management Studio

5. Establezca el Tamaño de sangría a 4. 6. Seleccione la opción Insertar espacios. 7. Explore el resto de las opciones que están disponibles para la configuración. 8. Haga clic en Aceptar para guardar la configuración. Consejo: Cuando se establece SSMS para iniciarse con un entorno vacío, usted no verá la ventana “Conectar a Servidor” y SSMS se iniciará de inmediato. A continuación, tendrá que conectarse explícitamente a una instancia para el Explorador de objetos o para la ventana de consulta, ya sea desde el panel de servidores registrados, Archivo | Conectar Explorador de objetos, o desde el botón Nueva consulta. Al establecer las opciones de tamaño de tabulación y espacios de inserción, SSMS reemplazará automáticamente cualquier “pestaña” con espacios en una ventana de consulta, que le permitirá formatear y alinear más fácilmente el código, incluso cuando se utiliza una fuente proporcional.

Como se puede ver en la Figura 3-6, el Explorador de objetos proporciona acceso a prácticamente cualquier acción que desea realizar sobre cualquier objeto de SQL Server. Usted va a utilizar las funcionalidades del Explorador de objetos a lo largo de prácticamente todos los capítulos de este libro. Dos funciones adicionales del SSMS son “resúmenes de objetos” y capacidades de reporting incorporadas (built-in). La ficha “detalle del Explorador de objetos” muestra información resumida según el objeto que está seleccionado en el Explorador de objetos. Los Informes SSMS, se muestran en la Figura 3-7 y permiten mostrar tanto informes estándar que se incluyen con SQL Server como acceder a sus propios informes personalizados que se han diseñado con el Diseñador de informes de Reporting Services y sobre los que aprenderá en el artículo "Reporting Services", que se puede encontrar en: www.microsoft.com/learning/books/online/ServerClient.

Capítulo 3 Uso de las herramientas de SQL Server 2008

FIGURA 3-6 Explorador de objetos para una instancia de SQL Server

FIGURA 3-7 Informes SSMS

41

42

Parte I Introducción a Microsoft SQL Server 2008

Correo electrónico de base de datos El correo electrónico de la base de datos le permite a un servidor SQL Server enviar mensajes de correo saliente. Si bien los mensajes pueden contener resultados de consultas, el correo electrónico de base se utiliza principalmente para enviar mensajes de alerta a los administradores para notificarles de las condiciones de ejecución o cambios que se han hecho en los objetos. En el siguiente procedimiento, usted aprenderá cómo configurar el “Correo electrónico de base de datos”.

Configurar el Correo electrónico de base 1. Haga clic en el botón Nueva consulta para abrir una nueva ventana de consulta y ejecute el siguiente código para habilitar la función de Correo electrónico de base: EXEC sp_configure 'Database Mail XPs', 1 GO RECONFIGURE WITH OVERRIDE GO

2. En el Explorador de objetos, abra el nodo de administración, haga clic en Correo electrónico de base, y seleccione Configuración de Correo electrónico de base. 3. Haga clic en Siguiente en la pantalla de bienvenida. 4. Seleccione la opción "Configurar el correo de la base de datos a partir de la realización de las siguientes tareas" y haga clic en Siguiente. 5. Especifique un nombre para el perfil y haga clic en Agregar para especificar la configuración de una cuenta de correo. 6. Introduzca en los campos de la ventana “Nueva cuenta de correo de base de datos”: el nombre de la cuenta, la dirección de e-mail, el nombre para mostrar, el e-mail de respuesta (se puede dejar el mismo que se puso en el campo “dirección de e-mail”), y el nombre de servidor. 7. Seleccione el modo apropiado de autenticación SMTP para su organización y, si se utiliza Autenticación básica, especifique el nombre de usuario y la contraseña. La configuración debe quedar similar a la siguiente:

Capítulo 3 Uso de las herramientas de SQL Server 2008

43

Nota Su pantalla debe ser similar a la configuración del gráfico anterior. Yo estoy usando mi cuenta de correo electrónico de Internet y he dejado a propósito el nombre del servidor, el nombre de usuario y la contraseña fuera del gráfico. Usted tendrá que llenar el campo Nombre de servidor si está utilizando un servidor de correo interno.

8. Haga clic en Aceptar y, a continuación, haga clic en Siguiente. 9. Marque la casilla en la columna “Pública2 junto al perfil que acaba de crear y activar este modo en Sí en la columna de perfil predeterminado y haga clic en Siguiente. 10. Revise la configuración de la página Parámetros de configuración del sistema y haga clic en Siguiente. 11. Haga clic en Aceptar y, a continuación, haga clic en Siguiente y, a continuación, haga clic en Finalizar. 12. La última página debe mostrar el éxito de los cuatro pasos de configuración, haga clic en Cerrar. 13. En el Explorador de objetos, haga clic en elemento Agente SQL Server y seleccione Iniciar en el menú de acceso directo, para iniciar el servicio del Agente SQL Server, si no está ya funcionando.

Nota El correo electrónico de base de datos utiliza los servicios del Agente SQL Server para enviar mensajes como un proceso background (de fondo). Si el Agente SQL Server no se está ejecutando, los mensajes se acumulan en una cola en la base de datos msdb.

14. Haga clic en Correo base de datos y seleccione “Enviar correo electrónico de prueba” desde el menú contextual. 15. Seleccione el Perfil de Correo electrónico de base que acaba de crear, introduzca una dirección e-mail en el campo “Para:”, y haga clic en “Enviar correo electrónico de prueba”.

16. Vaya a su cliente de correo electrónico y compruebe que ha recibido el mensaje de correo electrónico de prueba.

44

Parte I Introducción a Microsoft SQL Server 2008

Herramientas de gestión del rendimiento Además de las herramientas de configuración y administración de las que se discutió previamente, SQL Server 2008 incluye tres herramientas especializadas para capturar, analizar y resolver problemas de rendimiento de datos.

Profiler (analizador) SQL Server Profiler es una herramienta gráfica que actúa como interfaz para el seguimiento SQL de la Interfaz de programación de aplicaciones (API). Profiler le permite definir los eventos de SQL Server, como se muestra en la Figura 3-8, que desea capturar para ver la información. También puede especificar opciones de filtrado para orientar sus datos de captura dentro de los eventos que se han especificado. Usted aprenderá más acerca de Profiler en el artículo, "Rendimiento y Herramientas de captura de datos ", que se puede encontrar en www.microsoft.com/learning/libros/online/ServerClient.

FIGURA 3-8 Selección de eventos en el cuadro de diálogo de las propiedades del SQL Server

Profiler

Asesor de Tuning del motor de base de datos (Engine Tuning Advisor) Database Engine Tuning Advisor (DTA) analiza una carga de trabajo de consultas y formula recomendaciones de cambios en los índices y particiones, que pueden mejorar el rendimiento de las consultas (Como se muestra en la Figura 3-9).

Capítulo 3 Uso de las herramientas de SQL Server 2008

45

Usted aprenderá más acerca de los índices en el capítulo 6, "Índices", acerca de particionado en el Capítulo 7, "Particionamiento", sobre capturar la carga de trabajo de una consulta en el artículo, "Herramientas de Rendimiento y Captura de datos ", que puede encontrar en el Sitio web en www.microsoft.com/learning/libros/online/ServerClient, y sobre cómo aplicar DTA en el artículo, "Herramientas de análisis de rendimiento", que se puede encontrar en el sitio web www.microsoft.com/learning/books/online/ServerClient.

FIGURA 3-9 Afinar la definición de la carga de trabajo DTA

Performance Studio (Estudio de rendimiento) Performance Studio es el nombre dado a un conjunto de tecnologías en SQL Server 2008 que se orientan al análisis de rendimiento de los datos en toda la empresa. Los componentes de Performance Studio son: Performance Data Warehouse Recolectores de Datos Informes de rendimiento

El Performance Data Warehouse es una base de datos que usted crea. Data Collectors son paquetes SSIS, que se ejecutan de forma programada con el Agente SQL Server. Y los Informes de Rendimiento son un conjunto de reportes de “Report Designer” escritos con los datos almacenados en la base Performance Data Warehouse.

46

Parte I Introducción a Microsoft SQL Server 2008

Usted aprenderá sobre cómo configurar, administrar y aprovechar los componentes de Performance Studio en el artículo, "Herramientas de análisis de rendimiento", que se puede encontrar en www.microsoft.com/learning/books/online/ServerClient.

Herramientas de Business Intelligence La gestión de SSIS, SSAS y SSRS, se realiza dentro del SSMS (Management Studio). Sin embargo, el desarrollo de paquetes, informes, modelos de informes, cubos OLAP y modelos de minería de datos se realiza en el Business Intelligence Development Studio (BI Dev Studio).

Business Intelligence Development Studio (BIDS) El BI Studio Dev es el shell de Visual Studio 2008 con soporte para proyectos BI SQL Server 2008, como se muestra en la Figura 3-10. Cada uno de los proyectos de BI se estudiarán en el capítulo 24, "Servicios de Integración", Capítulo 25, "SQL Server Reporting Services" y en el Capítulo 26, "SQL Server Analysis Services."

FIGURA 3-10 BI Dev Studio Projects

Capítulo 3 Uso de las herramientas de SQL Server 2008

47

Capítulo 3 Referencia Rápida Para

Haga lo siguiente

Administrar una instancia de SQL Server, cubos Conéctese al servicio correspondiente dentro del Explorador OLAP, modelos de minería de datos, Integración de objetos de SQL Server Management Studio Servicios, o de Reporting Services Escribir y/o ejecutar código T-SQL, MDX, o DMX.

Abra la ventana de consulta apropiada (T-SQL, MDX, o DMX) y conéctese a la instancia contra la que desea escribir o ejecutar código.

Configuración y administración de Correo electrónico de base de datos

Conectarse a una instancia del motor de base de datos

Obtener ayuda sobre un tema

Inicie SQL Server Books Online. Si usted está escribiendo una consulta, puede resaltar un término y usar SHIFT + F1 para lanzar Books On Line con el término destacado

Iniciar, detener y pausar un servicio o administrar las cuentas de servicio

Limitar los recursos que una consulta en particular o que un usuario pueden consumir

Abra SQL Server Configuration Manager y use el botón de arranque, parar o pausar, de la barra de herramientas o haga doble clic en el servicio para acceder a la ventana de propiedades. Configurar el regulador de recursos dentro de SSMS

Construir proyectos SSIS, SSRS, SSAS e Abra BI Dev Studio, cree un nuevo proyecto y diseñe los implementarlos en una instancia de SQL Server objetos que se desean implementar. Gestionar el rendimiento

Utilice Profiler para capturar las cargas de trabajo de las consultas, DTA para analizar cargas de trabajo capturadas con el Profiler, y Performance Studio para automatizar la captura de métricas de rendimiento.

Parte II

Diseñar bases de datos En esta parte: Capítulo 4: Creación de bases de datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 Capítulo 5: Diseñar tablas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 63 Capítulo 6: Índices. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 Capítulo 7: Partición. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103

49

Capítulo 4

Creación de bases de datos Después de completar este capítulo, usted será capaz de Comprender la función de cada base de datos del sistema Crear bases de datos Definir y agregar grupos de archivos a una base de datos Agregar archivos a un grupo de archivos Separar y adjuntar bases de datos Las bases de datos son los objetos primarios dentro de SQL Server, tanto para el motor relacional, como para SQL Server 2008 Analysis Services (SSAS). En este capítulo, usted aprenderá cómo crear bases de datos, junto con los fundamentos de almacenamiento de datos. Usted aprenderá acerca de los diferentes tipos de grupos de archivos que se pueden crear para una base de datos y cómo cada tipo afecta la forma en que los datos se almacenan y manipulan. Dado que todos los datos dentro de SQL Server tienen que ser almacenados dentro de una base de datos, la información sobre la Instancia de SQL Server y cualquiera de los objetos que contiene dicha instancia también tienen que ser almacenados en bases de datos. Vamos a describir cada una de las bases de datos del sistema que se incluyen en SQL Server y su papel dentro de la plataforma de SQL Server. La capacidad del sistema de archivos de mover bases de datos alrededor de un único servidor o mover bases de datos de un servidor a otro es fundamental para poder gestionar un entorno de SQL Server. Usted completará este capítulo, aprendiendo un método para mover bases de datos alrededor de su entorno: separar y adjuntar (detach and attach).

Bases de datos del sistema SQL Server SQL Server 2008 incluye un conjunto de bases de datos de sistema utilizadas para administrar los diversos aspectos del motor de base de datos: master model msdb tempdb distribution

51

52

Parte II Diseñar bases de datos

Nota Con cada objeto referenciado en las descripciones de las bases de datos de sistema, se comenta el número de capítulo donde usted puede encontrar más información acerca de ese objeto en particular.

La base de datos master está en el corazón de cada instancia de SQL Server. Sin la base de datos master, SQL Server no se puede ejecutar. La base de datos master contiene información sobre el núcleo de objetos dentro de una instancia, tales como: Bases de datos - Capítulo 4 Logins - Capítulo 18 Opciones de configuración - Capítulo 2 Endpoints - Capítulo 18 Disparadores DDL a nivel de servidor - Capítulo 14 Servidores vinculados (linked) - Capítulo 8 La base de datos model es una plantilla, que utiliza SQL Server, cuando se crea una nueva base de datos. Cuando se realiza un comando CREATE DATABASE (que se conocerá más adelante en este capítulo), SQL Server toma la definición de la base de datos model y la aplica a la nueva base de datos que está creando. El propósito de la base de datos model es permitir que los administradores creen objetos que se agregarán después automáticamente a las nuevas bases de datos que sean creadas.

La base de datos msdb es utilizada por el servicio Agente de SQL Server junto con SQL Server 2008 Integration Services (SSIS). El papel central de la base de datos msdb es almacenar los Jobs (trabajos) y schedules (programaciones) que son ejecutados por el Agente SQL Server. Dentro de la base de datos msdb, puede encontrar la siguiente información:

Reportes DTA (Database Engine Tuning Advisor) Capítulo 29 El historial de cualquier copia de seguridad/restauración ejecutada contra cualquiera de las bases de datos - Capítulo 20 La información de seguimiento para el envío de logs (registros) - Capítulo 23 Jobs, pasos de jobs y programaciones (schedules) - Capítulo 21 Alertas - Capítulo 21 Cuentas de proxy - Capítulo 21 Planes de mantenimiento - Capítulo 21 Paquetes SSIS - Capítulo 24 Registros del correo de base de datos - Capítulo 3 La base de datos tempdb es un área "borrador" dentro de SQL Server. El motor de SQL Server utiliza tempdb como un área de almacenamiento temporal cuando se hacen operaciones de ordenamiento y agregación.

Capítulo 4 Creación de bases de datos

53

Usted puede ver la base de datos tempdb como cumpliendo una función similar a la del archivo de paginación en Windows. Todo lo creado en tempdb, por su propia naturaleza, es temporal. Cuando se reinicia una instancia de SQL Server, tempdb es eliminada y vuelta a crear.

Nota Nunca debería crear un objeto que se requiere que sea persistente en la tempdb porque perderá todo lo almacenado en esta base de datos, cuando la instancia se reinicie.

La base de datos distribution se crea en el “distribuidor” cuando se habilita la replicación. Podrá obtener más información acerca de la replicación en el artículo, "Características de alta disponibilidad", que se pueden encontrar en www.microsoft.com/aprendizaje/books/online/ServerClient.

Estructura de una base de datos SQL Server Los objetos que se crean dentro de una base de datos se denominan colectivamente como "esquema" de la base de datos. Los elementos que definen una base de datos, los componentes de almacenamiento, se conocen como la estructura de base de datos. Una base de datos de SQL Server se define mediante un elemento físico, archivos en el sistema operativo y un elemento lógico utilizado para agrupar los archivos dentro de una base de datos. La estructura básica de una base de datos se muestra en la Figura 4-1 en la página 54.

Los archivos de base de datos Los tipos de archivo más comunes que soporta una base de datos SQL Server son archivos de datos y archivos de registro de transacciones. Las extensiones de archivo por defecto para los archivos de datos son los siguientes: . Mdf

archivo principal

. Ndf

archivo secundario

. Ldf archivo de registro de transacciones Las extensiones por defecto utilizadas para archivos de datos son sólo sugerencias. No es necesario utilizar estas extensiones o incluso proporcionar extensiones para los archivos que usted cree. Sin embargo, usted se evitará una gran confusión si se adherirse a la extensión de archivo por defecto que se ha convertido en un estándar para Bases de datos SQL Server.

Puede especificar varias propiedades para los archivos de datos y archivos de registro, tales como: Nombre del archivo físico Tamaño inicial de archivo Factor de crecimiento del archivo El tamaño máximo

54

Parte II Diseñar bases de datos

Base de datos

El grupo de archivos

Catálogo de Texto completo

Grupo de archivos FILESTREAM

Transacción Log (Registro de Transacciones)

Archivos de Datos

Directorio FILESTREAM Catálogo de Texto completo

Archivos Índice de Full-Text

Archivos

FIGURA 4-1 Elementos estructurales de una Base de datos

La sintaxis genérica para definir un archivo es: ::= { ( NAME = logical_file_name , FILENAME = { 'os_file_name' | 'filestream_path' } [ , SIZE = size [ KB | MB | GB | TB ] ] [ , MAXSIZE = { max_size [ KB | MB | GB | TB ] | UNLIMITED } ] [ , FILEGROWTH = growth_increment [ KB | MB | GB | TB | % ] ]) [ ,...n ] }

Mientras que el nombre físico de un archivo es un elemento obligatorio en la definición, las propiedades más importantes que se manejan para un archivo son el tamaño y el factor de crecimiento. Con el tiempo, va a almacenar cada vez más datos dentro de una base de datos. SQL Server le permite gestionar el almacenamiento en disco mediante la configuración del parámetro FILEGROWTH en un archivo. Cuando el Motor de almacenamiento de SQL Server detecta que se está quedando sin espacio libre en el archivo, se aumentará automáticamente el tamaño del mismo de acuerdo con la especificación FILEGROWTH.

Capítulo 4 Creación de bases de datos

55

El crecimiento de archivo se puede especificar como un porcentaje o un tamaño fijo-KB, MB, GB o TB. Cuando se especifica un porcentaje de crecimiento, SQL Server agrega una cantidad de espacio para el archivo basado en el porcentaje del tamaño actual del archivo en el disco. Cuando se especifica un tamaño fijo, SQL Server agregará el espacio de acuerdo con la especificación de crecimiento de tamaño fijo.

El parámetro MAXSIZE le permite limitar el tamaño de un archivo a un valor máximo de modo que SQL Server no intenta aumentar el tamaño del archivo más allá del espacio de disco disponible en el del sistema operativo. Cuando se crea un archivo, se puede especificar un tamaño inicial del mismo. El tamaño del archivo que inicialmente se especifica, está relacionado con la cantidad de datos que se espera almacenar en él. Puesto que usted no puede predecir la cantidad total de datos que se van a almacenar, desea especificar un tamaño que sea lo suficientemente grande como para manejar los datos de un período de tiempo, mientras que sea lo suficientemente pequeño tal que usted no necesite asignar constantemente espacio adicional en los archivos.

Estructura interna de archivos Los archivos de datos que soportan una base de datos SQL Server pueden llegar a ser bastante grandes. Con el fin de leer y escribir datos de manera eficiente, el motor de almacenamiento de SQL Server (Storage engine) no lee ni escribe el archivo de datos completo. En cambio, el motor de almacenamiento de SQL Server lee y escribe trozos de 64 KB de un archivo de datos llamado extensiones (extents). Cuando se añaden archivos a una base de datos, SQL Server inicializa el contenido de cada archivo con segmentos de almacenamiento de 8 KB llamados páginas. Una página define el elemento de almacenamiento de mayor granularidad utilizado por SQL Server, cada página tiene una estructura específica de tal manera que SQL Server puede almacenar y recuperar datos. Ocho páginas se combinan en una estructura llamada extent. Una extensión define el bloque más granular de E/S utilizado por el Motor de almacenamiento de SQL Server para leer y escribir datos.

Más información La estructura de una página de datos está más allá del alcance de este libro. Para una discusión detallada de la estructura de la página de datos y los mecanismos de almacenamiento interno de SQL Server, por favor referirse a “SQL Server 2008 Internals” por Kalen Delaney.

Los archivos índices de texto completo son una estructura de archivos especializada utilizada sólo, y en conjunción con, la indexación de texto completo. Los archivos almacenados a través de un tipo de datos FILESTREAM residen en archivos individuales en el sistema operativo bajo el control del motor del servidor de almacenamiento de SQL.

Más información Usted aprenderá más acerca de los índices de texto completo en el Capítulo 17, "indización de texto completo" y del tipo de datos FILESTREAM en el capítulo 5, "Diseño de tablas".

56

Parte II Diseñar bases de datos

Los grupos de archivos Todos los datos se almacenarán en el sistema operativo en uno o más archivos, en base a los tipos de datos almacenados, así como las opciones de almacenamiento que elija. Con el fin de proporcionar abstracción en la necesidad de trabajar con los archivos físicos en el sistema operativo, SQL Server introduce el concepto de “grupo de archivos”. Un grupo de archivos no es más que un nombre para una colección de archivos del sistema operativo. Los administradores de bases de datos (DBAs) pueden centrarse en la gestión de datos dentro de grupos de archivos, mientras que se deja la semántica de “almacenamiento físicos” para el motor de almacenamiento de SQL Server.

El uso de un grupo de archivos como una capa de abstracción es útil, ya que permite que el almacenamiento en disco sea diseñado por separado del almacenamiento de datos dentro de una base de datos. Mediante la separación de las arquitecturas de almacenamiento, un DBA puede crear grupos de archivos que contengan varios archivos, con el fin de distribuir los datos entre una colección de archivos para obtener rendimiento, sin necesidad de participar en el almacenamiento físico de cada fila de datos. Los objetos de base de datos se crean en un grupo de archivos y el motor de almacenamiento de SQL Server se encarga de la distribución de los datos en toda la colección de archivos.

Como podrá observar en la Figura 4-1, el registro de transacciones recibe un tratamiento especial dentro de una instancia de SQL Server Server. Un archivo de datos está asociado a un grupo de archivos. Sin embargo, un archivo de registro de transacciones no está asociado a un grupo de archivos dentro de la base de datos. La razón de que un registro de transacciones no se asocie a un grupo de archivos es porque no se le permite a usted interactuar directamente con el registro de transacciones o colocar objetos en el archivo de registro de transacciones. La gestión de los datos dentro de un archivo de registro de transacciones es territorio exclusivo del motor de almacenamiento de SQL Server.

Usted puede crear tres tipos de grupos de archivos dentro de una instancia de SQL Server: Datos Texto completo FILESTREAM El grupo de archivos más común que usted creará, se utiliza para almacenar los datos de las tablas e índices. El grupo de archivos define un límite de almacenamiento para tablas e índices. Durante la creación, usted especifica el grupo de archivos que se utilizará para almacenar los datos de una tabla o índice. A menos que sean particionados, los datos almacenados en las tablas e índices no pueden abarcar grupos de archivos.

Más información Usted aprenderá sobre cómo crear tablas en el capítulo 5, "Diseño de tablas", índices en el Capítulo 6, "Índices", y la forma particionar tablas e índices en el capítulo 7, "Particiones".

Los grupos de archivos se pueden crear con dos propiedades opcionales: PRIMARY y DEFAULT. Usted puede sólo tener un grupo de archivos PRIMARY o DEFAULT dentro de una base de datos.

Capítulo 4 Creación de bases de datos

57

El grupo de archivos dentro de una base de datos que se designe como PRIMARIO contendrá todos los objetos “de sistema” asociados a la base de datos. El grupo de archivos que se designa como DEFAULT define la opción de almacenamiento cuando las tablas o los índices se crean sin especificar una opción de almacenamiento de grupo de archivos.

Nota El grupo de archivos PRIMARY tendrá normalmente un único archivo de datos con extensión. Mdf. Esto le permite a los administradores de bases garantizar que todos los objetos “de sistema” dentro de una base de datos se mantienen en un solo archivo. Junto con la designación de un grupo de archivos que no contenga la extensión “. Mdf” como DEFAULT, los DBAs pueden garantizar que sólo los objetos de sistema se encuentran dentro del grupo de archivos PRIMARY.

Un grupo de archivos de texto completo, referido como un catálogo de texto completo, se crea como apoyo de la indización de texto. Más información Usted aprenderá más acerca de los catálogos de texto completo en el Capítulo 17, "índices de texto completo."

Un grupo de archivos FILESTREAM es un grupo de archivos que está designado para el almacenamiento de los datos FILESTREAM. Más información Usted aprenderá más sobre el tipo de datos FILESTREAM en el capítulo 5, "Diseño de Tablas ".

Creación de una base de datos Una vez que entienda la función de los archivos y grupos de archivos, la creación de una base de datos es relativamente un proceso sencillo. La sintaxis genérica para la creación de una base de datos es la siguiente: CREATE DATABASE database_name [ ON [ PRIMARY ] [ [ ,...n ] [ , [ ,...n ] ] [ LOG ON { [ ,...n ] } ] ] [ COLLATE collation_name ] [ WITH ]] [;]

]

En el siguiente procedimiento, creará dos bases de datos que va a utilizar para demostrar varias características de SQL Server dentro de este libro. Una base de datos tendrá varios grupos de archivos y designará a un grupo de archivos como DEFAULT. La segunda base de datos se compone de un grupo de archivos FILESTREAM.

Nota Es altamente recomendable que usted separe FILESTREAM dentro de una base de datos de todos los demás datos, porque FILESTREAM es incompatible con mirroring de base de datos y snapshot de base de datos.

58

Parte II Diseñar bases de datos

Nota Dentro de cualquier procedimiento de este libro, se utilizarán la unidad C y los directorios por defecto para los comandos que hacen referencia al sistema de archivos. Usted debe hacer los ajustes necesarios en el path de archivo de acuerdo a sus preferencias.

Crear una base de datos 1. Inicie SSMS y haga clic en Nueva consulta de la barra de herramientas. 2. Escriba el siguiente código (el código es desde el archivo “Chapter4\code1.sql” en los ejemplos que acompañan el libro): CREATE DATABASE SQL2008SBS ON PRIMARY ( NAME = N'SQL2008SBS', FILENAME = N'C:\Program Files\ Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\SQL2008SBS.mdf', SIZE = 3MB , MAXSIZE = UNLIMITED, FILEGROWTH = 10% ), FILEGROUP FG1 DEFAULT ( NAME = N'SQL2008SBSFG1_Dat1', FILENAME = N'C:\Program Files\ Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\SQL2008SBS_1.ndf', SIZE = 2MB , MAXSIZE = UNLIMITED, FILEGROWTH = 2MB), (NAME = N'SQL2008SBSFG1_Dat2', FILENAME = N'C:\Program Files\ Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\SQL2008SBS_2.ndf', SIZE = 2MB , MAXSIZE = UNLIMITED, FILEGROWTH = 2MB), (NAME = N'SQL2008SBSFG1_Dat3', FILENAME = N'C:\Program Files\ Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\SQL2008SBS_3.ndf', SIZE = 2MB , MAXSIZE = UNLIMITED, FILEGROWTH = 2MB) LOG ON ( NAME = N'SQL2008SBS_Log', FILENAME = N'C:\Program Files\ Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\SQL2008SBS.ldf', SIZE = 2MB , MAXSIZE = UNLIMITED , FILEGROWTH = 10MB ) GO

CREATE DATABASE SQL2008SBSFS ON PRIMARY ( NAME = N'SQL2008SBSFS', FILENAME = N'C:\Program Files\ Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\SQL2008SBSFS.mdf', SIZE = 3MB , MAXSIZE = UNLIMITED, FILEGROWTH = 10% ), FILEGROUP DocumentFileStreamGroup CONTAINS FILESTREAM ( NAME = N'FileStreamDocuments', FILENAME = N'C:\Program Files\ Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\SQL2008SBSFS' ) LOG ON ( NAME = N'SQL2008SBSFS_Log', FILENAME = N'C:\Program Files\ Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\SQL2008SBSFS.ldf', SIZE = 2MB , MAXSIZE = UNLIMITED , FILEGROWTH = 10MB ) GO

3. Actualice el Explorador de objetos, y compruebe que se han creado dos nuevas bases de datos llamadas SQL2008SBS y SQL2008SBSFS. 4. Haga clic derecho en la base de datos SQL2008SBS, seleccione Propiedades y, navegue por las distintas fichas (tabs) en el cuadro de diálogo Propiedades de la base de datos.

Capítulo 4 Creación de bases de datos

59

Mover Bases de datos A veces, puede que tenga que mover de lugar bases de datos dentro de su entorno para aprovechar espacio de almacenamiento adicional o a máquinas con capacidad de procesamiento superior. Dado que SQL Server iniciará cada base de datos de una instancia y abrirá cada archivo asociado para operaciones de lectura/escritura, usted necesitará realizar varios pasos para poder mover una base de datos.

El primer paso en el proceso, “separar” (detach), elimina la entrada de la base de datos de la instancia, cierra todos los archivos asociados con la base de datos, y libera todos los bloqueos del sistema operativo. El paso final en el proceso, “adjuntar” (attach), crea una nueva entrada de base de datos dentro de la instancia y abre todos los archivos asociado a la base de datos.

Nota Si necesita mover archivos a diferentes directorios en el mismo servidor, entonces usted puede utilizar el al comando ALTER DATABASE.

Separar una base de datos (Detach) Cuando separa una base de datos, usted está extrayendo la entrada de la base de datos desde la instancia del servidor SQL. SQL Server entonces libera todos los bloqueos del sistema operativo sobre todos los archivos asociados a una base de datos. Una vez terminado, todo lo que queda son los archivos del sistema operativo que contienen todos los datos. Los archivos pueden ser copiados a una nueva ubicación con el fin de mover la base de datos. Hay que prestar especial atención a los datos de texto completo o de FILESTREAM asociados a la base de datos, ya que todas estas estructuras también deben moverse junto con todos los datos/archivos de registro de la base de datos.

Una base de datos no se puede separar si se cumple alguna de las siguientes condiciones: La base de datos está participando en una replicación La base de datos está participando en mirroring de base de datos Se ha creado una instantánea de base de datos La base de datos está en “modo sospechoso” La base de datos es una base de datos del sistema

Separar una base de datos 1. Inicie SSMS y conéctese a su instancia de SQL Server 2008 en el Explorador de objetos. 2. Haga clic derecho en la base de datos que ha creado previamente SQL2008SBS y seleccione Separar (Detach), como se muestra en el siguiente gráfico.

60

Parte II Diseñar bases de datos

3. En el cuadro de diálogo “Separar base de datos”, deje todas las opciones con sus valores predeterminados y haga clic en Aceptar. 4. La base de datos SQL2008SBS ya no debería aparecer como una entrada en el Explorador de objetos.

Adjuntar una base de datos Una vez que se ha desprendido una base de datos, puede copiar los archivos asociados a la misma en una nueva ubicación y luego adjuntarlos a una instancia de SQL Server. Existen algunas restricciones para adjuntar una base de datos. Las restricciones más importantes son: La instancia tiene que estar en el mismo service pack/ nivel de revisión (hotfix) o más alto que el de la instancia de base de datos donde fue separada la base de datos. Todos los archivos de datos deben estar disponibles Debe copiar y poner todos los archivos y directorios asociados a un tipo de datos FILESTREAM en exactamente la misma estructura de directorios como la instancia donde se separó la base de datos de datos.

Mover y adjuntar una base de datos 1. En el Explorador de objetos, haga clic en el nodo Bases de datos y seleccione Adjuntar (attach) desde el del menú contextual. 2. Haga clic en "Agregar" sobre la ventana de diálogo "Attach Database", en la sección "Database to attach", vaya a la ubicación del archivo. mdf de la base de datos SQL2008SBS, seleccione el archivo SQL2008SBS.mdf, y haga clic en Aceptar. 3. Compruebe que la base de datos SQL2008SBS ahora existe en el Explorador de objetos.

Capítulo 4 Creación de bases de datos

61

62

Parte II Diseñar bases de datos

Capítulo 4 Referencia Rápida Para

Haga lo siguiente

Crear una nueva base de datos

Utilice el comando CREATE DATABASE

Añadir almacenamiento a una base de datos

Agregar uno o más archivos a un grupo de archivos existentes Agregar uno o más grupos de archivos que contengan al menos un archivo

Establecer un grupo de archivos que se utilizará por defecto cuando no se especifican opciones de almacenamiento al crear una tabla o índice Habilitar una base de datos para almacenar datos FILESTREAM

Asigne la propiedad DEFAULT para el grupo de archivos

Crear una base de datos con un grupo de archivos designados con la opción CONTAINS FILESTREAM Añadir un grupo de archivos a una base de datos existente diseñado para almacenamiento FILESTREAM

Separar una base de datos

Ejecute el procedimiento almacenado de sistema sp_detach_db

Adjuntar una base de datos

Ejecutar CREATE DATABASE con la opción FOR ATTACH

Capítulo 5

Diseñar tablas Después de completar este capítulo, usted será capaz de Crear y gestionar esquemas Seleccionar los tipos de datos apropiados Definir las propiedades adecuadas para las columnas de una tabla Crear tablas Entender los nuevos tipos de datos: FILESTREAM, SPATIAL, y DATE/TIME Crear columnas calculadas Definir restricciones (constraints) para asegurar la integridad de datos Configurar las opciones de almacenamiento de datos para la compresión de filas/columnas y utilizar el concepto de “poca densidad” (sparse). El corazón de cualquier base de datos y el propósito de cualquier plataforma de base de datos es almacenar y gestionar datos. Sin tablas, es imposible almacenar o gestionar los datos. En este capítulo usted aprenderá cómo definir tablas para almacenar sus datos. También aprenderá a definir los tipos de datos, las propiedades, y las restricciones necesarias para proporcionar estructura a los datos en una forma que satisfaga los requerimientos del negocio. Una vez que haya creado un par de tablas, usted aprenderá acerca de una característica disponible en SQL Server 2008 Management Studio (SSMS), que le permite ver la estructura de la tabla gráficamente, llamado: “diagramas de base de datos”. Por último, usted aprenderá acerca de las nuevas opciones de almacenamiento: “comprimir” y “almacenamiento disperso”, que optimizará la cantidad de espacio necesario en disco.

Premisa comercial Uno de los objetivos de la serie “Paso a Paso” es proporcionar un ejemplo básico que se pueda construir a los largo de todo el libro. A fin de comprender toda la serie de prácticas en todo este libro, usted necesita una descripción básica del entorno empresarial sobre el que estaremos construyendo los ejemplos. Wide World Importers es una empresa de importación/exportación con sede en Dallas, Texas. Wide World Importers se especializa en una variedad de herramientas eléctricas usadas principalmente para el rubro carpintería. Un pequeño porcentaje de la cartera de productos es importado de diversas empresas alrededor el mundo. El resto de la cartera de productos se fabrica en una instalación de fabricación con tecnología de punta en la compañía, la que también se encuentra en el área de Dallas, Texas. Wide World Importers tiene un sitio Web donde los clientes pueden hacer sus pedidos “minoristas” a través de un catálogo de ventas por correo. La compañía también vende al por mayor a un variedad de cadenas de tiendas y negocios especializados. Los clientes pueden hacer sus pedidos al por mayor 63

64

Parte II Diseñar bases de datos

a través del sitio Web, por teléfono, o Intercambio Electrónico de Datos (EDI) utilizando documentos XML formateados según las especificaciones de la compañía. Además de un amplio inventario de productos, Wide World Importers también mantiene una biblioteca de manuales y documentación de productos con formato Word y Formato de Documento Portátil (PDF). Los clientes pueden descargar la documentación a través del sitio Web por medio de uno o más enlaces en una página de productos (el código que está en el archivo " Chapter5\code14-mastercreationscript.sql " en los ejemplos que acompañan el presente libro, incluye todos los casos prácticos listados en este capítulo).

Nombrar objetos El nombre de un objeto es referido como un identificador. Con la excepción de algunas restricciones, cada objeto tiene un identificador que se asigna cuando se crea el objeto. Hay dos tipos de identificadores: los regulares y delimitados (regular and delimited). Las reglas de los identificadores son como sigue: Máximo de 128 caracteres El primer carácter debe ser una letra No puede ser una palabra reservada de T-SQL No puede contener espacios ni caracteres especiales Los nombres de objetos que no cumplan con las reglas para los identificadores, deben estar delimitados con comillas dobles ", o bien con corchetes, []. Los objetos de una base de datos se nombran utilizando un esquema de nombres de cuatro partes: . .. . Las porciones de la instancia, la base de datos y el esquema son opcionales. Si no se especifica el nombre de la instancia, el nombre del objeto usará de forma predeterminada el nombre de la instancia a la que está conectado actualmente. Si no se especifica el nombre de base de datos, se usa el actual contexto de base de datos para la conexión. Si el nombre de esquema no se especifica, se utilizará el esquema predeterminado.

Nota La mejor práctica para nombrar y referirse a objetos es siempre especificar explícitamente . .

Esquemas Todos los objetos de una base de datos se crean dentro de un esquema. A la vez que un esquema proporciona un medio para agrupar objetos, también proporciona un límite o marco de seguridad. Nota Usted aprenderá más sobre la aplicación de esquemas para la seguridad en el capítulo 19, "Seguridad".

Capítulo 5 Diseño de Tablas

65

La sintaxis genérica para crear un esquema es el siguiente: CREATE SCHEMA schema_name AUTHORIZATION owner_name

En la siguiente práctica, creará varios esquemas que se utilizarán a lo largo de este libro.

Crear un esquema 1. Inicie SSMS, abra una nueva ventana de consulta, y cambie el contexto a la base de datos SQL2008SBS. 2. Ingrese y ejecute el siguiente código (el código está en el archivo “Chapter5\code1.sql” de los ejemplos que acompañan este libro): CREATE SCHEMA Customers AUTHORIZATION dbo GO CREATE SCHEMA Orders AUTHORIZATION dbo GO CREATE SCHEMA Products AUTHORIZATION dbo GO CREATE SCHEMA LookupTables AUTHORIZATION dbo GO

3. En el Explorador de objetos, expanda la base de datos SQL2008SBS junto con los nodos Seguridad y Esquemas, para verificar la creación de sus cuatro esquemas, como se muestra en el siguiente gráfico.

66

Parte II Diseñar bases de datos

Nota El explorador de objetos almacena en caché la información que usted ve la primera vez. Por lo tanto, es posible que necesite actualizar el Explorador de objetos para ver los objetos nuevos que se crearon usando una ventana de consulta. Usted puede actualizar cualquier nodo en el Explorador de objetos, haciendo clic derecho y seleccionando “Actualizar”.

Diseño de base de datos Se han escrito libros enteros y varias semanas cursos han sido impartidos sobre el diseño de base de datos. En todo este material, se encuentran discusiones sobre la primera, segunda y tercera forma normal, junto con la construcción de modelos de datos lógicos y físicos. Usted podría gastar una significativa cantidad de tiempo en aprender acerca de los metadatos y las herramientas de modelado de datos. Perdido en todo este material está el simple hecho de que las tablas tienen que ser creadas para respaldar una solicitud y las personas que crean las tablas tienen cosas más importantes de qué preocuparse en lugar de saber la forma normal en que está una base de datos o si recuerdan construir un modelo lógico y hacer un modelo físico a partir del modelo lógico. Una base de datos en el mundo real no va a cumplir con los diseños teóricos, no importa cuanto usted intente encajar una estaca cuadrada en un agujero redondo. El diseño de base de datos es en realidad un proceso muy simple, una vez que deje de pensar en exceso sobre lo que está haciendo. El proceso de diseño de una base de datos se puede resumir en una simple frase: "poner las cosas donde corresponde". Reduciendo estas decenas de miles de páginas de material sobre diseño de base de datos en una sola frase sin duda hará que algunas personas se pongan moradas, así que vamos a investigar esta sencilla afirmación un poco más de cerca. Si usted tuviera que diseñar una base de datos que almacenará los clientes, los pedidos de clientes, productos, y los productos que un cliente pidió, el proceso de elaboración de un conjunto de tablas es muy sencillo. Nuestros clientes pueden tener un nombre, apellido y dirección. Ahora tenemos una tabla llamada Cliente con tres columnas de datos. Sin embargo, si desea utilizar la dirección para enviar un pedido, usted tendrá que romper la dirección en sus partes componentes: localidad, ciudad, estado o provincia y el código postal. Si sólo permitió una dirección para un cliente, la información de dirección iría a la tabla cliente. Sin embargo, si usted quiere ser capaz de almacenar varias direcciones para un cliente, necesitamos una segunda tabla que se podría llamar CustomerAddress. Si a un cliente se le permite colocar una sola orden, entonces la información de la orden entraría en la tabla cliente. Sin embargo, si a un cliente se le permite colocar más de una orden, usted querría dividir los pedidos en una tabla separada que podría llamarse Orden. Si una orden puede ser compuesta por más de un artículo, usted desearía agregar una tabla la que se podría llamar OrderDetails para mantener varios elementos de una orden dada. Podríamos seguir esta lógica a través de todos los elementos de datos que se desea almacenar y, al final, se ha diseñado una base de datos mediante la aplicación de un principio simple: ". poner la cosas donde corresponde"

Capítulo 5 Diseño de Tablas

67

Una vez que tenga el diseño básico de la base de datos completo, por "poner las cosas donde corresponde", entonces está listo para agregar todos los elementos estructurales que llevan su diseño a una base de datos real. El resto de este capítulo, junto con el resto de los demás capítulos, enseñará cómo añadir elementos estructurales para el diseño, la toma de decisiones sobre el almacenamiento, seguridad y recuperación de datos, y a utilizar muchas capacidades dentro de SQL Server para construir aplicaciones de alto rendimiento, altamente escalables y de alta disponibilidad, todo esto por encima de su diseño de base de datos central.

Tipos de datos Una hoja de cálculos y una base de datos son muy similares a un nivel muy básico. Tanto las hojas de cálculo como las bases de datos tienen filas y columnas donde se almacenan los datos. Tanto las hojas de cálculo como las bases de datos permiten localizar, recuperar y manipular datos en una variedad de maneras. Una de las diferencias fundamentales entre una base de datos y una hoja de cálculo es que una base de datos proporciona e impone una estructura sobre los datos que se almacenan. Aunque es posible mezclar caracteres, datos numéricos, y fechas en una sola columna de una hoja de cálculo, la base de datos impide este tipo de estructura indefinida mediante el uso de tipos de datos asignados a una columna. Incluso aunque un tipo de datos no se conozca generalmente como una constraint, un tipo de datos es el mayor y fundamental elemento de restricción de una base de datos, en la que se restringe el rango de los posibles valores que están autorizados para ser almacenado dentro de una columna.

Mientras que muchos querrán saltar impacientes hacia delante a temas "más interesantes" de este material, yo tendría precaución en esto. No hay ninguna cantidad de hardware, códigos de aplicación, o indexación que puedan superar una mala decisión sobre el tipo de datos para una columna. Mientras que el disco de almacenamiento es relativamente barato y prácticamente ilimitado, cada bloque de datos debe ser movido a través de la memoria. La memoria no es barata y no es ilimitada. Tomar una decisión de un tipo de datos que cueste un adicional de 4 bytes de almacenamiento por cada fila en una tabla cuando sólo tiene unos pocos cientos de filas realmente no va a importar, sin embargo, cuando se almacenan millones, decenas de millones, o miles de millones de filas de datos en una tabla, los 4 bytes adicionales por fila pueden hacer la diferencia entre una aplicación que funciona y una aplicación que no.

Los datos numéricos Uno de los tipos de datos más comunes que se encuentran dentro de SQL Server son los tipos de datos numéricos. Hay nueve tipos de datos numéricos que se incluyen con SQL Server 2008. Cuatro tipos de datos están diseñados para almacenar valores enteros de varios tamaños. Dos tipos de datos están diseñados para almacenar los datos monetarios. Cuatro tipos de datos están diseñados para almacenar números decimales con distintas precisiones. La Tabla 5-1 en la página 68 enumera los tipos de datos numéricos disponibles junto con el rango de valores y el espacio de almacenamiento necesario.

68

Parte II Diseñar bases de datos TABLA 5-1

Tipos de datos numéricos

Tipo de datos

Rango de Valores

Espacio de almacenamiento

tinyint

0 hasta 255

1 byte

smallint

-32.768 Y 32.767

2 bytes

31

31

A 2 -1

4 bytes

63

A 263 -1

8 bytes

-2

int bigint

-2

decimal (p, s)

-1038 1-1038 -1

5 a 17 bytes

smallmoney

-214.748,3648 A 214,748.3647

4 bytes

money

-922.337.203.685.477,5808 A 922,337,203,685,477.5807

8 bytes

real

-3,438 A -1,1838, 0, y 1,1838 a 3,438

4 bytes

FLOAT (n)

-1,79308 A -2,23308, 0, y 2,23308 a 1,79308

4 bytes u 8 bytes

numeric (p, s)

Nota Los tipos de datos decimales y numéricos son exactamente equivalentes entre sí. Ambos tipos de datos se mantienen en el producto (SQL Server) para tener compatibilidad hacia atrás. Cualquiera de estos tipos de datos puede ser utilizado cuando se necesitan almacenar datos numéricos exactos con decimales, sin embargo, se recomienda que elija o decimal o numérico en toda la organización para mantener la coherencia. Por simplicidad en este libro, siempre vamos a usar decimales a partir de ahora. Por favor, tenga en cuenta que en cualquier lugar que nos referimos a un tipo de datos decimal, puede reemplazar el decimal con un valor numérico de la misma definición.

Los tipos de datos money y smallmoney están específicamente diseñados para almacenar valores monetarios con un máximo de cuatro decimales. Es interesante observar que mientras money y smallmoney fueron diseñados para almacenar valores monetarios, las instituciones financieras utilizan el tipo de datos decimal debido a la capacidad de almacenar un mayor número de decimales que son críticos para cálculos de tasa de interés y rendimiento.

Los tipo de datos float tienen un parámetro opcional del número de dígitos almacenados después del decimal llamado mantisa. Si la mantisa está definida entre 1 y 24, entonces el float consumirá 4 bytes de almacenamiento. Si la mantisa está definida entre 25 y 53, el float consumirá 8 bytes de almacenamiento.

Nota Un tipo de datos real también se puede representar mediante el uso de float (24).

Tipos de datos numéricos exactos y aproximados Los cuatro tipos de datos utilizados para almacenar datos decimales pueden dividirse en las categorías de exactos y aproximados. Los tipos de datos exactos son money, smallmoney, decimal, y numeric.

Capítulo 5 Diseño de Tablas

69

Los tipos de datos números aproximados son float y real. Un tipo de datos numérico exacto almacena el valor de precisión que le asigne. Un tipo de datos numérico aproximado, también conocido como un número de punto flotante es impreciso. Por ejemplo, si usted almacenó 1.0 en un tipo de datos decimal, siempre obtiene un valor de 1,0 y exactamente 1,0 sería utilizado dentro de cualquier cálculo que involucre el dato. Sin embargo, si almacenó 1.0 en un tipo de datos flota o real, podría ser almacenado como 1,000. . .1 o 0,999. . .9.

La arquitectura del procesador, Intel o AMD, también afectará a los valores que están almacenados en tipos de datos float o real. Si usted está utilizando tipos de datos float o real para realizar los cálculos, va a acumular errores de redondeo con cada cálculo realizado. Si bien puede parecer extraño que el almacenamiento de datos en un tipo de datos donde el valor puede cambiar en función de la arquitectura del procesador o que recupere algo que no coincide exactamente con lo que está almacenado, los tipos de datos float y real se utilizan para una amplia gama de datos debido a la capacidad de almacenar números extremadamente grandes.

Tipos de datos decimales Los tipos de datos Decimal tienen dos parámetros: uno de precisión y otro de escala. La precisión indica el número total de dígitos que se pueden almacenar tanto a la izquierda como de la derecha de la coma decimal. La escala indica el número máximo de dígitos a la derecha del punto decimal. Por ejemplo, un decimal (8,3) permite el almacenamiento de un total de 8 dígitos con 3 de los dígitos a la derecha del decimal o sea valores entre -99999,999 y 99.999,999.

El espacio de almacenamiento consumido por un tipo de datos decimal depende de la precisión y se define como muestra la Tabla 5-2. TABLA 5-2

Almacenamiento tipos de datos decimal y numeric

Precisión

Espacio de almacenamiento

1a9

5 bytes

10 a 19

9 bytes

20 a 28

13 bytes

29 a 38

17 bytes

Datos de Carácter Los tipos de datos character y numeric en general, representan más del 90 por ciento de todos los tipos de datos definidos dentro de una base de datos. La Tabla 5-3 en la página 70 muestra el espacio de almacenamiento consumido por tipos de datos basados en character .

70

Parte II Diseñar bases de datos TABLA 5-3

Tipos de datos de character

Tipo de datos

Espacio de almacenamiento

char (n)

1 byte por carácter definido por n hasta un máximo de 8000 bytes

varchar (n)

1 byte por carácter almacenado hasta un máximo de 8000 bytes

texto

1 byte por carácter almacenado hasta un máximo de 2 GB

nchar (n)

2 bytes por carácter definido por n hasta un máximo de 4000 bytes

nvarchar (n)

2 bytes por carácter almacenado hasta un máximo de 4000 bytes

ntext

2 bytes por carácter almacenado hasta un máximo de 2 GB

Nota Los tipo de datos text y ntext están obsoletos en SQL Server 2005. Usted no debería usarlos en cualquier nuevo desarrollo. Las tablas que tienen tipos de datos text o ntext deberían ser modificadas para utilizar varchar (max) / nvarchar (max) en su lugar

Datos de caracteres de longitud fija y variable SQL Server le permite definir los datos de caracteres, ya sea como longitud fija o variable. El número de caracteres definidos establece el número máximo de caracteres que se permiten almacenar en una columna. Cuando los datos se almacenan en un tipo de datos char o nchar, la cantidad de almacenamiento consumido es igual a la definición de almacenamiento del tipo de datos, independientemente del número de caracteres colocados en la columna. Cualquier espacio que no es consumido por los datos se rellena con espacios. Cuando los datos se almacenan en un tipo de datos nvarchar o varchar, la cantidad de almacenamiento consumido es igual al número de caracteres efectivamente almacenados.

Datos Unicode Los datos de caracteres se pueden almacenar usando un conjunto ANSI o uno de caracteres Unicode. El conjunto de caracteres ANSI abarca la mayor parte de los caracteres que se utilizan en la mayoría de los idiomas en todo el mundo. Sin embargo, ANSI sólo abarca un poco más de 32.000 caracteres. Varios idiomas como el árabe, el hebreo y algunos dialectos chinos contienen más de 32.000 caracteres del alfabeto estándar. Con el fin de almacenar la amplia gama de caracteres, se necesitan 2 bytes de almacenamiento para cada uno.

SQL Server le permite especificar si el almacenamiento de datos de una columna es Unicode o no Unicode. Los tipos de datos Unicode comienzan con una n y son nchar (n), nvarchar (n), y ntext.

Varchar (max) y nvarchar (max) Antes de SQL Server 2005, hubo un conjunto de tipos de datos para almacenar los datos de caracteres que consumían hasta 8000 bytes de almacenamiento y un conjunto separado de tipos de datos para almacenar grandes volúmenes de caracteres de datos, de hasta 2 GB.

Capítulo 5 Diseño de Tablas

71

Cada conjunto de tipos de datos tiene diferentes restricciones y métodos variados para recuperar y manipular los datos. Para simplificar la gestión de datos de caracteres, los tipos de datos de caracteres de longitud variable se pueden definir con una longitud máxima de 8000 para varchar y 4000 para nvarchar o puede utilizar la palabra clave max que le permite a los tipos de datos varchar y nvarchar, almacenar hasta 2 GB de datos. Los tipos de datos Varchar (max) y nvarchar (max) soportan las mismas capacidades de programación como cualquier otra columna de caracteres de longitud variable.

Con la introducción de varchar (max) y nvarchar (max), los tipos de datos text y ntext han quedado en desuso.

En la siguiente práctica, se comparan las diferencias de almacenamiento entre un tipo de datos char y varchar.

Nota Discutiremos las variables y los lotes en el Capítulo 13, "Procedimientos almacenados", y la concatenación en el Capítulo 10, "Recuperación de datos". LAS Variables y la concatenación se utilizan aquí para demostrar la diferencia entre el almacenamiento de los tipos de datos char y varchar.

Comparar los Tipos de datos char (n) y varchar (n) 1. Abra una nueva ventana de consulta y ejecute el siguiente código (el código está en el archivo “Capítulo 5\code2.sql” en los ejemplos que acompañan el presente libro): DECLARE @fixedlength char(10), @variablelength varchar(10) SET @fixedlength = 'Test' SET @variablelength = 'Test' SELECT DATALENGTH(@fixedlength) SELECT DATALENGTH(@variablelength)

2. Observe la diferencia en la cantidad de espacio de almacenamiento consumido.

Los datos de fecha y hora SQL Server proporciona varios tipos de datos para almacenar fechas y horas, como se muestra en la Tabla 5-4. TABLA 5-4

Tipos de datos de fecha y hora

Tipo de datos

Rango de Valores

Precisión

Espacio de almacenamiento

smalldatetime

01/01/1900 hasta 06/06/2079

1 minuto

4 bytes

datetime

01/01/1753 a 12/31/9999

0,00333 segundos

8 bytes

datetime2

01/01/0001 a 12/31/9999

100 nanosegundos

6 a 8 bytes

datetimeoffset

01/01/0001 a 12/31/9999

100 nanosegundos

8 a 10 bytes

date

01/01/0001 a 12/31/9999

1 día

3 bytes

time

00:00:00.0000000 a 23:59:59.9999999

100 nanosegundos

3 a 5 bytes

72

Parte II Diseñar bases de datos

Los tipos de datos Smalldatetime y datetime almacenan ambos una fecha y una hora como un valor único. SQL Server 2008 introduce el tipo de datos datetime2 que debería sustituir tanto al tipo de datos smalldatetime y el datetime, debido a una mejor precisión, así como la capacidad de manejar un mayor rango de fechas.

El datetimeoffset le permite almacenar una zona horaria para aplicaciones que necesitan localizar fechas y horas.

Datos binarios Los datos binarios se almacenan en un conjunto de cuatro tipos de datos, que se enumeran en la Tabla 5-5. TABLA 5-5

Tipos de datos binarios

Tipo de datos

Rango de Valores

Espacio de almacenamiento

bit

Null, 0 y 1

1 bit

binary

Fijo con datos binarios

Hasta 8000 bytes

varbinary

Datos binarios de longitud variable

Hasta 8000 bytes

image

Datos binarios de longitud variable

Hasta 2 GB

Nota El tipo de datos image está obsoleto en SQL Server 2005. Usted no debería usar image en ningún nuevo desarrollo. Las tablas que tienen datos de tipo image deben ser modificados para usar varbinary (max) en su lugar.

Al igual que los tipos de datos caracteres de longitud variable, se puede aplicar la palabra clave max para el tipo de datos varbinary para permitir el almacenamiento de hasta 2 GB de datos, a la vez que soporta todas las funciones de programación disponibles para la manipulación de datos binarios.

XML El tipo de datos “lenguaje de marcas extensibles” (Extensible Markup Language o XML) le permite almacenar y manipular documentos XML de forma nativa. Cuando almacena documentos XML, está limitado a un máximo de 2 GB así como un máximo de 128 niveles dentro de un documento. Los documentos XML son útiles porque almacenan los datos y la estructura en un único archivo, que permite la transferencia de datos independiente de la plataforma. La estructura de un documento XML es llamado XML schema. Además de definir una columna con un tipo de datos XML, también puede limitar los tipos de documentos XML que están permitidos para ser almacenados dentro de la columna. Usted limita los tipos de documentos XML creando una colección de esquemas XML y asociando la colección de esquema a la columna XML. Al insertar o actualizar un documento XML, se validará contra la colección de esquemas XML para asegurarse de que sólo está insertando documentos XML que cumplen con uno de los esquemas permitidos.

Capítulo 5 Diseño de Tablas

73

En la siguiente práctica, se creará una colección de esquemas que se utilizará como una restricción para validar documentos XML más adelante en este capítulo.

Crear una colección de esquemas XML 1. Abra una nueva ventana de consulta, cambie el contexto a la base de datos SQL2008SBS y ejecute el siguiente código (este se encuentra en el archivo “Capítulo 5\code3.sql” en los ejemplos que acompañan este libro):

CREATE XML SCHEMA COLLECTION ProductAttributes AS ' ''

74

Parte II Diseñar bases de datos

Nota Por razones de brevedad en la página impresa, sólo se ha incluido un único esquema en el libro. El código en el CD que acompaña al capítulo 5 presenta una colección de esquemas más amplia, que usted puede utilizar.

2. Ejecute la siguiente consulta para revisar la colección de esquemas XML recién creada. SELECT * FROM sys.xml_schema_collections

Los datos FILESTREAM Aunque las bases de datos se han diseñado para almacenar datos discretos, bien estructurados, de vez en cuando tendrá que almacenar grandes volúmenes de datos no estructurados denominados Blob (Binary Large Objects). En la mayoría de los casos, un BLOB es el contenido de un archivo. Antes de SQL Server 2008, había que extraer el contenido del archivo y guardarlo en un tipo de datos varbinary (max), varchar (max), o nvarchar (max). Sin embargo, no se podía almacenar más de 2 GB de datos utilizando este método. En otros casos, los administradores de bases de datos (DBAs) almacenan un nombre de archivo en una tabla, dejando el archivo en un directorio en el sistema operativo. El almacenamiento de los archivos fuera de la base de datos creó numerosos problemas con los nombres de archivo, para asegurarse que fueran sincronizados con las tablas y que las copias de seguridad del directorio también se sincronizaran con el contenido de la base de datos. SQL Server 2008 introduce un nuevo método de almacenamiento llamado FILESTREAM. FILESTREAM combina lo mejor de ambos mundos. Los BLOBs almacenados en una columna FILESTREAM son controlados y mantenidos por SQL Server, sin embargo, los datos residen en un archivo en el sistema operativo. Mediante el almacenamiento de los datos en el sistema de archivos fuera de la base de datos, ya no se restringen al límite de 2 GB en BLOBs. Además, al hacer copia de seguridad de la base de datos, todos los archivos se copian en el mismo el tiempo, garantizando que el estado de cada archivo permanece sincronizado con la base de datos.

Nota Usted puede ver las referencias al nuevo tipo de datos en SQL Server 2008 llamado FILESTREAM. Técnicamente hablando, los datos de FILESTREAM se almacenan en una columna varbinary (max) con un atributo de FILESTREAM. Sin embargo, para los propósitos de este libro se hará referencia a una columna varbinary (max) con la propiedad FILESTREAM como un tipo de datos FILESTREAM debido al hecho de que el tipo de datos se comporta de manera muy diferente con la propiedad FILESTREAM.

Tipo de datos espaciales Hay dos tipos de datos espaciales que se definen en SQL Server 2008: geometry y geography. Los datos Geometry están basados en la geometría euclidiana y se utilizan para almacenar puntos, líneas, curvas y polígonos. Los datos Geography se basan en un elipsoide y se utilizan para almacenar datos, tales como longitud y latitud.

Capítulo 5 Diseño de Tablas

75

Nota Los datos espaciales es un tema que va mucho más allá del alcance de este libro. Es posible escribir libros enteros sobre el uso y la manipulación de los datos espaciales en SQL Server. Para un inicio básico del uso de los datos espaciales, consulte de los Libros en pantalla el artículo "Tipos de datos espaciales".

Tipo de datos hierarchyid El tipo de datos hierarchyID se utiliza para organizar los datos jerárquicos, como organigramas, listas de materiales, y diagramas de flujo. Mediante el empleo de un hierarchyid, puede buscar rápidamente los nodos dentro de una jerarquía, así como mover los datos entre los nodos dentro de la estructura.

Propiedades de columna Puede aplicar varias propiedades a las columnas que afectan la forma en que se almacenan los datos o la forma en que la columna se comporta. Tres de las propiedades más comunes que se aplican a las columnas son: collation (intercalación), identidad y aceptación de valores NULL. Como se vio en el capítulo 2, las secuencias de intercalación (collation), afectan la forma en que los datos de caracteres se comparan y se agregan. Puede especificar la secuencia de intercalación a nivel de columna mediante la palabra clave COLLATE junto con el nombre de la secuencia de intercalación que se aplica. Se puede definir la propiedad IDENTIDAD (identity) sobre las columnas que tienen un tipo de datos numérico. Cuando se define la propiedad IDENTIDAD, conocida como una columna de identidad, SQL Server administra los valores de esta columna por usted. La definición de una identidad tiene dos parámetros, SEED e INCREMENT. El parámetro SEED (semilla), define el primer número que será asignado cuando se inserten datos en la tabla. El parametro INCREMENT (incremento), define el número que se añadirá al valor anterior para cada fila subsiguiente que se inserta en la tabla. Por ejemplo, una IDENTIDAD (1,2) iniciará en 1 y el incremento será de a 2 por cada nueva fila se inserta en la tabla, produciendo un conjunto de incremento de números impares.

Nulabilidad es la propiedad más común asignada a una columna. Cuando una columna se define como NOT NULL, se requiere un valor para asignar a la columna. Cuando una columna se define como NULL, usted no tiene que asignar un valor a la columna.

Nota Null es un concepto especial dentro de los sistemas de bases de datos que afecta a cualquier cálculo realizado contra los datos. Volveremos a ver el tema de los nulos varias veces a lo largo de este libro, y explicaremos una variedad de ventajas y limitaciones de los valores nulos.

76

Parte II Diseñar bases de datos

Creación de tablas El lenguaje T-SQL está dividido en dos categorías distintas de comandos: lenguaje de definición de datos (Data Definition Language -DDL) y Lenguaje de manipulación de datos (Data Manipulation Language - DML). Al crear, modificar y eliminar objetos dentro del motor de base de datos SQL Server, está utilizando comandos DDL. Hay tres comandos básicos dentro DDL: CREATE crea un objeto (por ejemplo, CREATE TABLE, CREATE INDEX, CREATE DATABASE ) ALTER modifica un objeto (por ejemplo, ALTER TABLE, ALTER INDEX, ALTER DATABASE ) DROP elimina un objeto (por ejemplo, DROP TABLE, DROP INDEX, DROP DATABASE ) Nota Puede encontrar la sintaxis específica para crear, modificar o eliminar cualquier objeto, en los Libros en pantalla.

En el siguiente ejercicio, comenzará con la creación de tablas para almacenar los clientes, pedidos, productos, y empleados.

Crear una tabla 1. Abra una nueva ventana de consulta, cambie el contexto a la base de datos SQL2008SBS y ejecute la siguiente consulta (el código es el que se encuentra en el archivo “Capítulo5\code4.sql en los ejemplos que se adjuntan al libro): CREATE SCHEMA HumanResources dbo AUTORIZACIÓN GO CREATE TABLE Customers.Customer (CustomerID INT IDENTITY(1,1), CompanyName VARCHAR(50) NULL, FirstName VARCHAR(50) NULL, LastName VARCHAR(50) NULL, ModifiedDate DATE NOT NULL) GO CREATE TABLE Customers.CustomerAddress (AddressID INT IDENTITY(1,1), AddressType VARCHAR(20) NOT NULL, AddressLine1 VARCHAR(50) NOT NULL, AddressLine2 VARCHAR(50) NULL, AddressLine3 VARCHAR(50) NULL, City VARCHAR(50) NOT NULL, StateProvince VARCHAR(50) NULL, Country VARCHAR(70) NULL) GO

CREATE TABLE Orders.OrderHeader (OrderID INT IDENTITY(1,1), OrderDate DATE NOT NULL, SubTotal MONEY NOT NULL,

Capítulo 5 Diseño de Tablas

77

TaxAmount MONEY NOT NULL, ShippingAmount MONEY NOT NULL, FinalShipDate DATE NULL) GO

CREATE TABLE Orders.OrderDetail (OrderDetailID INT IDENTITY(1,1), SKU CHAR(10) NOT NULL, Quantity INT NOT NULL, UnitPrice MONEY NOT NULL, ShipDate DATE NULL) GO

CREATE TABLE Products.Product (ProductID INT IDENTITY(1,1), ProductName VARCHAR(50) NOT NULL, ProductCost MONEY NOT NULL, ListPrice MONEY NOT NULL, ProductDescription XML NULL) GO

CREATE TABLE HumanResources.Employee (EmployeeID INT IDENTITY(1,1), FirstName VARCHAR(50) NOT NULL, LastName VARCHAR(50) NOT NULL, JobTitle VARCHAR(50) NOT NULL, BirthDate DATE NOT NULL, HireDate DATE NOT NULL) GO

CREATE TABLE HumanResources.EmployeeAddress (AddressID INT IDENTITY(1,1), AddressType VARCHAR(20) NOT NULL, AddressLine1 VARCHAR(50) NOT NULL, AddressLine2 VARCHAR(50) NULL, AddressLine3 VARCHAR(50) NULL, City VARCHAR(50) NOT NULL, StateProvince VARCHAR(50) NULL, Country VARCHAR(70) NULL) GO

2. Expanda el nodo Tablas en el Explorador de objetos de la base de datos SQL2008SBS y vea las tablas que acaba de crear.

Columnas calculadas SQL Server le permite almacenar datos en columnas de tabla, como se describe en este capítulo. SQL Server también permite construir un cálculo e incluirlo como una columna en una tabla. Cuando se agrega una columna calculada en una tabla, SQL Server almacena solamente el cálculo. Cada vez que se recupera la columna calculada, SQL Server realiza el cálculo requerido y devuelve los resultados como parte de la consulta.

78

Parte II Diseñar bases de datos

La tabla Orders.OrderHeader que creó anteriormente podría hacer uso de una columna calculada para calcular el importe total del pedido.

Nota A menos que se especifique explícitamente un nombre de base de datos diferente, se debe asumir que todas las consultas que se ejecuten se producirán contra la base de datos SQL2008SBS.

Crear una tabla con una columna calculada 1. Abra una nueva ventana de consulta y ejecute el siguiente código (el código está en el archivo Capítulo 5\code5.sql en los ejemplos que acompañan el libro): DROP TABLE Orders.OrderHeader GO CREATE TABLE Orders.OrderHeader (OrderID INT IDENTITY(1,1), OrderDate DATE NOT NULL, SubTotal MONEY NOT NULL, TaxAmount MONEY NOT NULL, ShippingAmount MONEY NOT NULL, GrandTotal AS (SubTotal + TaxAmount + ShippingAmount), FinalShipDate DATE NULL) GO

2. Expanda el nodo para la tabla Orders.OrderHeader y observe la definición de la nueva columna.

Añadir una columna calculada a una tabla existente 1. Ejecute el código siguiente para agregar la columna calculada ProductMargin a la tabla Products.Product (el código está en el archivo Capítulo 5\code6.sql en los ejemplos que acompañan el libro): ALTER TABLE Products.Product ADD ProductMargin AS (ListPrice – ProductCost) GO

Columnas escasas (Sparse Columns) Con frecuencia, las tablas incluirán columnas que permiten valores NULL. A pesar de que una columna permite valores NULL, los valores NULL dependiendo de la definición de tipo de datos, pueden consumir una cantidad significativa de espacio de almacenamiento Cuando en una tabla se espera que tenga un número muy pequeño de filas con un valor en una columna en particular, usted debería designar a la columna con la propiedad SPARSE con el fin de minimizar el espacio de almacenamiento.

Si bien estamos permitiendo tres líneas de dirección para soportar un más amplio rango de direcciones posibles, las columnas AddressLine2 y AddressLine3 de las tablas Customers.CustomerAddress y HumanResources.EmployeeAddress deberían ser designadas como SPARSE.

Capítulo 5 Diseño de Tablas

79

Configurar el almacenamiento “Sparse” para una tabla 1. Ejecutar el siguiente código (el código está en el archivo Capítulo5\code7.sql en los ejemplos que acompañan el libro):

DROP TABLE Customers.CustomerAddress GO

CREATE TABLE Customers.CustomerAddress (AddressID INT IDENTITY(1,1), AddressType VARCHAR(20) NOT NULL, AddressLine1 VARCHAR(50) NOT NULL, AddressLine2 VARCHAR(50) SPARSE NULL, AddressLine3 VARCHAR(50) SPARSE NULL, City VARCHAR(50) NOT NULL, StateProvince VARCHAR(50) NULL, Country VARCHAR(70) NULL, CONSTRAINT pk_customeraddress PRIMARY KEY (AddressID)) GO

DROP TABLE HumanResources.EmployeeAddress GO

CREATE TABLE HumanResources.EmployeeAddress (AddressID INT IDENTITY(1,1), AddressType VARCHAR(20) NOT NULL, AddressLine1 VARCHAR(50) NOT NULL, AddressLine2 VARCHAR(50) SPARSE NULL, AddressLine3 VARCHAR(50) SPARSE NULL, City VARCHAR(50) NOT NULL, StateProvince VARCHAR(50) NULL, Country VARCHAR(70) NULL, CONSTRAINT pk_employeeaddress PRIMARY KEY (AddressID)) GO

Restricciones (Constraints) Las restricciones se utilizan dentro de SQL Server para definir elementos estructurales que limitan los datos y hacen cumplir la consistencia. Las restricciones que están disponibles en SQL Server son: clave primaria (primary key), valor único (unique), valor por defecto (default), y la clave externa o foránea (foreign key).

Claves Primarias La clave primaria es una limitación fundamental en el diseño correcto de una base de datos. Una clave principal define la columna o columnas que identifican de forma exclusiva cada fila de la tabla. Si bien puede agregar datos a una tabla (INSERT) sin una clave principal, es imposible modificar o eliminar una sola fila de datos si no se puede definir de forma exclusiva.

80

Parte II Diseñar bases de datos

Nota Mientras que hay un número muy pequeño de excepciones específicas, cada tabla en una base de datos debería tener una clave primaria.

En los siguientes ejercicios, usted ampliará las tablas ya creadas en este capítulo definiendo una restricción de clave primaria desde la creación de la tabla, y también agregará una restricción primary key, después que una tabla es creada.

Crear una tabla con una clave principal 1. Ejecutar el siguiente código (el código está en el archivo “Capítulo5\code8.sql” en los ejemplos que acompañan este libro): DROP TABLE Customers.Customer GO

CREATE TABLE Customers.Customer (CustomerID INT IDENTITY(1,1), CompanyName VARCHAR(50) NULL, FirstName VARCHAR(50) NULL, LastName VARCHAR(50) NULL, ModifiedDate DATE NOT NULL, CONSTRAINT pk_customer PRIMARY KEY (CustomerID)) GO

DROP TABLE Customers.CustomerAddress GO

CREATE TABLE Customers.CustomerAddress (AddressID INT IDENTITY(1,1), AddressType VARCHAR(20) NOT NULL, AddressLine1 VARCHAR(50) NOT NULL, AddressLine2 VARCHAR(50) NULL, AddressLine3 VARCHAR(50) NULL, City VARCHAR(50) NOT NULL, StateProvince VARCHAR(50) NULL, Country VARCHAR(70) NULL, CONSTRAINT pk_customeraddress PRIMARY KEY (AddressID)) GO

DROP TABLE Orders.OrderHeader GO

CREATE TABLE Orders.OrderHeader (OrderID INT IDENTITY(1,1), OrderDate DATE NOT NULL, SubTotal MONEY NOT NULL, TaxAmount MONEY NOT NULL, ShippingAmount MONEY NOT NULL, GrandTotal AS (SubTotal + TaxAmount + ShippingAmount), FinalShipDate DATE NULL, CONSTRAINT pk_orderheader PRIMARY KEY (OrderID)) GO

Capítulo 5 Diseño de Tablas

81

Agregar una clave principal a una tabla existente 1. Ejecutar el siguiente código (el código está en el archivo Capítulo5\ code9.sql): ALTER TABLE Orders.OrderDetail ADD CONSTRAINT pk_orderdetail PRIMARY KEY (OrderDetailID) GO

ALTER TABLE Products.Product ADD CONSTRAINT pk_product PRIMARY KEY (ProductID) GO

ALTER TABLE HumanResources.Employee ADD CONSTRAINT pk_employee PRIMARY KEY (EmployeeID) GO

Restricciones UNIQUE La restricción unique se utiliza para definir la columna o columnas que son requeridas para ser única/s dentro de una tabla. Una restricción de unicidad evitará la duplicación de datos en una tabla. Mientras que una clave principal también define la unicidad para una columna o columnas, hay dos diferencias importantes entre una restricción única y una clave primaria: 1. Una tabla sólo puede tener una clave primaria. 2. Una clave principal no permite valores nulos.

Usted puede crear varias restricciones UNIQUE en una tabla. Aunque una restricción de unicidad permite valores nulos, sólo una fila en la tabla puede tener un valor nulo. Si se define el índice único a través de más de una columna, sólo puede tener una sola aparición de cada combinación de un nulo dentro de cada columna definida por la restricción única.

Los productos de nuestra compañía pueden tener múltiples manuales asociados con ellos. Dado que algunos manuales de producto pueden ser muy grandes, es mucho más eficiente almacenar cada manual en el sistema operativo por medio de la capacidad de FILESTREAM en SQL Server. El dato FILESTREAM requiere una restricción unique en una columna.

Crear una tabla con una restricción UNIQUE 1. Ejecute el siguiente código para agregar una tabla Products.ProductDocument a la base de datos (El código está en el archivo Capítulo 5\code10.sql): CREATE TABLE Products.ProductDocument (DocumentID UNIQUEIDENTIFIER ROWGUIDCOL UNIQUE, DocumentType VARCHAR(20) NOT NULL, Document VARBINARY(MAX) FILESTREAM NULL, CONSTRAINT pk_productdocument PRIMARY KEY(DocumentID)) GO

82

Parte II Diseñar bases de datos

Restricciones CHECK La restricción check le permite restringir el rango de valores que se permiten en una columna dentro de una tabla. Por ejemplo, su empresa no le permite a un cliente pedir una orden con una cantidad negativa. Las tablas Orders.OrderHeader, Orders.OrderDetail y Products.Product previamente creadas, permiten datos que infringen las reglas de negocio. En el siguiente ejercicio, utilizará restricciones de comprobación para asegurarse que: Las cantidades y los precios sean mayores que 0 Los importes de los impuestos y los gastos de envío no sean negativos

Crear una tabla con una restricción CHECK 1. Ejecute el siguiente código (el código está en el archivo Capítulo5\ code11.sql): DROP TABLE Products.Product GO

CREATE TABLE Products.Product (ProductID INT IDENTITY(1,1), ProductName VARCHAR(50) NOT NULL, ProductCost MONEY NOT NULL CHECK (ProductCost > 0), ListPrice MONEY NOT NULL CHECK (ListPrice > 0), ProductMargin AS (ListPrice – ProductCost), ProductDescription XML NULL, CONSTRAINT pk_product PRIMARY KEY (ProductID)) GO

ALTER TABLE Orders.OrderHeader WITH CHECK ADD CONSTRAINT ck_subtotal CHECK (SubTotal > 0)

ALTER TABLE Orders.OrderHeader WITH CHECK ADD CONSTRAINT ck_taxamount CHECK (TaxAmount >= 0)

ALTER TABLE Orders.OrderHeader WITH CHECK ADD CONSTRAINT ck_shippingamount CHECK (ShippingAmount >= 0) GO

ALTER TABLE Orders.OrderDetail WITH CHECK ADD CONSTRAINT ck_quantity CHECK (Quantity >= 0)

ALTER TABLE Orders.OrderDetail WITH CHECK ADD CONSTRAINT ck_unitprice CHECK (UnitPrice > 0) GO

2. Abra el nodo Restricciones (constraints) debajo de cada tabla en el Explorador de objetos para ver los resultados.

Restricciones DEFAULT La restricción default se utiliza para especificar un valor “por omisión” para una columna , cuando un usuario no le pasa ningún valor a esa columna. Los usos más comunes de un valor por defecto son cuando se suele asignar un determinado valor a una columna.

Capítulo 5 Diseño de Tablas

83

Si se define una columna como NOT NULL, debe asignarle un valor a la columna, a menos que se haya definido una restricción DEFAULT en la columna, si es así, asignar un valor a esa columna es opcional.

Nota Un default sólo es eficaz cuando inicialmente se agregan datos a la tabla.

Nuestras tablas clientes y ordenes tienen columnas de tipo fecha que se llenan de un modo muy estándar. Cuando se crea una fila de cliente, la columna ModifiedDate reflejará la fecha actual, tal como la columna OrderDate normalmente reflejará la fecha actual.

Crear una tabla con una restricción DEFAULT 1. Ejecute el siguiente código (que se encuentra en el archivo Capítulo5\ code12.sql):

DROP TABLE Customers.Customer GO

CREATE TABLE Customers.Customer (CustomerID INT IDENTITY(1,1), CompanyName VARCHAR(50) NULL, FirstName VARCHAR(50) NULL, LastName VARCHAR(50) NULL, ModifiedDate DATE NOT NULL CONSTRAINT df_modifieddate DEFAULT GETDATE(), CONSTRAINT pk_customer PRIMARY KEY (CustomerID)) GO

DROP TABLE Orders.OrderHeader GO

CREATE TABLE Orders.OrderHeader (OrderID INT IDENTITY(1,1), OrderDate DATE NOT NULL CONSTRAINT df_orderdate DEFAULT GETDATE(), SubTotal MONEY NOT NULL CONSTRAINT ck_subtotal CHECK (SubTotal > 0), TaxAmount MONEY NOT NULL CONSTRAINT ck_taxamount CHECK (TaxAmount >= 0), ShippingAmount MONEY NOT NULL CONSTRAINT ck_shippingamount CHECK (ShippingAmount >= 0), GrandTotal AS (SubTotal + TaxAmount + ShippingAmount), FinalShipDate DATE NULL, CONSTRAINT pk_orderheader PRIMARY KEY (OrderID)) GO

Las claves externas La restricción foreign key es similar a una restricción check en que se hace cumplir un rango de valores que se permiten en una columna. Una restricción check saca los límites de los datos a través del uso de un valor estático o una función. Los límites de una clave externa provienen del uso de una tabla.

84

Parte II Diseñar bases de datos

El conjunto de tablas que se han creado hasta ahora, si bien nos permiten capturar los datos, tienen algunos defectos fundamentales: Si bien podemos definir un cliente y almacenar el pedido de un cliente, no sabemos una orden concreta a que cliente pertenece. No sabemos a qué orden pertenece un conjunto dado de ítems. No sabemos a qué cliente o empleado está asociada una dirección. Adicionalmente, nuestra estructura de tabla permite una cierta inconsistencia de datos, incluso cuando existe un conjunto de valores bien definidos. De acuerdo con nuestra estructura actual de la tabla, a todos los tipos de países, estado/provincia, y direcciones se les permite tener cualquier conjunto de valores que una aplicación defina, a pesar de que la lista de valores permitidos esté bien definida. El término general usado para un conjunto de tablas que definen una lista de valores reconocidos para hacer cumplir la consistencia de datos es “tabla de consulta” o “lookup table”. Usted puede ver a las lookup table como un conjunto de tablas que definen el rango de valores que son permitidos para los distintos elementos y por lo general son la fuente fundamental de listas desplegables dentro una aplicación (combos).

Una clave externa hace cumplir lo que se conoce como una relación padre-hijo. Por ejemplo, un cliente hace un pedido. En este ejemplo, la tabla primaria es el cliente, ya que define el cliente al que el pedido está asociado. Con el fin de crear una clave externa, debe tener definida una clave principal en la tabla principal.

Para solucionar nuestros problemas de asociación de datos, así como limitar el rango de valores conocidos, vamos a definir lookup tables y foreign keys.

Nota El siguiente ejemplo contiene una pequeña porción de las modificaciones de clave externa que son necesarias dentro de la base de datos que estamos creando. El código que acompaña este libro tiene un script que creará las versiones finales de todas las tablas dentro de nuestra base de datos.

Agregar una clave externa a una tabla existente 1. Ejecute el siguiente código (que está en el archivo Capítulo5\ code13.sql):

CREATE TABLE LookupTables.Country (CountryID INT IDENTITY(1,1), CountryName VARCHAR(70) NOT NULL UNIQUE, CONSTRAINT pk_country PRIMARY KEY(CountryID)) GO

CREATE TABLE LookupTables.StateProvince (StateProvinceID INT IDENTITY(1,1), CountryID INT NOT NULL, StateProvince VARCHAR(50) NOT NULL UNIQUE, StateProvinceAbbrev CHAR(2) NOT NULL,

Capítulo 5 Diseño de Tablas

85

CONSTRAINT pk_stateprovince PRIMARY KEY(StateProvinceID)) GO ALTER TABLE LookupTables.StateProvince ADD CONSTRAINT fk_countrytostateprovince FOREIGN KEY (CountryID) REFERENCES LookupTables.Country(CountryID) GO

Diagramas de bases de datos En este capítulo, se ha creado una base de datos relativamente simple que define una porción pequeña de una empresa típica que tiene clientes y toma los pedidos de productos. Sin embargo, probablemente encontrará difícil recordar todas las tablas que ha creado y las asociaciones entre las tablas. Afortunadamente, SSMS tiene una característica llamada diagramas de base de datos que le permite ver una base de datos o un subconjunto de una base de datos gráficamente.

El siguiente ejercicio le mostrará cómo generar un diagrama de base de datos para la base de datos que acaba de crear.

Nota La primera vez que se crea un diagrama de base de datos en una base de datos, recibirá un mensaje sobre la creación de objetos de apoyo. Haga clic en Sí para crear los objetos de soporte.

Crear un diagrama de base de datos 1. Haga clic derecho en el nodo de base de datos y seleccione Nuevo Diagrama de Base de Datos. 2. Seleccione todas las tablas en el cuadro de diálogo “Agregar tabla”, haga clic en Agregar y, a continuación, haga clic en Cerrar.

3. Una vez que las tablas han sido añadidas, revise la estructura de su base de datos.

86

Parte II Diseñar bases de datos

Nota Los diagramas de base de datos le dan una visión básica de una base de datos. Hay que tener mucho cuidado, porque un diagrama de base de datos tiene un enlace directo a la base de datos subyacente. Los diagramas de bases de datos le permiten realizar cambios en la base de datos, pero salvando estos cambios hace modificaciones a la base de datos real y no sólo a la del gráfico. Cuando diseña una base de datos, usted debería utilizar una herramienta de modelado de datos, como Visio for Enterprise Architects.

Capítulo 5 Referencia Rápida Para

Haga lo siguiente

Diseñar una base de datos

Ponga las cosas donde corresponde

Crear un esquema

Utilice el comando CREATE SCHEMA

Definir una columna de incremento automático

Especifique un tipo de datos numérico con la propiedad IDENTITY

Optimizar el almacenam. de una columna cuando Especifique la opción SPARSE para la columna un gran porcentaje de filas pueden ser nulas Identificar de forma única las filas de una tabla

Utilice una restricción de clave PRIMRY KEY

Únicamente restringir los valores de datos en una columna

Utilice una restricción UNIQUE

Restringir el rango de valores permitidos en una columna

Utilice una restricción CHECK para los límites de datos definidos por un valor, fórmula o función

Almacenar un cálculo sin la necesidad de almacenar los resultados del cálculo

Utilice una FOREIGN KEY para límites de datos definidos por una tabla Utilice una columna calculada

Capítulo 6

Índices Después de completar este capítulo, usted será capaz de Comprender la estructura de los índices Crear índices agrupados y no agrupados (clustered and nonclustered) Crear índices con columnas incluidas (included columns) Crear índices de cobertura (covering indexes) Crear índices filtrados (filtered indexes) Crear índices XML Administrar índices y ocuparse de la fragmentación del índice Los índices se utilizan para mejorar el rendimiento de las consulta de datos. En un mundo perfecto, podría crear un gran número de índices para satisfacer todas las permutaciones de consultas que el usuario puede crear. Sin embargo, los índices deben mantenerse. Cuando los datos se insertan, actualizan o eliminan, los índices deben ser recalculados. La creación de índices debe ser equilibrada, de modo que pueda crear índices suficientes para mejorar las consultas, al tiempo que garantiza un impacto mínimo sobre las modificaciones a los datos.

En este capítulo, usted aprenderá cómo crear los distintos tipos de índices que SQL Server 2008 soporta.

Estructura de Índice SQL Server no necesita tener los índices en una tabla para recuperar datos. Una tabla puede simplemente ser escaneada para encontrar la porción de datos que se solicita. Por desgracia, los usuarios quieren almacenar grandes cantidades de datos en una tabla y ser capaz de recuperar los datos al instante. Los índices no son un concepto nuevo, los usamos todos los días. Si nos fijamos en la parte trasera de este libro, usted encontrará un índice en forma impresa. Si usted quiere leer acerca del tema “partición”, puede encontrar la información de dos maneras diferentes. Usted puede abrir este libro, comenzar en la página 1, y escanear cada página hasta que llegó el Capítulo 7, "Particionamiento", y ubicar la información específica que necesitaba. También puede abrir el índice al final del libro, buscar “particionamiento”, y luego ir a la página correspondiente del libro. Ambas lograran su objetivo, pero utilizar el índice le permitirá localizar la información que desea, observando el menor número de páginas posible.

Un índice es útil solamente si puede proporcionar un medio para encontrar datos muy rápidamente, independientemente del volumen de datos que se almacenan. Eche un vistazo al índice en la parte posterior de este libro. 87

88

Parte II Diseñar bases de datos

El índice contiene sólo una muestra muy pequeña de las palabras en el libro, lo que proporciona una forma mucho más compacta para buscar información. El índice está organizado por orden alfabético, una manera natural de los seres humanos para trabajar con palabras, la cual permite eliminar un gran porcentaje de las páginas en el índice para encontrar la información que necesita. Además, le permite escanear hasta encontrar el término que está buscando, y después de encontrar la palabra, usted sabe que no tiene que buscar más. SQL Server organiza los índices de una manera muy similar.

Los árboles balanceados (B-trees) La estructura que SQL Server utiliza para construir y mantener los índices se llama árbol balanceado (B-tree). Un ejemplo de un árbol B se muestra en la Figura 6-1.

Raíz

Intermedio

Hoja

FIGURA 6-1 Estructura del B-árbol

Un árbol B está construido de un nodo raíz que contiene una sola página de datos, cero o más niveles intermedios y un nivel de hoja. El concepto básico de un árbol B es la primera palabra de su nombre “balanceado”. Un B-tree es siempre simétrico. Siempre habrá el mismo número de páginas en ambas las mitades izquierda y derecha de un árbol-B, en cada nivel dentro del mismo.

Las páginas de nivel hoja contienen entradas ordenadas en el orden que usted especificó. Los datos en el nivel hoja contienen todas las combinaciones de valores de la columna (s) que han sido indexadas. El número de filas de índice en una página está determinado por el espacio de almacenamiento requerido por las columnas que se definieron en el índice.

Nota Las páginas en SQL Server pueden almacenar hasta 8060 bytes de datos. Por lo tanto, un índice creado en una columna con un tipo de datos INT puede almacenar 2015 valores en una sola página en el índice, mientras que una columna con un tipo de dato datetime2 sólo puede almacenar la mitad de muchos valores, o 1007 valores por página.

Los niveles raíz e intermedios del índice, se construyen tomando la primera entrada de cada página en el nivel inferior, junto con un puntero a la página desde la que provienen los valores de los datos, como se muestra en la Figura 6-2.

Capítulo 6 Índices

89

City1 City62 City121 City190

City1 City34

City1 City27

City62 City93

City34 City61

City62 City89

City121 City150

City93 City120

City121 City148

City150 City177

City190 City220

City190 City217

City220 City247

FIGURA 6-2 La construcción de los niveles intermedio y raíz

Una consulta comienza con la página raíz y escanea la página hasta que encuentre una página que contiene el valor que se busca en. A continuación, utiliza el puntero de página para saltar al siguiente nivel y escanea las filas de esa página hasta que encuentra una página que contiene los datos que se buscan. A continuación, salta al siguiente nivel y repite el proceso, moviéndose a través de los niveles subsiguientes hasta que alcanza el nivel de la raíz del índice. En este punto, la consulta ha localizado los datos requeridos. (N del T: Creo que hay un error en la versión en ingles y donde dice “root level” debería decir “leaf level” o sea que se alcanza el nivel hoja).

Por ejemplo, si usted está buscando City132, la consulta se iniciará en el nivel raíz y escaneará las filas. Dado que City132 cae entre City121 y City190, SQL Server sabe que City132 posiblemente se pueda encontrar en la página que comienza con City121. SQL Server entonces se moverá a la página de nivel intermedio que comienza con City121. Al escanear la página, SQL Server de nuevo determina que City132 se encuentra entre City121 y City150, SQL Server entonces se mueve a página a nivel de hoja que inicia con City121. La página se escanea hasta que se encuentra City132 y dado que esta es una página de nivel hoja, no hay más páginas que transitar para localizar los datos requeridos. Si City132 no existe en la tabla, SQL Server no encuentra una entrada para City132 y tan pronto como lee la entrada de City133, se sabe que el valor de City132 no figura más abajo en la página y la consulta devolverá “sin resultados”. Usted debe notar en la estructura anterior, que SQL Server sólo tendrá que leer un máximo de tres páginas para localizar cualquier ciudad dentro de la base de datos.

Esto es lo que significa tener un árbol de equilibrado. Cada búsqueda que se lleva a cabo siempre transitará el mismo número de niveles en el índice, así como el mismo número de páginas en el índice para localizar la porción de datos que le interesa.

Niveles de indexación El número de niveles de un índice y el número de páginas dentro de cada nivel de un índice son determinados por simples matemáticas. Una página de datos en SQL Server tiene 8192 bytes de tamaño, de los cuales se pueden utilizar para almacenar hasta 8060 bytes de datos de usuario reales. Basándose en el número de bytes requerido para almacenar una clave de índice, determinado por el tipo de datos, se puede calcular el número de filas por página que se almacenan, por simple división.

90

Parte II Diseñar bases de datos

El siguiente ejemplo describe no sólo cómo se construye un índice, sino además los cálculos del tamaño para un índice. Este ejemplo le dará una idea del valor que tiene un índice para encontrar datos dentro de tablas muy grandes, y le explicará por qué la cantidad de tiempo para encontrar una porción de datos no varía tanto cuando el tamaño de una base de datos se incrementa dramáticamente. Por supuesto, la cantidad de tiempo para localizar los datos depende también de escribir consultas eficientes, tema que se tratará en la Parte III, "Recuperar y manipular datos", capítulos 8-11.

Si se construye un índice en una columna INT, cada fila de la tabla requiere 4 bytes de almacenamiento en el índice. Si sólo hay 1.200 filas de datos en la tabla, usted necesitaría 4.800 bytes de almacenamiento. Debido a que todas las entradas caben en una sola página de datos, el índice tendría una sola página que sería la página raíz, así como la página hoja. De hecho, puede almacenar 2.015 filas en la tabla y aun seguirían localizándose en una sola página para el índice.

Tan pronto como se agrega la fila número 2.016, todas las entradas ya no caben en una sola página, por lo que se asignan dos páginas adicionales al índice. La ya existente página "raíz" se empuja hacia abajo en el índice para convertirse en una página de nivel hoja. Una de las nuevas páginas asignadas se convierte en la nueva página de nivel raíz. SQL Server, a continuación toma los datos de la segunda mitad de la página previamente existente y los mueve a la segunda página nueva que se asigna y se coloca en el nivel de hoja. El paso final en el proceso es tomar la primera entrada de cada una de las páginas de nivel hoja y escribir las entradas a la nueva página raíz. Este proceso crea un índice con una página raíz y dos páginas de nivel hoja. En este índice no es necesario un nivel intermedio debido a que la página raíz puede contener todos los valores de las primeras entradas de las páginas de nivel hoja. En este punto, la localización de cualquier fila de la tabla requiere examinar exactamente dos páginas en el índice.

Nota El proceso por el que SQL Server asigna una nueva página y mueve la mitad de los datos desde una página completa a una nueva página se conoce como división de página (page splitting). Tenga en cuenta que las filas en una página de índice se mantienen en forma ordenada, por lo que SQL Server siempre escribirá las nuevas entradas en la ubicación ordenada correctamente. Esto puede hacer que las filas para moverse entre una página y otra se dividan y puede ocurrir a cualquier nivel dentro de la estructura de almacenamiento. Para una explicación más detallada de las estructuras de almacenamiento y división de páginas, consulte SQL Server 2008 Internals escrito por Kalen Delaney.

Puede seguir añadiendo filas a la tabla sin afectar el número de niveles en el índice hasta llegar a 4.060.225 filas. A continuación, tiene 2.015 páginas de nivel hoja con 2.015 entradas cada uno. La página raíz tendrá 2.015 entradas correspondientes a la primera fila en cada una de las páginas de nivel hoja. Cuando la fila número 4.060.226 de datos se añade a la tabla, debe ser asignada otra página al índice en el nivel hoja, pero la página raíz no puede contener 2.016 entradas porque superaría los 8.060 bytes que se permiten. Así SQL Server pasará por el mismo proceso se ha explicado anteriormente, donde dos páginas nuevas se asignan al índice. La anterior página de nivel raíz ahora se convertiría en una página de nivel intermedio junto con una nueva página que también será asignada al nivel intermedio. La previamente conocida página "raíz" se someterá a una división de página para mover la mitad de las entradas a la recién creada página de nivel intermedio. La primera entrada en cada una de las dos páginas de nivel intermedio se escribe en la nueva página raíz recién asignada.

Capítulo 6 Índices

91

La próxima vez que se necesitará un nuevo nivel intermedio, será cuando se agregué la fila número 8181353376 a la tabla. 2.015 filas de la página raíz corresponden a 2.015 páginas el nivel intermedio, cada una de las cuales tiene 2.015 entradas correspondientes a las 2.015 páginas al nivel hoja más una fila adicional de datos que no cabría.

Como se puede ver, este tipo de estructura permite a SQL Server buscar muy rápidamente filas en tablas extremadamente grandes. En este ejemplo, la búsqueda de una fila de la tabla con un poco más de 4 millones de filas requiere que SQL Server analice sólo dos páginas de datos y la tabla puede crecer hasta más de 8 mil millones de filas antes que SQL Server requiera leer tres páginas para encontrar cualquier fila.

Índices agrupados Un índice se puede definir mediante una o más columnas de la tabla, la clave de índice, con la siguientes restricciones: Se puede definir un índice con un máximo de 16 columnas El tamaño máximo de la clave de índice es de 900 bytes

La columna (s) definida para el índice agrupado (clustered index) se conocen como la clave de agrupación (clustering key). Un índice clúster es especial porque él hace que SQL Server ordene los datos de la tabla de acuerdo con la clave de agrupación. Debido a que una tabla no puede ser ordenada de más de una forma, se puede definir un solo índice agrupado en una tabla..

Nota Una tabla sin un índice agrupado se denomina “montón” (heap). Como una regla general, cada tabla debería tener un índice agrupado. Una de las razones principales para crear un índice cluster en cada tabla es eliminar los punteros de reenvío. Los punteros de reenvío están mucho más allá del alcance de este libro. Para obtener más información acerca de punteros de reenvío y los efectos perjudiciales sobre el rendimiento de las consultas, por favor consulte Inside SQL Server 2005: Query Tuning and Optimization por Kalen Delaney.

La sintaxis general para la creación de un índice relacional es la siguiente: CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name ON ( column [ ASC | DESC ] [ ,...n ] ) [ INCLUDE ( column_name [ ,...n ] ) ] [ WHERE ] [ WITH ( [ ,...n ] ) ] [ ON { partition_scheme_name ( column_name ) | filegroup_name | default } ] [ FILESTREAM_ON { filestream_filegroup_name | partition_scheme_name | "NULL" } ][ ; ]

92

Parte II Diseñar bases de datos

Usted puede recordar que las secuencias de comandos de creación de tablas que utilizamos en el capítulo 5, "Diseño de tablas", tenía una palabra clave de "clúster" en la especificación de una clave principal. Aunque una clave primaria es una restricción, SQL Server físicamente implementa una clave principal como un índice. Debido a que la opción por defecto para una clave principal es clustered, SQL Server crea un índice agrupado para una clave primaria. Del mismo modo, una restricción única (unique) está físicamente implementada como un índice único. Puesto que una clave primaria es también única, de forma predeterminada, SQL Server implementa físicamente cada clave primaria como un índice agrupado único.

Nota Los esquemas de partición se discutirán en detalle en el Capítulo 7.

En la práctica que sigue, va a crear índices agrupados en las tablas OrderHeader y OrderDetail creadas anteriormente en el capítulo 5. Como ya hemos creado claves primarias en las tablas OrderHeader y OrderDetail utilizando las opciones por defecto, primero eliminará y volverá a crear las claves primarias como “no agrupados” con el fin de crear después el único índice cluster permitido por cada tabla.

Crear un índice agrupado 1. Ejecute el código siguiente en la base de datos SQL2008SBS (el código está en el archivo Capítulo 6\code1.sql):

—Must drop foreign key first, because it depends on the primary key ALTER TABLE Orders.OrderDetail DROP CONSTRAINT fk_orderheadertoorderdeatils GO —Change the existing primary keys to nonclustered ALTER TABLE Orders.OrderHeader DROP CONSTRAINT pk_orderheader GO ALTER TABLE Orders.OrderHeader ADD CONSTRAINT pk_orderheader PRIMARY KEY NONCLUSTERED (OrderID) GO ALTER TABLE Orders.OrderDetail DROP CONSTRAINT pk_orderdetail GO ALTER TABLE Orders.OrderDetail ADD CONSTRAINT pk_orderdetail PRIMARY KEY NONCLUSTERED (OrderDetailID) GO —Recreate the foreign key (fix the misspelling from chapter 5) ALTER TABLE Orders.OrderDetail ADD CONSTRAINT fk_orderheadertoorderdetails FOREIGN KEY (OrderID) REFERENCES Orders.OrderHeader (OrderID) GO

Capítulo 6 Índices

93

—Create new clustered indexes on the ShipDate/FinalShipDate columns CREATE CLUSTERED INDEX icx_finalshipdate ON Orders.OrderHeader (FinalShipDate) GO CREATE CLUSTERED INDEX icx_shipdate ON Orders.OrderDetail (ShipDate) GO

2. En el Explorador de objetos, expanda el nodo índices para las tablas OrderHeader y OrderDetail. Observe que ahora tiene un índice agrupado (clustered) junto con el índice unique y nonclustered creado con la tabla.

Los índices no agrupados El otro tipo de índice relacional que se puede crear es el índice no agrupado (nonclustered index). Los índices no agrupados no imponen un orden en la tabla, por lo que puede crear varios índices no agrupados sobre una tabla. Los índices no agrupados tienen las mismas restricciones que un índice agrupado (máximo de 900 bytes y un máximo de 16 columnas), junto con, además, la limitación de un máximo de 249 índices no agrupados en una tabla.

Mantenimiento de Índices A primera vista, se podría pensar que simplemente deberá crear decenas o cientos de índices en una tabla con el fin de adaptarse a cualquier posible consulta. Sin embargo, es necesario recordar cómo se construye un índice. Los valores de la columna en la que se crea el índice se utilizan para generar dicho índice. Los valores en el índice también se ordenan. Cuando una nueva fila se agrega a la tabla, antes de que la operación pueda completarse, SQL Server debe agregar el valor de esta nueva la fila en la ubicación correcta dentro del índice.

Si sólo hay un índice en la tabla, una fila nueva escrita en la tabla también causa que se escriba en el índice. Si hay 30 índices en la tabla, una fila nueva escrita en la tabla causaría otras 30 escrituras adicionales para agregar el valor a cada uno de los índices.

Si la página de índice de nivel de hoja no tiene espacio para el nuevo valor, SQL Server tiene que realizar una página dividida y escribir la mitad de las filas de la página completa en una nueva página recién asignada. Si esto también hace que una página de índice de nivel intermedio se desborde, se produciría una división de página en ese nivel también. Si la nueva fila también hace que la página raíz se desborde, la página raíz tendría que ser dividida en un nuevo nivel intermedio, creando una nueva página raíz.

Los índices pueden mejorar el rendimiento de una consulta, pero cada índice creado también causa una degradación en el rendimiento de los comandos INSERT, UPDATE, DELETE y MERGE. Por lo tanto, es necesario un cuidadoso equilibrio del número de índices para tener operaciones óptimas. Como una regla general, si tiene cinco o más índices en una tabla diseñada para el procesamiento de transacciones en línea (OLTP), es probable que tenga que volver a evaluar por qué existen esos índices. Las tablas diseñadas para operaciones de lectura o consultas de tipo "data warehouse", suelen tener muchos más índices

94

Parte II Diseñar bases de datos

ya que las operaciones de escritura a un almacén de datos, generalmente ocurren a través de operaciones por lotes controlados administrativamente fuera de las horas pico.

Nota Usted aprenderá más acerca de INSERT, UPDATE, DELETE y MERGE en el capítulo 10, "Manipulación de Datos”

En la siguiente práctica, agregará unos pocos índices no agrupados a la base de datos SQL2008SBS para dar soporte a las operaciones de consulta que tienen alta probabilidad de ocurrir, tales como la búsqueda de un producto por su nombre o la búsqueda de un cliente por su nombre o ciudad.

Crear un índice no agrupado 1. Ejecute el siguiente código en la base de datos SQL2008SBS (el código está en el archivo Capítulo 6\code2.sql): CREATE NONCLUSTERED INDEX idx_companyname ON Customers.Customer(CompanyName) GO CREATE NONCLUSTERED INDEX idx_lastnamefirstname ON Customers.Customer(LastName,FirstName) GO CREATE NONCLUSTERED INDEX idx_city ON Customers.CustomerAddress(City) GO CREATE NONCLUSTERED INDEX idx_customerid ON Customers.CustomerAddress(CustomerID) GO CREATE NONCLUSTERED INDEX idx_jobtitle ON HumanResources.Employee(JobTitle) GO CREATE NONCLUSTERED INDEX idx_lastnamefirstname ON HumanResources.Employee(LastName,FirstName) GO CREATE NONCLUSTERED INDEX idx_productname ON Products.Product(ProductName) GO

2. En el Explorador de objetos, expanda el nodo de índices para las tablas Customers.Customer, Customers.CustomerAddress, HumanResources.Employee y Products.Product. Observe que ahora tiene creados otros índices no agrupados. 3. Ahora que tiene un poco de conocimiento sobre la ejecución de consultas, es el momento para empezar a mostrarle algunos atajos (shortcuts) que se pueden utilizar dentro de SSMS. Expanda el nodo Columnas debajo Products.Product y en la ventana de consulta escriba el siguiente código: CREATE NONCLUSTERED INDEX idx_productmargin ON () GO

4. Desde el paso 1 de este procedimiento, usted ha visto cómo construir una declaración CREATE INDEX válida y se dará cuenta de que el nombre de la tabla y el nombre de la columna no aparecen en el comando. Desde el Explorador de objetos, arrastre y coloque el nombre de la tabla Products.Product en la ventana de consulta justo antes de los paréntesis abiertos. Su query debe ser ahora como la siguiente: CREATE NONCLUSTERED INDEX idx_productmargin ON Products.Product() GO

Capítulo 6 Índices

95

5. Desde el Explorador de objetos, arrastre y coloque el nombre de la columna ProductMargin entre el par de paréntesis. La consulta debe parecerse a la siguiente: CREATE NONCLUSTERED INDEX idx_productmargin ON Products.Product(ProductMargin) GO

6. Dentro de la ventana de consulta, resalte la declaración CREATE INDEX que completó en Paso 5 y pulse CTRL + E ó bien F5 (cualquiera de los dos) para ejecutar únicamente el código que aparece resaltado. 7. En el Explorador de objetos, expanda el nodo de índices para la tabla y Products.Product y observe el nuevo índice que acaba de crear.

Nota En los pasos 3-6, usted aprendió varias cosas que pueden no ser evidentes. En primer lugar, puede arrastrar cualquier nombre de objeto desde el Explorador de objetos hacia una ventana de consulta con el fin de no tener que escribir nombres. En segundo lugar, puede crear índices en columnas, así como columnas calculadas. En tercer lugar, se puede resaltar una porción de código en la ventana de consultas y ejecutar selectivamente sólo el código resaltado. Algunas cosas adicionales para que usted pueda jugar, mientras estamos con el tema de accesos directos, son las siguientes: Arrastre el nodo etiquetado “Columna” debajo de la tabla Products.Product a la ventana de consulta. Observe que aparece una lista separada por comas con cada columna en la tabla. Intente arrastrar y soltar el nodo etiquetado “Tablas” debajo de la base de datos SQL2008SBS. Observe que no se puede utilizar la función arrastrar / soltar con este nodo. Investigue qué otros nodos puede arrastrar y soltar desde el Explorador de objetos para una ventana de consulta. Mantenga presionada la tecla ALT y arrastre el puntero del ratón sobre una parte de la ventana de consulta y observe que se pueden resaltar y aplicar los comandos cortar, copiar y pegar para el área seleccionada.

Columnas incluidas Un ítem interesante para recordar es que cuando se define un índice en una o más columnas, cada valor dentro de la columna (s) se carga en el índice. En efecto, termina con una “tabla miniatura” con automantenimiento, construida a partir de las columnas del índice. Lo que es importante es que si usted puede construir tales índices donde una consulta sólo tiene que acceder a los datos en el índice para satisfacer la consulta, no es necesario acceder a la tabla. Un índice que se construye de manera que satisfaga plenamente una consulta se denomina un índice de cobertura (covering index).

Índices de cobertura Un índice de cobertura puede tener un efecto interesante en determinadas consultas. Si la consulta necesita devolver los datos de las columnas sólo dentro de un índice, SQL Server no necesita acceder a las páginas de datos de la tabla actual. Al transitar por el índice, SQL Server encuentra todos los datos que se requieren.

96

Parte II Diseñar bases de datos

Si usted puede construir covering indexes para datos de acceso frecuente, puede aumentar el tiempo de respuesta para las consultas, evitando lecturas adicionales a la tabla subyacente. También puede aumentar potencialmente la concurrencia habiendo consultas que accedan a los datos de un índice, mientras que los cambios que no se escriben en el índice se están tratando sobre la tabla subyacente.

SQL Server es capaz de utilizar más de un índice en una consulta dada. Si dos índices tienen al menos una columna en común, SQL Server puede hacer join a los dos índices juntos con el fin de satisfacer una consulta.

Claramente, los índices son una gran cosa para tener en su base de datos y los covering indexes proporcionan mayor valor a las consultas. Sin embargo, está limitado a 16 columnas y 900 bytes en un índice, lo que excluye columnas con tipos de datos de gran tamaño, que podrían ser útiles en un “índice de cobertura” para no tener que extraer los datos desde la tabla subyacente.

SQL Server 2005 introduce una nueva característica en los índices llamada “columna incluida”. Las columnas incluidas forman parte del índice en el nivel hoja solamente. Los valores de las columnas incluidas no aparecen en la raíz o niveles intermedios de un índice y no cuentan para el límite de 900 bytes para un índice.

Por ejemplo, usted podría construir un índice para la columna Customers.CustomerAddress.City e incluir la columna AddressLine1 con el fin de satisfacer las consultas de direcciones. En la práctica que sigue, volverá a crear el índice en la columna Customers.CustomerAddress.City para incluir la columna AddressLine1.

Crear un Índice con columnas incluidas 1. Ejecutar el código siguiente en la base de datos SQL2008SBS (el código está en el archivo Capítulo 6 \ code3.sql en los ejemplos que acompañan el libro): DROP INDEX idx_city ON Customers.CustomerAddress GO CREATE NONCLUSTERED INDEX idx_cityaddressline1 ON Customers.CustomerAddress(City) INCLUDE(AddressLine1) GO

2. En el nodo “índices”, observe el índice creado nuevamente. 3. En la superficie, no parece que el índice recién creado sea diferente del índice City creado previamente. En el Explorador de objetos, haga doble clic sobre el índice recién creado y seleccione la opción “Included Columns” que aparece en las propiedades del índice.

Nota Vamos a explicar muchas de las otras opciones que se ven en el cuadro de diálogo Propiedades del índice en secciones posteriores de este capítulo.

Capítulo 6 Índices

97

Índices filtrados Usted puede haber notado un pequeño problema con los índices que se han creado en la tabla Customers.Customer. Dentro de esta tabla, usted tiene una CompanyName junto con Nombre /Apellidos. A pesar de que yo generalmente diseño tablas para dividir los clientes minoristas de los mayoristas, debido a las definiciones completamente diferentes, hemos combinado los dos tipos de clientes en una sola tabla. Por lo tanto, usted tendrá un gran número de filas en la tabla Customers.Customer que no tendrán un valor de CompanyName, al igual que tendrá un gran número de filas que no tendrán valores de Nombre/Apellido porque los dos son mutuamente excluyentes.

Estadísticas de distribución Los índices proporcionan una manera de localizar rápidamente los datos dentro de una tabla. El componente que es responsable de determinar si un índice se debe utilizar para satisfacer una consulta es el llamado Optimizer. El optimizador decide si desea o no utilizar un índice basado en las estadísticas de distribución que se almacenan en el índice.

Cuando se crea un índice, SQL Server genera una estructura llamada histograma que almacena información acerca de la distribución relativa de los valores de datos dentro de una columna. El grado en que los valores de la columna permite localizar pequeños conjuntos de datos se conoce como “selectividad” del índice. A medida que el número de valores únicos dentro de una columna aumenta, la selectividad de un índice aumenta. El optimizador elige los índices más selectivos para satisfacer una consulta, ya que un índice altamente selectivo permite al procesador de consulta eliminar una parte muy grande de la tabla con el fin de acceder rápidamente a la menor cantidad de datos necesarios para satisfacer la consulta.

Por sí mismos, los campos CompanyName y Nombre/Apellido normalmente serían altamente selectivos. El alto número de valores NULL hará que estos índices tengan una selectividad muy baja, y es probable que sean inútiles para el optimizador. SQL Server 2008 introduce una nueva función de indexación para resolver nuestro problema de selectividad, llamada “índice filtrado” (filtered index).

Los índices filtrados tienen las siguientes restricciones: Debe ser un índice no agrupado (nonclustered) No se puede crear en columnas calculadas Las columnas no pueden someterse a la conversión del tipo de datos implícito o explícito

Nota Usted podría preguntarse por qué un índice agrupado no se puede filtrar. Además de ser un índice, el índice agrupado impone un orden en la tabla. No tendría ningún sentido intentar ordenar una tabla en sólo un subconjunto de las filas de la tabla.

98

Parte II Diseñar bases de datos

En la práctica, que sigue, usted arrastrará, soltará y volverá a crear nuestros índices de la tabla Customers.Customer, para cambiarlos por índices filtrados que excluyan los datos que son NULL.

Crear un índice filtrado 1. Ejecute el código siguiente en la base de datos SQL2008SBS (el código está en el archivo Capítulo 6\code4.sql en los ejemplos que acompañan el presente libro): DROP INDEX idx_companyname ON Customers.Customer GO DROP INDEX idx_lastnamefirstname ON Customers.Customer GO CREATE NONCLUSTERED INDEX idx_companyname ON Customers.Customer(CompanyName) WHERE CompanyName IS NOT NULL GO CREATE NONCLUSTERED INDEX idx_lastnamefirstname ON Customers. Customer(LastName,FirstName) WHERE LastName IS NOT NULL GO

2. En el Explorador de objetos, haga doble clic en sus índices recién creados, y seleccione la página “Filter” del cuadro de diálogo Propiedades del índice.

Creación de índices en línea Cuando se crea un índice, todos los valores de la clave del índice deben ser leídos y utilizados para construir el índice. El proceso de lectura de todos los valores y la construcción del índice no ocurren instantáneamente. De esta forma, es posible para los datos, cambiar dentro de la clave de índice. SQL Server controla los cambios de datos en una tabla para asegurar la consistencia de datos durante la construcción del índice, de acuerdo con la opción de creación especificada. Los índices pueden ser creados ya sea “en línea” o “fuera de línea”. Cuando se crea un índice con la opción OFFLINE, SQL Server bloquea las entradas a la tabla, impidiendo cualquier cambio hasta que se crea el índice. Cuando se crea un índice usando la Opción ONLINE, SQL Server permite cambios en la tabla durante la creación del índice aprovechando el almacén de versiones dentro de la base de datos tempdb.

Usted controla la creación de un índice mediante la opción WITH ONLINE ON | OFF. La opción predeterminada es ONLINE OFF. Cuando se construye un índice agrupado fuera de línea, la tabla está bloqueada y no permite sentencias de selección o modificación de datos. Si usted construye un índice no agrupado fuera de línea, se realiza un bloqueo de tabla compartida, lo que permite sentencias de selección, pero no de modificación de datos.

Durante la creación de índices en línea, se puede tener acceso a la tabla o vista mediante consultas o instrucciones de modificación de datos. Cuando se crea un índice en línea, la funcionalidad de control de versiones de fila dentro de SQL Server 2008 se utiliza para garantizar que el índice puede ser construido sin entrar en conflicto con otras operaciones sobre la tabla. La posibilidad de crear índices en línea está disponible con la versión Enterprise de SQL Server.

Capítulo 6 Índices

99

Nota Usted aprenderá más acerca de bloqueo, el almacén de versiones y niveles de aislamiento en el capítulo 10, "Manipulación de Datos".

Mantenimiento y Gestión de Índices Dado que los datos dentro de un índice se almacenan de forma ordenada, con el tiempo los valores pueden moverse en el índice debido a cualquiera de las divisiones de páginas o a los cambios en los valores. Con el fin de gestionar la fragmentación de un índice en el tiempo, es necesario realizar un mantenimiento periódico.

Fragmentación del Índice Los archivos de un sistema operativo pueden fragmentarse con el tiempo debido a las operaciones repetidas de escritura. Aunque los índices pueden fragmentarse, la fragmentación del índice es un poco diferente de la fragmentación de archivos. Cuando se crea un índice, todos los valores de la clave del índice se escriben de forma ordenada en las páginas del índice. Si se elimina una fila de la tabla, SQL Server necesita eliminar la entrada correspondiente en el índice. La eliminación del valor crea un "agujero" en la página del Índice. SQL Server no reclama el espacio dejado, ya que el costo de encontrar y reutilizar un "agujero" en un índice es prohibitivo. Si cambia un valor en una tabla en la que se basa un índice, SQL Server debe mover la entrada del índice a la ubicación adecuada, que también deja tras de sí un "agujero". Cuando las páginas de un índice se llenan y requieren una división de página, se obtiene una fragmentación adicional del índice. Con el tiempo, una tabla que está pasando por una gran cantidad de pérdida de clientes, una gran cantidad de cambios de datos, tendrá los índices fragmentados.

Para controlar la fragmentación de un índice, puede aprovechar una opción llamada “factor de llenado” y también puede utilizar la declaración ALTER INDEX para eliminar la fragmentación.

Factor de llenado (Fill factor) La opción de factor de relleno para un índice determina el porcentaje de espacio libre que es reservado en cada página de nivel hoja del índice cuando el mismo se crea o se reconstruye. El espacio libre reservado deja un sector en la página para valores adicionales que se añadan, reduciendo la frecuencia de que ocurra una división de página. El factor de relleno se representa como un porcentaje del total. Por ejemplo, un factor de relleno de 75 significa que el 25 por ciento del espacio en cada página de nivel hoja se dejará vacío, para acomodar los valores futuros que se agreguen.

100

Parte II Diseñar bases de datos

Desfragmentar un índice Dado que SQL Server no reclama espacio, usted debe periódicamente recuperar el espacio vacío en un índice con el fin de preservar las ventajas de rendimiento de dicho índice. Usted puede desfragmentar un índice usando la declaración ALTER INDEX, como se muestra a continuación:

ALTER INDEX { index_name | ALL } ON { REBUILD [ [PARTITION = ALL] [ WITH ( [ ,...n ] ) ] | [ PARTITION = partition_number [ WITH ( [ ,...n ] )] ] ] | DISABLE | REORGANIZE [ PARTITION = partition_number ] [ WITH ( LOB_COMPACTION = { ON | OFF } ) ] | SET ( [ ,...n ] ) }[ ; ]

Deshabilitar un índice Un índice puede ser desactivado mediante el uso de la declaración ALTER INDEX de la siguiente manera: ALTER INDEX { index_name | ALL } ON DISABLE [ ; ]

Cuando se deshabilita un índice, la definición permanece en el catálogo del sistema, pero ya no es utilizado. SQL Server no mantiene el índice a medida que cambian los datos de la tabla y el índice no puede ser utilizado para satisfacer las consultas. Si un índice agrupado es deshabilitado, la tabla entera estará inaccesible.

Para habilitar un índice, se debe reconstruir, esto es para regenerar y poblar la estructura del árbol-B. Usted puede lograr esto mediante el siguiente comando: ALTER INDEX { index_name | ALL } ON REBUILD [ ; ]

Índices XML Un tipo de datos XML puede contener hasta 2 GB de datos en una sola columna. Si bien los datos XML tienen una estructura que se puede consultar, SQL Server necesita escanear la estructura de datos con el fin de localizar los datos dentro de un documento XML. Con el fin de mejorar el rendimiento de las consultas contra los datos XML, puede crear un tipo de índice especial llamado “índice XML”.

Los índices XML se pueden crear de dos tipos diferentes: PRIMARY y SECONDARY.

Capítulo 6 Índices

101

Un índice XML primario, está construido contra todos los nodos de la columna XML. El Índice XML primario también está relacionado con la tabla mediante el mantenimiento de un vínculo a la correspondiente fila en el índice agrupado. Por lo tanto se requiere un índice agrupado antes de poder crear una índice XML primario.

Una vez que se ha creado un índice XML primario, puede crear nuevos índices secundarios. Los índices secundarios se pueden crear en PATH, VALUE o PROPERTY. Se requiere primero un índice XML primario, ya que los índices XML secundarios se construyen contra los datos contenidos en el índice XML principal.

Los indices XML secundarios creados FOR PATH se basan en los valores PATH y NODE del índice XML primario. Un índice XML PATH se utiliza para optimizar las consultas buscando un camino dentro de un documento XML. Los índices creados FOR VALUE son construidos contra el PATH y el VALUE del índice XML primario y se utilizan para buscar valores dentro de documentos XML. Los índices creados FOR PROPERTY se crean utilizando la clave principal, el nodo, y la ruta. Los índices XML PROPERTY se utilizan para devolver, de manera eficiente, los datos de una columna XML con columnas adicionales de la tabla.

La sintaxis genérica para crear un índice XML es: CREATE [ PRIMARY ] XML INDEX index_name ON ( xml_column_name ) [ USING XML INDEX xml_index_name [ FOR { VALUE | PATH | PROPERTY } ] ] [ WITH ( [ ,...n ] ) ][ ; ]

En la siguiente práctica, va a crear índices XML en la columna Products.Product. Los usuarios normalmente, ejecutarán consultas en la columna ProductDescription para localizar documentos que contienen valores específicos y también buscarán documentos con rutas específicas.

Crear índices XML 1. Ejecute el siguiente código en la base de datos SQL2008SBS (el código está en el archivo Capítulo 6\code5.sql en los ejemplos que acompañan el presente libro): CREATE PRIMARY XML INDEX ipxml_productdescription ON Products. Product(ProductDescription) GO CREATE XML INDEX ispxml_productdescription ON Products.Product(ProductDescription) USING XML INDEX ipxml_productdescription FOR PATH GO CREATE XML INDEX isvxml_productdescription ON Products.Product(ProductDescription) USING XML INDEX ipxml_productdescription FOR VALUE GO

2. Expanda el nodo “Índices” debajo de la tabla Products.Product y observe los nuevos índices creados.

102

Parte II Diseñar bases de datos

Índices espaciales Los índices espaciales se crean en una columna espacial que es del tipo geometría o geografía.

CREATE SPATIAL INDEX index_name ON ( spatial_column_name ) { [ USING ] WITH ( [ [,] [ ,...n ] ] [ [,] [ ,...n ] ] ) | [ USING ] [ WITH ( [ [ ,...n ] ] [ [,] [ ,...n ] ] ) ] } [ ON { filegroup_name | "default" } ];

Capítulo 6 Referencia Rápida Para

Haga lo siguiente

Crear un índice agrupado

Ejecutar CREATE CLUSTERED INDEX

Crear un índice no agrupado

Ejecutar CREATE NONCLUSTEREDINDEX

Agregar columnas a un índice que no cuenten para el límite de 900 bytes

Agregue una cláusula INCLUDE a un índice no agrupado

Crear un índice contra un subconjunto de filas

Agregue una cláusula WHERE para un índice no agrupado

Reservar espacio en un índice, para valores futuros

Especifique un factor de relleno (FILL FACTOR) menor de 100% durante la creación del índice

Desfragmentar un índice

Ejecute ALTER INDEX. . .REBUILD ó ALTER INDEX. . .REORGANIZE

Deshabilitar un índice

Ejecute ALTER INDEX. . . DISABLE

Crear un índice XML

CREATE PRIMARY XML INDEX. . . for a primary XML index CREATE XML INDEX for a secondary XML index

Crear un índice espacial

Ejecute CREATE SPATIAL INDEX

Capítulo 7

Particionamiento Después de completar este capítulo, usted será capaz de Crear funciones de partición Crear esquemas de partición Particionar Tablas e índices Mantener particiones Mover datos dentro y fuera de las tablas usando particiones La partición de tablas se introdujo por primera vez en SQL Server 2005 para permitirle a los usuarios, dividir grandes tablas a través de estructuras de almacenamiento múltiples. Anteriormente, los objetos se limitaban a un solo grupo de archivos que podía contener varios archivos. Sin embargo, la colocación de los datos dentro de un grupo de archivos era determinada por SQL Server.

La partición de tablas permite que las tablas, índices y vistas indizadas sean creadas en múltiples grupos de archivos, mientras que también le permite al DBA especificar que porción del objeto va a ser almacenados en un grupo de archivos específico. El proceso para la partición de una tabla, una vista indexada, o un índice es el siguiente: 1. Crear una función de partición 2. Crear un esquema de partición asignada a una función de partición 3. Crear la tabla, índice o vista indexada en el esquema de partición En este capítulo usted aprenderá cómo crear funciones de partición y esquemas de partición para aplicarlas a las tablas e índices. Usted también aprenderá cómo utilizar los comandos de mantenimiento de partición, para mover datos dentro y fuera de las tablas.

Funciones de partición La función de partición define los límites que va a utilizar para dividir los datos a través un esquema de partición. Un ejemplo de una función de partición es: CREATE PARTITION FUNCTION mypartfunction (int) AS RANGE LEFT FOR VALUES (10,20,30,40,50,60)

103

104

Parte II Diseñar bases de datos

Cada función de partición requiere un nombre y tipo de datos. El tipo de datos define los límites de los puntos limítrofes que se pueden aplicar y debe abarcar el mismo rango de datos o menor, que los datos de una columna de una tabla, índice o vista indexada, a la que la función de partición es aplicada. El tipo de datos para una función de partición puede ser cualquier tipo de datos nativo de SQL Server, excepto text, ntext, image, varbinary (max), timestamp, xml, y varchar (max). Tampoco se pueden utilizar tipos de datos Transact-SQL definidos por el usuario y tipos de datos CLR. Los tipos de datos “imprecisos”, tales como real, así como columnas calculadas, deben conservarse como tales. Las columnas que se utilizan para la partición deben ser deterministas. La cláusula AS permite especificar si la función de partición que está creando es RANGE LEFT o RANGE RIGHT. Los parámetros LETFT y RIGHT definen la partición que incluirá un punto límite.

Utilice la cláusula FOR VALUES para especificar los puntos límite para la función de partición. Si la función de partición se crea como RANGE LEFT, entonces el punto límite se incluirá en la partición izquierda. Si la función de partición se crea como RANGE RIGHT, entonces el punto límite se incluirá en la partición derecha.

Una función de partición mapea siempre el rango entero de datos, por lo tanto, no quedan espacios presentes. Usted no puede especificar puntos de contorno duplicados. Esto asegura que cualquier valor almacenado en una columna siempre se evalúa con una sola partición. Los valores nulos se almacenan siempre en la partición de más a la izquierda hasta que usted explícitamente especifique null como un punto límite y use la sintaxis RANGE RIGHT, en cuyo caso, los valores nulos se almacenan en la partición más a la derecha.

Puesto que el rango completo de valores está siempre mapeada por una función de partición, el resultado es la creación de una partición “de más” de los puntos límites que usted ha definido. La Tabla 7-1 muestra cómo se define en SQL Server la siguiente función de partición.

CREATE PARTITION FUNCTION mypartfunction (int) AS RANGE LEFT FOR VALUES (10,20,30,40,50,60)

TABLA 7-1

Rango función de partición izquierdo

Número de partición

Valor Min

Valor Max

1

-

10

2

11

20

3

21

30

4

31

40

5

41

50

6

51

60

7

61

+∞

Capítulo 7 Particionamiento

105

Nota Usted puede tener un máximo de 1000 particiones de un objeto. Por lo tanto, se le permite especificar un máximo de 999 puntos de frontera.

Esquemas de partición Los esquemas de partición proporcionan una definición alternativa para el almacenamiento. Un esquema de partición abarca uno o más grupos de archivos. La sintaxis genérica para la creación de un esquema de partición es: CREATE PARTITION SCHEME partition_scheme_name AS PARTITION partition_function_name [ ALL ] TO ( { file_group_name | [ PRIMARY ] } [ ,...n ] )

Tres ejemplos de esquemas de partición son como sigue: CREATE PARTITION SCHEME mypartscheme AS PARTITION mypartfunction TO (Filegroup1, Filegroup2, Filegroup3, Filegroup4, Filegroup5, Filegroup6, Filegroup7) CREATE PARTITION SCHEME mypartscheme AS PARTITION mypartfunction TO (Filegroup1, Filegroup1, Filegroup2, Filegroup2, Filegroup3) CREATE PARTITION SCHEME mypartscheme AS PARTITION mypartfunction ALL TO (Filegroup1)

Cada esquema de partición debe tener un nombre que se ajusta a las reglas de los identificadores. La cláusula AS PARTITION especifica el nombre de la función de partición que se asignará al esquema de partición. La cláusula TO especifica la lista de grupos de archivos que se incluyen en el esquema de partición.

Grupos de archivos Cualquier grupo de archivos especificado en la declaración CREATE PARTITION SCHEME debe existir en la base de datos. Un esquema de partición debe ser definido de tal manera que contenga un grupo de archivos para cada partición que es creada por la función de partición mapeada al esquema de partición. SQL Server 2008 permite el uso de palabra clave ALL, como se indica anteriormente, que permite que todas las particiones definidas por la función de partición, se creen dentro de un solo grupo de archivos. Si no utiliza la palabra clave ALL, entonces el esquema de partición debe contener al menos un grupo de archivos para cada partición definida dentro de la función de partición. Por ejemplo, una función de partición con 6 puntos límite (7 particiones) debe ser asignada a un esquema de partición con al menos 7 grupos de archivos definidos. Si más grupos de archivos son incluidos en el esquema de partición donde hay particiones, cualquier exceso de grupos de archivos no será usado para almacenar datos a menos que explícitamente se especifique mediante el uso del comando ALTER PARTITION SCHEME.

La Tabla 7-2 muestra como son mapeados una función de partición y un esquema de partición. CREATE PARTITION FUNCTION mypartfunction (int) AS RANGE LEFT

106

Parte II Diseñar bases de datos FOR VALUES (10,20,30,40,50,60); GO CREATE PARTITION SCHEME mypartscheme AS PARTITION mypartfunction TO (Filegroup1, Filegroup2, Filegroup2, Filegroup4, Filegroup5, Filegroup6, Filegroup7); GO TABLA 7-2

Función de partición mapeada a un esquema de partición

Grupo de archivos

Número de partición

Valor Min

Valor Max

FileGroup1

1

-

10

Filegroup2

2

11

20

Filegroup2

3

21

30

Filegroup4

4

31

40

Filegroup5

5

41

50

Filegroup6

6

51

60

Filegroup7

7

61

+

Particionando tablas e índices Crear una tabla, índice o vista indexada con particiones es muy similar a la creación de una tabla, índice o vista indexada sin particiones. Cada objeto que se crea tiene una cláusula ON que especifica dónde está almacenado el objeto. Sin embargo, la cláusula ON se omite sistemáticamente, causando que los objetos sean creados en el grupo de archivos predeterminado. Dado que un esquema de partición es simplemente una definición para el almacenamiento, particionar una tabla, índice o vista indexada, es un proceso muy sencillo.

Un ejemplo de una tabla con particiones es como sigue: CREATE TABLE Employee (EmployeeID int NOT NULL, FirstName varchar(50) NOT NULL, LastName varchar(50) NOT NULL) ON mypartscheme(EmployeeID); GO

La clave es la cláusula ON. En lugar de especificar un grupo de archivos, debe especificar un esquema de partición. El esquema de partición ya está definido con un mapeo a una función de partición. Por lo tanto, usted necesita especificar la columna en la tabla, la clave de partición, a la que se aplicará la función de partición. En el ejemplo anterior, hemos creado una tabla llamada Employee y se utilizó el Columna EmployeeID para dividir la tabla basada en la definición de la función de partición que fue mapeada al esquema de partición donde de la tabla está almacenada. La Tabla 7-3 muestra cómo se dividen los datos en la tabla Employee. CREATE PARTITION FUNCTION mypartfunction (int) AS RANGE LEFT FOR VALUES (10,20,30,40,50,60); GO CREATE PARTITION SCHEME mypartscheme AS PARTITION mypartfunction TO (Filegroup1, Filegroup2, Filegroup3, Filegroup4, Filegroup5, Filegroup6, Filegroup7); GO

Capítulo 7 Particionamiento

107

CREATE TABLE Employee (EmployeeID int NOT NULL, FirstName varchar(50) NOT NULL, LastName varchar(50) NOT NULL) ON mypartscheme(EmployeeID); GO TABLA 7-3

Función de partición mapeada a un esquema de partición

Grupo de archivos

Nro. de partición

EmployeeID Min

EmployeeID Max

FileGroup1

1

-∞

10

Filegroup2

2

11

20

Filegroup3

3

21

30

Filegroup4

4

31

40

Filegroup5

5

41

50

Filegroup6

6

51

60

Filegroup7

7

61

+∞

Es necesario especificar que la clave de particionamiento es del mismo tipo de datos, longitud y precisión. Si la clave de particionamiento es una columna calculada, la columna calculada debe ser PERSISTED.

Copia de seguridad y restauración parcial El particionamiento tiene un efecto de gestión interesante sobre sus tablas e índices. Basado en la definición de la función de partición y esquema de partición, es posible determinar el conjunto de filas que se encuentran en un grupo de archivos determinado. Mediante el uso de esta información, es posible hacer copia de seguridad y restauración de una parte de una tabla, así como manipular los datos en una parte de una tabla sin afectar a ninguna otra parte de la misma.

Creación de un índice con particiones Al igual que en la creación de una tabla con particiones, usted particiona un índice mediante la especificación de un esquema de partición en la cláusula ON, como en el ejemplo de código siguiente: CREATE NONCLUSTERED INDEX idx_employeefirstname ON dbo.Employee(FirstName) ON mypartscheme(EmployeeID); GO

Cuando se especifica la clave de partición para un índice, no está limitado a las columnas sobre las que está definido el índice. Como se vio en el capítulo 6, "Indices", un índice puede tener una cláusula opcional INCLUDE. Cuando se crea un índice en una tabla con particiones, SQL Server incluye automáticamente la clave de partición en la definición de cada índice, lo que le permite particiónar un índice de la misma manera que la tabla.

Nota Cuando inicialmente realiza la partición de una tabla, debe partir la tabla en una columna que forma parte del índice agrupado de la tabla.

108

Parte II Diseñar bases de datos

Las tablas Orders.OrderHeader y Orders.OrderDetail sólo deben contener los doce meses más recientes de las órdenes según lo determinado por la fecha de envío del artículo. Todos los datos mayores de doce meses deben ser trasladados a un conjunto de tablas históricas. Las tablas históricas mantendrán un máximo de tres años de datos antes de que se retiren de la base de datos transaccional. En este ejercicio, creará las nuevas tablas históricas como tablas con particiones. También añadirá grupos de archivos adicionales a la base de datos SQL2008SBS que serán usados para el particionado.

Partición de una tabla nueva 1. Ejecute el siguiente código en la base de datos SQL2008SBS (el código está en el archivo Capítulo7\code1.sql que está en los ejemplos que acompañan el presente libro). Las particiones para las tablas OrderHeader y OrderDetail se muestran en la Tabla 7-4. CREATE SCHEMA Archive AUTHORIZATION dbo GO

ALTER DATABASE SQL2008SBS ADD FILEGROUP FG2 ALTER DATABASE SQL2008SBS ADD FILEGROUP FG3 GO

ALTER DATABASE SQL2008SBS ADD FILE (NAME = FG2_dat, FILENAME = 'C:\Program Files\ Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\SQL2008SBS_4.ndf', SIZE = 2MB) TO FILEGROUP FG2 ALTER DATABASE SQL2008SBS ADD FILE (NAME = FG3_dat, FILENAME = 'C:\Program Files\ Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\SQL2008SBS_5.ndf', SIZE = 2MB) TO FILEGROUP FG3 GO

CREATE PARTITION FUNCTION shipdatepartfunc (date) AS RANGE RIGHT FOR VALUES ('1/1/2007','1/1/2008') GO

CREATE PARTITION SCHEME shipdatepartscheme AS PARTITION shipdatepartfunc TO (FG1, FG2, FG3) GO -- We want the primary key to be nonclustered so that -- we can create a clustered index to partition the table CREATE TABLE Archive.OrderDetail( OrderDetailID INT NOT NULL, OrderID INT NOT NULL, SKU CHAR(10) NOT NULL, Quantity INT NOT NULL, UnitPrice MONEY NOT NULL, ShipDate DATE NOT NULL) ON shipdatepartscheme(ShipDate) GO

Capítulo 7 Particionamiento

CREATE CLUSTERED INDEX icx_shipdate ON Archive.OrderDetail(ShipDate) ON shipdatepartscheme(ShipDate) GO

ALTER TABLE Archive.OrderDetail ADD CONSTRAINT pk_orderdetail PRIMARY KEY NONCLUSTERED (OrderDetailID, ShipDate) ON shipdatepartscheme(ShipDate) GO

CREATE TABLE Archive.OrderHeader( OrderID INT NOT NULL, CustomerID INT NOT NULL, OrderDate DATE NOT NULL, SubTotal MONEY NOT NULL, TaxAmount MONEY NOT NULL, ShippingAmount MONEY NOT NULL, GrandTotal AS ((SubTotal+TaxAmount)+ShippingAmount), FinalShipDate DATE NOT NULL) ON shipdatepartscheme(FinalShipDate) GO

ALTER TABLE Archive.OrderHeader ADD CONSTRAINT pk_orderheader PRIMARY KEY NONCLUSTERED(OrderID, FinalShipDate) ON shipdatepartscheme(FinalShipDate) GO

CREATE CLUSTERED INDEX icx_finalshipdate ON Archive.OrderHeader(FinalShipDate) ON shipdatepartscheme(FinalShipDate) GO

TABLA 7-4

Partición para la asignación de grupo de archivos Partición Número

Min

Max

FileGroup1

1

+∞

12/31/2006

Filegroup2

2

01/01/2007

12/31/2007

Filegroup3

3

01/01/2008

+∞

FileGroup1

1

+∞

12/31/2006

Filegroup2

2

01/01/2007

12/31/2007

Filegroup3

3

01/01/2008

+∞

Grupo de archivos OrderHeader

OrderDetail

109

110

Parte II Diseñar bases de datos

Gestión de particiones Una vez que una tabla o índice son particionados, SQL Server automáticamente almacenará los datos de acuerdo a la definición de la función de partición y del esquema de partición. Con el tiempo, las necesidades de partición de los datos va a cambiar..

Operadores SPLIT y MERGE Con los datos en constante cambio, las particiones raramente son estáticas. Dos operadores están disponibles para gestionar las definiciones de punto límite, estos son: SPLIT y MERGE. El operador SPLIT introduce un nuevo punto límite en una función de partición. MERGE elimina un punto límite de una función de partición. La sintaxis general es la siguiente: ALTER PARTITION FUNCTION partition_function_name() {SPLIT RANGE ( boundary_value ) | MERGE RANGE ( boundary_value ) } [ ; ]

Usted debe tener mucho cuidado al utilizar los operadores SPLIT y MERGE. Con ellos usted añadirá o eliminará una partición entera de la función de partición. Los datos no son removidos de la tabla con estos operadores, sólo la partición. Dado que, una partición sólo puede residir en un único grupo de archivos, un SPLIT o MERGE podría causar una cantidad significativa de E/S de disco ya que SQL Server reubica filas en el disco.

Modificación de un esquema de partición Grupos de archivos se pueden añadir a un esquema de partición existente con el fin de crear más espacio de almacenamiento para una tabla particionada. La sintaxis general es la siguiente: ALTER PARTITION SCHEME partition_scheme_name NEXT USED [ filegroup_name ] [ ; ]

La cláusula NEXT USED tiene dos propósitos. Agregar un nuevo grupo de archivos a la partición de esquema, si el grupo de archivos especificado no es aun parte del esquema de partición. Marcar la propiedad NEXT USED para un grupo de archivos. El grupo de archivos que está marcado con la bandera NEXT USED es el grupo de archivos que contendrá la siguiente partición que se crea cuando se ejecuta una operación SPLIT.

Alineación de Índice Una tabla y sus índices asociados se pueden particionar de manera diferente. El único requisito es que el índice agrupado y la tabla tienen que ser particionados de la misma manera ya que el índice cluster no se puede almacenar en una estructura separada de la tabla.

Capítulo 7 Particionamiento

111

Sin embargo, si una tabla y todos sus índices son particionados utilizando la misma función de partición, se dice que están alineados. Si una tabla y todos sus índices utilizan la misma función de partición y el mismo esquema de partición, el almacenamiento está alineado también. Al alinear el almacenamiento, las filas en una tabla junto con los índices que dependen de las filas, están almacenados en los mismos grupos de archivos. Esto garantiza que si a una sola partición se le hace copia de seguridad o restauración, los datos y los índices correspondientes se mantienen juntos como una sola unidad.

Operador Cambiar (Switch) En este punto, particionar es probablemente tan claro como el barro. Después de todo, el objetivo de la partición es dividir una tabla y sus índices asociados, en múltiples estructuras de almacenamiento. El propósito de cada operador es la de gestionar las múltiples estructuras de almacenamiento. Sin embargo, el particionamiento permite funciones avanzadas de gestión de datos que van mucho más allá de simplemente almacenar una parte de una tabla en un grupo de archivos. Para comprender el efecto, debemos dar un paso atrás para entender el diseño básico de datos en SQL Server.

SQL Server almacena los datos en páginas en una lista doblemente enlazada. Con el fin de localizar y acceder a los datos, SQL Server realiza el siguiente proceso básico: 1. Resolver el nombre de la tabla para un ID de objeto 2. Buscar la entrada para el ID de objeto en sys.indexes para extraer la primera página para el objeto 3. Leer la primera página de objeto 4. Usar las entradas “Página siguiente” y “Página anterior” sobre cada página de datos, caminar por la cadena de páginas para localizar los datos requeridos. La primera página de un objeto no tendrá una página anterior, por lo tanto, la entrada se establece en 0:0. La última página del objeto no tiene una entrada en la página siguiente, por lo que el valor se establece en 0:0. Cuando se encuentra un valor de 0:0 para la siguiente página, SQL Server no tiene que leer ninguna página más.

¿Qué tiene que ver la estructura de cadena de página con la partición?. Cuando una tabla es particionada, los datos se ordenan físicamente, divididos en secciones, y se almacenan en grupos de archivos. Así, a partir de la perspectiva de la cadena de páginas, SQL Server encuentra la primera página del objeto en la partición 1, camina a través del resto de la tabla por la cadena de páginas, llega a la última página en la partición 1 que apunta a la primera página de partición 2, etc. a través del resto de la tabla. Mediante la creación de un ordenamiento físico de los datos, una posibilidad muy interesante está disponible.

Si fuera a modificar el puntero de página en la última página de la partición 1 para tener un valor de 0:0 como siguiente página, SQL Server no leería más allá y tendría el efecto de provocar que los datos "desaparezcan" de la tabla. No habría ningún bloqueo o interbloqueos, ya que se habría producido únicamente una simple operación de metadatos para actualizar el puntero de página. La idea básica para una operación de metadatos se muestra en la Figura 7-1.

112

Parte II Diseñar bases de datos 0:0

0:0

1:500

1:500

1:500

1:500

1:752

1:752

1:752 1:1043

1:752 0:0

Edición de metadatos

1:1043 1:931

1:931 1:822

1:822 0:0

0:0 1:931

1:931 1:822

1:822 0:0

FIGURA 7-1 Lista doblemente enlazada

Sería bueno poder simplemente descartar una parte de una tabla. Sin embargo, SQL Server no le permite simplemente tirar datos. Aquí es donde el operador SWITCH entra en juego. La idea básica es que SWITCH le permite intercambiar particiones entre tablas, de una manera perfectamente escalable, sin locking, bloqueos o interbloqueos.

SWITCH tiene varios requisitos, a fin de garantizar que la operación sea perfectamente escalable. Los requisitos más importantes son: Los datos e índices para las tablas de origen y de destino deben tener almacenamientos alineados. Las tablas de origen y de destino deben tener la misma estructura. Los datos no pueden ser obligados a moverse desde un grupo de archivos a otro. Dos particiones con datos no pueden ser cambiadas. La partición de destino debe estar vacía. La tabla origen o destino no puede participar en una replicación. Las tablas de origen o de destino no pueden tener índices de texto completo o un tipo de datos FILESTREAM definido.

Capítulo 7 Particionamiento

113

Los requisitos para poder cambiar las particiones llevan a requisitos muy conflictivos dentro de entornos de producción. Con el fin de particionar una tabla, la clave de particionamiento debe ser agregada a la clave primaria, así como también cualquier índice único creado en una tabla. Sin embargo, la columna en la que desea crear una partición, casi nunca es un miembro de la clave principal o un índice único. Por lo tanto, con el fin de construir una tabla que tome ventaja de SWITCH, usted debe destruir el sistema de unicidad gestionado dentro de una tabla. La función SWITCH lo forzará a ejecutar código para verificar la unicidad de una columna, la cual estaba previamente forzada por una clave principal.

Un muy buen ejemplo del tema con claves de particionamiento se puede encontrar en nuestras tablas OrderHeader y OrderDetail. Usted sólo quiere mantener los últimos doce meses de las órdenes basándose en la fecha de envío. Por lo tanto, usted debe particionar la tabla en la columna de fecha de envío. Sin embargo, la tabla no tendrá almacenamiento alineado, (un requisito de Switch), a menos que agregue la columna Fecha de envío a la clave primaria. Agregar la columna fecha de envío a la clave primaria es imposible, ya que una clave primaria no permite valores NULL. Para solucionar el problema con valores NULL, tendría que hacer la columna de fecha de envío no NULL y luego llenar la columna con una fecha ficticia que es filtrada por la aplicación. Además, la adición de la columna fecha de envío a la clave principal le permitiría entonces repetir OrderIDs y OrderDetailIDs en la tabla, una violación clara de su estructura de base de datos. Su siguiente pensamiento sería tratar de solucionar este problema creando un índice único para las columnas OrderID/OrderDetailID para hacer cumplir lo que fue destruido al cambiar la clave primaria, para que la tabla tenga alineación de almacenamiento para el operador SWITCH. Sin embargo, no puede crearse un índice único que no contiene la clave de particionado. Esto lo deja de vuelta en el punto de partida, donde las necesidades de su base de datos están en completa contradicción con la posibilidad de utilizar el operador SWITCH. La única manera de evitar esta situación es mover hacia arriba el cumplimiento de valores únicos para las columnas OrderID y OrderDetailID, en la aplicación, negando el uso de la identidad, o construir un trigger detrás de la tabla que rechace cualquier fila que trate de duplicar los datos en estas columnas. Mientras que el operador SWITCH es útil para minimizar el bloqueo, muchos encontrarán que las restricciones impuestas en el diseño de base de datos, son demasiada sobrecarga para implementar esta capacidad.

Nota Uno de los retos de la enseñanza de SQL Server desde el principio, es el hecho de que muchos temas dependen del conocimiento de otros temas. Es bastante difícil para mostrar el efecto de SWITCH si aún no sabe cómo construir una declaración SELECT o insertar datos en una tabla. Por lo tanto, la práctica que sigue se hará en una tabla ficticia muy simple y se deja a usted que implemente este código en las tablas Archive.OrderHeader y Archive.OrderDetail, una vez que haya completado los capítulos 8 a 15 y se hayan poblado estas tablas con datos.

114

Parte II Diseñar bases de datos

Administrar particiones 1. Ejecute el siguiente código en la base de datos SQL2008SBS para crear una función de partición, un esquema y una tabla con particiones, para trabajar con ellos. (El código está en el archivo Capítulo7\ code2.sql en los ejemplos adjuntos al libro): CREATE PARTITION FUNCTION partfunc (datetime ) AS RANGE RIGHT FOR VALUES ('1/1/2005','1/1/2006') GO CREATE PARTITION SCHEME partscheme AS PARTITION partfunc TO (FG1, FG2, FG3) GO CREATE TABLE dbo.orders ( OrderID int identity(1,1), OrderDate datetime NOT NULL, OrderAmount money NOT NULL CONSTRAINT pk_orders PRIMARY KEY CLUSTERED (OrderDate,OrderID)) ON partscheme(OrderDate) GO

2. Ejecute el siguiente código para rellenar la tabla con datos de prueba: SET NOCOUNT ON DECLARE @month int = 1, @day int = 1, @year int = 2005 WHILE @year < 2007 BEGIN WHILE @month ' [ , LANGUAGE language_term ] )

< contains_search_condition > ::= { < simple_term > | < prefix_term > | < generation_term > | < proximity_term > | < weighted_term > } | { ( < contains_search_condition > ) [ { < AND > | < AND NOT > | < OR > } ] < contains_search_condition > [ ...n ] }

< simple_term > ::= word | " phrase " < prefix term > ::= { "word * " | "phrase *" } < generation_term > ::= FORMSOF ( { INFLECTIONAL | THESAURUS } , < simple_term > [ ,...n ] )

< proximity_term > ::= { < simple_term > | < prefix_term > } { { NEAR | ~ } { < simple_term > | < prefix_term > } } [ ...n ]

< weighted_term > ::= ISABOUT ( { { < simple_term > | < prefix_term > | < generation_term > | < proximity_term > } [ WEIGHT ( weight_value ) ] } [ ,...n ] )

Puede utilizar los términos de búsqueda, ya sea para coincidencias exactas o como prefijos. La siguiente consulta devuelve los productos con una coincidencia exacta para la palabra "bike". Aunque la consulta se ve casi exactamente igual a la versión FREETEXT, la consulta CONTAINS devolverá dos filas menos debido a la correspondencia exacta (el código puede encontrarse en el archivo Capítulo17\code4.sql):

SELECT ProductDescriptionID, Description FROM Production.ProductDescription WHERE CONTAINS(Description,N'bike') GO

Si desea realizar una búsqueda básica de comodín para palabras prefijadas por un término de búsqueda, puede ejecutar la siguiente consulta (el código puede encontrarse en el archivo Capítulo17\code4.sql):

SELECT ProductDescriptionID, Description FROM Production.ProductDescription WHERE CONTAINS(Description,N'"bike*"') GO

254

Parte IV Diseño avanzado de objetos de bases de datos

Si se comparan los resultados de la consulta FREETEXT, verá que cada una devuelve el mismo conjunto de filas. Con CONTAINS, usted tiene que especificar explícitamente que quiere realizar una búsqueda difusa (fuzzy), la que incluiría los prefijos de palabras, en cambio FREETEXT haría por default una búsqueda difusa. En aquellos casos en los que desee realizar la búsqueda por variantes de palabra, puede utilizar las opciones FORMSOF, INFLECTIONAL y THESAURUS. INFLECTIONAL hace que el motor de texto completo considere palabras que se derivan de la buscada. Por ejemplo, buscar "Driven" también producirá “drive,” “ driving,” “drove,” etc. THESAURUS produce sinónimos para el término de búsqueda. Un ejemplo de búsqueda de “variantes de palabra” es como sigue (el código puede encontrarse en el archivo Capítulo17\code4.sql):

SELECT ProductDescriptionID, Description FROM Production.ProductDescription WHERE CONTAINS(Description,N' FORMSOF (INFLECTIONAL,ride) ') GO

SELECT ProductDescriptionID, Description FROM Production.ProductDescription WHERE CONTAINS(Description,N' FORMSOF (THESAURUS,metal) ') GO

Nota Un archivo de tesauro existe para cada idioma soportado. Todos los archivos de tesauro son archivos XML almacenados en el directorio FTDATA dentro de la ruta predeterminada en la instalación de SQL Server. Los archivos de tesauro no están “llenos”, por lo que para realizar búsquedas de sinónimos, usted tendrá que llenar previamente dichos archivos.

Uno de los requisitos más comunes para búsquedas de texto completo es encontrar filas en las que dos o más palabras están cerca unas de otras. La búsqueda de proximidad se lleva a cabo mediante el uso de la palabra clave NEAR. Aunque las búsquedas de proximidad y ponderado de proximidad se pueden realizar utilizando CONTAINS, este tipo de búsquedas se realizan generalmente utilizando CONTAINSTABLE para aprovechar el valor RANK que es calculado.

La siguiente consulta devuelve todas las filas donde "bike" está cerca "de performance." El valor de rango es afectado por la distancia entre las dos palabras (el código puede encontrarse en el archivo Capítulo17\code4. sql):

SELECT a.ProductDescriptionID, a.Description, b.* FROM Production.ProductDescription a INNER JOIN CONTAINSTABLE(Production.ProductDescription, Description, N'bike NEAR performance') b ON a.ProductDescriptionID = b.[Key] ORDER BY b.[Rank] GO

La siguiente consulta devuelve las primeras 10 filas por rango de acuerdo a los promedios ponderados de las palabras "performance", "comfortable", "smooth", "safe" y "competition" (el código se encuentra en el archivo Capítulo17\code4.sql):

Capítulo 17 indización de texto completo

255

SELECT a.ProductDescriptionID, a.Description, b.* FROM Production.ProductDescription a INNER JOIN CONTAINSTABLE(Production.ProductDescription, Description, N'ISABOUT (performance WEIGHT (.8), comfortable WEIGHT (.6), smooth WEIGHT (.2) , safe WEIGHT (.5), competition WEIGHT (.5))', 10) b ON a.ProductDescriptionID = b.[Key] ORDER BY b.[Rank] DESC GO

Los ejemplos de código en el CD contienen un script adicional “Capítulo17 \ codeX.sql”, para rellenar un índice de texto completo que ha sido creado para llenado manual.

Capítulo 17 Referencia Rápida Para

Haga lo siguiente

Configurar búsqueda de texto completo

1. CREATE FULLTEXT CATALOG 2. CREATE FULLTEXT INDEX

Mantener automáticamente los contenidos del índice de texto completo

Especifique CHANGE_TRACKING = AUTO para el índice de texto completo

Realizar búsquedas de términos difusos

Utilice FREETEXT o FREETEXTTABLE

Realizar coincidencias exactas; coincidencias difusas o emplear sinónimos, ponderación de término, y palabra proximidad

Utilice CONTAINS o CONTAINSTABLE

Parte V

Gestión de Base de Datos En esta parte: Capítulo 18: Seguridad. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 Capítulo 19: Administración basada en directiva. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289 Capítulo 20: Recuperación de Datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . 301 Capítulo 21: El Agente SQL Server. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . 319 Capítulo 22: Vistas de administración dinámica. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333

257

Capítulo 18

Seguridad Después de completar este capítulo, usted será capaz de Configurar una superficie segura Trabajar con criterios de valoración (endpoints) Administrar directores, elementos que pueden protegerse y permisos Cifrar y descifrar datos El trabajo principal de un administrador de base de datos (DBA) es proteger los datos en las bases de datos que gestiona. La protección de los datos se realiza a través de dos tareas principales: realizar copias de seguridad de bases de datos y asegurar las bases de datos. En este capítulo, usted aprenderá acerca de una de las dos tareas más importantes que un DBA puede realizar. Usted aprenderá cómo limitar el conjunto de características para reducir la exposición de seguridad. Usted también aprenderá cómo controlar el acceso a una instancia y a un objeto de la base de datos, así como cifrar datos y bases de datos.

Configuración de la superficie de ataque La seguridad es un ejercicio de creación de barreras suficientes para el sistema de tal manera que el esfuerzo involucrado para atacar un sistema excede el beneficio derivado de los datos. Con el fin de derrotar a una gran variedad de sistemas de ataque, se cuenta con un enfoque de "defensa en profundidad" que coloca varios obstáculos en el camino de un atacante.

Durante la instalación de la instancia, usted tiene la opción de especificar el modo de autenticación que se permite. Si se limita el acceso a una instancia con inicios de sesión de Windows solamente, puede prevenir una amplia variedad de métodos de ataque garantizando que cualquier usuario que se conecta a la instancia debe primero autenticarse en un dominio de Windows.

Una vez que la instancia se ha instalado, puede configurar los protocolos de red para permitir conexiones remotas. Si las conexiones remotas no se han habilitado, un atacante primero debería tener acceso a la máquina en la que se está ejecutando la instancia. La configuración para las conexiones remotas y el modo de autenticación representan las primeras capas de seguridad para sus instancias. Cada característica dentro de SQL Server permite el acceso a la funcionalidad, pero ofrece al mismo tiempo un método para que un atacante encuentre un camino en el sistema. El potencial más significativo para los ataques a una instancia es mediante el uso de características que exponen a una interfaz externa o la capacidad de ejecuciones ad hoc. Cuando se instala una instancia de SQL Server, cualquier característica que no es necesaria para que el núcleo del motor funcione, ha sido desactivada por defecto.

259

260

Parte V Gestión de Base de Datos

Puede activar o desactivar funciones dentro de la instancia ejecutando el procedimiento almacenado del Sistema sp_configure. Aunque sp_configure se utiliza para varias funciones internas, la Tabla 18-1 describe cómo se aplican las opciones a la superficie de ataque de la instancia. A menos que esté específicamente utilizando alguna de las características que se enumeran en la Tabla 18-1, estas deben ser desactivadas.

TABLA 18-1

Opción de configuración de superficie de ataque

Opción

Propósito

Consultas distribuidas Permite que un usuario ejecute OPENROWSET y OPENDATASOURCE. Las contraseñas están Ad Hoc embebidas en el texto de la consulta, dejando al descubierto un nombre de usuario y una contraseña para un atacante. Si necesita acceder con frecuencia a fuentes de datos remotas, debe utilizar un servidor vinculado (linked server). CLR habilitado

El Common Language Runtime (CLR) le permite a los triggers, funciones, y procedimientos almacenados que se han escrito en. NET (como C #. NET) ejecutarse dentro de su motor SQL Server. Si el CLR está desactivado, no se permiten ejecutar las rutinas CLR.

Encadenamiento cruzado de propiedad de base de datos

Le permite a los usuarios cruzar bases de datos sin tener que volver a revisar los permisos de nuevo, siempre que no haya sido rota una cadena de propiedad. (Cross Database Ownership Chaining - CDOC)

Correo electrónico base de datos

de Permite el uso de las funciones de correo de base de datos.

Manejo de clave externa

Permite aprobar el software de gestión de clave externa (EKM) para gestionar claves de cifrado utilizadas dentro de la instancia.

Nivel de Acceso Filestream

Permite las capacidades de FILESTREAM en la instancia. Cuando se establece en 1, puede utilizar T-SQL para manipular los datos FILESTREAM. Cuando se establece en 2, se puede utilizar una API de Windows para interactuar directamente con los datos FILESTREAM desde su aplicación. Le permite a los procedimientos de automatización OLE ser ejecutados. Puede sustituir cualquier procedimiento de automatización OLE con un procedimiento de CLR que es más flexible, así como más estable.

Procedimientos de Automatización OLE

Conexiones Admin Remotas

Permite la posibilidad de conectarse de forma remota a la “conexión de administrador dedicada” (DAC). Si las conexiones remotas de administración no están habilitadas, primero debe conectarse en el escritorio de la máquina donde la instancia se está ejecutando, antes de crear una conexión con el DAC.

SQL Mail XPs

Permite que la capacidad de SQL Mail tenga compatibilidad con versiones anteriores. Todas las funcionalidades de SQL Mail deberían ser reemplazadas con “Database mail”.

Xp_cmdshell

Permite el uso de xp_cmdshell para que pueda ejecutar comandos del sistema operativo.

Los puntos finales Los puntos finales controlan la capacidad de conectarse a una instancia de SQL Server así como dictar los métodos de comunicación que son aceptables. Actuando muy similar a un servidor de seguridad (firewall) en la red, los “endpoints” son una capa de seguridad en la frontera entre las aplicaciones y su instancia de SQL.. La sintaxis genérica para la creación de un punto final es: CREATE ENDPOINT endPointName [ AUTHORIZATION login ] [ STATE = { STARTED | STOPPED | DISABLED } ] AS { HTTP | TCP } () FOR { SOAP | TSQL | SERVICE_BROKER | DATABASE_MIRRORING } ()

Capítulo 18 Seguridad

261

Tipos de endpoints y cargas Un punto final tiene dos partes básicas: un transporte y una carga útil. Los extremos que se pueden crear son de dos medios de transporte diferentes: TCP y HTTP. Los puntos finales también tienen una carga útil que define la categoría básica de tráfico que se permite y tiene los valores de SOAP, T-SQL, SERVICE_BROKER, y DATABASE_MIRRORING. La Tabla 18-2 enumera las combinaciones válidas de punto final de transporte y punto final de carga útil.

TABLA 18-2

Punto final Transporte y Carga

Transporte

Carga útil

TCP

T-SQL

TCP

SERVICE_BROKER

TCP

DATABASE_MIRRORING

HTTP

SOAP obsoletos en SQL Server 2008

Mediante la combinación de un punto final de transporte de y carga útil, SQL Server puede filtrar el tráfico aceptable antes de que un comando incluso llegue a la instancia de SQL Server. Por ejemplo, si usted tenía un punto final definido como TCP con una carga útil de T-SQL, si cualquier aplicación fuera a intentar enviar tráfico HTTP, Service Broker o database mirroring a través del endpoint, la conexión sería denegada, sin necesidad de autenticar la solicitud.

Esto es muy similar a la forma que un cortafuegos trabaja en una red. Los administradores de red configuran el cortafuegos para permitir sólo el tráfico en un conjunto específico de puertos TCP y UDP. Cualquier solicitud que intente utilizar un puerto que está bloqueado, se rechaza en el servidor de seguridad. Los puntos finales actúan de la misma manera al rechazar las solicitudes que no estén debidamente formateadas, basadas en la definición de extremo.

Acceso a ”Endpoint “ Incluso si el tráfico que va al punto final coincide con el correcto transporte y la carga útil, aún no se permite una conexión a menos que el acceso haya sido concedido bajo un punto final (endpoint). El acceso a extremo tiene dos capas. La primera capa de seguridad de acceso está determinada por el estado del punto final. Un punto final puede tener uno de tres estados: INICIADO (STARTED), DETENIDO (STOPPED) y DESHABILITADO (DISABLED). Los tres estados de un extremo reaccionan de la siguiente manera: STARTED El punto final está activo a la escucha de conexiones y responderá a una solicitud. STOPPED El endpoint está activo escuchando, pero devuelve un error de conexión a una aplicación. DISABLED El endpoint no escucha y no responde a ningún intento de conexión.

La segunda capa de seguridad es permiso para conectarse al extremo. La solicitud debe tener un nombre de usuario creado en SQL Server que tenga permiso CONNECT concedido en el punto final, antes que la conexión sea permitida a través del punto final.

262

Parte V Gestión de Base de Datos

Usted podría cuestionar todo este esfuerzo con el único fin de crear sólo una conexión a una instancia de SQL Server antes de que el usuario esté aún autenticado. Antes de SQL Server 2005, todas las solicitudes podían conectarse a un servidor SQL y transmitir cualquier tipo de solicitud. No se hacía ningún intentó de garantizar que las aplicaciones debían transmitir solicitudes válidamente formadas. Por lo tanto, la piratería en un servidor SQL era mucho más fácil de lograr. SQL Server 2008 garantiza que sólo las solicitudes válidas puedan ser enviadas por un usuario válido antes de que la solicitud sea ejecutada dentro del motor. Los administradores también tienen un “interruptor maestro” para apagar de inmediato el acceso, si sospechan que alguien está tratando de comprometer su servidor SQL, esto se hace mediante el establecimiento del estado del extremo que se está usando a DISABLED.

Los extremos TCP Los puntos finales TCP ofrecen acceso para T-SQL, Service Broker, y database mirroring. Dependiendo de la carga útil del punto final, están disponibles diferentes argumentos para el comando CREATE ENDPOINT. La sintaxis genérica para los argumentos de TCP es la siguiente: ::= AS TCP (LISTENER_PORT = listenerPort [ [ , ] LISTENER_IP = ALL | ( 4-part-ip ) | ( "ip_address_v6" ) ])

::= FOR SERVICE_BROKER ([ AUTHENTICATION = { WINDOWS [ { NTLM | KERBEROS | NEGOTIATE } ] | CERTIFICATE certificate_name | WINDOWS [ { NTLM | KERBEROS | NEGOTIATE } ] CERTIFICATE certificate_name | CERTIFICATE certificate_name WINDOWS [ { NTLM | KERBEROS | NEGOTIATE } ] } ] [ [ , ] ENCRYPTION = { DISABLED | { { SUPPORTED | REQUIRED } [ ALGORITHM { RC4 | AES | AES RC4 | RC4 AES } ] } ] [ [ , ] MESSAGE_FORWARDING = { ENABLED | DISABLED } ] [ [ , ] MESSAGE_FORWARD_SIZE = forward_size ])

::= FOR DATABASE_MIRRORING ([ AUTHENTICATION = { WINDOWS [ { NTLM | KERBEROS | NEGOTIATE } ] | CERTIFICATE certificate_name | WINDOWS [ { NTLM | KERBEROS | NEGOTIATE } ] CERTIFICATE certificate_name | CERTIFICATE certificate_name WINDOWS [ { NTLM | KERBEROS | NEGOTIATE } ] [ [ [ , ] ] ENCRYPTION = { DISABLED | { { SUPPORTED | REQUIRED } [ ALGORITHM { RC4 | AES | AES RC4 | RC4 AES } ] } ] [ , ] ROLE = { WITNESS | PARTNER | ALL })

Argumentos del Protocolo TCP Los puntos finales TCP se configuran para escuchar en determinadas direcciones IP y números de puerto. Los dos argumentos que se pueden especificar y que son universales para todos los puntos finales TCP son: LISTENER_PORT LISTENER_IP

Capítulo 18 Seguridad

263

El LISTENER_PORT se obligatorio. El TCP para un extremo de T-SQL que se crea para cada instancia durante la instalación, ya estará configurado para el puerto 1433 o el número de puerto alternativo para la instancia. El LISTENER_IP es un argumento opcional que puede proporcionar una capa de seguridad muy potente para algunos tipos de aplicaciones. Se puede especificar una dirección IP específica para el punto final donde escuchar. El valor por defecto es ALL, lo que significa que el punto final escuchará la conexión en cualquier interfaz de red válida configurada en el equipo. Sin embargo, puede especificar el LISTENER_IP para restringir el punto final para responder a intentos de conexión enviados a través de una interfaz de red específica de la máquina.

Argumentos Database Mirroring Los extremos “database mirroring” incluyen un tercer argumento relacionado con el rol dentro de la sesión de “database mirroring”. Puede especificar que un punto final sea un PARTNER, WITNESS, u ALL. Un punto final especificado como PARTNER puede participar solamente como el principal o el espejo. Un punto final especificado como WITNESS sólo puede participar como testigo. Un punto final especificado como ALL puede funcionar en cualquier papel. La siguiente instrucción T-SQL de ejemplo muestra cómo crear un extremo de reflejo de base de datos: CREATE ENDPOINT [Mirroring] AS TCP (LISTENER_PORT = 5022) FOR DATA_MIRRORING (ROLE = PARTNER, ENCRYPTION = REQUIRED); ALTER ENDPOINT [Mirroring] STATE = STARTED;

Argumentos de Service Broker Además de los modos de autenticación y cifrado, los extremos de Service Broker implementan argumentos relacionados con el reenvío de mensajes. La opción MESSAGE_FORWARDING permite que los mensajes destinados a una instancia de agente diferente se remitan a la nueva dirección especificada. Las opciones son ENABLED y DISABLED. Si la opción MESSAGE_FORWARDING se establece en ENABLED, también puede especificar el MESSAGE_FORWARDING_SIZE, que especifica la cantidad máxima de almacenamiento a asignar para los mensajes reenviados.

Cifrado El cifrado de la comunicación para los puntos finales se codifica para entender la fuente y el destino del tráfico. Si la comunicación se producirá en su totalidad dentro de la instancia SQL Server, el tráfico no está cifrado ya que introduciría una sobrecarga innecesaria en las comunicaciones. Esto es especialmente importante con Service Broker donde muchos mensajes son intercambiados entre las colas en una única instancia. El tráfico es cifrado sólo cuando los datos se transmiten fuera de la instancia de SQL Server.

264

Parte V Gestión de Base de Datos

Directores, Asegurables y Permisos Una vez que haya tenido éxito a través de un punto final, la mayor parte de la seguridad con la que va a lidiar gira en torno a los directores, los elementos que pueden protegerse y los permisos. Usted concede permisos desde elementos que pueden protegerse hasta directores.

Los directores Los directores son el medio por el cual usted se autentica y se identifica dentro de una instancia o base de datos. Los directores se dividen en dos grandes categorías: logins/users y grupos que existen tanto en una instancia como a nivel de base de datos.

Los directores de nivel de instancia A nivel de instancia, los directores se implementan como logins y roles fijos de servidor. Para acceder a cualquier objeto dentro de una instancia de SQL Server, un usuario debe estar creado dentro de la instancia. Los inicios de sesión en SQL Server 2005 puede ser de cinco tipos diferentes: Sesión de SQL Server Estándar Sesión de Windows Grupo de Windows Certificado Clave asimétrica Una Sesión de SQL Server Estándar, se crea completamente en SQL Server. El DBA especifica el nombre del inicio de sesión junto con la contraseña. Este inicio de sesión se almacena en la base de datos master y asigna un local SID en SQL Server. A fin de utilizar un inicio de sesión estándar de SQL Server, un usuario o aplicación debe especificar el nombre de usuario y la contraseña para la cuenta.

La sintaxis genérica para la creación de un inicio de sesión es:

CREATE LOGIN loginName { WITH | FROM }

::= PASSWORD = { 'password' | hashed_password HASHED } [ MUST_CHANGE ] [ , [ ,... ] ]

::= SID = sid | DEFAULT_DATABASE = database | DEFAULT_LANGUAGE = language | CHECK_EXPIRATION = { ON | OFF} | CHECK_POLICY = { ON | OFF} | CREDENTIAL = credential_name

Capítulo 18 Seguridad

265

::= WINDOWS [ WITH [ ,... ] ] | CERTIFICATE certname | ASYMMETRIC KEY asym_key_name ::= DEFAULT_DATABASE = database | DEFAULT_LANGUAGE = language

Una de las opciones más importantes para un inicio de sesión estándar de SQL Server son las propiedades de una contraseña. La opción CHECK_POLICY controla cómo debe comportarse una contraseña requerida. Cuándo la instancia se ejecuta en Windows 2003 Server o Windows Server 2008, la política de contraseñas de Windows que es eficaz para la máquina se aplica dentro de la instancia. Por ejemplo, si la política de contraseñas de su empresa establece que las mismas deben tener al menos 8 caracteres, contener al menos una letra mayúscula, un número y un carácter especial, entonces usted no permitirá especificar una contraseña para el inicio de sesión que viole esta política.

CHECK_EXPIRATION se utiliza para prevenir los ataques de fuerza bruta contra un inicio de sesión. La mayoría de las políticas de contraseña especifican que tres intentos de conexión fallidos harán que la sesión (login) se bloquee. Si un inicio de sesión estándar de SQL Server cumple la propiedad de bloqueo de contraseña, es controlada por la opción CHECK_EXPIRATION. Una sesión de SQL Server se puede mapear a un inicio de sesión de Windows. El inicio de sesión de Windows puede ser una cuenta local/dominio o un grupo local/ dominio. Un inicio de sesión de SQL Server creado de esta manera almacenará el SID del inicio de sesión de Windows. Mediante el mapeo de una sesión/grupo de Windows al inicio de sesión de SQL Server, los usuarios o aplicaciones pueden acceder directamente a una instancia de SQL Server con las credenciales utilizadas en Windows para acceder a otros recursos de red.

El uso de grupos de Windows proporciona la mayor flexibilidad para administrar el acceso de seguridad, porque sólo tiene que añadir o quitar cuentas al grupo con el fin de controlar el acceso a una instancia de SQL Server. Un DBA está también aislado de los detalles de personas que entran y salen de la empresa o el traslado a diferentes grupos dentro de una organización. El DBA puede entonces centrarse en la definición de grupos basados en perfiles de permisos y dejar la mecánica de añadir/eliminar cuentas de usuario a los procesos de negocio estándar dentro de su empresa.

Cuando un usuario se conecta ya sea a través de un grupo Windows o un inicio de sesión de Windows, el SID y otros atributos del usuario son validados por SQL Server realizando una llamada a la API de seguridad de Windows. Los usuarios no necesitan tener una contraseña distinta para acceder a un servidor SQL y su información de cuenta se mantiene en una ubicación central. Un certificado o clave asimétrica se puede crear a nivel de instancia. Sin embargo, un certificado o clave asimétrica no se puede usar para conectarse a una instancia. En cambio, los certificados y las claves asimétricas se utilizan para las estructuras de seguridad internas dentro de la instancia. Las funciones fijas de servidor son internas a la instancia de SQL Server y proporcionan un medio para agrupar uno o más inicios de sesión bajo una estructura de permisos estandarizada. No se puede crear un rol dentro de una instancia. Los roles de servidor que se suministran con SQL Server se muestran en la Tabla 183.

266

Parte V Gestión de Base de Datos TABLA 18-3

Roles fijos de servidor

Rol

Propósito

bulkadmin

Administrar las operaciones de BCP y BULK INSERT

dbcreator

Crear bases de datos

diskadmin

Administrar los recursos de disco

processadmin

Administrar conexiones e iniciar/detener una instancia

securityadmin

Crear, modificar y eliminar inicios de sesión, pero no puede cambiar las contraseñas. No se puede administrar los inicios de sesión que son miembros del rol sysadmin. Realiza las mismas acciones que diskadmin y processadmin más gestionar endpoints, cambiar la configuración de instancia y cerrar la instancia

serveradmin setupadmin

Administrar servidores vinculados (linked servers)

sysadmin

Puede realizar cualquier acción dentro de la instancia

En el siguiente ejercicio, creará un inicio de sesión estándar de SQL Server y un inicio de sesión de SQL Server asignado a un usuario de Windows.

Crear una instancia Principal 1. Haga clic en Inicio, haga clic en Mi PC y seleccione Administrar. 2. Expanda el nodo “Usuarios locales y grupos”, haga clic en la carpeta Usuarios y seleccione Nuevo Usuario. 3. Especificar TestAccount para el nombre de usuario, especifique una contraseña y deseleccione la opción “El usuario debe cambiar la contraseña en el siguiente inicio de sesión”. Haga clic en Crear, haga clic en Cerrar y cierre el Administrador de PC.

4. Conéctese a la instancia en el Explorador de objetos, expanda el nodo Seguridad, haga clic derecho en Inicios de sesión, y seleccione Nuevo inicio de sesión.

Capítulo 18 Seguridad

267

5. Añada el nombre de usuario de Windows que ha creado como un inicio de sesión a SQL Server.

6. Inspeccione las opciones Roles de servidor, Mapeo de usuario y Estado, para acciones adicionales que puede realizar cuando crea un usuario de sesión, y luego haga clic en Aceptar. 7. Abra una nueva ventana de consulta y ejecute el siguiente código (el código puede encontrarse en el archivo Capítulo 18\ code1.sql): CREATE LOGIN TestLogin WITH PASSWORD = '', CHECK_POLICY = ON, CHECK_EXPIRATION = ON GO

8. Expanda el nodo “Inicios de sesión” y observe las dos cuentas que acaba de crear. Una cuenta que existe para cada instancia de SQL Server es la cuenta sa. La cuenta sa tiene autoridad sysadmin y no se puede quitar de la instancia. Adicionalmente, como una cuenta administrativa, la cuenta sa no puede ser bloqueada debido a errores repetidos de login. Por lo tanto, la cuenta sa es un blanco perfecto para los atacantes. Afortunadamente, usted puede derrotar los ataques a la cuenta “sa” cambiándole el nombre.

268

Parte V Gestión de Base de Datos

En el siguiente ejercicio, se le cambia el nombre de la cuenta sa.

Asegure la cuenta sa 1. Haga clic derecho en la cuenta sa en el Explorador de objetos y seleccione Renombrar.

2. Cambie el nombre de la cuenta sa con un nuevo nombre a su elección.

Directores a nivel de bases de datos Con el fin de acceder a los recursos dentro de una base de datos, el inicio de sesión que es usado por una aplicación o usuario, necesita tener acceso concedido a la base de datos. Para conceder acceso a la base de datos, se agrega el inicio de sesión como un usuario en la base de datos mediante la ejecución del comando CREATE USER que tiene la siguiente sintaxis general: CREATE USER user_name [ { { FOR | FROM } { LOGIN login_name | CERTIFICATE cert_name | ASYMMETRIC asym_key_name} | WITHOUT LOGIN ] [ WITH DEFAULT_SCHEMA = schema_name ]

KEY

Capítulo 18 Seguridad

269

Al agregar un usuario a una base de datos, el usuario normalmente se mapea a un inicio de sesión (login), a un certificado o a una clave asimétrica. Aunque el nombre del usuario de la base puede diferir del director al que está mapeado, esto normalmente no se hace, con el fin de evitar confusión y facilitar la autodocumentación. Cada usuario en una base de datos se puede añadir a uno o más roles de base de datos. SQL Server viene con 10 roles de base de datos, como se muestra en la Tabla 18-4. También puede crear sus propios roles dentro de una base de datos. TABLA 18-4

Roles fijos de base de datos

Rol

Propósito

db_accessadmin

Agregar o eliminar usuarios en la base de datos

db_backupoperator

Hacer copia de seguridad de la base de datos. No puede restaurar una base de datos o ver cualquier información en la base de datos.

db_datareader

Emitir SELECT contra todas las tablas, vistas y funciones dentro de la base de datos

db_datawriter

Emitir INSERT, UPDATE, DELETE, y MERGE contra todas las tablas dentro de la base de datos. Los miembros de este rol también deben ser miembros del rol db_datareader.

db_ddladmin

Ejecutar sentencias DDL

db_denydatareader

Denegar el SELECT contra todas las tablas, vistas y funciones dentro de la base de datos

db_denydatawriter

Denegar INSERT, UPDATE, DELETE, y MERGE contra todas las tablas dentro de la base de datos

db_owner

Propietario de la base de datos que tiene el control total sobre la base de datos y todos los objetos contenidos dentro de ella

db_securityadmin

Administrar la membresía de roles y permisos asociados. No se puede gestionar la membresía para el rol db_owner.

public

Grupo predeterminado en cada base de datos al que pertenecen todos los usuarios

Usuarios administrativos Los usuarios administrativos mantienen un nivel especial de acceso con respecto al alcance del acceso. Los miembros del rol db_owner son los administradores de una bases de datos. Los miembros del rol sysadmin son los administradores de toda la instancia. Dado que los miembros del rol sysadmin controlan toda la instancia completa, todo sysadmin es también un miembro del rol db_owner en cada base de datos en la instancia. Si desea evitar que otros usuarios puedan realizar una acción, puede de forma explícita, remover su autoridad. No se puede eliminar una autoridad de un administrador. Cuando se hace una conexión a una instancia de SQL Server, se realiza una comprobación para determinar si el inicio de sesión pertenece a cualquiera de los roles del servidor. Si el inicio de sesión pertenece al rol sysadmin, SQL Server detiene el control de todo permiso desde ese momento en adelante. Cuando un usuario cambia de contexto a una base de datos, una vez que SQL Server determina que el inicio de sesión (login) tiene acceso a la base de datos, se realiza una comprobación para la membresía del rol. Si el usuario pertenece al rol db_owner, SQL Server deja de comprobar permisos dentro de la base de datos. No importa qué permisos se han asignado o negado a un miembro del rol de servidor sysadmin o del rol de base de datos db_owner, SQL Server ni siquiera comprueba cualquier permiso que usted pueda tener asignado o denegado.

270

Parte V Gestión de Base de Datos

En el siguiente ejercicio, agregará los dos inicios de sesión creados previamente a las bases de datos SQL2008SBS y SQL2008SBSFS.

Crear un Director de Base de Datos 1. Expanda el nodo Seguridad debajo de la base de datos SQL2008SBS, haga clic derecho en Carpeta de usuarios y seleccione Nuevo usuario. 2. Añada el login TestLogin, especifique dbo como el esquema predeterminado, y no especifique ningún esquema de propiedad o pertenencia a roles de base de datos.

3. Revise las opciones disponibles para las opciones “Asegurables” y ”Propiedades extendidas” y a continuación, haga clic en Aceptar. 4. Abra una ventana de consulta y ejecute el siguiente código (el código puede encontrarse en el Archivo Capítulo 18\ code1.sql): USE SQL2008SBSFS GO

CREATE USER TestLogin FOR LOGIN TestLogin GO

Capítulo 18 Seguridad

271

5. Haga clic derecho en el login de SQL Server mapeado al usuario de Windows TestAccount que agregó debajo de la carpeta Logins del nodo Seguridad y seleccione Propiedades.

6. Seleccione la opción “Mapeo de usuarios”, agregue el usuario a las bases de datos SQL2008SBS y SQL2008SBSFS , como se muestra a continuación y haga clic en Aceptar. 7. Examine la carpeta Users bajo las bases de datos SQL2008SBS y SQL2008SBSFS. Aunque la mayoría de los usuarios de bases de datos están vinculados a un inicio de sesión con el fin de proporcionar acceso a una base de datos, usted no tiene que vincular un usuario de base de datos a un inicio de sesión. Un usuario sin un login, es un usuario en la base de datos que no está asociado a un inicio de sesión (login). Un requisito común dentro de una compañía es que los usuarios tengan acceso a una base de datos a través una aplicación específica, mientras que no tienen acceso sin la aplicación. El propósito de un usuario “loginless” es permitir el acceso a una base de datos para una aplicación. Los usuarios aún se autentican a la instancia utilizando sus propias credenciales. Con el fin de acceder a los recursos de base de datos, la aplicación ejecuta código para suplantar al usuario loginless.

272

Parte V Gestión de Base de Datos

Crear un usuario Loginless (sin login) 1. Ejecutar el código siguiente en la base de datos SQL2008SBS (el código puede encontrarse en el Archivo Capítulo 18\ code1.sql): CREATE USER TestUser WITHOUT LOGIN GO

La infraestructura de seguridad en los sistemas operativos ha evolucionado en los últimos años en términos de estructuras de seguridad basadas en los comentarios de los usuarios para la usabilidad y facilidad de mantenimiento. En lugar de gestionar permisos para cada cuenta, todos los sistemas operativos modernos permiten definir grupos de usuarios que tienen todos los mismos permisos. Lo que todos los administradores de sistemas tienen que hacer es la gestión de los miembros de un grupo en lugar de los potencialmente cientos o miles de permisos individuales.

SQL Server utiliza los mismos principios de seguridad de gestión que los administradores han aplicado al dominios de Windows, proporcionando la capacidad para crear roles de base de datos. Un rol de base de datos es un “principal” o “director” dentro de la base de datos que contiene uno o más usuarios de base de datos. Se le asignan permisos a los roles de la base de datos. Aunque puede asignar permisos directamente a un usuario, se recomienda que cree roles de base de datos, agregue usuarios a un rol, y a continuación, le conceda los permisos al grupo. En el siguiente ejercicio, creará un rol de base que le permitirá a los usuarios a enviar una orden de pedido.

Capítulo 18 Seguridad

273

Creación de un rol de base de datos 1. Ejecute el siguiente código en la base de datos SQL2008SBS (el código puede encontrarse en el archivo Capítulo 18\code1.sql): CREATE ROLE SubmitOrdersRole AUTHORIZATION dbo GO

Suplantación de identidad (Impersonation) SQL Server le permite suplantar a otro director o principal para ejecutar comandos bajo un contexto de usuario específico. Para poder hacerse pasar por otra entidad, debe tener otorgado el permiso IMPERSONATE a su cuenta sobre el “principal” que desea suplantar. Si el permiso IMPERSONATE está asigna a un inicio de sesión (login), puede hacerse pasar por el usuario y ejecutar en virtud de esa autoridad en cualquier base de datos que el director tenga acceso. Si el permiso IMPERSONATE es asignado a un usuario de base de datos, puede ejecutar bajo el contexto del usuario, sólo dentro de esa base de datos.

La suplantación se realiza usando la sentencia EXECUTE AS, como sigue: { EXEC | EXECUTE ] AS

::= { LOGIN | USER } = 'name' [ WITH { NO REVERT | COOKIE INTO @varbinary_variable } ] | CALLER

Elementos que pueden protegerse (Securables) “Securables” son los objetos a los que se conceden permisos. Usted, dentro de este libro, ya ha tratado con muchos elementos diferentes que pueden protegerse. Los “securables” existen en todos los niveles dentro de SQL Server, incluyendo la propia instancia. Puede conceder permisos en la instancia y puntos finales (endpoints). Usted también puede conceder permisos en una base de datos y cualquier objeto dentro de ella.

Esquemas Todos los objetos creados dentro de una base de datos en última instancia deben ser propiedad de un usuario en la base de datos. Los esquemas proporcionan una capa de separación entre el usuario de base de datos y los objetos dentro de la misma. Los usuarios de bases de datos son dueño de un esquema y los esquemas son dueños de los objetos. Si los usuarios de bases de datos poseen directamente los objetos, no sería posible eliminar un usuario, a menos los objetos fueran reasignados a otro dueño. La reasignación de un objeto a un propietario cambiaría el nombre del objeto. Mediante la introducción de un esquema entre los usuarios y los objetos, un usuario puede ser eliminado de la base de datos sin afectar el nombre de un objeto o aplicaciones que impactan.

274

Parte V Gestión de Base de Datos

Los permisos se conceden tanto a “securables” como a “principals”. Ya hemos hablado de los principales disponibles en SQL Server 2008: inicios de sesión (logins), usuarios de bases de datos, roles, certificados y claves asimétricas. Además de tener uno o más propietarios, un esquema es un objeto que puede protegerse (securable). Esto le permite agrupar varios objetos en un esquema y después, conceder permisos a un “principal” en el esquema. Con la concesión de permisos en el esquema, el “principal” se beneficia de los permisos de todos los objetos que son propiedad del esquema.

Permisos Los permisos proporcionan la autoridad para que los directores realicen acciones dentro de una instancia o base de datos. Cada declaración que se puede ejecutar tiene un permiso correspondiente. Algunos permisos son evidentes en su relación como permisos SELECT, INSERT, UPDATE y DELETE.

Alcance del Permiso Antes de SQL Server 2005, la base de datos definía un enorme contenedor de objetos y los permisos eran concedidos entonces directamente a los objetos. SQL Server 2008 define múltiples alcances que se pueden asignar a los permisos lo que hará que los administradores de bases reevalúen cómo se construyen las bases de datos.

Los permisos se conceden a un asegurable. Un asegurable puede ser una base de datos, un esquema o un objeto. Esto crea una estructura jerárquica de permisos dentro de una base de datos. La concesión de permisos a una base de datos hace que los permisos se otorguen implícitamente a todos los esquemas. Conceder permisos en un esquema hace que los permisos sean implícitamente concedidos a todos los objetos dentro de un esquema.

El primer nivel de seguridad que usted tendrá que planificar en una base de datos es un esquema. Cada esquema debería representar una agrupación funcional dentro de una aplicación. Los objetos son entonces creados dentro de cada esquema. Una vez que los objetos se crean en los esquemas, los permisos se conceden sobre los esquemas a fin de proporcionar seguridad de acceso a una aplicación.

Por ejemplo, si desea conceder permisos SELECT, INSERT, UPDATE y DELETE en todas las tablas y vistas dentro de una base de datos, se puede realizar la asignación de tres maneras diferentes: Conceder permisos sobre cada tabla y vista de forma individual Conceder permisos sobre cada esquema dentro de la base de datos Conceder permisos sobre la base de datos

Capítulo 18 Seguridad

275

Los permisos que se pueden otorgar son los siguientes: SELECT capacidad de emitir una declaración SELECT contra un elemento que puede asegurarse INSERT

posibilidad de insertar datos en una tabla o vista

UPDATE capacidad de actualizar los datos de una tabla o vista DELETE capacidad de eliminar datos de una tabla o vista EXECUTE capacidad para ejecutar un procedimiento almacenado REFERENCES capacidad de emitir una declaración SELECT contra una tabla hija con el fin de verificar una clave externa CONTROL control total sobre el objeto ALTER capacidad de modificar o eliminar un objeto VIEW DEFINITION capacidad para ver la definición de un objeto TAKE OWNERSHIP capacidad para hacerse cargo de la propiedad de un objeto En el siguiente ejercicio, creará un procedimiento para insertar una orden, conceder la autoridad para ejecutar el procedimiento a los miembros de la SubmitOrdersRole, y luego hacerse pasar por un usuario para probar si la seguridad está funcionando correctamente.

Conceder permisos en objetos 1. Ejecute el siguiente código para crear un procedimiento almacenado para enviar órdenes (el código se puede encontrar en el archivo Capítulo 18\code1.sql):

CREATE PROCEDURE Customers.asp_submitorder @CustomerID INT, @SKU CHAR(10), @Quantity INT AS DECLARE @OrderID INT

BEGIN TRY BEGIN TRANSACTION INSERT INTO Orders.OrderHeader (CustomerID, OrderDate, SubTotal, TaxAmount, ShippingAmount) SELECT @CustomerID, GETDATE(), @Quantity * UnitPrice, 0, 5.00 FROM Products.ProductOptions WHERE SKU = @SKU SET @OrderID = SCOPE_IDENTITY() INSERT INTO Orders.OrderDetail (OrderID, SKU, Quantity, UnitPrice) SELECT @OrderID, @SKU, @Quantity, UnitPrice FROM Products.ProductOptions WHERE SKU = @SKU END TRY

276

Parte V Gestión de Base de Datos BEGIN CATCH ROLLBACK TRANSACTION END CATCH COMMIT TRANSACTION GO --Test the procedure EXEC Customers.asp_submitorder 1, '1-2RB1-4RO', 5

SELECT OrderID, CustomerID, OrderDate, SubTotal, TaxAmount, ShippingAmount, GrandTotal, FinalShipDate FROM Orders.OrderHeader SELECT OrderDetailID, OrderID, SKU, Quantity, UnitPrice, ShipDate FROM Orders.OrderDetail GO

2. Ejecute el siguiente código para conceder permisos de ejecución sobre el procedimiento de envío de órdenes (el código puede encontrarse en el archivo Capítulo 18\ code1.sql): GRANT EXECUTE ON Customers.asp_submitorder TO SubmitOrdersRole

3. Haga clic derecho en SubmitOrdersRole y seleccione Propiedades. 4. Haga clic en Agregar, haga clic en Examinar, seleccione TestUser, y a continuación, haga clic en Aceptar dos veces para cerrar la ventana de diálogo “Propiedades de rol de base de datos”.

Capítulo 18 Seguridad

277

5. Pruebe de nuevo el procedimiento almacenado bajo la cuenta TestUser y compruebe que puede ejecutar el procedimiento almacenado, pero no puede emitir una sentencia SELECT contra las tablas (el código se puede encontrar en el archivo Capítulo 18\code1.sql): --Impersonate TestUser and test the procedure again SELECT USER_NAME() GO EXECUTE AS USER = 'TestUser' GO SELECT USER_NAME() GO EXEC Customers.asp_submitorder 1, '1-2RB1-4RO', 5 GO

SELECT OrderID, CustomerID, OrderDate, SubTotal, TaxAmount, ShippingAmount, GrandTotal, FinalShipDate FROM Orders.OrderHeader SELECT OrderDetailID, OrderID, SKU, Quantity, UnitPrice, ShipDate FROM Orders.OrderDetail GO

--Revert user context back to dbo REVERT GO

Cadenas de propiedad (de objeto) Cada objeto dentro de una base de datos tiene un propietario asociado a él. Las vistas, los procedimientos almacenados, los triggers, y las funciones pueden hacer referencia a otros objetos en una base de datos. El propietario de cada objeto que se referencia dentro de un trigger, vista, función o procedimiento almacenado junto con el titular del objeto forman una cadena de propiedad. Siempre y cuando el propietario del objeto, y cualesquiera de los otros objetos que hace referencia, tienen el mismo propietario, usted tiene una “cadena de propiedad intacta”. Con una cadena de propiedad intacta, sólo tiene que tener permisos en el objeto de nivel superior dentro de la cadena para acceder a cualquiera de los objetos posteriormente accedidos. SQL Server sólo comprueba permisos en el objeto de nivel superior y renuncia a la comprobación de permisos, siempre que el objeto propietario no cambie dentro de una cadena de llamada.

La cadena de propiedad le permite ejecutar con éxito el procedimiento asp_submitorder sin tener el permiso para leer o escribir en las tablas que se hace referencia en el procedimiento. Mediante el aprovechamiento de las capacidades de los procedimientos almacenados, es posible permitir a los usuarios manipular los datos dentro de la base de datos, bajo el control de un procedimiento almacenado, mientras que no se es capaz de acceder a los datos de cualquier otra manera.

Seguridad sobre Metadatos El conocimiento de un sistema es un factor importante en el intento de obtener acceso a una base de datos. Una de las más simples barreras que se puede construir es ocultar la presencia de objetos. En SQL

278

Parte V Gestión de Base de Datos

Server 2000 y anteriores, cualquier persona que tenga acceso a una instancia podía interrogar al catalogo del sistema y recibir una lista de cada base de datos en una instancia. Una vez que se accedía a una base de datos, todos los objetos dentro de la misma se pueden recuperar. Al exponer la existencia de los objetos a todo el mundo, SQL Server hace que sea mucho más fácil para un atacante encontrar objetos para atacar.

Incluso más importante que ser capaz de recuperar una lista de todos los objetos dentro de una base de datos que puede acceder, podría recuperar la definición de cada objeto. Por ejemplo, si usted tuviera la autoridad para ejecutar un procedimiento almacenado, también tenía la autoridad para ver el código dentro de el procedimiento almacenado.

SQL Server 2008 implementa una capa de seguridad sobre todos los metadatos de una instancia. Metadata Security es muy simple: Si usted no tiene acceso a ella, no la ve. En el siguiente ejercicio, verá los permisos para la cuenta TestLogin y concederá la autoridad para emitir un SELECT en todas las tablas de la base de datos. A continuación, se eliminará la capacidad para encontrar cualquier objeto dentro de una base de datos, mientra que al mismo tiempo conservará la capacidad de recuperar los datos necesarios.

Conceder permisos en objetos 1. Ejecute el siguiente código en la base de datos SQL2008SBS para verificar que TestLogin no tiene acceso a ningún objeto y también no puede ver ningún objeto (el código puede encontrarse en el archivo Capítulo 18\code1.sql): SELECT * FROM sys.objects GO EXECUTE AS USER = 'TestLogin' GO SELECT * FROM sys.objects GO SELECT OrderID, CustomerID, OrderDate, SubTotal, TaxAmount, ShippingAmount, GrandTotal, FinalShipDate FROM Orders.OrderHeader GO REVERT GO

2. Ejecute el siguiente código para conceder permisos SELECT en la base de datos (el código se puede encontrar en el archivo Capítulo 18\code1.sql): GRANT SELECT ON DATABASE::SQL2008SBS TO TestLogin GO

3. Compruebe que TestLogin puede recuperar datos de cualquier tabla y que el login puede ver todas las tablas dentro de la base de datos (el código puede encontrarse en el archivo Capítulo 18\code1.sql):

EXECUTE AS USER = 'TestLogin' GO SELECT * FROM sys.objects GO

Capítulo 18 Seguridad

279

SELECT OrderID, CustomerID, OrderDate, SubTotal, TaxAmount, ShippingAmount, GrandTotal, FinalShipDate FROM Orders.OrderHeader GO REVERT GO

4. Retírele la capacidad a TestLogin para ver la definición de los objetos dentro de la base de datos mediante la ejecución del siguiente código (el código puede encontrarse en el archivo Capítulo 18\ code1.sql): DENY VIEW DEFINITION ON DATABASE::SQL2008SBS TO TestLogin GO

5. Compruebe que aunque TestLogin no puede ver los objetos dentro de la base de datos, todavía puede emitir un SELECT contra cualquier tabla en la base de datos (el código puede encontrarse en el archivo Capítulo 18\ code1.sql): EXECUTE AS USER = 'TestLogin' GO SELECT * FROM sys.objects GO SELECT OrderID, CustomerID, OrderDate, SubTotal, TaxAmount, ShippingAmount, GrandTotal, FinalShipDate FROM Orders.OrderHeader GO REVERT GO

Seguridad CLR La primera capa de seguridad para el subsistema Common Language Runtime (CLR) es si este está habilitado o deshabilitado. Los objetos que se pueden escribir utilizando. NET son triggers, funciones, procedimientos almacenados, agregados y tipos de datos. El código se compila en un ensamblado, . DLL, que luego es cargado en la instancia de SQL Server por un miembro del rol sysadmin. Los assemblies . NET utilizan “Seguridad de Acceso al Código” (CAS) para restringir el conjunto permitido de operaciones que se pueden realizar. SQL Server también utiliza la “Seguridad de acceso al código” para bloquear el código administrado y garantizar la integridad del servidor de base de datos y el sistema operativo. Cuando crea el assembly el sysadmin especifica el nivel de “seguridad de acceso a código” que se aplica al assembly. Los permisos de acceso disponibles para assemblies son SAFE, EXTERNAL_ACCESS y UNSAFE. SAFE es el conjunto de permisos por defecto y no permite acceso a los recursos externos a la instancia de SQL Server o a cualquier recurso de la máquina. EXTERNAL_ACCESS le permite a un assembly acceder a recursos externos a las instancias de SQL Server tales como archivos, recursos compartidos y recursos de red. El acceso UNSAFE le permite al assembly realizar cualquier operación y acceder a cualquier recurso. Ejecutar assemblies en modo no seguro está totalmente desaconsejado.

280

Parte V Gestión de Base de Datos

La ejecución de código en assemblies establecidos en los modos EXTERNAL_ACCESS o UNSAFE requiere que un DBA asegure que los assemblies cumplen varios requisitos y que se establecen varios permisos. Los assemblies deben ser “fuertemente tipados”, el código firmado con un certificado y dicho certificado tiene que haber sido mapeado a un login de SQL Server. El login creado debe tener permisos para ejecutar assemblies en cualquiera de los modos EXTERNAL_ACCESS o UNSAFE. Además, el propietario de la base también debe tener permisos para ejecutar ensamblados en cualquiera de los modos EXTERNAL_ACCESS o UNSAFE con la opción de base de datos TRUSTWORTHY (digno de confianza) activada.

SQL Server es seguro en la implementación. Con el fin de ejecutar código que podría ser potencialmente dañino o tener permisos elevados, tendrá que cumplir un número importante de requisitos. Usted no puede accidentalmente ejecutar ensamblados CLR en modo EXTERNAL_ACCESS o UNSAFE.

Cifrado de datos Los datos que necesitan mantener confidencialidad dentro de la base de datos deben ser cifrados. Ejemplos de información confidencial son los números de tarjetas de crédito y los salarios de los empleados. Los datos que estén cifrados dentro de las columnas no se puede leer sin tener las credenciales adecuadas. Una vez que los datos de una columna están cifrados, la columna ya no puede ser utilizada en los argumentos de búsqueda. Las columnas pueden ser encriptadas usando una frase de contraseña, clave simétrica, clave asimétrica, o un certificado. Las claves simétricas proporcionan un cifrado razonablemente seguro al tiempo que proporciona el mejor rendimiento posible.

Evitar el acceso a los objetos y datos Asegurar una base de datos no es un ejercicio para garantizar que no se pueden acceder a los objetos. Si un activo tiene valor suficiente y suficiente tiempo disponible, un atacante siempre podrá entrar. La seguridad es un ejercicio para hacer un sistema que sea más difícil entrar que la recompensa que se ganaría en el intento.

Además, los administradores tienen control total sobre un sistema por una razón: proporcionar la autoridad para administrar un sistema. Los permisos no se comprueban para un usuario con acceso administrativo, por lo que no puede restringir las acciones que un administrador puede tomar. Un administrador tiene acceso a las estructuras internas necesarias para recuperar también las claves de cifrado que pueden estar en uso. Por lo tanto, es imposible impedir el acceso de un administrador. SQL Server tiene una gran infraestructura de seguridad de múltiples capas, no es un sistema gestión de derechos digitales.

Asegurar objetos también reducirá la funcionalidad disponible para esos objetos. En particular, una columna cifrada no puede ser indexada y no se puede buscar en el contenido de una columna cifrada. Una de los más tontos artículos publicados que he encontrado explica cómo se puede buscar en una columna cifrada.

Capítulo 18 Seguridad

281

La solución a este problema consistía en colocar una columna en la tabla que contenía los datos sin cifrar para que usted pueda buscar en la columna mientras también conserva la columna encriptada. Si usted va a almacenar los datos en un formato sin cifrar, es inútil también encriptar los datos, especialmente dentro de la misma tabla. Además, tan pronto como usted permite a un usuario buscar en los datos cifrados, acaba de habilitar a un atacante para hacer ataques de diccionario muy simples y realizar la ingeniería inversa de su información encriptada.

Claves Maestras Las claves maestras constituyen la base de la jerarquía de cifrado en SQL Server. Usted puede tener una única clave maestra de servicio para toda la instancia junto con una clave maestra de base de datos dentro de cada base de datos.

Clave maestra de servicio La raíz de la jerarquía de cifrado es la clave maestra de servicio. La clave maestra de servicio es generada automáticamente la primera vez que una credencial debe ser cifrada. Las claves maestras de servicio se derivan de las credenciales de Windows de la cuenta de servicio de SQL Server y son cifradas con la clave del equipo local mediante la API de protección de datos de Windows.

El proceso de generación y cifrado asegura que la clave maestra de servicio sólo puede ser descifrada por la cuenta de servicio en la que se creó o por un “principal” con acceso a las credenciales de cuenta de servicio. Dado que la clave maestra de servicio es la raíz de la jerarquía de encriptación, si tuviera que restaurar una base de datos que contiene los datos cifrados, los datos no podrían ser descifrados a menos que también tuviera acceso a la clave maestra de servicio de la instancia donde la copia de seguridad fue creada.

Clave maestra de base de datos La siguiente capa en la jerarquía de cifrado es la clave maestra de base de datos. Una clave maestra de base de datos debe ser explícitamente generada con el siguiente comando: CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'password'

Cada base de datos tiene una clave maestra diferente, asegurando que un usuario con acceso a descifrar los datos en una base de datos no pueda también descifrar los datos en otra base de datos sin haber recibido la autorización para hacerlo. La clave maestra de base de datos se utiliza para proteger los certificados, las claves simétricas, o claves asimétricas que se almacenan dentro de una base de datos. La clave maestra de base de datos se cifra usando “Triple DES” y la contraseña proporcionada por el usuario. Una copia de la clave maestra de base de datos es también encriptada usando la clave maestra de servicio, de tal manera que el descifrado automático se puede lograr dentro de la instancia.

282

Parte V Gestión de Base de Datos

Cuando usted hace una petición para descifrar los datos, la clave maestra de servicio se utiliza para descifrar la clave maestra de base de datos, que esta última a su vez se utiliza para descifrar un certificado, clave simétrica, o clave asimétrica, que se utiliza para descifrar los datos. La razón por la que esta jerarquía es importante, es que usted debe tener cuidado al mover las copias de seguridad que contiene datos cifrados entre instancias de SQL Server. Con el fin de restaurar correctamente y ser capaz de descifrar los datos, también debe realizar copias de seguridad de la clave maestra de base de datos y volver a generar la clave maestra de base de datos en la otra instancia. Para llevar a cabo este proceso, usted necesitaría utilizar los comandos OPEN MASTER KEY, BACKUP MASTER KEY, RESTORE MASTER KEY, y CLOSE MASTER KEY.

Algoritmos hash Hay dos formas de algoritmos de encriptación: un solo sentido (one-way) y de doble vía (two-way). Los algoritmos de dos vías le permiten cifrar y descifrar datos. Los algoritmos de un sentido sólo encriptan datos sin cualquier posibilidad de descifrar. Un algoritmo de hash es la forma más sencilla para encriptar datos, sin embargo, una vez cifrada, no puede descifrar los datos. Sus datos permanecen seguros, asegurando que con el objetivo de "descifrar" el contenido de una columna, primero tendría que saber el valor de datos original. Los algoritmos hash se utilizan en una variedad de lugares, por ejemplo, para cifrar las contraseñas que especifica para los logins de SQL Server estándar. Cuando se crea un login SQL Server estándar, SQL Server utiliza un algoritmo MD5 para cifrar los datos y almacena el “hash” dentro de la base de datos master. Cuando se conecta a una instancia, a la contraseña que especifique se le aplica un algoritmo hash y los dos “hashes” se comparan. Si los “hashes” coinciden, la contraseña es correcta y usted tiene permiso para conectarse a la instancia de SQL Server.

Los algoritmos hash producirán siempre el mismo valor hash para los mismos datos de entrada. No importa si a los datos se les aplicara un algoritmo hash en una aplicación Java que se ejecuta en Unix y luego sean comparados con los mismos datos hash dentro de una aplicación. NET que se ejecuta en Windows. Mientras se utilice el mismo algoritmo hash, usted recibirá una coincidencia en la comparación de los valores hash.

Como se ha señalado en varias ocasiones, la comprensión de las limitaciones de una característica o tecnología es tan importante como la comprensión de cómo la característica/tecnología funciona. Esto es especialmente cierto para la seguridad. Aunque un algoritmo hash tiene la ventaja de la simplicidad, no es adecuado para cifrar todas las aplicaciones. Mientras el intervalo de valores posibles a ser encriptada es suficientemente grande como para evitar ataques de fuerza bruta y usted no necesita descifrar los datos, un algoritmo de hash es una buena opción. Los algoritmos hash son decisiones extremadamente malas para cifrar datos tales como salarios, números de tarjetas de crédito y fechas de nacimiento.

En el siguiente ejercicio, trabajará con los resultados de un algoritmo de hash. También construirá una rutina para traspasar una tabla de salarios para demostrar la facilidad con la que un algoritmo de hash puede ser “craqueado” cuando el rango de valores posibles es pequeño.

Capítulo 18 Seguridad

283

Datos hash 1. Ejecutar el siguiente código y observe los resultados (el código puede encontrarse en el archivo Capítulo 18\ code2.sql): --Different hash algorithms produce different hash values DECLARE @HashValue varchar(100) SELECT @HashValue = 'SQL Server' SELECT HashBytes('MD5', @HashValue) SELECT @HashValue = 'SQL Server' SELECT HashBytes('SHA1', @HashValue) GO

--Hash values are case sensitive DECLARE @HashValue varchar(100) SELECT @HashValue = 'sql' SELECT HashBytes('SHA1', @HashValue) SELECT @HashValue = 'SQL' SELECT HashBytes('SHA1', @HashValue) GO

2. Ejecute el siguiente código y observe los resultados (el código puede encontrarse en el archivo Capítulo 18\ code2.sql):

CREATE TABLE SalaryHashes (Salary INT NOT NULL, MD2Hash VARBINARY(500) NOT NULL, MD4Hash VARBINARY(500) NOT NULL, MD5Hash VARBINARY(500) NOT NULL, SHAHash VARBINARY(500) NOT NULL, SHA1Hash VARBINARY(500) NOT NULL)

DECLARE @salary INT, @salarylimit INT

SET @salary = 10000 SET @salarylimit = 300000

WHILE @salary

Especifique la cláusula MIRROR TO junto con la opción WHIT FORMAT Especifique la opción WITH COMPRESSION Especifique la opción WITH DIFFERENTIAL RESTORE DATABASE FROM

Emitir un comando BACKUP LOG. BACKUP LOG puede ser ejecutado siempre que el registro de transacciones no ha sido dañado, incluso si todos los archivos de datos han sido destruidos.

Dejar una base de datos accesible para operaciones de lectura después de una Especifique la opción WITH STANDBY = restauración Recuperar una base de datos para que sea RESTORE DATABASE WITH RECOVERY accesible para las transacciones

Capítulo 21

Agente SQL Server Después de completar este capítulo, usted será capaz de Crear tareas (jobs), pasos de las tareas, flujos de trabajo de tareas Crear planes de mantenimiento Creación y asignación de operadores Crear alertas A través de los primeros 20 capítulos de este libro, hemos hablado de una variedad de características que pueden ser utilizadas para crear aplicaciones de bases de datos de gran alcance y flexibles. También hemos introducido varios temas de gestión y mantenimiento. Aunque los usuarios utilizarán aplicaciones para interactuar con SQL Server y los datos almacenados en sus bases de datos, los administradores necesitan llevar a cabo tareas repetitivas de mantenimiento para asegurar que los datos estén protegidos y optimizar el rendimiento. Muchas de las tareas de administradores se realizan durante los períodos de baja utilización en el sistema, que también suelen coincidir con los marcos de tiempo cuando los administradores tendrían que dormir. En lugar de exigir a que los administradores ejecuten manualmente las funciones de mantenimiento, SQL Servidor suministra un motor de programación llamado el Agente SQL Server. La responsabilidad principal del Agente SQL Server es ejecutar tareas en un horario definido.

En este capítulo, usted aprenderá cómo crear tareas programadas. También aprenderá a crear planes de mantenimiento y configurar SQL Server para que envíe alertas basadas en condiciones definidas por el usuario.

Crear tareas Las tareas (o Jobs) proporcionan el “contenedor” de ejecución que permite empaquetar uno o más pasos en un proceso que necesita ser ejecutado. Aunque muchos Jobs que se crean sólo tendrán una única tarea, SQL Server le permite crear jobs compuestos por múltiples tareas para las que se pueden configurar “éxito” (success) y “acciones de error” (failure actions). Cada tarea o unidad de trabajo a realizar está contenida dentro de un paso de trabajo (o job step).

Pasos de los jobs Los job steps son los elementos de ejecución dentro de un trabajo. Los tipos de pasos de trabajo que se pueden ejecutar son los siguientes: Transact-SQL Tareas de replicación (Replication tasks) Tareas del sistema operativo o archivos ejecutables Tareas de Analysis Services 319

320

Parte V Gestión de Base de Datos

Paquetes de Integration Services Scripts de ActiveX Al igual que cualquier código ejecutable, cada paso de un job se ejecuta en un contexto de seguridad. El contexto de seguridad predeterminado de un paso de trabajo se corresponde con el inicio de sesión (login) que se establece como propietario del trabajo. Usted puede también anular el contexto de seguridad mediante la especificación de una cuenta proxy que el Agente SQL Server utilizará para el paso del job, basado en las credenciales asignadas a la cuenta proxy. Para cada paso del job, puede configurar las opciones de control de flujo junto con el registro (loggin) y la notificación. Nota Cada paso del job podrá volver a intentarse más de 9999 veces, así como esperar un determinado número de minutos entre cada reintento.

Las opciones de control de flujo le permiten especificar una acción para el éxito o el fracaso, de la siguiente manera: Salir del job, reportando el éxito Salir del job reportando una falla Ir al siguiente paso Ir a un número específico de paso en el job Además de controlar las opciones de flujo, también puede especificar un registro para el paso que se está ejecutando. El registro o loggin puede ser dirigido a un archivo que se sobrescribirá cada vez que el paso se ejecuta o se puede anexar a un archivo existente. También puede iniciar el log de un paso a una tabla, aunque esto no se recomienda debido a la sobrecarga adicional del registro a una tabla versus el registro a un archivo de texto.

Programación del job Una vez que haya añadido uno o más pasos a su trabajo, está listo para especificar una programación. Al comienzo con SQL Server 2005, los schedules eran definidos como objetos independientes. Como objeto independiente, puede crear una programación y asignar la misma programación a tantos trabajos como sea necesario. Una programación de trabajo puede ser creada a través del cuadro de diálogo “Administrar programaciones” o bien durante la creación de un job. Algunas de las propiedades que se pueden establecer para un programa son los siguientes: Tipo de frecuencia (por ejemplo, diaria, semanal, mensual) La recurrencia a nivel diario, semanal o mensual La recurrencia dentro de un día basado en un minuto u hora Inicio y finalización Fecha de inicio y finalización para que la programación sea válida Por ejemplo, puede crear una programación para: Ejecutar cada segundo los lunes de cada tercer mes y luego cada 17 minutos entre las horas 03 a.m. y 19:00

Capítulo 21 Agente SQL Server

321

Operadores El propósito de un operador es proveer un mecanismo para enviar una notificación en base a la configuración ya sea de un trabajo o un alerta. Adjunto al nombre del operador puede estar una dirección de e-mail, número de pager o la dirección de NET SEND. Además, puede designar qué día(s) y operador(es) estarán disponibles, así como la hora de inicio y final de un día laborable.

Nota La hora de inicio y finalización de una jornada de trabajo se basa en la semana laboral estándar de EE.UU. de lunes a Viernes y no se acomoda a cualquier otra definición de semana de trabajo.

En el siguiente ejercicio, creará un operador que se utiliza a continuación para enviar notificaciones de jobs y alertas.

Crear un operador 1. Expanda el nodo Agente SQL Server, haga clic derecho en Operadores y seleccione Nuevo operador. 2. Dé al operador un nombre y especifique una dirección de e-mail.

3. Haga clic en Aceptar y revise el operador que acaba de crear.

322

Parte V Gestión de Base de Datos

En el siguiente ejercicio, creará un trabajo para ejecutar el procedimiento almacenado de re-indexación que creamos en el capítulo 13, "Funciones", y el procedimiento almacenado de copia de seguridad que hemos creado en Capítulo 20, "Recuperación de datos".

Crear una tarea 1. Haga clic derecho en el nodo Trabajos (Jobs) y seleccione Nuevo trabajo en el menú que aparece haciendo click-derecho. 2. Déle un nombre a su nuevo job, establezca como propietario a “sa”, seleccione Mantenimiento de base de datos para la categoría del trabajo, y agréguele una descripción. El siguiente es un ejemplo:

Nota Las categorías de un trabajo son sólo datos descriptivos que le permiten agrupar trabajos similares en una misma categoría. Usted puede utilizar las categorías ya definidas por SQL Server o puede añadir sus propias categorías, haciendo clic derecho en el nodo Trabajos y seleccionando Administrar categorías de trabajos.

3. Seleccione la página “Pasos” y haga clic en Nuevo para abrir el cuadro de diálogo “Nuevo paso de trabajo“. 4. Especifique un nombre para el paso, el tipo de paso será Transact-SQL, deje “Ejecutar como” en blanco, establezca la base de datos a nuestra base de datos DBAmin y escriba el comando SQL que se muestra en el siguiente gráfico para nuestro procedimiento de copia de seguridad.

Capítulo 21 Agente SQL Server

323

5. Haga clic en la página de opciones avanzadas y especifique un archivo de salida C:\Archivos de programa \Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\LOG\ dailymaintenance.txt para el log, y haga clic en Aceptar.

324

Parte V Gestión de Base de Datos

6. Haga clic en Nuevo para crear el siguiente paso de trabajo para re-indexación, de la siguiente manera:

7. Haga clic en la página de “opciones avanzadas” y especifique el mismo archivo que en el paso 5 y seleccione “Anexar salida a un archivo existente”.

Capítulo 21 Agente SQL Server

325

8. Seleccione la página “Programaciones” (Schedules) y haga clic en Nuevo para definir un nuevo programa diario, como se muestra en el siguiente gráfico y haga clic en Aceptar.

Nota Cuando creo programaciones para la medianoche, siempre especifico 1 minuto antes o 1 minuto después de la medianoche. 23:59 o 12:01a.m. para proporcionar más claridad que 12:00 a.m.

9. Haga clic derecho sobre el trabajo recién creado y seleccione “Iniciar trabajo en el paso…”, especifique paso ID1, y haga clic en Inicio. Una vez finalizado el trabajo, observe que usted debería tener ahora un conjunto de copias de seguridad en el directorio de copia de seguridad y un archivo de registro que se genera para su revisión.

Nota Recuerde que usted ahora tiene un job creado que se ejecutará todos los días y hará una copia de seguridad de sus bases de datos.

Creación de planes de mantenimiento Los planes de mantenimiento proporcionan un mecanismo para crear gráficamente flujos de trabajo de trabajo que soportan funciones comunes administrativas de copia de seguridad, re-indexación y gestión del espacio.

326

Parte V Gestión de Base de Datos

Las tareas que son compatibles con los planes de mantenimiento son: Copia de seguridad de bases de datos y registros de transacciones La disminución de las bases de datos (Shrinking) Re-indexación Actualización de estadísticas Realizar comprobaciones de consistencia

Nota Yo no uso planes de mantenimiento. Escribo el script T-SQL para emitir las copias de seguridad directamente usando un job en lugar de utilizar SSIS como motor de copia de seguridad.

En este ejercicio, va a crear un plan de mantenimiento para la copia de seguridad de la base de datos AdventureWorks.

Crear un plan de mantenimiento 1. En el nodo Administración, haga clic derecho en “Planes de mantenimiento”, seleccione Asistente de Plan de Mantenimiento y haga clic en Siguiente. 2. Dé un nombre al Plan, una descripción, seleccione “Programaciones separadas” para cada tarea y haga clic en Siguiente.

3. Seleccione Actualizar estadísticas, copia de seguridad de base de datos (diferencial), Tarea de mantenimiento de Limpieza, y haga clic en Siguiente.

Capítulo 21 Agente SQL Server

327

4. Haga clic en Siguiente en la página para ordenar las tareas, dado que no se puede especificar un orden de trabajo cuando tiene programas separados. 5. Seleccione las bases de datos SQL2008SBS y SQL2008SBSFS junto con “Ignorar las bases de datos donde el estado es no en línea”, seleccione “Todas las estadísticas existentes”, especifique una muestra del 25 por ciento, establezca una programación diaria a las 3 A.M. y haga clic en Siguiente.

328

Parte V Gestión de Base de Datos

6. Seleccione las bases de datos SQL2008SBS y, SQL2008SBSFS junto con “Ignorar las bases de datos donde el estado es no en línea”, “copias de seguridad de la base de datos a disco”, “crear un archivo de copia de base de datos independiente para cada base de datos”, especifique la carpeta de copia de seguridad predeterminada, una extensión de copia de seguridad diff y verificar y comprimir la copia de seguridad. Establezca la programación para cada 4 horas empezando a las 4 am y haga clic en Siguiente.

7. Elimine los archivos de copia de seguridad de más de 1 semana en nuestro directorio de copia de seguridad predeterminada, ejecute la tarea diariamente a las 11 pm, y haga clic en Siguiente. 8. Deje los valores predeterminados para escribir un informe y haga clic en Siguiente. Haga clic en Finalizar para crear el plan de mantenimiento. 9. Actualice el nodo Jobs y observe los nuevos jobs que se han creado para el plan de mantenimiento.

Capítulo 21 Agente SQL Server

329

Creación de Alertas Las alertas ofrecen la posibilidad de enviar una notificación o realizar acciones basadas en eventos o condiciones que se producen tanto en la instancia de SQL Server o en el equipo que aloja su instancia.

Las alertas se pueden configurar como uno de los tres tipos siguientes: Evento de Servidor SQL Condición de Rendimiento Evento Windows Management Instrumentation (WMI) Una alerta se genera por un evento de SQL Server basado en un número de error o un nivel de gravedad de un error. Usted, además, puede restringir el alerta a una base de datos específica o una cadena de texto específica dentro de un mensaje de error. Cuando un alerta de evento de SQL Server es creado, el Agente SQL Server analiza el “Registro de Eventos de Aplicaciones de Windows” para buscar coincidencias con los criterios de los eventos que se han definido. Por ejemplo, podría disparar un alerta sobre el error severo número 22 para notificarle a un operador que una tabla es sospechosa.

Las alertas de condición de rendimiento se definen sobre contadores en System Monitor, PerfMon. Cuándo se define el alerta, se especifica el objeto, contador, y la instancia que desea supervisar junto con la especificación de una condición para el valor del contador y si el alerta debe ser

330

Parte V Gestión de Base de Datos

activado cuando el contador es “mayor que”, “menor que” o “igual a” su valor especificado. Por ejemplo, usted podría disparar un alerta para notificarle cuando la cantidad de espacio libre en el disco cae por debajo del 15 por ciento. Una alerta para un evento de WMI le permite notificar, en base a los eventos que ocurren en el servidor donde está su instancia de SQL Server. Cada vez que se produce un evento en el equipo, si la tarjeta de red está desconectada, si se crea un archivo, si un archivo se elimina, si se escribe el registro (registry), etc, un evento de WMI se genera dentro de Windows. Un alerta WMI crea un detector (listener) para la infraestructura de WMI para disparar la alarma cuando ocurre el evento de Windows. En este ejercicio, va a crear un alerta para enviar una notificación cuando el porcentaje de espacio del registro de transacciones utilizado para la de base de datos SQL2008SBS supera el 90 por ciento.

Crear una alerta de condición de rendimiento 1. Haga clic derecho en Alertas y seleccione Nueva alerta. 2. Dé un nombre a su alerta y seleccione “Alerta de condición de rendimiento de SQL Server”. 3. Seleccione el objeto “SQLServer: Bases de datos”, el contador “Porcentaje de registro usado”, la instancia SQL2008SBS, y configure el alerta para cuando el contador se eleva por encima 90.

4. Seleccione la página de respuesta, seleccione Notificar a Operadores y seleccione las opciones de notificación para su operador. 5. Seleccione la página Opciones, seleccione Correo electrónico para incluir el texto del alerta por error y haga clic en Aceptar.

Capítulo 21 Agente SQL Server

Crear una alerta de eventos del servidor SQL 1. Haga clic derecho en Alertas y seleccione Nueva alerta. 2. Dé un nombre a su alerta y seleccione “alerta de evento SQL Server”. 3. Especifique las bases de datos y un error de gravedad 22.

331

332

Parte V Gestión de Base de Datos

4. Seleccione la página de respuesta, seleccione Operadores a Notificar y seleccione las opciones de notificación para su operador. 5. Seleccione la página Opciones, seleccione Correo electrónico para incluir el texto del alerta por error y haga clic en Aceptar.

Capítulo 21 Referencia Rápida Para

Haga lo siguiente

Configurar notificaciones

Crear un operador con la configuración de notificación que necesita

Permitir que SQL Server ejecute código por usted de forma periódica

Configurar un Job dentro del Agente SQL Server para ejecutar el código necesario Añadir un paso de trabajo (job step) para cada parte de un proceso que necesita ejecutar Cree una o más programaciones correspondientes al intervalo de veces que necesita ejecutar el trabajo.

Notificar automáticamente cuando se producen eventos o condiciones de rendimiento

Configure un alerta en el Agente SQL Server, correspondiente a los criterios que desea para enviar una notificación.

Capítulo 22

Vistas de administración dinámica Después de completar este capítulo, usted será capaz de Recuperar información acerca de los objetos dentro de una instancia Ver la actividad de cualquier base de datos Identificar posibles cuellos de botella El término "clase empresarial", ha sido lanzado tanto dentro de la industria, que el significado se ha perdido. Una aplicación de clase empresarial o plataforma no significa que usted puede almacenar o procesar una gran cantidad de datos. Una aplicación de clase empresarial o plataforma proporciona la instrumentación que le permite a los administradores localizar, diagnosticar y solucionar problemas antes de que escalen y afecten el negocio. SQL Server 2008 proporciona una plataforma de gestión de datos de clase empresarial a través de la exposición de la información de diagnóstico en todas las capas del motor. En este capítulo, usted aprenderá acerca de las interfaces de diagnóstico disponibles en SQL Server que se acceden a través de un conjunto de vistas de administración dinámica (DMV).

Visión general de las DMVs Usted puede obtener información acerca de los objetos o el estado operativo de un servidor SQL utilizando un conjunto de vistas y funciones que se incluyen en SQL Server 2008, denominados colectivamente como DMV. SQL Server 2008 incluye más de 200 DMV, todas las cuales se pueden encontrar en el esquema sys.

Con toda la información disponible, es muy fácil perderse. Puede dividir las DMV dentro de aproximadamente 17 categorías amplias. Hay docenas de DMVs para recuperar información sobre objetos tales como sys.credentials, sys.certificates, sys.databases, sys.tables sys.columns sys.indexes, sys.symmetric_keys, etc, varias de las cuales se han presentado a lo largo de este libro. Hay 15 categorías adicionales generales enumeradas en la Tabla 22-1. Las restantes DMV se suelen agrupar en una categoría denominada "otros" para simplificar.

TABLA 22-1

Categorías General de DMV

Prefijo

Propósito de la DMV

sys.assembly y sys.dm_clr

Incluye la vista sys.assemblies que proporciona información sobre ensamblados CLR cargados en la instancia

sys.change_tracking

Proporciona información acerca de las tablas y bases de datos que utilizan la característica de seguimiento de cambios

sys.conversation

Conversaciones de Active Service Broker

333

334

Parte V Gestión de Base de Datos

TABLA 22-1

Categorías General de DMV

Prefijo

Propósito de la DMV

sys.database_audit y sys.dm_audit

Especificaciones de auditoría de base de datos activa (Active database audit)

sys.database_mirroring

Configuración y sesiones de “Database mirroring”

sys.dm_broker y sys.service

Configuración de Service Broker

sys.dm_db

Diagnósticos de base de datos

sys.dm_exec

Ejecución de tareas

sys.dm_fts y sys.fulltext

Indexación de Texto completo

sys.dm_os

Diagnósticos del sistema operativo

sys.dm_resource_governor y sys.resource_governor

Configuración del regulador de recursos

sys.dm_xe y sys.server_event

Configuración y sesiones de eventos extendidos

sys.partition

Particionamiento de tablas

sys.trace

Seguimientos de activos

sys.xml

Índice XML y objetos de esquema

Dado que toda la información que usted necesitará siempre se devuelve desde vistas o funciones, no es necesario ningún comando especial o una interfaz para recuperar información sobre una instancia, objeto, o del estado de una operación. Mientras que usted pueda escribir una declaración SELECT, una obligación para ser un administrador de base de datos (DBA), es posible recuperar la información necesaria.

Nota Como se señaló en el capítulo 8, "Recuperación de datos", y en el Capítulo 9, "Recuperación avanzada de datos ", siempre debería construir una declaración SELECT con la lista de columnas explícita. Dentro de los ejemplos mostrados en este capítulo, habrá varios lugares donde se utiliza una instrucción SELECT *. SELECT * se utiliza sólo con fines de aprendizaje hasta que se familiarice con el contenido de varios DMV y No debería utilizarse dentro de cualquier código que se ejecute en producción.

Recuperar metadatos de objetos Cada objeto que se crea en una instancia tiene una vista correspondiente para recuperar información acerca de todos los objetos de ese tipo. La mayoría de las vistas de metadatos de objeto contienen un ID, el nombre del objeto, y la fecha/hora en que se creó el objeto. Algunas vistas contienen muchas más columnas de datos que son útiles para propósitos de administración. Por ejemplo, sys.databases no sólo ofrece una lista de todas las bases de datos dentro de una instancia, sino que también le dice el modelo de recuperación, si la base de datos es accesible, y la base de datos fuente en una instantánea de base de datos. Puede ver un ejemplo del aprovechamiento de la vista sys.databases dentro del script de copia de seguridad en el Capítulo 20, "Recuperación de datos".

Capítulo 22 Vistas de administración dinámica

335

Generador de script En el capítulo 8, mencioné que la mayoría de las veces es pasado por alto, sin embargo, la herramienta más poderosa dentro de la "caja de herramientas" de un DBA es una declaración SELECT, en especial la selección de una constante. Con demasiada frecuencia, encuentro DBAs haciendo clic a través del SQL Server Management Studio (SSMS) para realizar tareas repetitivas y luego preguntan por qué no hay suficientes horas en un día para hacer nada. Al aprovechar las DMV junto con la selección de una constante, puede realizar muchas operaciones en una fracción del tiempo que se necesita para usar una interfaz gráfica de usuario. La técnica se conoce como generador de script. Para escribir con eficacia un generador de script, también es necesario conocer la sintaxis T-SQL de las sentencias DDL que tiene que ejecutar, y por ello, he utilizado código en muchos lugares donde otros normalmente le muestran una bonita captura de pantalla.

Cuando concede autoridad SELECT sobre la base de datos, el “principal” puede emitir una declaración SELECT contra cualquier función, vista o tabla dentro de la base de datos. Si usted quisiera solamente conceder autoridad SELECT a las vistas dentro de una base de datos y no a ninguna tabla o función, podría abrir SSMS y gastar una cantidad significativa de tiempo haciendo clic a través de la interfaz gráfica de usuario. Usted podría también aprovechar el DMV sys.views para generar un script que podría ejecutarse en menos tiempo de lo que se necesitaría para conceder la autoridad a una sola vista a través de la interfaz gráfica de usuario.

En el siguiente ejercicio, ejecutará varias DMV de metadatos para familiarizarse con la información que se puede obtener.

Recuperar información acerca de los objetos de la base de datos 1. Ejecute el siguiente script y revise los resultados de cada declaración SELECT (el código se puede encontrar en el archivo Chapter22\code1.sql):

SELECT * FROM sys.databases SELECT * FROM sys.schemas SELECT * FROM sys.objects SELECT * FROM sys.tables SELECT * FROM sys.columns SELECT * FROM sys.identity_columns SELECT * FROM sys.foreign_keys SELECT * FROM sys.foreign_key_columns SELECT * FROM sys.default_constraints SELECT * FROM sys.check_constraints SELECT * FROM sys.indexes SELECT * FROM sys.index_columns SELECT * FROM sys.triggers SELECT * FROM sys.views SELECT * FROM sys.procedures

336

Parte V Gestión de Base de Datos

Diagnósticos de bases de datos La información de diagnóstico con la que un DBA trabaja generalmente para una base de datos se divide en tres grupos: tamaño, indexación y ejecución de la consulta.

Tamaño del objeto El tamaño debe ser controlado y administrado con fines de planificación de la capacidad. Se puede calcular la utilización del espacio para la base de datos, así como para las tablas, índices y vistas indizadas. La utilización del espacio para una base de datos se puede recuperar de la columna “tamaño” (size) en la DMV sys.database_files. El espacio utilizado por una tabla, índice o vista indexada, es un poco más complicado ya que tienes que tratar con múltiples DMV que mapean objetos a través de diferentes estructuras de almacenamiento. Cada objeto en SQL Server 2008 está asociado a una partición, incluso si el objeto no está particionado. Por lo tanto, cada tabla, índice y vista indexada tendrá una entrada en sys.partitions. Sys.partitions identifica una estructura de almacenamiento asociada usando la columna hobt_id column. Dicha columna mapea a sys.allocation_units con la columna container_id. Usted extrae los IDs para la tabla e índice junto con el número de filas desde sys.partitions y el número de páginas usadas desde sys.allocation_units. Luego, para determinar el número total de páginas utilizadas por el objeto, usted necesita sumar las filas y las páginas a través de cada partición. Esto reportará el número de filas junto con el número de páginas que el objeto está utilizando, que puede ser traducido a MB, GB o TB de almacenamiento recordando que una página tiene 8 KB de tamaño.

En el siguiente ejercicio, se recuperará la cantidad de espacio utilizado por cada archivo dentro de una base de datos, así como para cada objeto el consumo de espacio dentro de una base de datos.

Recuperar Tamaños de bases de datos y objetos 1. Ejecute la siguiente secuencia de comandos y revise los resultados de cada declaración SELECT (el código puede encontrarse en el archivo Chapter22\code1.sql): SELECT * FROM sys.database_files

2. Ejecute el siguiente script y revise los resultados de cada declaración SELECT (el código puede encontrarse en el archivo Chapter22\code1.sql): SELECT * FROM sys.partitions SELECT * FROM sys.allocation_units SELECT object_name(a.object_id), c.name, SUM(rows) rows, SUM(total_pages) total_pages, SUM(used_pages) used_pages, SUM(data_pages) data_pages FROM sys.partitions a INNER JOIN sys.allocation_units b ON a.hobt_id = b.container_id INNER JOIN sys.indexes c ON a.object_id = c.object_id and a.index_id = c.index_id GROUP BY object_name(a.object_id), c.name ORDER BY object_name(a.object_id), c.name

Capítulo 22 Vistas de administración dinámica

337

Índices La solidez de la indexación dentro de una base de datos puede hacer la diferencia entre una aplicación que tiene buen rendimiento y una que tiene mal rendimiento. Hacer un seguimiento de la frecuencia con que se utiliza un índice, ayuda o bien a determinar si se puede eliminar el índice para salvar la sobrecarga de mantenimiento, o si usted necesita dividir el índice en un grupo separado de discos. Además, el seguimiento y control de la fragmentación de índices puede significar la diferencia entre si SQL Server selecciona el índice para satisfacer una consulta o si el camino elegido es menos óptimo.

SQL Server tiene dos funciones, sys.dm_db_index_operational_stats y sys.dm_db_index_physical_stats, junto con una vista, sys.dm_db_index_usage_stats, para ayudar a controlar los índices que se han creado. sys.dm_db_index_operational_stats proporciona las estadísticas de actividad de ejecución para cada índice, por ejemplo, cuantas escrituras se han producido a nivel hoja y a nivel no hoja, la distribución de las operaciones de exploración y lecturas de búsqueda, cuántos bloqueos ocurrieron dentro de las filas del índice, y cuánto tiempo los procesos en el índice han tenido que esperar para estar disponibles. sys.dm_db_index_physical_stats devuelve el porcentaje de fragmentación junto con el número de páginas que se utilizan por el índice actualmente. Aunque sys.dm_db_index_operational_stats le dirá cuánta actividad se está produciendo contra un índice, sys.dm_db_index_physical_stats le dirá en qué extensión el índice se está fragmentado, así usted puede decidir si desea volver a generar o reorganizar el índice para eliminar la fragmentación.

Los índices que existen, pero no son utilizados por SQL Server pueden ser tan costosos como uno muy fragmentado. sys.dm_db_index_usage_stats le dirá la cantidad de actividad y de qué tipo se está ejecutado contra un índice, junto con la última vez que el índice tuvo actividad. Si usted encuentra que un índice no tiene ningún pedido, exploración o búsqueda, o si la última vez que un pedido, exploración, o búsqueda se emitió hace mucho tiempo, el índice es un buen candidato a eliminarse.

Recuperar Estadísticas de índice 1. Ejecute la siguiente secuencia de comandos y revise los resultados (el código puede encontrarse en el archivo Chapter22\code1.sql): SELECT * FROM sys.dm_db_index_operational_stats(NULL,NULL,NULL,NULL) SELECT * FROM sys.dm_db_index_physical_stats(NULL,NULL,NULL,NULL,NULL)

2. Ejecute la siguiente secuencia de comandos y revise los resultados (el código puede encontrarse en el archivo Chapter22\code1.sql): SELECT * FROM sys.dm_db_index_usage_stats

Aunque se sabe que la adición de índices a una tabla puede mejorar rendimiento de las consultas, la tarea que supone un desafío para muchos es elegir los índices correctos. Usted quiere crear suficientes índices para mejorar el rendimiento de las consultas, sin producir tantos que hagan que el rendimiento de las transacciones se vea afectado.

338

Parte V Gestión de Base de Datos

Una forma de encontrar los índices adecuados que se deben crear, es construir un sistema de prueba con una gran muestra lo suficientemente representativa de datos, y ejecutar el conjunto de consultas contra los datos para evaluar las distintas opciones de indización. La otra manera de encontrar los índices que usted necesita crear es hacer que SQL Server "decida por usted".

Todas las consultas pasan por el optimizador para determinar la mejor ruta para encontrar los datos que se están solicitando. El optimizador evalúa los argumentos de búsqueda contra todos los índices que están disponibles en la tabla. Si se encuentra un índice apropiado para satisfacer la consulta, SQL Server la ejecuta mediante dicho índice. Sin embargo, si el optimizador no encuentra un índice adecuado para satisfacer la consulta, hay un "índice perdido". SQL Server registra cada “index miss” en la vistas sys.dm_db_missing_index visitas*. La sys.dm_db_missing_index_group_stats mantiene un total acumulado en la columna user_seeks de las veces que una consulta se podría haber satisfecho, si un determinado índice se hubiera creado. Al aprovechar la columna user_seeks en conjunto con un par de factores de ponderación, avg_total_user_cost y avg_user_impact, usted puede obtener información adicional en cuanto a si un determinado índice sería beneficioso.

En el siguiente ejercicio, tendrá que trabajar con las vistas sys.dm_db_missing_index* para obtener una comprensión de los índices que pueden ser útiles para crear.

Nota Los cálculos estadísticos proporcionados sólo cuentan para el beneficio de una sentencia SELECT. El impacto en las operaciones de escritura no es parte del cálculo, pero deberían tenerse en cuenta antes de crear un índice.

Determinar los índices a crear 1. Ejecute la siguiente secuencia de comandos y revise los resultados (el código puede encontrarse en el archivo Chapter22\code1.sql): SELECT * FROM sys.dm_db_missing_index_details SELECT * FROM sys.dm_db_missing_index_group_stats SELECT * FROM sys.dm_db_missing_index_groups

2. Ejecute el siguiente script de agregación y revise los resultados (el código puede encontrarse en el archivo Chapter22\code1.sql): SELECT * FROM (SELECT user_seeks * avg_total_user_cost * (avg_user_impact * 0.01) AS index_advantage, migs.* FROM sys.dm_db_missing_index_group_stats migs) AS migs_adv INNER JOIN sys.dm_db_missing_index_groups AS mig ON migs_adv.group_handle = mig.index_group_handle INNER JOIN sys.dm_db_missing_index_details AS mid ON mig.index_handle = mid.index_handle ORDER BY migs_adv.index_advantage

Capítulo 22 Vistas de administración dinámica

339

3. Ejecute el siguiente código para forzar un índice perdido contra la base de datos AdventureWorks (el código puede encontrarse en el archivo Chapter22\code1.sql): SELECT City,PostalCode FROM Person.Address WHERE City IN ('Seattle','Atlanta')

SELECT City,PostalCode,AddressLine1 FROM Person.Address WHERE City = 'Atlanta'

SELECT City,PostalCode,AddressLine1 FROM Person.Address WHERE City like 'Atlan%'

4. Ejecutar el script de agregación de nuevo y examine los resultados (el código puede encontrarse en el Archivo Chapter22\code1.sql): SELECT * FROM (SELECT user_seeks * avg_total_user_cost * (avg_user_impact * 0.01) AS index_advantage, migs.* FROM sys.dm_db_missing_index_group_stats migs) AS migs_adv INNER JOIN sys.dm_db_missing_index_groups AS mig ON migs_adv.group_handle = mig.index_group_handle INNER JOIN sys.dm_db_missing_index_details AS mid ON mig.index_handle = mid.index_handle ORDER BY migs_adv.index_advantage

5. Ejecute el siguiente script para ejecutar repetidamente una declaración SELECT y revise los nuevos resultados de la secuencia de comandos de agregación (el código se puede encontrar en el archivo Chapter22\code1.sql): SELECT City,PostalCode,AddressLine1 FROM Person.Address WHERE City like 'Atlan%' GO 100

SELECT * FROM (SELECT user_seeks * avg_total_user_cost * (avg_user_impact * 0.01) AS index_advantage, migs.* FROM sys.dm_db_missing_index_group_stats migs) AS migs_adv INNER JOIN sys.dm_db_missing_index_groups AS mig ON migs_adv.group_handle = mig.index_group_handle INNER JOIN sys.dm_db_missing_index_details AS mid ON mig.index_handle = mid.index_handle ORDER BY migs_adv.index_advantage

Estadísticas de ejecución de consultas Las DMV más frecuentemente usadas devuelven información acerca de las conexiones y consultas que se están ejecutando dentro de una instancia. La tabla 22-2 enumera las vistas y las funciones que se utilizan para recuperar información de ejecución de consulta.

340

Parte V Gestión de Base de Datos TABLA 22-2

DMV de ejecución de consultas

DMV

Propósito

sys.dm_exec_sessions

Contiene una fila para cada sesión, el inicio de sesión (login) asociado, el consumo de CPU/memoria/lecturas/escrituras, y las opciones SET activas. Incluye sesiones debido a conexiones externas, así como los procesos que se ejecutan dentro del motor de SQL Server.

sys.dm_exec_connections

Enumera cada conexión que se origina fuera de la instancia. Seguimiento de cuando se ha realizado la conexión, el tiempo de la última actividad, el número de lecturas/escrituras, y el identificador a la sentencia de SQL ejecutada más reciente.

sys.dm_exec_requests

Proporciona todas las consultas que se están ejecutando junto con la gestión de la instrucción SQL y el plan de consulta. La columna blocking_session_id especificará la sesión que está manteniendo un bloqueo que está causando que la sesión sea bloqueada. Cuando es posible calcula, el porcentaje completado junto con una estimación de la hora de finalización.

sys.dm_exec_cached_plans

Proporciona todos los planes de consulta que se han compilado y almacenado en la caché de consultas junto con el número de veces que cada plan almacenado en caché se ha utilizado.

sys.dm_exec_query_stats

Contiene información acerca de cada consulta que ha sido ejecutada, la frecuencia de ejecución, y la cantidad de recursos consumidos por una determinada consulta.

sys.dm_exec_procedure_stats

Contiene estadísticas de rendimiento de cada procedimiento almacenado que ha sido ejecutado.

sys.dm_exec_query_plans

Cuando se transmite un identificador del plan, devolverá el correspondiente plan de consulta en un formato XML.

sys.dm_exec_sql_text

Cuando se transmite un identificador de SQL, devolverá el correspondiente texto de la sentencia SQL.

En el siguiente ejercicio, se recupera una lista de conexiones que están ejecutando solicitudes, junto con la consulta que se está ejecutando.

Determinar Estadísticas de Ejecución 1. Ejecutar la siguiente secuencia de comandos y revise los resultados (el código puede encontrarse en el archivo Chapter22\code1.sql): SELECT query_plan, text, * FROM sys.dm_exec_requests CROSS APPLY sys.dm_exec_query_plan(plan_handle) CROSS APPLY sys.dm_exec_sql_text(sql_handle)

Capítulo 22 Vistas de administración dinámica

341

Capítulo 22 Referencia rápida Para

Haga lo siguiente

Recuperar los metadatos sobre los objetos dentro de una base de datos o instancia

Ejecutar SELECT FROM sys.

Determinar el espacio actualmente asignado a una base de datos

Utilice la vista sys.database_files

Devolver una lista de espacio consumido por índices, tablas y vistas indexadas

Haga join entre sys.partitions y sys.allocation_units

Encontrar índices que no están siendo utilizados

Localice los índices que no tienen ningún pedido, exploración o búsquedas o no han tenido un pedido, exploración, o búsqueda en un largo período de tiempo

Decidir qué índices deben ser desfragmentados

Utilice la función sys.dm_db_index_physical_stats

Dejar que SQL Server cee una lista de Combine las vistas sys.dm_db_missing_index* Índices que usted debe considerar para crear Recuperar la instrucción SQL y el plan Las consultas que se estén ejecutando actualmente se pueden de consulta para las consultas en ejecución encontrar en la vista sys.dm_exec_requests. Usted puede utilizar el operador CROSS APPLY con las funciones sys.dm_exec_query_plan y sys.dm_exec_sql_text , para devolver el plan de consulta y la sentencia SQL

Parte VI

Alta disponibilidad (Visión general) En esta parte: Capítulo 23: Alta disponibilidad. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345

343

Capítulo 23

Alta disponibilidad Después de completar este capítulo, usted será capaz de ■

Instalar y configurar una instancia de cluster de conmutación por error (failover).



Instalar y configurar un espejado de base de datos (mirroring)



Instalar y configurar el envío de registros (log shipping)



Instalar y configurar el servicio de replicación

Nota Usted tendrá que tener tres instancias de SQL Server 2008 instaladas para completar las prácticas en este capítulo. A pesar de la mejor de las planificaciones, siempre ocurrirá la situación que puede llevar su base de datos a quedar fuera de línea. Con el fin de lograr la máxima disponibilidad de sus datos, SQL Server 2008 incluye cuatro importantes características que le permiten construir sistemas sólidos. En este capítulo usted aprenderá acerca de los clústeres de conmutación por error, el espejado de base de datos, el envío de registros, y la replicación.

Clústeres de conmutación por error (Failover Clustering) Construido sobre los clústeres de Windows, SQL Server Failover Clustering permite instalar múltiples servidores y nodos debajo de una instancia. En el caso de un fallo de hardware, otro servidor puede tomar automáticamente el control y asegurarse de que las bases de datos siguen siendo accesibles por las aplicaciones. Las agrupaciones de SQL Server (cluster) son grupos de una o varias instancias. Un cluster de una “instancia única” es un clúster de Windows que tiene exactamente una instancia de SQL Server instalada. Un cluster de “instancias múltiples” es un clúster de Windows que tiene más de una instancia de SQL Server. Lo que hace que no importe en qué nodo usted configuró para que se ejecuten las instancias, la terminología se mantiene igual.

Componentes de instancia del clúster de conmutación por error Cuando se instala una instancia stand-alone, los administradores de bases de datos (DBAs) no se preocupan por las direcciones IP, nombres de red, o incluso la presencia de unidades de disco. Cada uno de estos componentes tiene que considerarse, en cambio, cuando se instala una instancia de SQL Server en un clúster.

345

346

Parte VI Descripción de alta disponibilidad

Los componentes que se necesitan para una instancia de conmutación por error de SQL Server son los siguientes:

Direcciones IP Los nombres de red Las unidades de disco de la matriz (array) de unidad compartida Servicios de SQL Server Las cuentas de servicio

Configuración de la red Cada instancia de SQL Server instalada en un clúster debe tener una dirección IP única, que debe estar en el segmento de la red pública configurada en el clúster. Ligado a cada dirección IP está un nombre único de red que se registrará en el DNS por lo que el Servidor SQL puede ser resuelto por nombre.

Configuración de disco Debe configurar cada instancia de SQL Server en cluster, con un conjunto dedicado de letras de unidad. En un servidor independiente (stand-alone), varias instancias pueden almacenar bases de datos en la misma unidad o incluso en el mismo directorio que las demás instancias. En un cluster, las unidades se montan a un nodo particular en cualquier momento dado. Cualquier otro nodo no tiene acceso a esas unidades. Puede configurar una instancia de SQL Server para ejecutarse en cualquier nodo. Si se pudiera configurar más de una instancia de SQL Server en cluster para almacenar bases de datos en la misma letra de unidad, sería posible crear una configuración en la que la instancia se está ejecutando en un nodo, mientras que otro nodo tiene la propiedad de los discos, haciendo así que la instancia de SQL Server deje de funcionar.

El concepto de configuraciones de discos en un clúster de SQL Server se conoce como “instante-to-disk.ratio”. Aunque una instancia agrupada (custered) de SQL Server puede referirse a más de una letra de unidad, una letra de la unidad puede estar asociada a una única instancia agrupada de SQL Server. Además, una letra de unidad debe ser configurada como una dependencia del servicio de SQL Server permitiendo almacenar bases de datos.

Configuración de seguridad Es necesario configurar cada servicio de SQL Server con una cuenta de servicio. En general, debería utilizar una cuenta diferente para cada servicio de SQL Server: para SQL Server, Agente SQL Server, y Full Text (Texto completo). Aunque las cuentas no necesitan ningún privilegio especial, deben ser cuentas de dominio porque el identificador de seguridad (SID) para una cuenta local no puede ser resuelto en otra máquina.

Capítulo 23 Alta Disponibilidad

347

SQL Server 2008 no requiere cuentas de servicio con autoridad administrativa en Windows. Esto ha creado una situación en la que una cuenta de Windows puede tener docenas de permisos individuales concedidas a la misma, tales como permisos de acceso al registro, acceso al directorio y acceso a archivos. Cambiar las cuentas de servicio sería muy complicado porque tendría que asignar todos estos permisos individuales para la nueva cuenta de servicio, para asegurarse que los servicios continúen funcionando con normalidad.

Con el cambio en la infraestructura de seguridad, las cuentas de Windows para los servicios de SQL Server 2008 están diseñadas para seguir prácticas aceptadas por la industria para la gestión de cuentas de Windows. A los Grupos de Windows se les conceden permisos sobre los diversos recursos que se accederán. Las cuentas de Windows entonces son agregadas a sus respectivos grupos para obtener acceso a los recursos.

En una máquina independiente (stand-alone), estos grupos se crean de forma predeterminada de la forma : SQLServerMSSQLUser$$, y SQLServerSQLAgentUser$$. SQL Server Setup asigna automáticamente los permisos de los directorios, claves de registro y otros recursos necesarios para permitir que un servidor SQL Server funcione para el grupo apropiado. Luego agrega la cuenta de servicio al grupo respectivo.

Aunque este proceso funciona en una máquina independiente, no es tan sencillo en un clúster. Dentro del clúster, una instancia SQL Server de clúster de conmutación por error, puede ejecutarse en cualquier máquina física en el cluster. Los grupos locales de Windows no tienen un contexto de seguridad válido entre todas las máquinas. Por lo tanto, los grupos para las cuentas de servicio de SQL Server se deben crear en el nivel de dominio.

La rutina de instalación no supone que usted tenga la facultad de crear grupos en el dominio. Es necesario crear estos grupos de dominio antes de instalar una instancia de clúster de conmutación por error SQL Server. Usted tiene que definir tres grupos dentro del dominio, los cuales tienen los siguientes propósitos:

Cuenta de servicio de SQL Server Cuenta de servicio de Agente SQL Server Cuenta de SQL Server Full Text Search Daemon Usted especifica los grupos que se crean durante la fase final de la rutina de instalación.

Controles de estado El clustering realiza dos controles de estado sobre una instancia clúster por conmutación de errores de Sql Server. La primera verificación realizada es la prueba LooksAlive, que es un ping desde cada nodo del clúster a la Dirección IP de la instancia de SQL Server. Sin embargo, una prueba de ping no indica que una instancia está disponible, el ejemplo podría ser la respuesta a un ping, pero aún así ser inaccesible. Para detectar problemas de disponibilidad de SQL Server, se lleva a cabo un segundo control, la prueba IsAlive. Esta prueba crea una conexión a la instancia de SQL Server y emite SELECT @ @ SERVERNAME. El SQL Server debe devolver un conjunto de resultado válido para pasar este chequeo de estado.

348

Parte VI Descripción de “alta disponibilidad”

Clúster de conmutación por error (Failover Cluster) Si cualquier chequeo de estado falla, el cluster inicia una “conmutación por error” (failover) de la instancia de SQL Server. El primer paso en el proceso de conmutación por error es reiniciar SQL Server en el mismo nodo. La instancia se reinicia en el mismo nodo, porque el cluster primero asume que fue un error transitorio el que causó que falle el control de estado. Si el arranque no responde de inmediato, el cluster de SQL Server conmuta a otro nodo en el clúster (nodo secundario). El nombre de red del servidor SQL no está registrado desde DNS. La dirección IP del Servidor SQL está asociada a la tarjeta de interfaz de red (NIC-Network interface card) en el nodo secundario. Los discos asociados a la instancia de SQL Server están montados en el nodo secundario. Después que la dirección IP está asociada a la tarjeta de red en el nodo secundario, el nombre de red de la instancia SQL Server es registrada en el DNS. Después de que el nombre de la red y los discos están en línea, el Servicio SQL Server es iniciado. Después de que el servicio SQL Server se inicia, se inician el Agente SQL Server y la Indexación de Texto-Completo.

Independientemente de si la instancia se ha reiniciado en el mismo nodo o en un nodo secundario, la instancia de SQL Server se cierra y se reinicia. Cualquier transacción que no se haya completado, cuando se inicia el proceso de conmutación por error, se revierte cuando se reinicia el Servidor SQL. Tras reiniciar, continúa el proceso normal de recuperación. En general, un clúster "conmutará por error" entre 10 y 15 segundos. El tiempo de conmutación por error se ve afectado principalmente por el registro en el DNS. Más información Dado que una discusión de Virtual Server (Servidor virtual), así como Windows clustering, va mucho más allá del alcance de este libro, por favor consulte: MCTS Self-Paced Training Kit (Exam 70-432): Microsoft® SQL Server® 2008—Implementation and Maintenance from Microsoft Press..

Database Mirroring (espejado) A pesar de que la conmutación por error proporciona redundancia de hardware, sólo existe una única copia de la base de datos en el array de unidad compartida. Si sólo necesitaba planificar el fracaso del servidor, entonces la conmutación por error sería suficiente para satisfacer sus necesidades de disponibilidad. Sin embargo, la falla de hardware más común, “las unidades de disco”, sólo puede ser mitigada teniendo una segunda copia de la base de datos en otra máquina.

El espejado de la base de datos mantendrá una segunda copia de una base de datos en otra máquina de forma que usted estará protegido de fallas de servidor y de almacenamiento. Por desgracia, sólo se puede utilizar database mirroring con bases de datos que no tengan un grupo de archivos habilitado para FILESTREAM.

Capítulo 23 Alta Disponibilidad

349

Roles de Database mirroring Hay dos roles de espejado de base de datos obligatorios y un tercer rol opcional. Usted debe designar una base de datos en un rol principal y otra base de datos en un rol espejo (mirror rol). También puede, opcionalmente, designar una instancia de SQL Server en el rol de “servidor testigo” (witness server) para gobernar conmutación por error automático desde la base de datos principal al espejo. Las bases de datos designadas en el rol de director o principal y espejo, forman una sesión de database mirroring. Puede configurar un servidor testigo opcional para cada sesión, y un solo servidor testigo puede gestionar múltiples sesiones de creación de database mirroring.

Rol Principal La base de datos que usted configura con el rol principal, se convierte en la fuente u origen de todas las transacciones en una sesión de database mirroring. La base de datos principal, o primaria, es recuperada y permite conexiones y las aplicaciones pueden leer datos desde ella y escribir datos en ella.

Rol Espejo (Mirror) La base de datos que usted define en el rol espejo es la base de datos “pareja” de la base de datos principal y recibe continuamente transacciones. El proceso de creación de reflejo de base de datos está constantemente reproduciendo las transacciones de la base de datos principal en el registro de transacciones y haciendo flushing(*) del registro de transacción a los archivos de datos en la base de datos espejo de modo que la base de datos espejo incluye los mismos datos como base de datos principal. La base de datos espejo está en un estado de recuperación, por lo que no permite conexiones de ningún tipo, y no se pueden escribir transacciones directamente sobre ella. Sin embargo, puede crear una instantánea de base de datos contra una base de datos espejo, para darle a los usuarios acceso de sólo lectura a los datos de la base de datos en un punto específico en el tiempo. (*) Flushing: copiar datos de almacenamiento temporario a un medio de almacenamiento permanente. (N. del T.)

Los roles principal y espejo son estados de funcionamiento transitorios dentro de una sesión de database mirroring. Debido a que las bases de datos son exactamente equivalentes y se mantienen en sincronización unas con otras, cualquiera de las base de datos pueden asumir el papel de principal o espejo en cualquier momento.

Servidor Testigo (Witness) El rol de servidor testigo es el tercer rol (opcional) que puede definir para el espejado de la base de datos. El único propósito del testigo es el de servir como un árbitro dentro del modo de operaciones de alta disponibilidad para garantizar que la base de datos puede ser servida en una sola instancia de SQL Server a la vez. Si una base de datos principal falla, y el testigo confirma el fallo, la base de datos espejo puede tomar el papel primario y hacer que sus datos estén disponibles para los usuarios.

Aunque la creación del espejo de base de datos permite que un principal y un espejo sólo se produzcan en pares (por ejemplo, un principal no puede tener más de un espejo, y viceversa); un servidor testigo puede dar servicio a varios pares de reflejo de base. La vista de catálogo sys.database_mirroring_witnesses almacena una sola fila para cada par de espejo de base que es atendida por el testigo.

350

Parte VI Descripción de alta disponibilidad

Roles a nivel de base de datos vs. Roles a nivel servidor Los roles del principal y del espejo se producen a nivel de base de datos y se deben definir dentro de las instancias de SQL Server 2008 que son de edición Standard o Enterprise. Sin embargo, usted define el rol del testigo a nivel de instancia. La instancia de SQL Server 2008 que se utiliza para el servidor testigo puede ser de cualquier edición, incluyendo SQL Server Express Edition, razón por la cual nos referimos a una base de datos principal o espejo, pero no un servidor testigo.

Extremos de Database Mirroring (endpoints) Todo el tráfico de replicación de bases se transmite a través de un extremo TCP con una carga de DATABASE_MIRRORING. Sólo se puede crear un extremo de Database Mirroring por instancia de SQL Server.

Puede asignar un nombre a cada extremo que cree. El nombre de un extremo de Database Mirroring se utiliza sólo cuando se cambia el estado o se emite la declaración GRANT/REVOKE. Debido a que el nombre del extremo sólo es utilizado por un DBA para operaciones internas, se recomienda que deje el nombre del espejado configurado en su valor por defecto. En el siguiente ejercicio, usted espejará la base de datos SQL2008SBS. Esta práctica supone que tiene tres servidores separados, cada uno con una instancia de SQL Server. Las instancias que alojan el principal y el espejo deben ser de SQL Server 2008 Standard Edition y superior. La instancia que aloja el testigo puede ser cualquier edición de SQL Server 2008. Usted tendrá que sustituir los nombres de las instancias en los pasos de código que siguen a continuación.

Nota Si sus instancias están instaladas en el mismo servidor, el número de puerto debe ser diferente para cada extremo (endpoint) para no crear un conflicto en la pila TCP/IP. SQL Server Management Studio (SSMS) tiene una interfaz para configurar extremos de database mirroring y configurar, conmutación por error (failover), pausa, reanudación y para la re-configuración del modo de una sesión de database mirroring. Usted puede acceder a esta interfaz gráfica de usuario, haciendo clic-derecho en una base de datos, seleccionando “Propiedades” y, a continuación, seleccionando la página Espejado (Mirroring) en el cuadro de diálogo “Propiedades de la base de datos”.

Crear extremos de Database Mirroring 1. Ejecute la siguiente consulta en la instancia principal (el código está en el archivo Chapter23 \ code1.sql):

CREATE ENDPOINT Mirroring AUTHORIZATION STATE=STARTED AS TCP (LISTENER_PORT = 5024, LISTENER_IP = ALL) FOR DATA_MIRRORING (ROLE = PARTNER, AUTHENTICATION = WINDOWS NEGOTIATE , ENCRYPTION = REQUIRED ALGORITHM RC4)

Capítulo 23 Alta Disponibilidad

351

2. Ejecute la siguiente consulta en la instancia espejo (el código está en el archivo Chapter23\ code1.sql): CREATE ENDPOINT Mirroring AUTHORIZATION STATE=STARTED AS TCP (LISTENER_PORT = 5024, LISTENER_IP = ALL) FOR DATA_MIRRORING (ROLE = PARTNER, AUTHENTICATION = WINDOWS NEGOTIATE , ENCRYPTION = REQUIRED ALGORITHM RC4)

3. Ejecute la siguiente consulta en el servidor testigo (el código está en el archivo Chapter23\ code1.sql): CREATE ENDPOINT Mirroring AUTHORIZATION STATE=STARTED AS TCP (LISTENER_PORT = 5024, LISTENER_IP = ALL) FOR DATA_MIRRORING (ROLE = WITNESS, AUTHENTICATION WINDOWS NEGOTIATE , ENCRYPTION = REQUIRED ALGORITHM RC4)

=

4. Conéctese a cada instancia y verifique los extremos (endpoints) que acaba de crear mediante la ejecución de los siguientes comandos (el código está en el archivo Chapter23\code1.sql): SELECT * FROM sys.database_mirroring SELECT * FROM sys.database_mirroring_endpoints SELECT * FROM sys.database_mirroring_witnesses

Modos de funcionamiento Usted puede configurar el espejado de bases de datos para tres modos de funcionamiento diferentes: Alta disponibilidad, Alto rendimiento y Alta seguridad. El modo de funcionamiento gobierna la forma que SQL Server transfiere las transacciones entre la base de datos principal y la de espejo, así como los procesos de failover que están disponibles en la sesión de Database Mirroring.

Modo de funcionamiento: Alta Disponibilidad El modo de alta disponibilidad proporciona una transferencia sincrónica duradera entre la base de datos principal y la de espejo, así como la detección automática de falla y la conmutación por error (failover) automática. SQL Server primero escribe todas las transacciones en los buffers de memoria dentro del espacio de memoria de SQL Server. El sistema escribe estos buffers de memoria al registro de transacciones. Cuando SQL Server escribe la transacción en el registro de transacciones, el sistema activa el reflejo de base para comenzar la transferencia de las filas del registro de transacciones para una transacción determinada para el espejo. Cuando la aplicación emite una confirmación de la transacción, la transacción es primero confirmada (commit) en la base de datos espejo. Un acuse de recibo (acknowledgment) de la confirmación se envía al principal, que entonces permite que la confirmación (commit) sea emitida también en el principal. Después que se emite la confirmación en el principal, el acuse de recibo (acknowledgment) se envía de vuelta a la aplicación, lo que le permite continuar con el procesamiento. Este proceso garantiza que todas las transacciones se confirman y se guardan en el registro de transacciones de ambas bases de datos (la principal y la espejo), antes que la confirmación se envíe a la aplicación.

352

Parte VI Descripción de alta disponibilidad

La forma en que Database Mirroring maneja las transacciones, la separa de otras tecnologías de redundancia tales como el envío de registros (log shipping) y la replicación, que deben esperar que una transacción se complete antes de que se pueda transferir a la otra máquina. Database Mirroring transmite los registros a medida que ellos son escritos al principal. Por procesar de esta manera, database mirroring puede manejar transacciones que afectan a un gran número de filas con un muy bajo impacto para las aplicaciones. De hecho, a medida que el tamaño medio de transacciones aumenta, el impacto de la transferencia de datos sincrónica para la base de datos espejo disminuye. La disminución del impacto ocurre porque el acuse de recibo requerido para el modo de funcionamiento de alta disponibilidad requiere un porcentaje menor del tiempo total de ejecución de la transacción, a medida que el tamaño de la transacción se incrementa.

La transferencia sincrónica de datos plantea un problema de planificación de las aplicaciones. Debido a que una transacción no se considera confirmada hasta que SQL Server ha cometido (committed) con éxito al registro de transacciones tanto en las bases de datos principal como la espejo, el modo de funcionamiento de alta disponibilidad incurre en una sobrecarga de rendimiento para las aplicaciones. A medida que la distancia entre el principal y las instancias espejo, aumenta, el impacto en el rendimiento también aumenta.

El modo de operación de alta disponibilidad requiere de un servidor testigo junto con las bases de datos principal y espejo, para detectar automáticamente un fallo en el principal y conmutar por error al espejo. Para detectar el fallo, el modo de funcionamiento de alta disponibilidad utiliza un simple “ping” entre cada instancia participante en la sesión de Database Mirroring. Cuando la sesión de database mirroring conmuta por error, SQL Server revierte los roles del principal y el espejo. SQL Server promueve la base de datos espejo a principal y comienza a servir a la base de datos, a continuación pasa la base de datos principal a espejo. SQL Server también automáticamente invierte el flujo de la transacción. Este proceso es una mejora significativa sobre otros métodos de disponibilidad tales como la replicación o envío de registros (log shipping), que requieren la intervención manual o incluso la reconfiguración para invertir el flujo de la transacción.

En este proceso automático de conmutación por error, el espejo se promueve por si mismo a principal y comienza a servir la base de datos. Pero primero, el servidor testigo debe arbitrar la conmutación por error y la reversión de rol requiriendo dos de los tres roles de database mirroring, o un quórum para acordar la promoción. Un quórum es necesario para evitar que la base de datos sea servida desde más de una instancia dentro de la sesión de database mirroring. Si el principal fallara y el espejo no se pudiera conectar con el testigo, sería imposible alcanzar un quórum y SQL Server no promovería el espejo a principal.

Modo de funcionamiento: Alto rendimiento El modo de funcionamiento de alto rendimiento utiliza una base de datos principal y un espejo, pero no necesita un servidor testigo. Este modo de funcionamiento proporciona una configuración de espera activa que no soporta la detección automática de fallos o conmutación por error automática.

Capítulo 23 Alta Disponibilidad

353

El modo de funcionamiento de alto rendimiento no conmuta automáticamente por error porque las transacciones son enviadas al espejo de forma asincrónica. Las transacciones son confirmadas (committed) a la base de datos principal y el acuse de recibo enviado a la aplicación. Un proceso separado envía constantemente las transacciones para el espejo, que introduce latencia en el proceso. Esta latencia impide que una sesión de database mirroring realice de forma automática la conmutación por error ya que el proceso no puede garantizar que el espejo ha recibido todas las transacciones cuando se produce un error.

Debido a que la transferencia es asincrónica, el modo de funcionamiento High Performance no afecta al rendimiento de las aplicaciones, y usted puede tener una mayor separación geográfica entre la base principal y la base espejo. Sin embargo, debido a que la transferencia de datos es asincrónica, puede perder transacciones en el caso de un fallo en el principal o cuando fuerza una conmutación por error en la sesión de espejado.

Modo de funcionamiento: Alta Seguridad El modo de alta seguridad transfiere las transacciones sincrónicamente, pero no tiene un servidor testigo. La transferencia sincrónica garantiza que todas las transacciones confirmadas en el principal son confirmadas primero en el espejo y eso requiere las mismas consideraciones de rendimiento que para el modo de funcionamiento de Alta disponibilidad (visto anteriormente). Sin embargo, la falta de un testigo impide la conmutación automática al espejo en el caso de un fallo en el principal. Si el principal falla en el modo de Alta Seguridad, debe promover manualmente el espejo para servir a la base de datos.

Una conmutación por error manual sin la pérdida potencial de transacciones sólo es posible en el modo de alta seguridad. Cuando usted realiza manualmente la conmutación por error en el modo de funcionamiento de alta seguridad, SQL Server 2008 desconectará todos las conexiones desde la base de datos principal y cambiará el estado de la sincronización, evitando que se creen conexiones nuevas. La cola del registro de transacción se envía al espejo y luego los roles del principal y el espejo son invertidos. Una vez que los roles se invierten, los clientes pueden volver a conectarse a la base de datos y continuar procesando transacciones.

Almacenamiento en caché Cada tecnología de alta disponibilidad disponibles en SQL Server 2008 tiene un rendimiento y, posiblemente, consecuencias en la aplicación durante una conmutación por error. El “Clustering” evita los problemas de aplicación, ya que utiliza sólo una instancia, sin embargo, la instancia debe reiniciarse en otro nodo, causando así que los cachés de datos y de consulta sean repoblados. El “Envío de registros” (Log shipping) requiere cambios en la aplicación para reconectarse al servidor secundario, y que la caché de datos y la caché de procedimientos sean repobladas. La replicación requiere cambios en la aplicación para volver a conectar a un suscriptor y tiene algún impacto en el rendimiento debido a que la caché de consultas y parte de la caché de datos deben ser repobladas.

El espejado de base datos (Database Mirroring), sin embargo, no tiene problemas de almacenamiento en caché. Además de enviar las transacciones al espejo, database mirroring también realiza transferencias periódicas de metadatos. El propósito de estas transferencias de metadatos es hacer que el espejo lea las páginas en caché de datos.

354

Parte VI Descripción de alta disponibilidad

Este proceso mantiene la caché en el espejo en un estado "semi-caliente". La caché en el espejo no refleja el contenido exacto de la memoria caché en el principal, pero contiene la mayoría de las páginas. Por lo tanto, cuando la sesión de database mirroring conmuta por error, SQL Server no tiene que reconstruir por completo la memoria caché y las aplicaciones no experimentan un gran impacto en el rendimiento, como sí ocurre si utiliza las otras tecnologías de disponibilidad.

Redirección transparente de cliente Uno de los procesos más difíciles de conmutación por error cuando se utiliza el envío de registros (log shipping) o la replicación, consiste en las conexiones de aplicación. Las aplicaciones deben ser redirigidas al servidor secundario para continuar el proceso. Database mirroring puede evitar esta necesidad por medio de una configuración muy particular. La nueva versión de Microsoft Data Access Components (MDAC) que se incluye con Microsoft Visual Studio 2008 contiene una característica relacionada con database mirroring, dentro del objeto “connection” llamada “Transparent Client Redirect”. Cuando un cliente realiza una conexión a una base de datos principal, el objeto de conexión almacena en caché tanto la base principal como la espejo. Este almacenamiento en caché es transparente para el aplicación, y los desarrolladores no necesitan escribir código para implementar esta funcionalidad.

Si una sesión de database mirroring conmuta por error mientras una aplicación está conectada, la conexión se rompe, y el objeto “conection” enviará un error al cliente. El cliente necesitará solamente volver a conectarse, la caché de conexión dentro de MDAC automáticamente redirige la conexión al servidor espejo. La aplicación pensará que se está conectando al mismo servidor al que estaba conectado originalmente, cuando en realidad se está conectando a un servidor diferente.

Páginas corruptas SQL Server 2008 introdujo una mejora significativa con el espejado de base de datos. Aunque un evento muy raro, es posible que se corrompan páginas dentro de una base de datos debido a un fallo transitorio de hardware, por lo general dentro del subsistema de disco. Previamente, SQL Server podría marcar la página corrupta y usted tendría que reparar la página mediante una restauración. En SQL Server 2008, si una sesión de espejado de base de datos está en funcionamiento, cuando el motor de almacenamiento se encuentra con una página corrupta, se recuperará automáticamente la copia de la base de datos espejo y reemplazará la página dañada. La sustitución automática permite que database mirroring “auto-sane” una página corrupta dentro de una base de datos.

Instantáneas de base de datos La base de datos espejo dentro de una sesión de espejado de base de datos está constantemente en un estado de recuperación y es inaccesible a los usuarios. Sin embargo, puede crear una instantánea de base de datos de un espejo base de datos, que proporciona un punto en el tiempo y acceso de sólo lectura.

Capítulo 23 Alta Disponibilidad

355

Inicialización de Database Mirroring Usted configura “database mirroring” basado en base de datos-por-base de datos. Cada base de datos que usted define, debe usar el modelo de recuperación completa (Full recovery) para participar en una sesión de “database mirroring”. Cada espejo de base de datos debe estar sincronizado con la principal utilizando una copia de seguridad antes de iniciar la sesión de mirroring. Los cuatro pasos generales que debe realizar para preparar el espejado de la base de datos son: 1. Asegúrese que las bases de datos están configuradas para utilizar el modelo de recuperación completa. 2. Realizar una copia de seguridad de la base de datos primaria. 3. Restaurar la base de datos a la instancia que aloja la base de datos reflejada mediante el uso de la opción NORECOVERY. 4. Iniciar el espejado de base de datos.

Modelo de recuperación Debido a que el espejado de base mantiene las bases de datos primaria y espejo como duplicados exactos, incluyendo la sincronización de todas las estructuras internas tales como los números de secuencia de registro (LSN); los modelos de recuperación “Simple” y “De registro masivo” son incompatibles con database mirroring. Por lo tanto, el único modelo de recuperación que una base de datos única puede utilizar para participar en el espejado de base es el “modelo de recuperación completa”. Además, no puede cambiar el modelo de recuperación de una base de datos que participa en una sesión de creación de espejo de base de datos.

Copia de seguridad y restauración Debido a que la base de datos principal y el espejo son duplicados uno del otro, se necesita un mecanismo para asegurar que ambas bases de datos sean inicializadas en el mismo estado. El proceso de inicialización para espejado de bases de datos implica la realización de una copia de seguridad de la base de datos principal y su restauración en el espejo. Una copia de seguridad es también el único mecanismo que puede utilizar para inicializar la base de datos espejo, porque todas las estructuras internas tales como los LSN así como los datos deben ser sincronizados.

Cuando restaura la base de datos al espejo, es esencial que especifique la opción NORECOVERY para el comando RESTORE, el cual garantiza que el estado inicial del espejo refleja el estado de la base de datos principal, incluyendo los LSN. Usted encontrará que los procesos de copia de seguridad y restauración consumen la mayor cantidad de tiempo durante la configuración del espejado de base de datos. Sin embargo, es probable que no pueda tener la base de datos principal fuera de línea para inicializar reflejo de base. En su lugar, debido a que la base de datos sobre el espejo está en una estado “no recuperado”, puede aplicar una cadena de registros de transacciones para tener el espejo al día.

En el siguiente ejercicio, iniciará un espejado de base de datos e iniciará una sesión de espejo de base de datos para la base SQL2008SBS.

356

Parte VI Descripción de alta disponibilidad

Nota En el código que aparece a continuación, usted tendrá que reemplazar el nombre de mis máquinas-HOTEK1, HOTEK2 y HOTEK3-con los nombres de las máquinas donde sus instancias principal, espejo y testigo se ejecutan.

Inicializar Database Mirroring 1. Realice una copia de seguridad de la base de datos SQL2008SBS de la instancia principal. 2. Restaure la base de datos a la instancia SQL2008SBS espejo, asegurándose que utiliza la opción NORECOVERY. 3. Conéctese a la instancia espejo y ejecute el siguiente código: ALTER DATABASE SQL2008SBS SET PARTNER = 'TCP://HOTEK1:5024';

4. Conéctese a la instancia principal y ejecute el siguiente código: ALTER DATABASE SQL2008SBS SET PARTNER = 'TCP://HOTEK2:5024'; ALTER DATABASE SQL2008SBS SET WITNESS = 'TCP://HOTEK3:5024';

5. Verifique que el espejado de bases de datos está en ejecución, observando que la base de datos SQL2008SBS, sobre la instancia principal, está en un estado “Principal”, “Sincronizado” y que la base de datos SQL2008SBS sobre el espejo está en un estado “Espejo”, “Sincronizada”.

Envío de registros El envío de registros es una técnica de alta disponibilidad que ha estado disponible desde las primeras ediciones de SQL Server. El propósito del mismo es mantener al menos una copia adicional de la base de datos con el fin de protegerla de un fallo de hardware o daños en la base de datos. Basado en aplicar una interminable cadena de registros de transacciones a una base de datos de otra instancia, el envío de registros (log shipping) es también la menos complicada de todas las técnicas de disponibilidad. Una de las principales diferencias entre el envío de registros y el espejado de base de datos es que, aunque la base de datos espejo sólo puede mantener una única copia de una base de datos, el envío de registros es capaz de mantener múltiples copias para una mayor redundancia.

Componentes del envío de registros Los componentes básicos de “log shipping” son los siguientes: Base de datos primaria Base de datos secundaria Server Monitor

Capítulo 23 Alta Disponibilidad

357

Base de datos principal La base de datos principal está accesible para las aplicaciones y acepta transacciones. Las copias de seguridad del registro de transacciones se toman en forma periódica y se copian en el servidor que aloja la base de datos secundaria.

Base de datos secundaria La base de datos secundaria, también referida como “la que está en espera” (standby), normalmente está inaccesible, y las copias de seguridad del registro de transacciones de la base de datos primaria son restauradas de forma continua. La base de datos secundaria puede estar en dos modos diferentes: el modo STANDBY o en el modo NORECOVERY. Cuando la base de datos secundaria está en modo en espera (STANDBY), los usuarios pueden conectarse y emitir una declaración SELECT contra la base de datos. Cuando la base de datos secundaria está en modo NORECOVERY, los usuarios no pueden conectarse a dicha base de datos. En cualquiera de los modos, los registros de transacciones se pueden restaurar en la base de datos secundaria. Los registros de transacciones no se pueden restaurar cuando los usuarios se conectan a la base de datos, por lo que no se debe utilizar el modo STANDBY para arquitecturas de alta disponibilidad.

Server Monitor El servidor de supervisión (monitor), el cual es opcional dentro de una arquitectura de envío de registros, contiene un conjunto de jobs que envían alertas cuando la sesión de envío de registros se percibe fuera de sincronía.

Inicialización de envío de registros Lograr ejecutar una arquitectura de envío de registros es un proceso bastante sencillo que no hace incurrir en tiempo de inactividad (caídas) a la base de datos primaria. El proceso básico para la inicialización del envío de registros es el siguiente: 1. Debido a que las copias de seguridad necesitan ser accedidas a través de servidores, usted necesita crear un recurso compartido tanto en las bases primaria como en la secundaria. 2. Crear jobs para realizar copias de seguridad del registros de transacciones, copiar los logs a la secundaria, y restaurar los registros (logs). 3. Restaurar una copia de seguridad completa en la base de datos secundaria. 4. Restaurar todos los registros de transacciones posteriores. 5. Poner en marcha jobs para automatizar la recuperación de los registros. 6. Copiar todos los objetos a nivel de instancia de los que la base de datos secundaria dependa para los Servicio de aplicaciones.

358

Parte VI Descripción de alta disponibilidad

Creando Jobs Cuando configura el envío de registros se crean 3 jobs: Job de Copia de seguridad Job de Copia Job de restauración El job de copia de seguridad siempre se ejecuta en el primario. La tarea (job) de restauración siempre se ejecuta en el secundario. Aunque el job de copia se puede ejecutar en el primario o el secundario, éste generalmente es configurado para ejecutarse en el secundario.

Exposición de pérdida de datos La regla general para la exposición de pérdida de datos es dos veces el intervalo de las copias de seguridad del registro de transacciones. Por ejemplo, si las copias de seguridad del registro de transacciones se ejecutan cada 5 minutos, la exposición de pérdida de datos dentro de un entorno de envío de registro se considera que es 10 minutos. Este intervalo representa el tiempo que tarda en completar una copia de seguridad del registro de transacciones y lo copia a la secundaria. En los sistemas que experimentan un volumen de transacciones muy alto, las copias de seguridad del registro de transacciones pueden parecer que se producen casi continuamente, ya que podría tener casi el mismo tiempo para completar una copia de seguridad como el intervalo en el que está programada la copia de seguridad.

Restauración de copias de seguridad Debido a que el envío de registros se basa en las copias de seguridad del registro de transacciones, primero debe restaurar una copia de seguridad completa sobre la secundaria. La base de datos no puede ser recuperada para permitir restaurar registros de transacciones adicionales. Durante la configuración del envío de registros, usted puede optar por tener una copia de seguridad completa creada inmediatamente, copiada a la secundaria, y restaurada antes de que el envío de registros siga adelante con copias de seguridad del registro de transacciones adicionales.

Restaurar una copia de seguridad completa durante la configuración Generalmente, no se recomienda que el envío de registros genere una copia de seguridad completa “sobre la marcha” (on the fly) durante la configuración de la sesión. Esto puede tener un impacto muy grande en un entorno existente, sobre todo si tiene bases de datos de más de aproximadamente 10 GB. Cuando se configura el envío de registros, usted ya tendrá copias de seguridad existentes. Para iniciar el envío de registros en un entorno típico de producción, generalmente deberá seguir estos pasos:

Buscar la última copia de seguridad completa, copiarla a la secundaria, y restaurarla dejando la base de datos ya sea en el modo NORECOVERY como en el modo STANDBY. Copiar y restaurar el último respaldo diferencial a la secundaria, dejando la base de datos ya sea en el modo NORECOVERY como en el modo STANDBY.

Capítulo 23 Alta Disponibilidad

359

Copiar y restaurar todas las copias de seguridad del registro de transacciones desde la última diferencial, dejando la base de datos, ya sea en modo NORECOVERY o STANDBY. Desactivar el job existente para respaldar los registros de transacciones. Copiar y restaurar las copias adicionales de seguridad del registro de transacciones al secundario. Iniciar el envío de registros. Este proceso asegura que se minimice el tiempo necesario para inicializar el envío de registros al no tener que esperar que se complete otro “full backup”. También asegura que se minimiza el espacio de disco consumido. El envío de registros se basa en una cadena continua de copias de seguridad del registro de transacciones que se aplica a la secundaria. Usted debe tener mucho cuidado al configurar el job de copia de seguridad del registro de transacciones. El job de copia de seguridad para el envío de registros reemplaza cualquier copia de seguridad del registro de transacciones existentes contra la base de datos primaria. En este ejercicio, configurará una sesión de envío de registros para la base de datos SQL2008SBS entre dos instancias de SQL Server. Usted tendrá que reemplazar los nombres de instancia “HOTEK2” y “HOTEK2\INSTANCE2” con los nombres de las instancias en sus máquinas.

Nota Como se señala en la introducción del libro, estoy usando Windows XP Pro SP2 para todos los ejercicios. Si en cambio, está ejecutando Windows Vista, Windows Server 2003 o Windows Server 2008 los cuadros de diálogo para compartir una carpeta, se verán un poco diferente. También podrá asignar directamente permisos a cuentas específicas, que no es posible con Windows XP Pro SP2. Los ejercicios incluyen las asignaciones de permisos de cuenta específicas para las acciones que corresponden a la configuración para las personas que utilicen Windows Vista, Windows Server 2003, o Windows Server 2008, mientras que las capturas de pantalla muestran sólo lo que se puede ver en Windows XP Pro SP2.

Iniciar envío de registros 1. Abra el Explorador de Windows en el primario y cree una carpeta llamada LSBackup. 2. Comparta esta carpeta y conceda permisos de control total al grupo SQLServerMS SQLUser$$ en el primario, así como permisos de lectura al grupo SQLServerSQLAgentUser$$ en el secundario. 3. Abra el Explorador de Windows en el secundario y cree una carpeta con el nombre LSCopy. 4. Comparta esta carpeta y conceda permisos de control total al grupo SQLServerMSS QLUser$$ y al grupo SQLServerSQLAgentUser$$ en el secundario. 5. Pruebe el acceso para asegurarse de que se han concedido los permisos correctamente. 6. Compruebe que la base de datos SQL2008SBS está configurada para el modelo de recuperación Completa (FULL recovery). Si no lo está, cambie el modelo de recuperación a FULL. 7. Inicie SSMS, conéctese a la instancia principal en el Explorador de objetos, haga clic en la base de datos SQL2008SBS, elija Propiedades y seleccione “Envío del registro de transacciones”.

360

Parte VI Descripción de alta disponibilidad

8. Seleccione la casilla de verificación "Habilitar ésta como base de datos primaria en una configuración de envío de registros" y haga clic en “Configuración de copia de seguridad”. 9. En la caja de texto “Ruta de red para copia de seguridad”, escriba el path para la “Universal Naming Convention” (UNC) para el recurso compartido que creó en el paso 1. 10. En el cuadro de texto “Si la carpeta de copia de seguridad se encuentra en el Servidor Primario”, introduzca la ruta de acceso física al directorio en el que se almacenarán las copias de seguridad. 11. Cambie el intervalo de alerta a 6 minutos, el intervalo del programa de copia de seguridad a 2 minutos, configure para que la copia de seguridad se comprima y haga clic en Aceptar.

Capítulo 23 Alta Disponibilidad

361

362

Parte VI Descripción de alta disponibilidad

12. Haga clic en “Agregar” para agregar un nuevo secundario. 13. Haga clic en Conectar y conéctese a la instancia secundaria, deje el nombre de la base de datos secundaria establecida en SQL2008SBS. 14. Usted permitirá el envío de registros para generar una copia de seguridad completa, así que seleccione “Sí, generar un “Full Backup” de la base de datos principal y restaurarlo en la base de Secundaria”.

15. Haga clic en “Opciones de restauración”, escriba la ruta del directorio en el que desea que los archivos de datos y de registro residan en el secundario y, a continuación, haga clic en Aceptar.

Capítulo 23 Alta Disponibilidad

363

16. Haga clic en la ficha “Copiar archivos”. 17. Establezca el destino del "recurso compartido de archivo" donde se copiarán las copias de seguridad del registro de transacciones y cambie el intervalo de copia a 2 minutos..

18. Haga clic en la ficha “Restauración del Registro de transacciones”. 19. Seleccione Modo No Recovery, configure 0 minutos de retraso, configure el alerta a los 6 minutos, ajuste el programar de restauración a 2 minutos, y luego haga clic en Aceptar. 20. Haga clic en Aceptar para generar la configuración de envío de registros, realizar la copia de seguridad de la base de datos SQL2008SBS en el primario, restaurar SQL2008SBS al secundario, crear los jobs de envío de registros y alertas, e iniciar el envío de registros. 21. Verifique que las copias de seguridad están yendo a la carpeta correcta, se copian correctamente desde la carpeta LSBackup a la carpeta LSCopy, y se restauran en el secundario.

Replicación La replicación está diseñada como un mecanismo de distribución de datos. En el nivel más básico, los cambios realizados en una base de datos son distribuidos a uno o más objetivos. El motor de replicación núcleo está diseñado para una aplicación muy flexible, pero la arquitectura de núcleo puede ser aprovechada para proporcionar la disponibilidad de una base de datos ya que una copia redundante de datos se mantiene en sincronización con una copia maestra.

364

Parte VI Descripción de alta disponibilidad

Los componentes de una replicación Los datos que se replican se definen por medio de tres componentes básicos en la definición.

Artículos Un artículo es el bloque de construcción básico de la replicación y define el nivel más granular de distribución de datos. Un artículo puede ser definido en una tabla, vista, procedimiento almacenado o función. El tipo de artículo que es más relevante para la alta disponibilidad es un artículo definido en una tabla. El artículo define el conjunto de datos dentro de la tabla que SQL Server replica en una o más bases de datos.

Publicaciones Una publicación es el nivel más granular dentro de la arquitectura de replicación. Las publicaciones son agrupaciones de artículos que definen el conjunto de replicación.

Filtros La replicación es la única entre las diversas tecnologías de alta disponibilidad que tiene la capacidad de hacer sólo una parte de una base de datos redundante. Usted puede aplicar uno o varios filtros a cada artículo para restringir el conjunto de datos que se replican. Puede filtrar los artículos por filas o por columnas. Un filtro de columna especifica un subconjunto de las columnas dentro de una tabla. El filtro de la columna permite que los datos se repliquen, pero la información que podría ser sensible puede ser excluida. Un filtro de registro restringe el conjunto de filas que se replican. Hay tres tipos distintos de filtros de fila que se pueden aplicar.

Un filtro de fila estático está predefinido cuando se crea el artículo y restringe el artículo en el mismo subconjunto de datos, independientemente del subscriptor. Un ejemplo de un filtro de fila estático es como sigue: WHERE State = ‘TX’ Un filtro de fila dinámico, disponible sólo con replicación de mezcla (merge), le permite definir un filtro que no esté fijo en un artículo. Durante el proceso de sincronización, el filtro se calcula basándose en información del subscriptor, que permite una publicación simple para distribuir diferentes conjuntos de datos para cada subscriptor. Un ejemplo de un filtro dinámico es el siguiente: WHERE UserName = suser_sname() Un filtro combinado (join), disponible sólo en la réplica de mezcla (merge), le permite filtrar una tabla basada en una relación a una tabla “parent”. Por ejemplo, usted podría tener una tabla con los clientes, sus órdenes correspondientes, y los detalles de los pedidos. Si la tabla de clientes tiene un filtro que restringe el conjunto de datos a un estado en particular, usted también desearía filtrar los pedidos y detalles de las órdenes de la misma manera. Sin embargo, la columna de estado no existiría en ninguna de estas tablas. Mediante el empleo de un filtro de combinación (join filter), puede filtrar los clientes en función del estado y luego también tener los filtros de las tablas órdenes y del detalle de las órdenes basados en el subconjunto de los clientes que están siendo replicados.

Capítulo 23 Alta Disponibilidad

365

Roles de replicación Puede configurar las bases de datos (y correspondientemente, las instancias que alojan las bases de datos) en tres roles diferentes. El editor (publisher) mantiene la copia maestra de los datos dentro de una arquitectura de replicación. Usted configura la instancia que aloja la base de datos del editor con la publicación que define el conjunto de datos a ser replicados. El suscriptor (subscriber) es la base de datos que está recibiendo cambios desde el motor de replicación definido por el editor del que está suscripto. Un suscriptor puede recibir cambios de más de una publicación. El distribuidor (distributor) es el motor principal dentro de una arquitectura de replicación. La base de datos de distribución se almacena en la instancia que está configurada como distribuidor. En cualquier arquitectura de replicación, el distribuidor es el lugar en el que todos los agentes de replicación se ejecutarán de forma predeterminada.

Una instancia de SQL Server puede ser configurada como un distribuidor. Una base de datos puede ser configurada como un editor, suscriptor, o ambos.

Agentes de replicación Al comenzar a trabajar con replicación, muchas personas están confundidas por la forma en que el motor de replicación reacciona para diversas situaciones de error. Después de todo, SQL Server no entiende cómo es el tiempo de espera de una transacción o cómo volver a intentar una operación. Lo fundamental para entender acerca de la replicación es que no es una parte del núcleo del motor de SQL Server en absoluto. La replicación opera externamente al motor de SQL Server a través de un conjunto de ejecutables conocidos como “Agentes de replicación”, que hacen que el motor de replicación sea simplemente otra aplicación que se conecta a SQL Server y procesa datos. Debido a que es una aplicación, el motor de replicación está limitado y reacciona de la misma manera que cualquier otra aplicación que tiene que crear una conexión OLE DB a SQL Server.

Agente de instantáneas El Agente de instantáneas es actualmente Snapshot.exe. Este agente es responsable de extraer el esquema y los datos que deben ser enviados del editor al suscriptor. Snapshot.exe se utiliza en instantáneas, transaccional y replicación de mezcla (merge replication).

Agente de lector del registro El Agente de lector del registro, Logread.exe, sólo se utiliza en la replicación transaccional. Se utiliza para extraer las transacciones confirmadas desde el registro de transacciones en el editor que necesita ser replicado. Una vez extraídas, el Agente de lector del registro asegura que cada transacción es

366

Parte VI Descripción de alta disponibilidad

re-empaquetada y escrita en la base de datos de distribución en exactamente la misma secuencia que la transacción que fue emitida contra el editor. La secuenciación por el Agente de lector del registro es crítica para asegurar que las transacciones no se aplican fuera de orden a un suscriptor.

Agente de distribución El Agente de distribución, Distrib.exe, se usa con instantáneas y replicación transaccional. El Agente de distribución tiene dos funciones: la aplicación de instantáneas y el envío de transacciones. El Agente de distribución es responsable de la aplicación de cada instantánea generada con instantáneas o replicación transaccional para todos los suscriptores. También es responsable de la aplicación de todas las transacciones escritas a la base de datos de distribución por parte del Agente de lector del registro para todos los suscriptores.

Agente de mezcla (merge) El Agente de mezcla, Replmerg.exe, se utiliza en la replicación de mezcla. El Agente de mezcla aplica la instantánea generada cuando se inicializa el suscriptor. El Agente de mezcla también es responsable del intercambio de transacciones entre el editor y el suscriptor.

Agente de lectura de cola El Agente de lectura de cola, Qrdrsvc.exe, se utiliza sólo cuando la opción de actualización de cola para la replicación transaccional o de instantáneas, ha sido habilitada. El agente de lectura de cola es responsable de transferir la cola en el suscriptor al editor.

Métodos de replicación El motor de replicación tiene tres métodos diferentes que puede utilizar para replicar datos: replicación instantánea, replicación transaccional y la replicación de mezcla.

Replicación de Instantánea La replicación de instantáneas toma todo el conjunto de datos y los envía durante cada ciclo del motor de replicación. Esta es una copia completa de los datos que se aplica al suscriptor. Cualquier conjunto de transacciones que ocurra contra el editor se capturan y se envían a un suscriptor sólo la próxima vez que se ejecute una instantánea.

La réplica de instantáneas utiliza el Agente de instantáneas y el Agente de distribución. Cuando se inicia la instantánea el Agente de instantáneas extrae el esquema y el programa BCPs (bulk copy program) copia masivamente los datos a la carpeta de la instantánea. La carpeta de instantánea es un directorio que se especifica al configurar la replicación. Este directorio sirve como ubicación predeterminada para una instantánea. Cuando se crea una publicación, puede sustituir la ubicación de la carpeta de instantáneas para la publicación específica.

Capítulo 23 Alta Disponibilidad

367

Después de extraer el esquema y todos los datos, el Agente de instantáneas se apaga. El Agente de distribución entonces recoge y aplica la instantánea a cada suscriptor. Durante este proceso, las tablas existentes se eliminan y se vuelven a crear a partir de las secuencias de comandos de esquema en la carpeta de la instantánea, a continuación, los datos se copian en las tablas de cada suscriptor utilizando BCP.

La replicación de instantáneas realiza una sustitución completa de los datos en el suscriptor. No se utiliza normalmente para una alta disponibilidad porque las transacciones emitidas entre las aplicaciones de una instantánea no son enviadas al suscriptor.

Replicación transaccional La replicación transaccional comienza con una instantánea inicial aplicándola al suscriptor para asegurar que las dos bases de datos están sincronizadas. Como las transacciones posteriores son emitidas contra el editor, el motor de replicación las aplica al suscriptor. El flujo de transacciones incremental desde el editor al suscriptor hace que la replicación transaccional sea una buena opción para mantener una copia secundaria de una base de datos para disponibilidad o para descargar operaciones de reporte. La configuración más común para la replicación transaccional está en un entorno servidor-a-servidor.

Usted puede configurar la replicación transaccional con dos modos opcionales -suscriptores de actualización inmediata y suscriptores de actualización en cola- que permiten que las transacciones sean emitidas contra un abonado. Además de enviar transacciones desde un editor a un suscriptor, la replicación transaccional se puede implementar en dos arquitecturas alternativas: replicación transaccional bidireccional y replicación transaccional peer-to-peer (par a par o P2P).

Replicación con mezcla (merge) La replicación con mezcla (o merge replication), está diseñada principalmente para el procesamiento móvil, desconectado. El editor y el suscriptor no están normalmente conectados en todo momento con este método de replicación, aunque eso no es requerido. Al igual que la replicación transaccional, se aplica una instantánea inicial al suscriptor para asegurar que se sincronice y luego los cambios posteriores sean enviados al abonado. A diferencia de la replicación transaccional, la replicación de mezcla está diseñada para permitir que los cambios sean realizados tanto en el publicador como en el suscriptor de forma predeterminada. El motor de mezcla entonces intercambia todos los cambios entre el editor y el suscriptor durante cada ciclo del agente.

En el siguiente ejercicio, configurará la publicación para una instancia. Nota Los problemas más comunes que causan errores dentro de una configuración de replicación son la seguridad y la conectividad. En los ejercicios de replicación, usted trabajará ambas cuestiones mediante la reproducción de la base de datos SQL2008SBS a otra base de datos dentro de la misma instancia.

368

Parte VI Descripción de alta disponibilidad

Configurar la publicación 1. Inicie el Explorador de Windows, busque la carpeta llamada repldata dentro de su directorio de instalación, el valor predeterminado es C:\Archivos de programa\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\repldata, y comparta esta carpeta con permisos de control total al grupo 2. Abra el SSMS y conéctese a la instancia del Examinador de objetos. 3. Haga clic derecho en el nodo Replicación, seleccione Configurar Distribución, y a continuación, haga clic en Siguiente. 4. Seleccione el primer botón de la instancia para que actúe como su propio distribuidor y haga clic en Siguiente.

5. Configure la carpeta de instantáneas para el recurso compartido que creó en el paso 1 y haga clic en Siguiente. 6. Deje los valores por defecto en el “nombre y la ubicación” de la base de datos de distribución, y a continuación, haga clic en Siguiente. 7. Asegúrese que la instancia está seleccionada para el editor (publisher) y haga clic en Siguiente. 8. Compruebe que la casilla de verificación “Configurar la distribución” esté seleccionada y haga clic en Siguiente. 9. Haga clic en Finalizar para habilitar la publicación y, a continuación, haga clic en Cerrar. 10. Compruebe que ahora tienen una base de datos llamada distribución creada en la instancia.

Capítulo 23 Alta Disponibilidad

369

En el siguiente ejercicio, creará una publicación transaccional contra la base de datos SQL2008SBS junto con una suscripción a la publicación.

Implementar la replicación transaccional 1. Abra SSMS y conéctese a la instancia que va a utilizar para la replicación. 2. Cree una base de datos llamada SQL2008SBSTranSubscriber en la misma instancia que la base de datos SQL2008SBS. 3. Si es necesario, expanda “Replicación”. Haga clic derecho en “Publicaciones locales”, elija nueva publicación, y haga clic en Siguiente. 4. Seleccione la base de datos SQL2008SBS y haga clic en Siguiente.

370

Parte VI Descripción de alta disponibilidad

5. Seleccione publicación transaccional y haga clic en Siguiente. 6. Seleccione todas las tablas y haga clic en Siguiente.

7. No se aplicará ningún filtro así que haga clic en Siguiente. 8. Seleccione la casilla de verificación “Crear una instantánea inmediatamente y mantenerla disponible para inicializar Suscripciones” y haga clic en Siguiente. 9. Haga clic en Configuración de seguridad. 10. Seleccione la opción para “Correr bajo la cuenta servicio del Agente SQL Server”, junto con la opción “Para suplantar la cuenta de proceso” y haga clic en Aceptar. 11. Haga clic en Siguiente, compruebe que la casilla de verificación “Crear La publicación” está seleccionada y haga clic en Siguiente. 12. Déle un nombre a la publicación y haga clic en Finalizar. 13. Cuando el asistente termine de crear la publicación, haga clic en Cerrar. 14. Si se fija en la carpeta repldata, debería ver un gran número de archivos que se generaron por el Agente de instantáneas. 15. Expanda “Publicaciones locales”, haga clic derecho en la publicación que acaba de crear, seleccione Nuevas Suscripciones y haga clic en Siguiente.

Capítulo 23 Alta Disponibilidad

371

16. Verifique que su publicación está seleccionada y haga clic en Siguiente. 17. Compruebe que “Ejecutar todos los agentes en el distribuidor” esté seleccionado y haga clic en Siguiente.

18. Seleccione la casilla de verificación situada junto a la instancia, seleccione la base de datos de SQL2008SBSTranSubscriber de la lista desplegable de base de datos de suscripción, y haga clic en siguiente. 19. Haga clic en el botón de puntos suspensivos junto a su suscriptor en la ventana Propiedades de suscripción. 20. Seleccione la opción para “ejecutarse bajo la cuenta de servicio del Agente SQL Server”, junto con la opción para “Suplantar la cuenta de proceso”. Haga clic en Aceptar y, a continuación, haga clic en Siguiente.

372

Parte VI Descripción de alta disponibilidad

Capítulo 23 Alta Disponibilidad

373

21. En la página de “Programación de sincronización”, deje la opción “Programación del Agente para que por omisión se ejecute continuamente"” y haga clic en Siguiente. 22. Deje las propiedades de una suscripción como “iniciar inmediatamente” y haga clic en Siguiente. 23. Compruebe que la casilla de verificación “Crear la(s) suscripción(es) “ está seleccionada. Haga clic en Siguiente y, a continuación, haga clic en Finalizar. 24. Cuando la suscripción es creada, haga clic en Cerrar. 25. Espere unos minutos para que el Agente de distribución aplique la instantánea al suscriptor y luego verifique la base de datos SQL2008SBSTranSubscriber. 26. Usted debería ser capaz de hacer cambios a los datos en la base de datos SQL2008SBS y ver que los cambios aparecen en la base de datos SQL2008SBSTranSubscriber dentro de un período corto de tiempo.

Capítulo 23 Referencia Rápida Para

Haga lo siguiente

Proporcionar conmutación automática por Implemente conmutación por error o espejado de base (cualquiera error a sus bases de datos para proteger de las dos). fallas de hardware únicamente. Proporcionar conmutación automática por Implemente espejado de base de datos en el modo de operación error a sus base de datos para proteger de de “Alta disponibilidad”. fallos de hardware y de almacenamiento. Proporcionar una copia secundaria de su base de datos sin impactar el rendimiento de las transacciones.

Implemente espejado de base en el modo de operaciones de “Alto rendimiento”, el “Envío de registros” o bien la replicación (cualquiera de los 3).

Proporcionar más de una copia secundaria de una base de datos.

Implemente el “Envío de registros” o bien replicación.

Hacer una copia redundante de una porción Implementar la replicación. de una base de datos.

Parte VII

Business Intelligence En esta parte: Capítulo 24: SQL Server Integration Services. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377 Capítulo 25: SQL Server Reporting Services. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413 Capítulo 26: SQL Server Analysis Services. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451

375

377

Capítulo 24

SQL Server Integration Services Después de completar este capítulo, usted será capaz de ■ Crear un proyecto de SSIS. ■ Construir un paquete. ■ Implementar tareas y transformaciones. ■ Realizar el control de excepciones. ■ Administrar configuraciones de paquetes. ■ Implementar un paquete. Los primeros 23 capítulos han proporcionado una visión general de las funciones disponibles en el motor relacional. Por sí mismo, el motor relacional representa una plataforma flexible y rica para el desarrollo de aplicaciones empresariales. Lo que diferencia a SQL Server de otro motor de base de datos, es la inclusión de tres productos adicionales, de clase empresarial, referidos colectivamente como la pila de inteligencia de negocios. SQL Server Integration Services (SSIS) está diseñado para proporcionar la infraestructura de componentes que permiten que los datos se trasladen de un sistema a otro, al mismo tiempo que permite la manipulación de los datos que se mueven, en un formato deseado.

Más información: Para más detalles de SSIS, consulte SQL Server 2008 Integration Services Paso a paso.

A lo largo de este libro, ha trabajado con una plataforma de desarrollo principal, la ventana de consulta en SQL Server Management Studio (SSMS). En este capítulo, usted aprenderá sobre la segunda plataforma importante de desarrollo, el Business Intelligence Development Studio, en lo sucesivo referido como BIDS. También podrá aprender acerca de los componentes disponibles dentro de SSIS y la forma de construir paquetes flexible SSIS para su entorno.

Nota Hasta este punto, se ha trabajado con una base de datos básica SQL2008SBS. Los capítulos de esta Parte IV, "Inteligencia de Negocios", se basan en tener una población mucho mayor de datos aleatorios. El CD contiene una copia de seguridad para la base de datos SQL2008SBS en “Chapter24\sql2008sbs.bak” en las muestras que acompañan el presente libro. Usted tendrá que restaurar esta copia de seguridad sobre la base de datos SQL2008SBS, antes de proceder con los capítulos de la Parte IV.

378

Parte VII Business Intelligence

BIDS Vista general Para aquellos que ya escribieron aplicaciones utilizando Visual Studio, BIDS será muy familiar. BIDS es el shell de Visual Studio en el que han sido registradas las plantillas de proyectos y componentes de Integración de Servicios (Integrations Services), Servicios de Presentación de Informes (Reporting Services) y Servicios de Análisis (Analysis Services). Si usted ya desarrolló con Visual Studio 2008, verá que los proyectos de SSIS, SSRS, SSAS aparecen en su lista de proyectos al iniciar Visual Studio.

Nota Debido a limitaciones de espacio dentro de una página impresa, sólo será capaz de ver partes del entorno general de BIDS. Como cualquier desarrollador de Visual Studio le podrá decir, a medida que aumenta el espacio de la pantalla, su productividad aumenta.

En el siguiente ejercicio, creará un nuevo proyecto SSIS y se podrá familiarizar con los componentes básicos del entorno. Crear un proyecto de SSIS

1. Abra el Explorador de Windows y cree una carpeta denominada “C:\test” que se utilizará como fuente de ubicación para todas las tareas que se realizarán en la construcción de un paquete SSIS. 2. Inicie BIDS. 3. Seleccione el proyecto de “Integration Services” y especifique la configuración como se muestra en el gráfico que sigue y haga clic en Aceptar.

4. Una vez que el paquete ha sido inicializado, debería ver un entorno similar al del gráfico siguiente.

Capítulo 24 - SQL Server Integration Services

379

En la parte inferior de la pantalla, usted tendrá tres solapas: Lista de errores, Lista de tareas y Salida. La lista de errores muestra los errores o advertencias acerca de su paquete durante el diseño o la depuración. La lista de tareas es un área de pruebas para realizar un seguimiento de una lista de las tareas que debe realizar mientras se trabaja en la solución. Las ventanas de salida mostrarán el estado y la información de progreso junto con los mensajes durante la ejecución de un paquete. Tal como usted ya se ha familiarizado, la chinche en cada panel le permitirá auto-ocultar el panel con el fin de aumentar el espacio en pantalla para otros componentes. En la parte derecha de la pantalla, se encuentran las ventanas de Explorador de soluciones y de Propiedades. El Explorador de soluciones se utiliza para agrupar todos los objetos en un proyecto y le permite añadir fuentes de datos (data sources), vistas de origen de datos (data source views) y paquetes al proyecto. La Ventana Propiedades, es donde puede ver y editar las propiedades del objeto seleccionado.

Nota En este capítulo, vamos a pasar por alto los orígenes de datos y las vistas de orígenes de datos para simplificar. Usted aprenderá todo sobre los orígenes de datos y vistas de origen de datos en el capítulo 25, "SQL Server Reporting Services ", y el Capítulo 26," SQL Server Analysis Services. "

Cambiar el nombre de un paquete SSIS

1. Seleccione el paquete recién creado en el Explorador de soluciones. 2. En la ventana Propiedades, cambie el nombre a SQL2008SBS.dtsx.

380

Parte VII Business Intelligence

3. Haga clic en cualquier lugar fuera del campo Nombre de archivo y haga clic en Sí cuando aparezca el cuadro de diálogo preguntándole si desea cambiar el nombre del paquete. 4. Navegue hasta el directorio “C:\Test” en el Explorador de Windows para ver los resultados de la creación del proyecto y cambie el nombre del paquete. Las dos áreas donde pasará la mayor parte del tiempo son la caja de herramientas en el lado izquierdo y la superficie de diseño en el panel central. La caja de herramientas contiene todas las tareas y transformaciones que se pueden utilizar para construir un paquete SSIS. La superficie de diseño se utiliza para construir el flujo y el movimiento de datos del paquete. La superficie de diseño se divide en cuatro pestañas distintas: Flujo de control, Flujo de datos, Manejadores de eventos y Explorador de paquetes. La ficha Explorador de paquetes le permite navegar por su paquete de una manera jerárquica para ver todos los componentes que se han configurado. La ficha Flujo de control es donde se diseña el proceso de negocio que será ejecutado por su paquete. La ficha Flujo de datos es donde se diseña cómo se mueven y son manipulados los datos. La ficha Manejadores de eventos le permite especificar las acciones en respuesta a un evento de tal paquete como por ejemplo un error.

Nota Las tareas y las transformaciones que se discutirán en este capítulo se limitan a las que se incluyen en SQL Server 2008. Usted puede diseñar sus propias tareas y transformaciones que luego pueden ser registradas en BIDS y utilizarse dentro de sus paquetes.

Tareas SSIS viene con 40 tareas diferentes que se pueden añadir a un paquete. Las tareas se dividen en dos grandes categorías: las tareas de control de flujo y las tareas de plan de mantenimiento. Nota El plan de mantenimiento que generó en el Capítulo 20, "Recuperación de datos" es un paquete de SSIS.

Las principales tareas que va a utilizar se muestran en la Figura 24-1. El conjunto de tareas que comienzan con "Transfer" se utilizan para copiar objetos dentro de un entorno y se pueden utilizar para la implementación de código o para sincronizar objetos a un servidor en espera que participe para “envío de registros” (log shipping) o para el espejado de base de datos (database mirroring). Las tareas de Analysis Services y de minería de datos proporcionan una funcionalidad específica para la gestión de modelos de minería de datos y cubos de Analysis Service. Las tareas de ejecución DDL de Analysis Services le permiten a un paquete SSIS manipular la estructura de un cubo, mientras que la tarea de procesamiento de Analysis Services iniciará el procesamiento del cubo una vez que haya terminado de cargar nuevos datos para el almacén de datos.

Capítulo 24 - SQL Server Integration Services

381

FIGURA 24-1 El control de flujo de tareas

Los objetos contenedores: For Loop, Foreach Loop y Sequence, se utilizan para agrupar tareas o para ejecutar repetidamente un conjunto de tareas. El contenedor Sequence se utiliza para agrupar las tareas en una unidad lógica de trabajo. El bucle For Loop ejecuta las tareas dentro del contenedor siempre y cuando se cumpla una condición, similar a la construcción WHILE discutida en el capítulo 12, "Procedimientos almacenados." Foreach Loop ejecutará las tareas dentro del contenedor para cada elemento dentro de la colección especificada. Por ejemplo, usted podría construir un Foreach Loop utilizando el numerador de archivos para ciclar a través de todos los archivos dentro de un directorio para el procesamiento o podría recuperar un conjunto de resultados de un servidor SQL Server y ejecutar el bucle para cada fila del conjunto de resultados.

Las tareas de scripting, “ActiveX” y “Scripts”, le permiten crear secuencias de comandos en el flujo del proceso de su paquete. La tarea “ActiveX Script” es específica para la creación de scripts ActiveX. La tarea Script proporciona acceso a toda la potencia de programación de Visual Basic. NET o C #. NET donde usted puede llamar a los métodos del Framework. NET y realizar cualquier operación para la que tenga acceso de seguridad.

Las tareas Execute proporcionan la capacidad de ejecutar scripts T-SQL, lanzar paquetes enteros SSIS, ejecutar paquetes DTS legacy (heredados), o abrir una ventana de comandos para ejecutar una aplicación, un archivo por lote, o comandos del sistema operativo.

382

Parte VII Business Intelligence

La tarea de inserción masiva (Bulk), es una tarea especializada para realizar una operación BULK INSERT. Esta tarea requiere un archivo de entrada y envía los datos directamente a una tabla. No se pueden validar o manipular datos con la tarea de inserción masiva. La tarea “Sistema de archivos” (File System) le permite interactuar con el sistema de archivos para crear / mover / borrar directorios o mover / borrar / renombrar archivos. La tarea FTP proporciona la capacidad de interactuar con un servidor FTP. La tarea FTP se limita a comandos estándar de FTP y no puede interactuar con servidores FTP especializados. Con una tarea FTP, usted puede enviar/recibir archivos, así como crear/eliminar directorios y archivos locales o remotos. Una falta de la tarea FTP es que no se puede recuperar una lista de archivos de un servidor FTP para los casos en los que sólo quiere enviar/recibir archivos que aún no existen. Para lograr un envío/recepción incremental, tendrá que llenar con una lista de archivos un bucle Foreach que llamará iterativamente una tarea FTP para cada archivo incremental que desee. La “cola de mensajes”, “correo enviado”, y las tareas de “Web Service”, se utilizan para permitir que un paquete interactúe con cada uno de estos sistemas respectivos. La tarea XML es un objeto especializado que le permite emitir comandos XML contra documentos XML tales como la aplicación de una transformación XML para manipular una estructura XML. Las tareas WMI están diseñadas para que un paquete pueda responder a los eventos de Windows. WMI es la “Windows Management Instrumentation” (Instrumental de administración de Windows), que es una API expuesta por el sistema operativo. Cualquier acción que se realiza dentro de Windows, tales como iniciar/detener un servicio, la creación de un archivo, y el cambio de permisos, tiene su correspondiente evento WMI que se dispara. WMI también tiene un lenguaje de consulta que puede ser usado contra cualquier objeto del sistema operativo, tales como conseguir el tamaño de un archivo o la lista de miembros de un grupo de seguridad. La tarea WMI Data Reader (Lector de datos), le permite ejecutar consultas WMI. La tarea WMI de “Monitor de eventos” le permite a un paquete responder contra un evento WMI. Uno de los usos más interesantes de una tarea “Monitor de eventos WMI” es la de procesar los archivos que se envían desde sistemas externos. La parte más difícil del proceso de archivos es la de esperar hasta que el remitente haya terminado de escribir el archivo, para que usted no intente procesar un archivo parcial. El Vigilante de eventos WMI elimina este problema, ya que un evento WMI no se produce para una creación de archivos, hasta que el archivo ha sido totalmente escrito y cerrado por el remitente.

La tarea de flujo de datos (Data Flow), se encuentra en el corazón de prácticamente todos los paquetes SSIS. Cada tarea de flujo de datos que se agrega al flujo de control tendrá un correspondiente panel de flujo de datos, donde puede configurar cómo se moverán los datos y cualquier otra manipulación necesaria cuando los datos se procesan.

Transformaciones Todas las transformaciones se producen dentro de una tarea Flujo de datos. SQL Server viene con 29 transformaciones, como se muestra en la Figura 24-2.

Capítulo 24 - SQL Server Integration Services

383

FIGURA 24-2 Flujo de datos transforma

La transformación “Agregado” (Aggregate) permite calcular agregaciones, como SUM, MIN, MAX, y AVG, mientras que los datos se transmiten a través del paquete. Con el fin de calcular un agregado, primero debe aplicar la transformación Ordenar (Sort) para ordenar el conjunto de datos. La transformación “Aggregate” opera similar a un SELECT. . . GROUP BY mediante el cual se calculan los agregados dentro de los grupos de datos especificados. Dado que SSIS escribe los agregados mientras los datos fluyen a través de la transformación, los datos deben ordenarse según la agrupación de su agregado. La transformada de búsqueda (Lookup) le permite buscar un valor a partir de una fuente de datos y recuperar datos adicionales basados en el valor de búsqueda. Por ejemplo, puede buscar un código de país dentro de una tabla y recuperar el nombre del país para enviarlo a una tabla de destino. La transformación de caché le permite almacenar en memoria caché un conjunto de datos que se pueden utilizar dentro del flujo de datos. Almacenar en caché un conjunto de datos es especialmente útil para la transformación Lookup, de modo que no tiene que realizar una llamada a la fuente de consulta para cada fila que pasa a través de la transformada. “Agrupación aproximada” y “Búsqueda aproximada” (Fuzzy Grouping y Fuzzy Lookup respectivamente) son características que sólo están disponibles en la edición Enterprise de SQL Server. Estas dos transformaciones le permiten realizar coincidencias flexibles (matching) y operaciones de agrupamiento. Aunque otras transformadas requieren una coincidencia exacta, Fuzzy Grouping y Fuzzy Lookup se pueden configurar en función de un umbral de confianza y son capaces de hacer corresponder coincidencias a pesar de la transposición de caracteres o faltas de ortografía.

384

Parte VII Business Intelligence

La transformación “Mapa de caracteres” permite asignar conjuntos de caracteres en el flujo de datos. Uno de los usos de la transformación Mapa de caracteres es si usted necesita convertir los datos EBCIDC. Considérese afortunado si usted no sabe lo que es EBCIDC. “División condicional” (Conditional split) se utiliza para romper una fuente de datos en varios flujos en función de una condición. Por ejemplo, el flujo de datos podría contener las ventas de los 50 estados de EE.UU., y tiene como destino una tabla separada para cada estado. La transformación División condicional se puede utilizar para tomar un solo flujo de datos y dividirlo en 50 salidas separadas basadas en el valor de una columna dentro del conjunto de datos. La transformación Conversión de datos convierte los tipos de datos. Es necesario recordar que está trabajando dentro de Visual Studio. Los tipos de datos que se pueden ver no son tipos de datos de SQL Server, sino que son tipos de datos de Visual Studio. La Tabla 24-1 proporciona la relación entre los tipos de datos de Visual Studio y los tipos de datos más comunes de SQL Server. TABLA 24-1

Correspondencias de tipos de datos entre Visual Studio y SQL Server

Visual Studio

SQL Server

DB Date

DATE

DB Time

TIME

Database Timestamp

DATETIME

8-byte signed integer

BIGINT

4-byte signed integer

INT

2-byte signed integer

SMALLINT

Single byte unsigned integer

TINYINT

Currency

MONEY

Numeric

DECIMAL

String

CHAR / VARCHAR

Text Stream

VARCHAR (MAX)

GUID

UNIQUEIDENTIFIER

La transformación “Columna derivada” se utiliza cada vez que necesite manipular datos, tales como extraer los espacios anteriores/posteriores, reemplazar cadenas vacías con un valor NULL, eliminar caracteres no válidos o calcular nuevos valores. La transformación “Columna derivada” utiliza expresiones regulares de C# para realizar tareas de manipulación de datos. “Columna de exportación” envía datos a un archivo, mientras que la “Columna de importación” lee los datos desde un archivo y lo añade al flujo de datos. La transformada de mezcla (Merge), combina dos flujos de datos ordenados en una sola salida. La transformación “Unión de todo” (Union All) es similar a la fusión que combina secuencias de datos. Sin embargo, los flujos de datos no tienen que ser ordenados y Union All puede combinar más de dos flujos de datos entre sí. “Combinación de mezcla” (merge join) combina los conjuntos de datos junto con una funcionalidad similar a la ejecución de una declaración SELECT con un JOIN interior o exterior (inner o outer). Para aplicar la transformación “Merge Join), los conjuntos de datos deben estar ordenados.

Capítulo 24 - SQL Server Integration Services

385

Multicast permite emitir una entrada a varios destinos, por ejemplo, escribir una entrada contra un servidor SQL y al mismo tiempo escribir los mismos datos a un archivo. El Comando de OLE DB permite ejecutar cualquier sentencia SQL válida. La declaración es ejecutada una vez para cada fila que pasa a través de la transformada. Porcentaje y Muestreo de fila, se utilizan principalmente para actividades de desarrollo. La tarea más difícil en el diseño y prueba de procesos de ETL es la creación de un conjunto de datos representativos, creados para probar la más amplia gama de valores. Con la transformación de “muestreo”, se pueden tomar en vivo los datos de producción y ampliar el volumen a un tamaño manejable en función de sus necesidades. Puesto que el algoritmo de muestreo selecciona las filas al azar, usted puede crear fácilmente un conjunto de muestras representativas. La transformación “Contador de filas” (Row count) cuenta cada fila a medida que pasa a través del componente. El número de filas procesadas se almacena en una variable que se define y se puede acceder por otros componentes dentro del paquete. La transformada de Pivot toma el flujo de datos entrante, convierte filas especificas en columnas, y opcionalmente, permite calcular un agregado. La funcionalidad de pivote es equivalente al operador PIVOT en T-SQL o a los servicios de Excel de la tabla dinámica. La transformación Unpivot gira columnas de un flujo de datos entrante y devuelve filas como salida. Unpivot no es lo contrario de pivote, porque cualquier agregación no puede descomponerse nuevamente en las partes que la constituyen.

La transformada de “secuencias de comandos” (script) le permite incluir un script de Visual Basic. NET o C#. NET en un flujo de datos. Un uso común del componente de script es para manipular datos que no se ajustan a uno de los formatos estándar de un adaptador fuente o destino. Las dimensiones de variación lenta (SCD – Slowly Changing Dimensios) son un problema dentro de los cubos de Analysis Services que requieren procesamiento especializado. SCD maneja casos tales como el de partir una división dentro de una empresa y cómo las ventas se agregan antes y después de la división “split”.

“Extracción de términos” (Term Extraction) y “Búsqueda de términos” (Term Lookup), comúnmente se usan en minería de texto. La transformación Extracción de términos permite buscar palabras dentro de un flujo de datos. El Term Lookup permite comprobar términos contra un conjunto de referencia, así como contar ocurrencias. La minería de texto se puede utilizar para buscar rápidamente grandes cantidades de datos no estructurados, con el fin de encontrar la colección de documentos que son de interés para un tema en particular.

Construcción de un paquete La construcción de un paquete consta de varios pasos: Crear administradores de conexión Construir el flujo de control Establecer restricciones de precedencia Generar el flujo de datos Agregar el manejo de excepciones

386

Parte VII Business Intelligence

Creación de un archivo de configuración El despliegue del paquete

Nota Como con cualquier actividad de desarrollo, se debe entender que usted guarda su trabajo con frecuencia y que prueba cada cambio que se hace.

Conexiones Los “Gestores de conexión” (Connection Managers) definen las cadenas de conexión a cualquier objeto con el que su paquete va a interactuar, por ejemplo, archivos y bases de datos. Las conexiones se agregan en ell panel de Gestión de Conexiones, en la parte inferior de la superficie principal de diseño. En el siguiente ejercicio, definirá los objetos de conexión para un archivo de texto de origen que contiene nuevas opciones de productos que serán importados a la tabla Products.ProductOptions (el archivo junto con un paquete completo se puede encontrar en el directorio Capítulo 24 de las muestras que acompañan el libro).

Crear objetos Connection 1. Copie el archivo productoptions.txt del directorio “Chapter 24” de los ejemplos del libro en “C:\test”. 2. Haga clic derecho en el panel “Connection Managers” y seleccione Nueva conexión de archivos planos (New Flat File Connection).

Capítulo 24 - SQL Server Integration Services

3. Déle un nombre al Administrador de conexión y seleccione el archivo ”C:\test\productoptions.txt”.

4. Haga clic en “Columnas” y revise los datos en la ventana de vista previa. Tenga en cuenta que la ventana vista previa tiene comillas dobles alrededor de todos los datos de texto que no quieren ser tratados como caracteres en el flujo de datos.

387

388

Parte VII Business Intelligence

5. Haga clic en General y especifique “comillas dobles” para el calificador de texto. Haga clic en Columnas y verifique que las comillas dobles se han eliminado.

6. Muévase a la derecha (con el Scoll horizontal) y observe que tiene una columna 4, que no contiene ningún dato. Por defecto, el delimitador de filas es {CR} {LF}, pero nuestro archivo de entrada tiene un {comma}{CR}{LF} como delimitador. Edite el delimitador de filas a incluya la “coma” y observe que la ventana de vista previa se redujo.

Capítulo 24 - SQL Server Integration Services

7. Haga clic en el botón “Restablecer columnas” y observe que la columna vacía ha sido eliminada.

8. Haga clic en Aceptar. 9. Haga clic derecho en el panel “Connection Managers” y seleccione Nueva conexión OLE DB.

389

390

Parte VII Business Intelligence

10. Haga clic en “Nuevo” y especifique la configuración de conexión a la base de datos SQL2008SBS.

11. Haga clic en Aceptar para crear el administrador de conexión.

Control de Flujo El flujo de control se utiliza para especificar el proceso de negocio que usted desea que el paquete ejecute. En el siguiente ejercicio, creará una tarea de Flujo de Datos que se utilizará para importar los datos de las nuevas opciones de productos, y una vez que los datos se importen, le cambiará el nombre al archivo.

Construir el flujo de control 1. Arrastre una tarea de “flujo de datos” y una tarea de “sistema de archivos” desde el cuadro de herramientas hasta la superficie de diseño del flujo de control. 2. Dado que sólo desea que el archivo sea renombrado una vez que las opciones de producto han sido importadas correctamente, seleccione la tarea de flujo de datos, arrastre la flecha verde, y arrástrela hasta que toque la tarea “File System” para crear una restricción de precedencia. 3. Haga doble clic en la restricción de precedencia para ver los ajustes que se pueden realizar y haga clic en Cancelar.

Capítulo 24 - SQL Server Integration Services

391

392

Parte VII Business Intelligence

4. Haga doble clic en la tarea Sistema de archivos (File System). 5. Haga clic en el menú desplegable en el campo “DestinationConnection” y seleccione . 6. Cree un nuevo administrador de conexión y haga clic en Aceptar.

Capítulo 24 - SQL Server Integration Services

393

7. Configure la “Operación para renombrar el archivo” y el administrador de conexión para la “conexión origen para las opciones de productos” y haga clic en Aceptar.

8. Dado que todavía no estamos preparados para que esto se ejecute, haga clic derecho en la “tarea de flujo de datos” y seleccione Deshabilitar (Disable).

394

Parte VII Business Intelligence

9. Guarde su paquete. 10. Puede ejecutar el paquete para probar el cambio de nombre del archivo haciendo clic en la flecha verde en la barra de herramientas, pulsando F5, seleccionando “Depurar|Iniciar depuración” o con el botón derecho del ratón sobre el paquete en el Explorador de soluciones y seleccionar “Ejecutar paquete”. Elija una de los métodos de ejecución para ejecutar el paquete.

11. Dado que fue desactivada, la tarea “Flujo de datos” no se ejecutó. Usted debería ver la tarea “File System” en verde y si nos fijamos en la carpeta “C:\ test”, debería ver que el archivo ha sido renombrado. 12. Cámbiele el nombre del archivo a “productoptions.txt” y seleccione “Depurar|Detener depuración” para volver a la zona de diseño del flujo de control. 13. Haga clic en la tarea de flujo de datos y seleccione Habilitar. 14. Cámbiele el nombre de las tareas para darles nombres más descriptivos, haga clic derecho en la tarea y seleccione “renombrar” o seleccione la tarea y cámbiele el nombre en el panel de propiedades.

Flujo de datos Las tareas de “flujo de datos” están diseñadas para generar el flujo de datos desde un origen a un destino, mientras que también proporcionan una transformación de datos en el medio.

Capítulo 24 - SQL Server Integration Services

395

Aunque un flujo de control define un proceso de negocio con varios componentes, un flujo de datos es un elemento único e indivisible dentro de un paquete. En el siguiente ejercicio, va a crear la rutina de importación que carga el archivo de opciones de productos en la tabla Products.ProductOptions. Durante la carga, tendrá que transformar los datos desde la fuente de entrada conteniendo el nombre del producto y no el ProductID el que es requerido por la tabla Products.ProductOptions.

Crear un flujo de datos 1. Seleccione la ficha Flujo de datos y arrastre un origen de archivo plano (Flat File Source), una transformación de búsqueda (Lookup) y un Destino OLE DB, todos en la zona de diseño del flujo de datos.

2. Haga doble clic en el origen de archivo plano y configure el administrador de conexión con la Conexión a las Opciones de Producto. 3. Haga clic en el botón de vista previa para asegurarse de que ha seleccionado el administrador de conexión correcto y haga clic en Cerrar. 4. Haga clic en Columnas y asegurarse de que todas las columnas han sido seleccionadas y haga clic en Aceptar.

396

Parte VII Business Intelligence

Capítulo 24 - SQL Server Integration Services

397

5. Arrastre la flecha verde en el origen de archivo plano y colóquela en la transformación de búsqueda (Lookup). Las flechas dentro de una tarea de flujo de datos definen cómo se mueven los datos de un componente a otro y no son restricciones de precedencia.

6. Haga doble clic en el transformador Lookup, seleccione Full Cache, Administrador de conexión OLE DB, y Falla de componentes (Fail Component).

398

Parte VII Business Intelligence

7. Seleccione Conexión, especifique el administrador de conexión a la base de datos SQL2008SBS y seleccione la tabla Products.Product.

8. Seleccione columnas. Arrastre la columna 1 y colóquelo en la columna Nombre del producto. Seleccione la columna ProductID, especifique , deje el alias de salida establecido para ProductID, y haga clic en Aceptar.

Capítulo 24 - SQL Server Integration Services

9. Arrastre la flecha verde de la transformación de búsqueda al destino de OLE DB. Especifique Coincidencias de búsqueda de salida para la salida, Destino OLE DB para la entrada y haga clic en Aceptar.

10. Haga doble clic en el destino de OLE DB y seleccione la tabla Products.ProductOptions y 1000 para las “Filas para la configuración por lotes”.

399

400

Parte VII Business Intelligence

11. Haga clic en Mappings, asigne las columnas de entrada con las correspondientes columnas de destino y haga clic en Aceptar.

12. Déle a sus objetos de flujo de datos nombres descriptivos y guarde el paquete.

Capítulo 24 - SQL Server Integration Services

401

13. Con la tarea de flujo de datos seleccionada, ejecute el paquete. Observe que el paquete falla en la carga de la tabla Products.ProductOptions.

14. Detenga la depuración.

Conversión de datos Cuando usted tiene archivos de texto como origen de datos, SSIS no sabe cuáles son los tipos de datos para cualquiera de las columnas de entrada. Por lo tanto, cada columna se clasifica de acuerdo con el tipo de datos predeterminado, que es una cadena de 50 caracteres. Como las cadenas no se convierten implícitamente a cualquier otro tipo de datos, es necesario convertir los datos a los tipos de datos adecuados. Las conversiones de tipos de datos pueden ocurrir en dos lugares: en la definición del administrador de conexión de origen y mediante el uso de una transformación “Conversión de datos”. Si no necesita realizar otra transformación de los datos antes de convertir el tipo de datos, el lugar más sencillo para convertir los tipos de datos se encuentra dentro del administrador de conexión de entrada.

En el siguiente ejercicio, vamos a convertir los tipos de datos desde el administrador de conexiones.

Convertir tipos de datos 1. Haga doble clic en el administrador de conexión “Product Options” y seleccione Opciones avanzadas. 2. Configure la “columna 0 “al tipo de datos cadena de 10-caracteres, columna 1 a una cadena de 50 caracteres, columna 2 a una cadena de 50- caracteres, y la columna 3 al tipo currency. Seleccione Vista previa y haga clic en Aceptar.

402

Parte VII Business Intelligence

3. Usted debería ver un símbolo de advertencia en su origen de datos de importación.

Capítulo 24 - SQL Server Integration Services

403

4. Haga doble clic en la fuente de entrada y seleccione “Sí” para reemplazar los metadatos y haga clic en Aceptar. 5. Guarde y ejecute el paquete. 6. Observe que el paquete todavía falla debido a datos no válidos en una fila del archivo de entrada.

Control de excepciones Las aplicaciones ETL serían muy simples para generar y ejecutar si siempre podrían contar con los datos de entrada formateados correctamente. Lamentablemente, es una ocurrencia común que los datos no sean válidos. Además, es común en aplicaciones ETL, la búsqueda de los datos no válidos dentro de archivos de gran tamaño, esto consume una gran cantidad de tiempo si se hace prueba y error. La tarea de encontrar los datos no válidos sería muy simple si el paquete pudiera saltear las filas que contienen datos no válidos, mientras que pasaran todas las filas que son válidas. En el siguiente ejercicio, configurará el control de excepciones para que las tareas de flujo de datos salteen todas las filas que no son válidas a partir de la fuente de entrada, así como las filas que violan cualquier restricción de bases de datos.

Crear controladores de excepción (Exception Handlers) 1. Arrastre dos objetos “Flat File Destination” a la zona de diseño de flujo de datos y póngales los siguientes nombres “Errores de conversión de datos” (Data Convert Error) y “Errores DB” (DB Errors) respectivamente.

404

Parte VII Business Intelligence

2. Seleccione el adaptador de fuente de entrada, arrastre la flecha roja, y colóquela en el destino “Data Convert Error”. 3. Cuando se abra la ventana de diálogo “Configurar la salida por error” (Configure Error Outpun), configure todas las columnas con la opción “Redirigir filas” tanto para el caso de Error como para el de Truncamiento y haga clic en Aceptar.

4. Haga doble clic sobre el destino “Errores de conversión de Datos” (Data Convert Error) y cree un nuevo administrador de conexión.

5. Seleccione “Delimitado” para el formato de archivo y póngale el nombre de archivo C:\test\dataconverterrors.txt, un nombre de administrador de conexiones Data Convert Errors, y haga clic en Aceptar. 6. Seleccione Asignaciones (Mappings), y asegúrese que todas las columnas de entrada están asignadas a cada columna destino y haga clic en Aceptar.

Capítulo 24 - SQL Server Integration Services

7. Repita con la salida de “Error de OLE DB de destino”.

405

406

Parte VII Business Intelligence

8. Haga doble clic en el destino “Carga de opciones de producto”, cambie el modo de acceso a datos a Tabla o Vista, y haga clic en Aceptar.

9. Guarde y ejecute el paquete. 10. Compruebe que 1 fila fue expulsada debido a un tipo de datos no válido y que se ha rechazado una fila debido a una violación de una clave principal. Su tabla “Products.ProductOptions” debería tener ahora 208 filas en ella.

Configuración Ahora que tiene probado el paquete y en funcionamiento, está listo para implementar el paquete en producción. Sólo hay un problema, todas sus fuentes de datos están codificados para apuntar a una instancia, archivos y directorios que existen en el equipo de desarrollo. ¿Son la estructura de directorio, el nombre de archivo y el nombre de la instancia los mismos en producción?

Usted acaba de llegar a la barrera más difícil de un paquete DTS. Antes de que SSIS sea introducido en SQL Server 2005, usted tenía que abrir el paquete DTS y recodificar todas las conexiones para el destino de producción, con la esperanza de que sin querer no modificara cualquier otra cosa.

Capítulo 24 - SQL Server Integration Services

407

Para superar el obstáculo de mantenimiento de ambientes separados, SSIS introdujo las configuraciones de paquete que pueden ser usadas para reemplazar las configuraciones dentro del mismo. En el siguiente ejercicio, creará un archivo de configuración de paquete que le permitirá sustituir la ubicación de cada archivo, así como el nombre de la instancia.

Agregar archivos de configuración del paquete 1. Vuelva al entorno de antes de la ejecución exitosa de su paquete, eliminando las filas recién agregadas de la tabla Products.ProductOptions (una pista: el ProductID> 8) y cambie la extensión del archivo ProductOptions de nuevo a .Txt. 2. Cree una nueva carpeta llamada C:\Test\ProdDir y mueva el archivo “productoptions.txt” a esta carpeta para asegurarse que si usted ejecutara el paquete en este punto, fallaría. 3. Dentro del BIDS, seleccione “SSIS | Configuraciones de paquetes”.

4. Seleccione “Habilitar configuraciones de paquetes”, haga clic en Agregar y haga clic en Siguiente. 5. Especifique un “Archivo de configuración XML”, póngale un nombre al archivo y haga clic en Siguiente.

408

Parte VII Business Intelligence

6. Expanda el nodo “Propiedades” debajo de cada “Connection Manager”, seleccione la casilla de verificación ConnectionString y haga clic en Siguiente.

7. Déle un nombre a la configuración, haga clic en Finalizar y luego en Cerrar.

Capítulo 24 - SQL Server Integration Services

409

8. Abra el archivo “sql2008sbs.dtsconfig” en el Bloc de notas. 9. Cambie cada ocurrencia de la cadena “C:\Test” por “C:\Test\ProdDir”. 10. Guarde y cierre el archivo de configuración. 11. Guarde el paquete y vuelva a ejecutarlo. Compruebe que el paquete se ha ejecutado correctamente, lo que demuestra que SSIS aplica el archivo de configuración por encima de la configuración de paquetes previo a la ejecución.

Despliegue (Deployment) Ahora está listo para implementar su paquete SSIS. BIDS tiene características que le permiten desplegar un paquete directamente a producción, sin embargo, es muy poco probable que el programador de un paquete tenga la autoridad para implementar en un servidor de producción. También puede construir un archivo manifiesto de implementación que puede ser lanzado por un administrador para instalar el paquete. Aunque ambos métodos funcionarán, dado los privilegios suficientes, usted estará gastando una gran cantidad de esfuerzo sin ningún beneficio. Todo el contenido de su paquete está contenido dentro del archivo. Dtsx en el directorio de su solución. Usted puede simplemente copiar este archivo, junto con cualquier otro archivo de configuración correspondiente, al entorno de producción. Una vez copiado, un administrador puede utilizar SSMS para cargar el paquete ya sea en la base de datos msdb o en el almacenamiento de paquetes SSIS de producción (SSIS Packaged store).

En el siguiente ejercicio, implementará el paquete SSIS que acaba de crear en la instancia y almacenará el paquete en la base de datos msdb.

Implementación de un paquete 1. Inicie SSMS, haga clic en el menú desplegable “Connect” desde el Explorador de objetos y seleccione “Integration Services”.

410

Parte VII Business Intelligence

2. Introduzca el nombre del servidor y haga clic en Conectar.

3. Expanda el nodo MSDB bajo el nodo Paquetes almacenados. 4. Haga clic en el nodo MSDB y seleccione Importar paquete. 5. Seleccione Sistema de archivos, seleccione su paquete y haga clic en Aceptar.

Capítulo 24 - SQL Server Integration Services

411

Capítulo 24 Referencia rápida Para

Haga lo siguiente

Crear un paquete de Integration Services

Inicie BIDS y seleccione el proyecto de Integration Services. Especifique un nombre para el proyecto y un directorio para el almacenamiento.

Crear un administrador de conexiones

Haga clic-derecho en el panel “Administradores de conexión” y seleccione Nueva Conexión correspondiente al tipo de “Administrador de conexión” que desea crear. Por ejemplo, una nueva conexión de archivos planos.

Crear una tarea de flujo de control

Arrastre el objeto de flujo de control deseado desde la caja de herramientas, hacia la zona de diseño del Flujo de control y establezca las propiedades necesarias.

Desactivar una tarea del flujo de control

Haga clic-derecho en la tarea de flujo de control y seleccione “Deshabilitar”.

Crear una tarea de flujo de datos

Arrastre una tarea de flujo de datos desde la caja de herramientas hacia la zona de diseño del flujo de control.

Agregar una restricción de precedencia

Seleccione un objeto de flujo de control, arrastre la flecha verde, y suéltela sobre el objeto de flujo de control al que afectará la restricción. Haga doble clic en la restricción para establecer la acción de precedencia como por ejemplo el éxito en la ejecución, el fracaso, o la finalización.

Crear un adaptador de datos origen

Seleccione el diseño de flujo de datos. Arrastre el adaptador de origen deseado desde la caja de herramientas hasta la zona de diseño de Flujo de datos. Configure el Administrador de conexión para el adaptador de datos.

Crear un adaptador de datos de destino

Arrastre el adaptador destino deseado desde la caja de herramientas hasta la zona de diseño del Flujo de Datos. Configure el Administrador de conexión y las asignaciones de las columnas para el adaptador de datos.

Añadir una transformada

Arrastre la transformación deseada desde la caja de herramientas hasta la zona de diseño del flujo de datos. Conecte una entrada y una salida para la transformación. Configure la manipulación de datos deseada.

Configurar el control de excepciones

Seleccione la ficha “Control de errores” de cualquier componente del flujo de datos. Especifique la acción a tomar, por ejemplo: “Error de componente”, “Redireccionar fila”, u “Omitir error”. Si especifica “Redireccionar fila”, configure un adaptador de datos destino para aceptar las filas redirigidas.

Probar un paquete

Dentro de BIDS, puede lanzar un paquete en el depurador realizando cualquiera de las siguientes acciones: Pulsando F5 Seleccionando Depurar | Iniciar depuración Haciendo clic en la flecha verde en la barra de herramientas Haciendo clic-derecho en el paquete en el Explorador de soluciones y seleccionando Ejecutar

Crear un archivo de configuración

Seleccione “SSIS | Configuraciones de paquetes”. Siga el asistente de configuración de embalaje para especificar los parámetros para el archivo de configuración.

Capítulo 25

SQL Server Reporting Services Después de completar este capítulo, usted será capaz de Configurar una instalación de Reporting Services Crear informes Implementar informes Crear y administrar las suscripciones Administrar el almacenamiento en caché e instantáneas SQL Server Reporting Services (SSRS) ofrece la generación de informes a nivel de empresa y una plataforma de distribución para satisfacer una variedad de necesidades de una organización. En este capítulo, aprenderá a configurar y validar una instalación de SSRS. También aprenderá a crear, implementar y administrar informes.

Más información Para una discusión detallada de SSRS, por favor consulte el libro “SQL Server 2008 Reporting Services Paso a paso.

Configurando Reporting Services Aunque se distribuye con SQL Server, SSRS es una aplicación ASP.NET que almacena los datos en una base de datos. Para que funcione, tendrá que configurar los directorios virtuales y las credenciales para la aplicación Web, junto con la instancia donde se encuentran alojadas las bases de datos de SSRS. Debido a los componentes únicos, SSRS tiene una utilidad de configuración independiente. La Figura 25-1 muestra el Gestor de configuración de SQL Server Reporting Services.

Junto con otras tareas de configuración, el servicio SSRS puede ser iniciado o detenido desde el Administrador de configuración de SSRS. La URL del servicio Web y la dirección URL del Administrador de Reportes, les permiten configurar los directorios virtuales, junto con las direcciones URL que serán utilizados para acceder a la web de SSRS. Además de configurar los directorios virtuales, también tendrá que configurar la instancia en la que desea hospedar las bases de datos de SSRS. La Figura 25-2 muestra la configuración de base de datos que puede ser especificada.

413

414

Parte VII Business Intelligence

FIGURA 25-1 Gestor de Configuración de Reporting Services

FIGURA 25-2 Configuración de la base de datos de SSRS y credenciales de conexión

Capítulo 25 - SQL Server Reporting Services

415

Durante la configuración, se crean dos bases de datos de forma predeterminada en la instancia: ReportServer y ReportServerTemp. La base de datos ReportServer se utiliza para almacenar toda la configuración de SSRS y la información de seguridad junto con la definición de todos los informes. La base de datos ReportServerTemp se utiliza para almacenar todos los datos intermedios utilizados en la creación de un informe. La conexión a la instancia de base de datos utiliza la autenticación de Windows con la cuenta de servicio de SSRS.

SSRS es un motor de ejecución de informes. Como tal, puede hacer que los informes se conecten y recuperen información de una variedad de bases de datos a través de muchas instancias dentro de su organización. Cuando los informes son configurados, puede especificar explícitamente las credenciales para un informe o puede contar con una cuenta de seguridad administrada centralmente. La Figura 25-3 muestra la definición de una cuenta que es utilizada por SSRS para credenciales cuando no se especifica una cuenta de seguridad con el informe que está siendo ejecutado.

FIGURA 25-3 Especificación de la cuenta predeterminada de ejecución de informes.

La definición de un informe contiene una gran cantidad de información sensible que potencialmente puede poner en peligro su entorno, como los nombres de instancia y base de datos, así como los nombres de las tablas y columnas. Con el fin de proteger a los metadatos de su entorno, SSRS encripta los datos que usted almacenó en el servidor. La gestión de claves de cifrado se maneja en la página “Claves de Encriptación“, que se muestra en la Figura 25-4.

416

Parte VII Business Intelligence

FIGURA 25-4 Gestión de claves de cifrado SSRS

A través de los años, muchas personas se han preguntado cómo agrupar (cluster) SSRS para garantizar la máxima disponibilidad de una infraestructura de informes. SSRS consiste en una aplicación Web que se conecta a una instancia de base de datos. Aunque es posible “agrupar” la instancia que aloja las bases de datos de SSRS, no es posible agrupar la aplicación SSRS. En su lugar, puede simplemente hacer copias adicionales de la aplicación SSRS a través de varios servidores. Las copias no sólo proporcionan tolerancia a fallos, también proporcionan escalabilidad adicional.

La edición Enterprise de SSRS permite configurar una arquitectura escalable (scale-out), donde tiene múltiples y activos sitios web de SSRS que se conectan al mismo conjunto de bases de datos de SSRS. Usted puede configurar una arquitectura scale-out, como se muestra en la Figura 25-5. En el siguiente ejercicio, se inspeccionará la configuración de la instalación de SSRS que realizó en el Capítulo 2, "Instalación y configuración de SQL Server 2008".

Configurar Reporting Services 1. Inicie el “Administrador de configuración de Reporting Services” y conéctese a su servidor de informes. 2. Revise la configuración de su instalación SSRS.

Capítulo 25 - SQL Server Reporting Services

417

FIGURA 25-5 Construyendo una implementación SSRS escalable

Sitio Web de servicios de informes El sitio web de SSRS permite el acceso a todos los objetos de informe y le permite gestionar objetos, hacer configuraciones generales, configuración de objetos y seguridad. Los usuarios finales también pueden acceder al sitio web de SSRS para ejecutar informes y exportar un informe a un formato deseado. Se puede acceder al sitio web de SSRS, navegando la url http://machinename:8080/Reports, como se muestra en la Figura 25-6. En el siguiente ejercicio, se pondrá en marcha el sitio web de SSRS.

Nota La primera vez que inicie el sitio web de SSRS, habrá un retraso notable. El retraso se debe a que IIS necesita cargar todo el framework. NET y los componentes ASP.NET en los que se basa SSRS.

Validar una configuración de Reporting Services 1. Inicie Internet Explorer. 2. Vaya al sitio Web del servidor de reportes, por ejemplo http://hotek2:8080/Reports.

418

Parte VII Business Intelligence

FIGURA 25-6 El sitio web de SSRS

Creando Reportes SSRS proporciona los componentes de infraestructura necesarios para gestionar y ejecutar informes. Sin embargo, sin informes a ejecutar, SSRS sería un producto “aburrido”. Microsoft tiene desarrollado un diseñador de informes que le permite crear todos los informes que hacen de SSRS algo útil para una organización. Junto con el diseñador de informes, ha sido creado un “lenguaje de definición de informes de código abierto” llamado Report Definition Language (RDL), para permitir a terceros el desarrollo de herramientas para generar informes de SSRS.

Un informe consta de dos componentes principales: Una fuente de datos que define la consulta (query) o el procedimiento (procedure) que proporciona los datos. Una definición de informe que define cómo son formateados y mostrados los datos.

Creando un informe La construcción de un informe básico consiste en varios pasos: Especificar una cadena de conexión Definir la consulta

Capítulo 25 - SQL Server Reporting Services

419

Darle formato a los datos Elegir una ubicación para implementar (deploy) el informe Realizar una vista previa del nuevo informe. En el siguiente ejercicio, utilizará el Asistente para informes, para crear su primer informe, que se utilizará para explicar la configuración, las opciones de ejecución y el formato adicional dentro del Diseñador de informes y SSRS.

Crear un informe 1. Inicie el BIDS y seleccione Archivo | Nuevo | Proyecto. 2. Seleccione el “Asistente de proyectos del servidor de informes”, nombre el proyecto y la solución, especifique el directorio y haga clic en Aceptar.

3. Cuando se inicia el asistente, haga clic en Siguiente en la pantalla de bienvenida. 4. Colóquele un nombre al origen de datos, haga clic en el botón Editar, especifique su instancia, la base de datos SQL2008SBS, pruebe su conexión y haga clic en Aceptar. 5. Seleccione la casilla de verificación para hacer del origen de datos un origen compartido y haga clic en Siguiente. 6. Especifique la siguiente consulta y haga clic en Next (el código se puede encontrar en el archivo Chapter25\code1.sql en las muestras que acompañan el presente libro). SELECT CASE WHEN a.CompanyName IS NOT NULL THEN a.CompanyName ELSE a.FirstName + ' ' + a.LastName END CustomerName, b.City, d.StateProvince, e.CountryName, c.OrderID, c.OrderDate, c.SubTotal, c.ShippingAmount, c.TaxAmount, c.GrandTotal, c.FinalShipDate

420

Parte VII Business Intelligence FROM Customers.Customer a INNER JOIN Customers.CustomerAddress b ON a.CustomerID = b.CustomerID INNER JOIN Orders.OrderHeader c ON a.CustomerID = c.CustomerID INNER JOIN LookupTables.StateProvince d ON b.StateProvinceID = d.StateProvinceID INNER JOIN LookupTables.Country e ON b.CountryID = e.CountryID

Capítulo 25 - SQL Server Reporting Services

7. Seleccione “Tabular” para el tipo de informe y haga clic en Siguiente. 8. Agregue los campos al informe, como se muestra en el siguiente gráfico y haga clic en Siguiente.

9. Seleccione un formato escalonado e incluya subtotales.

10. Seleccione un estilo de tabla y haga clic en Siguiente. 11. Deje la configuración de implementación en el valor predeterminado y haga clic en Siguiente.

421

422

Parte VII Business Intelligence

12. Especifique un nombre para su informe, seleccione la casilla de verificación “Vista previa” y haga clic en Finalizar.

Capítulo 25 - SQL Server Reporting Services

423

13. Después de revisar el informe, seleccione la pestaña Diseño.

Dando Formato Una vez que se construye el informe inicial, la mayoría de las tareas que deberá llevar a cabo serán para "hacer que se vea lindo." La caja de herramientas (toolbox) le permitirá agregar una variedad de ítems a su informe como cuadros de texto, imágenes, líneas y gráficos. También puede agregar tablas, matrices y subinformes para producir prácticamente cualquier tipo de presentación de informe que usted necesite. Si el informe lo requiere, usted puede incluso agregar referencias a “assemblies” .NET y ampliar las capacidades del informe a sus propias bibliotecas de código personalizado. La mayor parte del trabajo que usted hará durante el “formateo” será “maquetar” (Laing out) el encabezado/pie del informe, agrupar datos, y darle el estilo a los elementos del informe. El encabezado del informe es donde normalmente se coloca un título para el mismo y se añaden gráficos corporativos utilizando los controles cuadro de texto y de imagen respectivamente. El pie del informe es el que normalmente sirve para agregar elementos como derechos de autor y/o el número de página con los controles de cuadro de texto. Cada informe tiene un conjunto estándar de variables que se pueden utilizar como PageNumbre y TotalPages que sólo se pueden usar en la cabecera o el pie del informe.

En el informe que ha generado previamente, usted agregó grupos para el nombre del país y estado/provincia. Los grupos proporcionan el mismo tipo de capacidad de agregación como la cláusula de T-SQL GROUP BY. Sin embargo, en los informes, tiene un poco más de flexibilidad. Se podría ejecutar una declaración SELECT de las ventas totales por país y luego una por separado una declaración SELECT para

424

Parte VII Business Intelligence

la agregación ventas totales por estado/provincia de un país. Mediante el agregado de grupos dentro de un informe, puede agrupar los datos y calcular ambos agregados en una sólo representación (rendering) del informe. La categoría más importante de cambios que hará será “el estilo” (styling). Usted puede manipular cualquier elemento dentro de un informe u obtener el aspecto (look and feel) exacto que desee. Puede configurar: El color de fondo y la imagen El color del borde, el estilo y el ancho El color del texto EL tipo de letra, el tamaño, estilo (por ejemplo, cursiva), el espesor del trazo (por ejemplo, negrita), y la decoración (por ejemplo, subrayado) El formato de visualización El formato de visualización le permite darle formato a los elementos de datos de acuerdo con las opciones de estilo específicos. Los códigos de formato estándar que se utiliza en SSRS son los códigos de formato. NET. Por ejemplo, “C0” es un código de moneda mientras que “N0” especifica una opción de formato numérico. También puede establecer directamente formatos personalizados, por ejemplo: #

sustituto de cualquier número

MM

sustitutos para el número del mes

mm especifica el número de minutos dd sustituto para el número del día yy yyyy

especifica el año en dos dígitos especifica un año en cuatro dígitos

En el siguiente ejercicio, usted mejorará su informe básico mediante el agregado de otros grupos, reorganizará los elementos del informe y le dará formato a los elementos del mismo.

Dando formato a los elementos del informe 1. Seleccione los campos de agregado Sum en el grupo cabecera CountryName y StateProvince para el OrderID y elimínelos. 2. Haga clic en la columna Importe fiscal (Tax amount) y seleccione Eliminar columnas. 3. En el panel “Grupos de filas” en la parte inferior del Diseñador de informes, haga clic-derecho en el grupo StateProvince y seleccione Agregar grupo|Grupo hijo. 4. En el cuadro de diálogo “Grupo de Tablix”, seleccione la columna Ciudad para agrupar y seleccione Agregar Grupo encabezado. Haga clic en Aceptar. 5. En el panel Grupos de filas en la parte inferior del Diseñador de informes, haga clic-derecho en el grupo “Ciudad” y seleccione Agregar grupo|Grupo hijo. 6. En el cuadro de diálogo Grupo de Tablix, seleccione la columna CustomerName para agrupar y Agregar Grupo encabezado. Haga clic en Aceptar.

Capítulo 25 - SQL Server Reporting Services

425

426

Parte VII Business Intelligence

7. Elimine las dos columnas recientemente introducidas para el nombre de ciudad y de cliente. 8. Haga clic-derecho en la columna CustomerName y seleccione Insertar columna | Para agregar una nueva columna a la izquierda del nombre de cliente. 9. Mueva la columna City a la izquierda de CustomerName y mueva las columnas City y CustomerName en la cabecera del grupo correspondiente. Cámbiele los nombres de cada grupo de fila con un nombre amigable. 10. Seleccione el valor OrderDate. Configure el formato a mm/dd/yyyy. 11. Configure el formato de Subtotal, importe del envío, importe de impuesto, y el “Gran Total” con el siguiente formato: $ #, #. # #. 12. Realice la vista previa del informe para comprobar el formato.

Capítulo 25 - SQL Server Reporting Services

427

428

Parte VII Business Intelligence

Capítulo 25 - SQL Server Reporting Services

429

Cálculos Los Informes serían aburridos si lo único que podría hacer sería tomar datos de una consulta y aplicarle un diseño. Las expresiones le permiten introducir cálculos en su informe dentro de la agregación y manipular los datos de origen. Las expresiones también se extienden al formato ya que le permiten utilizar un cálculo para aplicar un formato condicional a los datos.

En el siguiente ejercicio, creará los agregados (aggregates) para los grupos “ciudad” y “cliente” que se han añadido en el ejercicio anterior. También aplicará formato condicional para que los clientes que han realizado pedidos por un total de más de $ 1900 se destaquen con un color diferente.

Crear cálculos de informe 1. Haga clic en el campo SubTotal en la cabecera del grupo de ciudades y seleccione Expresión. Ingrese la fórmula de = Sum(Fields!SubTotal.Value) y haga clic en Aceptar.

2. Agregue una suma para el subtotal por nombre de cliente. 3. Añada agregados de suma en el grupo de “Ciudad” para la cantidad de envío y total general (grand total). 4. Añada agregados de suma en el grupo de “Nombre del cliente” para la cantidad de envío y Gran Total. 5. Configure el formato de sus nuevos agregados con el siguiente formato: $ #, #. # #.

430

Parte VII Business Intelligence

6. Seleccione los agregados Subtotal, Cantidad enviada, y Grand Total para el grupo Nombre de Cliente. En la ventana Propiedades, haga clic en la lista desplegable de color y seleccione Expresión. Especifique la expresión condicional siguiente y haga clic en Aceptar. =iif(Sum(Fields!GrandTotal.Value,"Group_CustomerName")>1900,"Green","Black")

Capítulo 25 - SQL Server Reporting Services

431

7. Configure a Subrayado la fila de cabecera del grupo Nombre de País. 8. Configure a cursiva la fila de cabecera del grupo Provincia. 9. Establezca a Negrita la fila de cabecera del grupo Ciudad. 10. Configure a cursiva la fila de cabecera del grupo Nombre de Cliente y realice una vista previa del informe.

Elementos interactivos El informe de ejemplo con el que usted ha estado trabajando provee una manera razonablemente útil para que los usuarios revisen la información de las órdenes de los clientes. Sin embargo, un usuario tendría que potencialmente navegar por docenas o cientos de páginas de información para encontrar la información específica que buscaba (un pensamiento que me trae recuerdos de informes de 10.000 páginas desde un ordenador central).

Usted puede mejorar la funcionalidad de su informe, y añadir elementos para hacer el informe interactivo al usuario, lo que le permite a un usuario localizar rápidamente la información necesaria. Puede agregar marcadores (bookmarks), capacidades de drill-down y acciones (actions). Los marcadores proporcionan un medio para saltar entre secciones de un informe muy grande. Las acciones permiten al usuario hacer cosas como saltar hasta un favorito, abrir una URL en una ventana del navegador, o incluso lanzar otro informe. La opción Drill-down se puede agregar mediante la especificación de las opciones de visibilidad.

En el siguiente ejercicio, configurará su informe para ocultar y luego mostrar la información basada en el usuario, alternando los elementos del informe que se muestran o no.

432

Parte VII Business Intelligence

Construir un informe interactivo 1. En la parte inferior del informe, haga clic en la flecha hacia abajo situada junto a los grupos de filas Provincia y seleccione Propiedades del grupo. Seleccione la visibilidad y establezca la opción para ocultar la pantalla.

2. Haga clic en la flecha hacia abajo para el grupo de detalles y seleccione Propiedades del grupo. Seleccione Visibilidad y establezca la opción para ocultar la pantalla. 3. Configure con “ocultar” la visibilidad del grupo Ciudad y Clientes. 4. Realice una Vista previa del informe.

Capítulo 25 - SQL Server Reporting Services

433

5. Haga clic en la flecha hacia abajo para el grupo Provincia, seleccione Propiedades del grupo, seleccione Visibilidad y ajuste el elemento de alternancia (toggle) para Nombre del país (CountryName).

6. Haga clic en la flecha hacia abajo para el grupo Ciudad y seleccione Propiedades del grupo y establezca el elemento de alternancia a Provincia.

7. Establezca la columna Nombre de cliente (CustomerName) para que sea alternada por la Ciudad. 8. Establezca la fila de detalle para que inicialmente esté oculta y conmute por el CustomerName. 9. Haga una vista previa del informe y revise las nuevas capacidades interactivas de drill-down.

434

Parte VII Business Intelligence

Parámetros Puede crear rápidamente informes y apuntarlos a las bases de datos que contienen grandes cantidades de datos. No sería raro que un informe como el que se está desarrollando en este capítulo devuelva decenas de millones de filas de datos. Si se va a implementar simplemente el informe tal como está en este punto y que los usuarios puedan acceder al mismo, es probable que reciba una llamada muy rápida de un administrador de base de datos (DBA) queriendo saber por qué esta leyendo millones de filas de datos sobre una base en forma constante. Los usuarios además no estarían muy feliz, porque el reporte funcionaría mal, además de ser prácticamente inutilizable ya que los usuarios no desearían recavar el historial de órdenes de hace 30 años, tan sólo para averiguar lo que está pasando en el mes en curso. Los parámetros de informe proporcionan un medio para restringir el conjunto de datos que devuelve el informe. Los parámetros pueden ser puestos a disposición de los usuarios con el fin de permitir que especifiquen valores antes presentar un informe. Los parámetros también reducen el impacto sobre la fuente de datos mediante la especificación de valores para una cláusula WHERE que restringe los datos.

Nota Como regla general, todos los informes que usted implementa en un entorno de producción deben tener parámetros. Si va a distribuir un informe sin parámetros, usted debe tener una razón explícita para hacerlo, ya que la primera pregunta que un administrador debe hacer es: "¿Por qué su informe no tienen un parámetro?"

En el siguiente ejercicio, agregará parámetros para restringir las órdenes por año y mes. Aunque se puede suministrar una lista de selección de valores estáticos, también se creará una nueva consulta para recuperar sólo los años aplicables y los meses para que un usuario pueda elegir.

Capítulo 25 - SQL Server Reporting Services

435

Especificar parámetros de informe 1. Seleccione el panel Datos del informe, haga clic derecho DataSet1 y seleccione Propiedades del conjunto de datos (Dataset). Cambie el nombre del conjunto de datos (dataset) a CustomerOrders y haga clic en Aceptar.

2. Haga clic derecho en SQL2008SBS y seleccione Agregar conjunto de datos (dataset). 3. Nombre el dataset como OrderMonthsandYears, especifique la siguiente consulta y haga clic en Aceptar. SELECT DISTINCT YEAR(OrderDate) OrderYear, MONTH(OrderDate) OrderMonth FROM Orders.OrderHeader

436

Parte VII Business Intelligence

4. Haga clic derecho en el nodo Parámetros y seleccione Agregar parámetro. 5. Establezca el nombre AñoPedido, especifique un valor para el Prompt (valor de entrada), y establezca el tipo de datos como Integer.

6. Seleccione “Valores disponibles”, seleccione “Obtener valores desde una consulta”, establezca las propiedades de la consulta para utilizar dataset OrderMonthsandYear y haga clic en Aceptar.

7. Agregue un parámetro para el Mes de la Orden, como en los pasos 4-6. 8. Haga clic derecho en el conjunto de datos CustomerOrders y seleccione Propiedades del conjunto de datos.

Capítulo 25 - SQL Server Reporting Services

437

9. En el campo de consulta, agregue una cláusula WHERE de la siguiente manera: WHERE YEAR(OrderDate) = @OrderYear AND MONTH(OrderDate) = @OrderMonth

10. Seleccione Parámetros, establezca el campo Valor de parámetro para cada uno de los parámetros que acaba de añadir y haga clic en Aceptar.

11. Haga clic-derecho en el cuerpo de su informe y seleccione Propiedades de Tablix.

438

Parte VII Business Intelligence

12. Configure el nombre del conjunto de datos como CustomerOrders y haga clic en Aceptar.

13. Haga una vista previa del informe y pruebe su selección de parámetros.

Capítulo 25 - SQL Server Reporting Services

439

Implementar informes Aunque el Diseñador de informes proporciona una forma cómoda de trabajar y obtener una vista previa del informe, no instalaría BIDS en el escritorio de un usuario final para que pueda ver los informes.. Una vez que tiene el informe diseñado de la manera que usted lo quería, está listo para implementar (deploy) sus informes. Puede implementar sus informes de dos formas básicas: Directamente a través de BIDS Cargado por un administrador Cuando usted creó el proyecto de informe, una de las opciones especificadas es la dirección URL del servidor de reporte. En base a la dirección URL del servidor de informes, puede implementar un informe directamente desde BIDS mediante la selección “Implementar” ya sea desde el menú “Build” o haciendo clic derecho en el informe. Dado que es poco probable que usted tenga permisos para implementar un informe directamente a un ambiente de producción, BIDS también le permite construir un proyecto que proporciona un manifiesto a un administrador para implementar el informe en producción. Sin embargo, como señalamos en el capítulo 24, "SQL Server Integration Services," lo único que se obtiene es un archivo de manifiesto que va junto con el archivo XML que contiene la definición de lo que se desea implementar. Por lo tanto, es mucho más común simplemente copiar el archivo RDL, junto con los archivos de origen de datos asociado (.rds) a una ubicación para que un administrador acceda a él.

Un administrador puede desplegar su informe usando la opción “Cargar archivo” del sitio Web de informes. En el siguiente ejercicio, implementará su informe en el sitio Web de informes y luego navegará las carpetas, informes y los orígenes de datos (data source) creados. Este ejercicio asume que usted está usando un servidor de desarrollo de informes y tiene acceso directo a implementar un informe dentro de BIDS.

Implementar un informe 1. En el Explorador de soluciones, haga clic-derecho en la solución SQL2008SBS y seleccione Propiedades. Cambie la TargetServerURL a la dirección de URL del servidor de informes y haga clic en Aceptar.

440

Parte VII Business Intelligence

2. Haga clic-derecho sobre el informe en el Explorador de soluciones y seleccione “Implementar” (Deploy).

3. Abra Internet Explorer y vaya a su sitio Web de informes.

4. Explore el origen de datos, la carpeta SQL2008SBS, y el informe que ha subido.

El capítulo 25 - SQL Server Reporting Services

441

Suscripciones Muchas organizaciones tienen un conjunto de informes que deben ser ejecutados en un horario, en lugar de permitir el acceso ad hoc al usuario. SSRS proporciona la capacidad de ejecutar automáticamente y entregar informes a través de la utilización de “suscripciones”. Las suscripciones pueden crearse sobre una base ad hoc para cada usuario. Cuando un usuario crea una suscripción, puede especificar el formato de entrega, la configuración para la ubicación de entrega, el formato de representación (rendering) para el informe, una programación de ejecución (schelude), y otros parámetros de informe.

Precaución Cada suscripción de informes creará un trabajo (job) en el Agente SQL Server basado en la configuración de programación especificada por el usuario. Cada suscripción es independiente una de otra, así que si usted tiene 500 usuarios que solicitan el mismo informe con los mismos parámetros, el informe será representado (rendered) 500 veces separadas. Dado que SSRS no puede reconocer y consolidar las solicitudes duplicadas en una sola ejecución, la capacidad de los usuarios para crear una suscripción normalmente se desactiva dentro de una organización.

También puede crear una suscripción basada en datos. Estas son definidas por un administrador mediante una consulta para recuperar datos de una tabla que especifica todas las configuraciones necesarias. Una suscripción basada en datos permite a los administradores controlar la carga en un servidor de informe y eliminar la duplicación de las ejecuciones de informes.

Dado que una suscripción SSRS ejecuta un informe como un proceso en segundo plano, su informe no puede depender de que las credenciales se suministren en tiempo de ejecución por un usuario. Usted tendrá que especificar una cuenta de ejecución en el Administrador de configuración de SSRS que se utilizará para acceder al Origen de datos del reporte. Usted también tendrá que editar las fuentes de datos para almacenar de forma segura las credenciales en el servidor de informes. A menos que las credenciales se almacenen de forma segura en el servidor de informes, no podrá crear una suscripción al informe, porque SSRS no tendrá credenciales válidas para ejecutar el reporte en nombre de un usuario.

En el siguiente ejercicio, creará una suscripción a su informe de ventas que ejecutará el informe, lo pasará a un PDF, y entregará el informe en la bandeja de entrada a las 8 am todos los lunes.

Crear una suscripción a un informe 1. Inicie el Administrador de configuración de Reporting Services. 2. Conéctese a su servidor de informes y seleccione Cuenta de ejecución. 3. Seleccione “Especificar una cuenta de ejecución” que se utilizará para acceder a las fuentes de datos del informe, haga clic en Aplicar y haga clic en Salir. 4. Inicie Internet Explorer y vaya a su sitio Web de los informes. 5. Haga clic en el vínculo Orígenes de datos. 6. Haga clic en la fuente de datos SQL2008SBS.

442

Parte VII Business Intelligence

7. Seleccione las credenciales almacenadas de forma segura en el servidor de informes, especifique su cuenta de Windows, seleccione la opción “Utilizar como credenciales de Windows”. . . haga clic en la casilla de verificación y haga clic en Aplicar.

Capítulo 25 - SQL Server Reporting Services

443

8. Haga clic en el enlace Inicio en la parte superior de la página. 9. Haga clic en la carpeta SQL2008SBS. 10. Haga clic en el vínculo de Informe SQL2008SBS. 11. Haga clic en la ficha Suscripciones y haga clic en Nueva suscripción. 12. Especifique las configuraciones del correo electrónico, la programación y los parámetros de informe a utilizar, y haga clic en Aceptar.

Informes vinculados Muchas organizaciones necesitan proporcionar múltiples vistas del mismo informe, por ejemplo, un informe de ventas en el que cada director de división sólo puede ver las ventas de su división. Aunque puede agregar parámetros a un informe para que restrinjan los datos, a menos que haya diseñado una capacidad de seguridad a nivel de fila dentro de la fuente de datos, un gerente de división podría especificar cualquier parámetro que sea válido. Con el fin de evitar que los gerentes de división vean cualquiera de los datos de ventas, necesita restringir el contenido de un informe a sólo la división del gerente. Con lo que hemos aprendido hasta ahora, se verá tentado a o bien generar un informe duplicado para cada división que tenga una cláusula Where diferente o bien a incrustar una expresión complicada en el informe que controle los datos que se muestran. Si ha generado un informe duplicado, cada vez que el diseño del informe cambie, tendría que actualizar varias copias del mismo informe. Si incrusta una expresión para controlar la visibilidad de los datos, cada vez que haya un cambio en la organización, usted tendría que editar el informe.

444

Parte VII Business Intelligence

Debido a que cada informe cargado en el sitio Web de informes tiene seguridad que define los usuarios que pueden acceder al mismo, puede resolver este dilema muy fácilmente a través de la función de informes vinculados. Un informe vinculado permite generar un nuevo informe basado en un informe existente. Una informe vinculado tiene el mismo formato y el diseño que el informe de base. Si se cambia la definición del informe base, todos los informes relacionados incluirán automáticamente los cambios. Se pueden especificar opciones separadas de ejecución para un informe vinculado, tales como los parámetros predeterminados. Si especifica parámetros por defecto para el informe vinculado y a continuación deshabilita la capacidad de que un usuario especifique sus propios parámetros, puede generar rápidamente una serie de informes derivados que restringen el contenido, mientras que incurre en un gasto reducido de sobrecarga de gestión.

Caché de reporte e instantáneas Los informes pueden representar una “pesada carga” sobre sus fuentes de datos, así como sobre el servidor de informes. Con el fin de mitigar la carga de consultas debido a los informes, los administradores pueden aplicar opciones para almacenar datos en caché así como un informe completo. Los dos métodos que SSRS tiene para administrar el almacenamiento en caché son las siguientes: Caché de informe Instantáneas de informe El almacenamiento en caché de informes utiliza los mismos principios que cualquier motor de almacenamiento en caché Web, con la excepción que la memoria caché sólo se aplica a los datos. Al configurar un informe para que se represente a partir de una memoria caché, SSRS almacenará en caché el conjunto de datos para el informe. Cada ejecución posterior de dicho informe no consulta el origen de datos para los datos, sino que va a recuperar el conjunto de datos en caché en la base de datos ReportServerTempDB. SSRS entonces aplica la definición del informe, representa (render) el informe, y lo devuelve al usuario. Puede establecer que una caché expire en base a un intervalo de tiempo especificado. Cada vez que se ejecuta un informe con “cache habilitada”, se comprobará la caché de informes. Si existe un conjunto valido de datos almacenados en caché, estos se recuperan de la memoria caché. Si el conjunto de datos ha expirado, SSRS se conecta a la fuente de datos, ejecuta la consulta, almacena el conjunto de datos en cache, y luego hace el informe. Las ejecuciones posteriores entonces utilizan el conjunto de datos guardados hasta que el intervalo de caducidad se haya superado y se genere una nueva caché.

Una instantánea de informe funciona de manera similar a un conjunto de datos almacenado en caché. La diferencia principal es que una instantánea de informe es un informe totalmente representado (rendering). Mientras que un usuario puede cambiar el formato de representación de un informe en caché, el formato de presentación será fijo para una instantánea de informe y no se puede cambiar por el usuario. Además, puede mantener varias instantáneas de informe en el servidor de informes. El informe se mostrará siempre a partir de la instantánea de informe más reciente, pero se puede acceder a cualquier otra instantánea a través de la pestaña Historial.

Capítulo 25 - SQL Server Reporting Services

445

Nota No puede comparar dos instantáneas de reporte. Las instantáneas de informe no se suelen usar para razones de análisis históricos. Si es necesario realizar un análisis histórico, debe ser implementado un almacén de datos (data warehouse) y aprovechar las capacidades de Analysis Services que se trata en el Capítulo 26, "SQL Server Analysis Services. "

Precaución Ambas, las caches de informes y las “instantáneas de informe” son sensibles a los parámetros utilizados. Cada combinación única de parámetros va a generar un conjunto de datos almacenado en caché o una instantánea de informe. Por lo tanto, es necesario tener mucho cuidado con los informes que tienen muchos parámetros diferentes que se utilizan en un momento dado, ya que puede generar rápidamente docenas de conjuntos de datos almacenados en caché o instantáneas de un único informe. Además, las copias en caché consumen espacio en la base de datos ReportServerTempDB la cual tiene que ser dimensionada y gestionada adecuadamente.

En el siguiente ejercicio, va a crear un “informe vinculado” para septiembre de 2008, que será representado a partir de una instantánea de informe. También se pondrá en marcha el almacenamiento en caché para los usuarios que deseen ejecutar el informe correspondiente para períodos anteriores.

Configurar el almacenamiento de informes en caché y las instantáneas 1. Haga clic en el informe SQL2008SBS y seleccione la ficha Propiedades. 2. Haga clic en Crear informe vinculado (Linked Report). 3. Déle al nuevo informe un nombre y haga clic en Aceptar.

446

Parte VII Business Intelligence

4. Haga clic en la ficha Propiedades y seleccione el vínculo Parámetros. 5. Especifique valores predeterminados para el AñoPedido (OrderYear) y MesPedido (OrderMonth), desactive el user prompt, y haga clic en Aplicar.

6. Vea el informe. 7. Haga clic en la ficha Propiedades y seleccione el link Ejecución. 8. Seleccione “Representar este informe desde una instantánea de ejecución de informes” y seleccione las casillas de verificación: “Programación de Reporte Específico” y “Crear una instantánea de informe…”. 9. Haga clic en Configurar y establezca la programación para todos los días a las 2 am y haga clic en Aceptar. 10. Revise la configuración de representación (rendering) de instantánea y haga clic en Aplicar. 11. Seleccione el enlace Historial en el menú de navegación de la izquierda. 12. Seleccione las casillas de verificación “Permitir historial de informe… Manualmente y almacenar todos los reportes…”Instantáneas en historial” junto con "Limitar las copias del historial del informe". Ajuste el límite a 10 copias, haga clic en Aplicar y en Aceptar en el cuadro de diálogo pop-up. 13. Haga clic en la ficha Historial en la parte superior de la página. 14. Si usted no tiene las instantáneas listadas, haga clic varias veces en “Nuevas instantáneas” para generar una instantánea de informe nueva.

Capítulo 25 - SQL Server Reporting Services

447

448

Parte VII Business Intelligence

15. Haga clic en el enlace de una de las instantáneas y verifique que aparece una segunda ventana del navegador que muestra el informe relacionado con la instantánea seleccionada. 16. Vuelva a la carpeta de informes SQL2008SBS y verifique que ahora tiene dos informes y los informes de órdenes de Septiembre de 2008 tienen una fecha de ejecución asociada a él.

El capítulo 25 - SQL Server Reporting Services

449

17. Haga clic en el enlace del informe SQL2008SBS. 18. Haga clic en la ficha Propiedades y luego en el enlace de Ejecución. 19. Especifique las opciones de almacenamiento en caché para el informe, para almacenar en caché una copia temporal que caduca cada día a las 02 a.m. y haga clic en Aplicar y, a continuación, vea el informe.

Capítulo 25 Referencia rápida Para Configurar SSRS

Haga lo siguiente Inicie el Administrador de configuración de SSRS. La configuración mínima debe especificar las siguientes cosas: Servicios Web y Dirección URL del Administrador y directorios virtuales Cuenta de servicio Base de datos Si desea utilizar suscripciones e instantáneas de informe, es necesario especificar una cuenta de ejecución. Si desea que los usuarios puedan especificar un e-mail de entrega de una suscripción, tendrá que especificar las configuraciones de correo.

Validar una configuración Inicial de SSRS

Inicie Internet Explorer y vaya a http://machinename:8080/Reports. para verificar que se vea el sitio Web SSRS.

450

Parte VII Business Intelligence

Para

Haga lo siguiente

Crear un informe con un asistente

Inicie el Asistente para informes en BIDS Especifique la configuración de orígenes de datos Introduzca una consulta o un procedimiento almacenado para ejecutar Defina un tipo de informe, el diseño (layout) y el estilo inicial Introduzca la dirección URL del servidor de informes y la carpeta de destino Realice una vista previa del informe

Agregar grupos a un informe

Haga clic-derecho en las filas de grupo y agregue un nuevo grupo padre o hijo.

Darle Formato a los elementos del informe

Seleccione el elemento del informe y especifique las opciones de formato en el panel de propiedades, tales como el tipo de letra, tamaño de la fuente, el espesor de la fuente, el color del texto y el color de fondo. Los colores pueden ser especificados usando cualquiera de los dos valores RGB o HTML.

Dar Formato de moneda, numérico y datos de fecha

Puede utilizar los estilos de formato. NET o crear formatos personalizados mediante abreviaturas de elementos tales como #, yyyy, y dd.

Aplicar formato condicional

Cree una expresión que especifique la configuración de formato basada en una evaluación condicional como “if”. En el panel Datos del informe, agregue un nuevo conjunto de datos con su propia consulta basada en la fuente de origen de información (data source). Los conjuntos de datos pueden ser unidos entre sí a través de parámetros de informe y pueden ser usados como elemento de origen para tablas, matrices, gráficos y subinformes. Los conjuntos de datos también se pueden utilizar para proporcionar valores a las listas delplegables usadas como parámetro del reporte.

Añadir múltiples conjuntos de datos a un informe existente

Configurar un conjunto de datos como el origen para un elemento de informe Crear parámetros informe

de

Haga clic derecho en el elemento de informe, seleccione Propiedades de Tablix y especifique el conjunto de datos necesarios en el conjunto de datos desplegables.

Agregue una cláusula WHERE para una consulta y añada cada uno de los parámetros requeridos. En las propiedades de un parámetro, puede especificar el nombre, tipo de datos, el valor por defecto y si el parámetro es de entrada de datos simple o si los valores se seleccionan de una lista definida de manera estática o una lista generada a partir de una consulta.

Habilitar un “profundizar” (drill-down) interactivo dentro de un informe

Configure las opciones de visibilidad. Puede especificar si un elemento se oculta inicialmente o si se muestra, así como el elemento de informe que se utiliza para alternar la pantalla.

Almacenar credenciales en el servidor de informes

Después de implementar el origen de datos al servidor de informes, se puede especificar cuales credenciales se almacenan de forma segura en el servidor de informes, en las propiedades de la fuente de datos.

Representar (render) un informe desde una instantánea Gestión de múltiples instantáneas

Habilite una instantánea de informe y establezca las propiedades de ejecución de informes para representar (render) el informe desde una instantánea. La pestaña Historial de cada informe se utiliza para administrar las instantáneas que han sido creadas para un informe. También puede configurar el número máximo de instantáneas para retener en el menú de Historial de un informe.

El almacenamiento del Reporte en cache se gestiona a través de la página de Administrar almacenamiento ejecución de informes. Usted puede activar la caché, así como el control de la del informe en caché caducidad de la misma.

Capítulo 26

SQL Server Analysis Services Después de completar este capítulo, usted será capaz de Construir almacenes de datos básicos Comprender el modelo dimensional Construir un cubo Construir dimensiones y medidas Construir jerarquías Examinar e implementar cubos Seleccionar algoritmos apropiados de minería de datos Construir modelos y estructuras de minería Examinar un modelo de minería Se han escrito libros enteros sobre SQL Server Analysis Services (SSAS) y todavía rasguñan sólo la superficie de la materia. En este capítulo se tendrá una visión muy básica de las dos principales características en el motor de Analysis Services: el procesamiento analítico en línea (OLAP) y la minería de datos. Usted aprenderá cómo tomar la base de datos SQL2008SBS y convertirla en una estructura que le permita aprovechar el motor de Analysis Services. Usted también aprenderá cómo construir cubos y modelos básicos de minería de datos.

Nota En este capítulo se ofrece una descripción muy básica y no busca un análisis exhaustivo de los principios de diseño de data warehouse. La estructura de la base de datos SQL2008SBSDW está para el único propósito de mostrar las características del motor de Analysis Services. Para una discusión exhaustiva del diseño de datawarehouse, hay decenas de libros dedicados al tema que no se podrían condensar en un solo capítulo en este libro.

Más información Para una discusión detallada de SSAS, consulte SQL Server 2008 Analysis Services Paso a Paso.

Data Warehousing Visión general Aunque Analysis Services se puede utilizar directamente contra una base de datos transaccional, las estructuras normalizadas no son propicias para las actividades analíticas. Con el fin de aprovechar el poder de Analysis Services, va a transformar los datos extraídos de una fuente transaccional 451

452

Parte VII Business Intelligence

en un formato analítico dentro de un almacén de datos. El principal obstáculo que muchos encuentran con el Analysis Services no está en la construcción de los cubos, sino en encontrar la manera de construir el almacén de datos que sustenta los cubos y las estructuras de minería de datos. El truco para la construcción de un almacén de datos está en la comprensión de la perspectiva del usuario final respecto a los datos. En la base de datos SQL2008SBS con la que ha estado trabajando en todo este libro, el propósito de la base de datos era permitir ubicar las órdenes realizadas por un cliente. Si estudia el diagrama de datos de la base de datos SQL2008SBS, verá que todas las tablas de la base de datos giran en torno a la tabla Customers.Customer. Tiene que ir a través de la tabla de clientes para ubicar un pedido. Tiene que ir a través de la tabla de clientes para recuperar información sobre una orden. La entidad central de la base de datos entera es un cliente.

Aunque los clientes son importantes, cuando se quiere analizar la información en la base de datos SQL2008SBS, no se están analizando los clientes. En su lugar, está analizando los pedidos. Cuando los datos transaccionales en la base de datos SQL2008SBS son transformados, la entidad central dentro de la base de datos es una orden. La información del cliente se convierte en un elemento más de información descriptiva.

En el siguiente ejercicio, se restaura una base de datos precompilada llamada SQL2008SBSDW que va a utilizar para el resto de este capítulo.

Configurar la base de datos SQL2008SBSDW 1. Restaure la base de datos utilizando la copia de seguridad SQL2008SBSDW del archivo Chapter26 \SQL2008SBSDW.bak en las muestras que acompañan el libro. 2. Compruebe que la base de datos está en línea y accesible. 3. Revise el contenido de la base de datos SQL2008SBSDW que se generó a partir de la base de datos OLTP SQL2008SBS.

Procesamiento analítico en línea (Online Analytic Processing - OLAP) El campo de la Inteligencia de Negocios (BI) proporciona procesos, prácticas de diseño y tecnología diseñada para ayudarle a comprender mejor las operaciones de su negocio. El propósito principal de BI es resolver el problema "ver el bosque de los árboles". Al atascarse en el aumento de volúmenes de datos detallados, se hace muy difícil tomar decisiones que tengan un impacto en una organización. Así como la microgestión de su personal, no producirá los resultados deseados, por lo que las decisiones de negocio basadas en volúmenes masivos de datos detallados no le permitirán alcanzar sus objetivos de negocio.

Así como usted necesita dar un paso atrás desde el borde de los árboles para comprender el alcance total del bosque, es necesario reducir el detalle sin perder la información general con el fin de convertir los datos en información procesable.

Capítulo 26 - SQL Server Analysis Services

453

Usted resuelve el problema de las cantidades masivas de detalle mediante la aplicación de técnicas de agregación. En lugar de mirar a los millones de filas individuales de información de órdenes, usted puede “resumir” el detalle de la orden en base a varios factores. Dentro de los datos contenidos en la base de datos SQL2008SBS, se pueden producir los siguientes puntos de vista para ayudar a manejar su negocio: ¿Cuántos pedidos por día recibimos? ¿El volumen de pedidos aumenta o disminuye? ¿Están nuestras ventas aumentando o disminuyendo? ¿Cuántos productos vendemos cada mes? ¿Qué productos se venden cada mes? Si una persona compra el Producto X, ¿qué otros productos está dispuesto a comprar? Probablemente se podría llegar a cientos de diferentes preguntas para pedir datos. Sin embargo, tratando de responder a estas preguntas a través de la paginación a través de miles o millones de líneas de ítems de pedidos esto se convertirá rápidamente en información abrumadora. Se dará cuenta de que todas las preguntas de negocio que usted se realiza pueden ser resueltas mediante la recuperación y la agregación (acumulación) de un pequeño subconjunto de los datos. Desafortunadamente, usted no podría escribir todas las consultas SELECT. . . GROUP BY que los usuarios quisieran dentro de los plazos que se necesitan los resultados. OLAP está diseñado para reducir la diferencia entre tener que escribir manualmente miles o millones de consultas de agregado, con el fin de entregar información de negocio para sus usuarios finales. Independientemente de cualquiera de los conceptos que se tratan en este capítulo, todo lo que el motor OLAP realmente hace, es generar todas las permutaciones posibles de los agregados de los datos para que el análisis no tenga que esperar a que se calcule cada agregado.

Modelo Dimensional Con el fin de obtener información válida de los datos, así como procesar eficientemente grandes cantidades de datos, el motor OLAP se basa en un modelo dimensional subyacente. El modelo dimensional se compone de varias estructuras básicas: Dimensiones Atributos Medidas Jerarquías Una dimensión es muy similar a una entidad en el modelo relacional. Las dimensiones definen las estructuras básicas de negocio que desea analizar, tales como clientes, productos y tiempo. La atributos dentro de una dimensión definen las columnas dentro de una dimensión que se utilizan para el análisis, como NombreCliente, NombreProducto, Ciudad, CódigoPostal, y FechaOrden.

454

Parte VII Business Intelligence

Las jerarquías permiten definir una estructura de navegación dentro de una dimensión como por ejemplo: Los clientes dentro de las ciudades dentro de los Estados dentro de los países Los Meses del calendario en trimestres dentro de los años calendario El Mes fiscal en trimestres fiscales dentro de los años fiscales. Las medidas son el conjunto de agregados que se desea calcular, tales como la suma de la cantidad de órdenes o de los números de órdenes. La fuente de todas las estructuras OLAP es una tabla dentro de un origen de datos. OLAP tiene dos términos para referirse a tablas de origen: tablas de hecho y tablas de dimensión. Las Tablas de dimensiones almacenan los datos utilizados para definir dimensiones, atributos y jerarquías de dimensiones. La Tabla de hechos se utiliza para definir las medidas. Aunque pocas personas tienen problemas para definir las tablas de dimensiones, la estructura de las tablas de hechos por lo general trae más dificultades. Un hecho es un solo ejemplo de algo que se desea analizar, como la ocurrencia de un defecto en una línea de fabricación, un elemento de línea en una orden, un paquete enviado, una enfermedad dentro de un registro de salud, o la solicitud de un préstamo. La tabla de hechos es la entidad central dentro de la estructura de base de datos subyacente en el modelo dimensional y contiene una columna para vincular cada fila de hecho a cada dimensión que proporciona información descriptiva adicional.

En la base de datos SQL2008SBS, la tabla de cliente es la entidad central y usted podría necesitar unirse a múltiples tablas para recuperar la información que necesita. Cuando la base de datos SQL2008SBS se convierte en la base de datos SQL2008SBSDW, se toma cada elemento de línea de la orden (ítem de la orden) y se añaden en las claves de la orden, el cliente, la ubicación, el producto, la categoría, la subcategoría, etc. A continuación, puede agregar elementos de línea para cualquiera de las entidades de negocio sin necesidad de unirse a cualquier tabla. Cualquier “join” a una tabla sería para poder recuperar el texto asociado a una clave de entidad particular.

Cubos Al igual que una base de datos proporciona el contenido estructural, así como los límites de seguridad en las bases de datos relacional, una cubo contiene todos los objetos de análisis que se definen así como la definición del más alto nivel de seguridad que se pueden asignar. En Analysis Services, una base de datos abarca toda la instancia de SSAS. Dentro de una base de datos SSAS, puede crear varios cubos para sus usuarios. A diferencia de un cubo geométrico, un cubo SSAS puede tener un número virtualmente ilimitado de dimensiones y la dimensión de cada uno puede ser de una longitud variable.

En el siguiente ejercicio, usted construirá su primer cubo sobre la base de datos SQL2008SBSDW.

Construir su primer cubo 1. Inicie BIDS. 2. Seleccione Archivo | Nuevo | Proyecto, seleccione el proyecto de Analysis Services, especifique un nombre y una ubicación y haga clic en Aceptar.

Capítulo 26 - SQL Server Analysis Services

455

3. Haga clic-derecho en la carpeta Orígenes de datos en el Explorador de soluciones y seleccione Nueva fuente de datos (New Data Source). 4. Haga clic en Siguiente para aceptar la opción predeterminada “Crear un origen de datos. . . para la base de datos SQL2008SBSDW”. 5. En la página Información de suplantación, seleccione “Usar cuenta de servicio”. Complete los pasos restantes del asistente.

456

Parte VII Business Intelligence

6. Haga clic-derecho en la carpeta “Vistas del origen de datos” en el Explorador de soluciones, seleccione “Nueva Vista de datos de origen” (New Data Source View - DSV) y haga clic en Siguiente. 7. Seleccione la fuente de datos que acaba de crear y haga clic en Siguiente.

8. Añada todas las tablas a la lista de Objetos incluidos, haga clic en Siguiente y en Finalizar.

9. Revise el contenido del DSV (Data Source View). 10. Haga clic derecho en la carpeta Cubos, seleccione Nuevo cubo y haga clic en Siguiente.

Capítulo 26 - SQL Server Analysis Services

457

11. Seleccione Usar tablas existentes y haga clic en Siguiente.

12. Seleccione la tabla Pedidos para las tablas de grupos de medida y haga clic en Siguiente. 13. Desactive la columna OrderKey y haga clic en Siguiente. 14. Acepte el valor predeterminado en la página Seleccionar nuevas dimensiones y haga clic en Siguiente.

458

Parte VII Business Intelligence

15. Haga clic en Finalizar. 16. Agregue la cuenta de servicio de SSAS a la instancia de SQL Server si no tiene todavía sesión de acceso. 17. Agregue la cuenta de servicio de SSAS como un usuario en la base de datos SQL2008SBSDW y concédale a la cuenta el permisos SELECT en la base de datos.

Capítulo 26 - SQL Server Analysis Services

18. Haga clic-derecho en el cubo que acaba de crear en el Explorador de soluciones y seleccione Procesar.

459

460

Parte VII Business Intelligence

19. Haga clic en Sí para crear e implementar el proyecto.

Capítulo 26 - SQL Server Analysis Services

20. Haga clic en Ejecutar para procesar el cubo.

21. Haga clic en Cerrar. 22. Haga clic en la ficha Explorador.

461

462

Parte VII Business Intelligence

23. Gaste un poco de tiempo navegando por el contenido del cubo. En los ejercicios siguientes, se ocupará de todos los elementos de formato para hacer al cubo más fácil de usar.

Dimensiones, medidas y cálculos Las dimensiones proporcionan los elementos básicos de análisis dentro de un cubo. Estas contendrán uno o más atributos, que definen las columnas de datos que se utilizan en el análisis. Cada atributo tiene un conjunto de propiedades que se pueden configurar, las más comunes son: La columna clave Nombre Tipo de datos y, opcionalmente, tamaño de los datos Intercalación o juego de caracteres (Collation) Cadena de formato para la visualización Nombre de columna Criterio de ordenación La columna clave identifica el atributo dentro de la estructura del cubo y el nombre se utiliza para hacer referencia al atributo en los elementos que diseñó dentro del cubo. El atributo será conectado a una tabla de origen y la columna con un tipo de datos y, opcionalmente, un tamaño de datos.

Capítulo 26 - SQL Server Analysis Services

463

Usted puede especificar una secuencia de intercalación (collation), una cadena de formato y opciones de ordenamiento que van a controlar cómo se muestra la dimensión dentro de cualquier herramienta que examine el cubo. La propiedad Nombre de la columna permite definir una columna desde el origen de datos que está asignado al atributo, para proporcionar la información que se muestra cuando se explora el cubo, por ejemplo convertir un valor numérico CustomerID en el nombre real del cliente.

El nivel más granular (detallado) dentro de una dimensión es un miembro. Las dimensiones definen la entidad de negocio que está siendo analizada. Los Atributos definen las columnas disponibles para el análisis dentro de una dimensión. Los miembros son los valores reales de los datos dentro de un determinado atributo. Mientras se selecciona un atributo dentro de una dimensión para el análisis, un usuario final va a considerar los miembros reales dentro de un atributo, como Estados Unidos, ProductX o CustomerY.

Las Medidas definen los cálculos disponibles para el cubo y están vinculadas a una columna dentro de la vista de datos de origen del cubo. Usted define la función de agregado, tales como SUM, MIN, MAX, o COUNT. Las medidas también permiten especificar una cadena de formato que se utiliza para controlar los datos a mostrar al examinar el cubo. No todos los agregados que usted quiere en un cubo pueden ser definidos sobre una columna de su fuente de datos. Puede agregar cálculos personalizados a un cubo la que realiza cualquier tipo de agregación que usted quiera, por ejemplo multiplicando la cantidad y el precio unitario para producir un total de ventas por productos individuales. En el siguiente ejercicio, modificará las dimensiones y las medidas creadas por el asistente de cubo para proporcionar una interfaz de navegación amigable para el usuario. También agregará un cálculo al cubo que proporcionará un total de línea de ítem de la orden para permitir que las ventas se agreguen por producto individual.

Nota El diseñador trabaja con la definición de los elementos del cubo. Cada navegador se conectará a Analysis Services y usará la estructura y los datos que están almacenados. Para ver los cambios que haya realizado en el diseño, es necesario implementar los cambios en SSAS y procesar. En el futuro, las capturas de pantalla y los pasos para la implementación y procesamiento se omiten, como un requisito entendido antes de iniciar cualquier navegador dentro de BIDS.

Diseño de dimensiones, medidas y cálculos 1. En el Explorador de soluciones, haga doble clic en la dimensión Customer. 2. Seleccione la clave de cliente y desplácese (scroll) a la propiedad NameColumn en la ventana propiedades. 3. Haga clic en el botón de puntos suspensivos en la columna derecha, coloque la columna Origen para CustomerName, y haga clic en Aceptar. 4. Expanda la propiedad NameColumn y revise la configuración actualizada. 5. Establezca la propiedad OrderBy para el campo Nombre.

464

Parte VII Business Intelligence

6. Haga clic en la página del navegador para revisar los nuevos cambios en la dimensión Cliente Customer. 7. Cierre el diseñador de la dimensión Cliente. 8. Establezca la propiedad NameColumn de la clave de categoría en la dimensión Categoría de producto a Categoría (Category). Establezca la propiedad OrderBy para Nombre (Name).

Capítulo 26 - SQL Server Analysis Services

465

9. Establezca la propiedad “Nombre de columna” (NameColumn) de la clave del producto en la dimensión Product con el nombre ProductName. Establezca la propiedad OrderBy para Nombre. 10. Establezca la propiedad NameColumn de la clave de Sub categoría en la dimensión Product para SubcategoryName de la tabla ProductSubCategory. Establezca la propiedad OrderBy para Nombre. 11. Establezca la propiedad NameColumn de la clave Fecha en la dimensión Fechas a FullDate. Establezca la propiedad Format debajo de la propiedad NameColumn a “m/d/ aaaa”. Establezca la propiedad OrderBy para Nombre (name). 12. Establezca la propiedad NameColumn de la clave de Sub categoría en la dimensión “Sub Categoría de Productos” a SubcategoryName. Establezca la propiedad OrderBy para Nombre.

13. Establezca la propiedad NameColumn de la clave en la dimensión Sub Categoría de producto a Categoría desde la tabla ProductCategory. Establezca la propiedad OrderBy para Nombre. 14. Seleccione la ficha “Estructura de cubo”. Establezca la propiedad FormatString para cada una de las medidas dentro de su cubo. 15. Haga clic en la ficha “Cálculos” y haga clic en el botón Nuevo miembro calculado. 16. Cree un cálculo que multiplica la cantidad y el precio unitario para producir la cantidad de una línea-ítem y agregarla al grupo de medida “Pedidos”.

466

Parte VII Business Intelligence

17. Examine el cubo.

Capítulo 26 - SQL Server Analysis Services

467

Jerarquías Aunque no son estrictamente necesarias para un cubo, las jerarquías permiten a los usuarios navegar por los datos de una manera más intuitiva transitando organizaciones comunes de datos dentro de su negocio. Por ejemplo, en lugar de que un usuario tenga que extraer por separado el país, estado/provincia, ciudad y nombre del cliente en el explorador de cubos, puede proporcionar una jerarquía Customer Geography con la que un usuario podría simplemente arrastrar y navegar.

En el siguiente ejercicio, definirá las jerarquías de navegación para la geografía, las fechas y los productos.

Jerarquías de diseño 1. Haga doble clic en la dimensión Geografía en el Explorador de soluciones. 2. Añada las columnas Ciudad (city), Provincia (StateProvince) y NombrePais (countryName) como atributos de la dimensión Geografía. 3. Arrastre los atributos nombre del país, provincia, y ciudad al panel de Jerarquías para crear una jerarquía de geografía.

468

Parte VII Business Intelligence

4. Haga doble clic en la dimensión Cliente (Customer). Haga clic derecho en la tabla de clientes en el panel de la vista de datos de origen (Data source view - DSV) y seleccione Mostrar tablas relacionadas. 5. Añada la ciudad, nombre del país, y la provincia de la tabla Geography a los atributos de dimensión. Añada el nombre del cliente desde la tabla Clientes a los atributos de dimensión. 6. Arrastre el nombre del país, provincia, Ciudad y Nombre del cliente al panel de Jerarquías para crear la jerarquía CustomerGeography.

7. Haga doble clic en la dimensión Producto (Product). Agregue las tablas relacionadas para el producto y luego las tablas ProductSubCategory. 8. Agregue el NombreProducto (ProductName), NombreSubCategoria (SubCategoryName) y Categoría a los atributos de dimensión. 9. Cree una jerarquía de productos para Categoría, Clave SubCategoría (Sub Category Key) y nombre del producto (Product Name). 10. Haga doble clic en la dimension Fechas y añada las CalendarSemester, CalendarQuarter, EnglishDayNameOfWeek, WeekNumberOfYear a los atributos de dimensión.

Columnas CalendarYear, EnglishMonthName y

11. Cree una jerarquia: Calendar Year, Calendar Semester, Calendar Quarter, English Month Name, and English Day Name Of Week. 12. Cree una jerarquía: Calendar Year, Week Number Of Year, and English Day Name Of Week. 13. Navegue su cubo para revisar las nuevas jerarquías que ha creado.

Capítulo 26 - SQL Server Analysis Services

469

470

Parte VII Business Intelligence

KPI, particiones, perspectivas y traducciones Aunque un cubo básico puede satisfacer las necesidades del negocio, mientras que sólo utiliza dimensiones, medidas, y jerarquías, SSAS proporciona un conjunto adicional de funciones que amplían la capacidad y el apoyo regional de los cubos.

Los indicadores clave de rendimiento (KPI) Todas las organizaciones tienen una serie de objetivos que conducen las operaciones, tales como: Incrementar las ventas en un 10 por ciento respecto al mismo periodo del año anterior Aumentar la base de clientes en un 20 por ciento Incrementar la cantidad media de pedidos en un 15 por ciento Los KPIs traen las definiciones de sus objetivos de negocio en un cubo con el fin de proporcionar indicadores de progreso contra un objetivo. Los KPIs se definen como una serie de cálculos que se utilizan para propósitos de comparación. Usando Expresiones multidimensionales, MDX, usted define el cálculo que será realizado con los datos del cubo, el objetivo contra el que comparar, una expresión para indicar su estado hacia la meta, y una tendencia que muestra qué tan bien están progresando hacia esa meta.

Capítulo 26 - SQL Server Analysis Services

471

Particiones Los cubos pueden (y con frecuencia se crean), con los datos de origen que contienen decenas de millones o miles de millones de filas. Además, se agregan periódicamente a la fuente nuevos conjuntos de datos. Con el fin de que nuevos conjuntos de datos en su fuente sean agregados a un cubo, es necesario procesar los datos. Mientras que se produce el procesamiento, el cubo no está disponible para los usuarios finales.

Con el fin de agilizar la tramitación, así como mejorar el rendimiento del procesamiento de un cubo, se pueden definir particiones dentro del mismo. Similar a la función de partición de las tablas, una partición en un cubo permite especificar los criterios que se utilizan para dividir una tabla de hechos en varias partes, para procesar. Sin embargo, una partición de cubo no afecta al almacenamiento subyacente de la tabla de hechos, sin embargo define el equivalente de una cláusula WHERE para ser usada por SSAS durante una ejecución de proceso. Una vez definidas, SSAS puede procesar cada partición en paralelo y luego combinar los resultados juntos. También puede orientar el proceso hacia una única partición con el fin de minimizar los datos que necesitan ser procesados. Además de las capacidades de procesamiento, empleando particiones, usted puede aprovechar los recursos de varias máquinas para procesar un cubo. Una partición se define contra una tabla de hechos en un DSV. Dado que se pueden definir y utilizar múltiples DSV dentro de un cubo, se puede dividir una tabla de hechos grande a través de varios servidores y aun combinar los datos juntos en un solo cubo con particiones.

Perspectivas Las Perspectivas le permiten a los administradores proporcionar varias vistas de un cubo. Aunque un cubo puede contener un gran número de dimensiones y grupos de medida que abarquen múltiples áreas de su compañía, no todos los usuarios tendrán que acceder a todas las dimensiones de un grupo de medida con el fin de analizar su área de negocio correspondiente. Cuando se define una perspectiva, se pueden elegir los grupos de medida, las medidas, las dimensiones, los atributos, las jerarquías, los cálculos y los KPI.

Un usuario entonces, selecciona una perspectiva específica con el fin de restringir los elementos disponibles para el análisis. Sin embargo, las perspectivas no están diseñadas como una estructura de seguridad ya que si se sabe cómo escribir una expresión MDX, siempre se podrá acceder a cualquier porción de un cubo con independencia de su perspectiva actualmente vigente. Por lo tanto las perspectivas sólo se deben utilizar para reducir la complejidad expuesta a un usuario que está navegando por el cubo.

Traducciones Las Traducciones proporcionan un aspecto multi-lingual a sus datos. SSAS no es un motor de traducción, sin embargo, si usted proporciona traducciones, SSAS puede permitir a los usuarios seleccionar desde una lista y examinar los cubos en su idioma preferido. Las traducciones ocurren en dos niveles diferentes: “estructura de un cubo y datos de origen”. Si desea mostrar los elementos estructurales de su cubo en un idioma determinado, debe insertar la

472

Parte VII Business Intelligence

traducción para el nombre de un objeto, como una dimensión, una jerarquía o un atributo en la definición del cubo. Si desea visualizar las traducciones por miembros dentro de una dimensión, tendrá que presentar la traducción dentro de los datos de origen y luego asignar las columnas traducidas al atributo correspondiente en el cubo.

Minería de datos (Data Mining) Analysis Services invoca imágenes de cubos de navegación. Los cubos son sólo una característica dentro del motor de SSAS. SSAS también incluye un motor de minería de datos muy potente. La minería de datos permite analizar grandes volúmenes de datos para descubrir patrones ocultos. Aunque se puede utilizar la minería de datos para analizar los registros climáticos históricos con el fin de determinar que el sol siempre sale por la mañana y siempre se cae en la noche, no derivaría mucho conocimiento del negocio desde el análisis. Sin embargo, sin la minería de datos, le resultaría mucho más difícil determinar la ubicación en el estante de los 8.000 productos o más, en un supermercado típico basado en el análisis de los patrones de compra de los clientes.

Toda persona interactúa con los algoritmos de minería de datos durante su vida, sin siquiera darse cuenta. Si alguna vez ha entrado en un gran supermercado, usted está interactuando con la minería de datos a partir del momento de llegar a la playa de estacionamiento. Al entrar por la puerta, se encuentran las frutas y hortalizas frescas a su derecha, siempre y cuando la tienda está en los Estados Unidos. Si usted estuviera en Europa, lo más probable sería encontrar las frutas y verduras frescas a su izquierda, porque los estadounidenses generalmente giran a la derecha cuando entran en una tienda mientras que los europeos en general, a la izquierda. Usted puede haber pensado que era muy considerado, así como una gran idea que el gerente de la tienda coloque un alimento salado, tales como papas fritas o galletitas saladas en cada extremo del pasillo donde está la cerveza. La colocación de cada elemento dentro de un gran supermercado no es un accidente o un hecho de consideración. La colocación de cada elemento dentro de un supermercado importante se destina a maximizar la cantidad de dinero que usted gaste, presentándoseles con "impulso" alrededor de los artículos que realmente necesita. Cada uno de los elementos "impulso" derivan de la aplicación de técnicas de minería de datos aplicada a los millones de carritos de la compra que se procesan cada día. Los productos de aperitivo salado con el margen más alto están en el extremo del pasillo de cerveza, porque hay una probabilidad mucho más alta de que una persona que compra la cerveza también se compre un alimento salado, que una persona que compra una botella de vino.

El objetivo de la minería de datos dentro de una empresa es impulsar una decisión de negocios que tenga una mayor probabilidad de ocurrencia. Si el negocio A siempre tomaba decisiones sobre la base del azar (un porcentaje de probabilidad del 50 por ciento), cualquier decisión hecha tendría una probabilidad del 50 por ciento de un favorable resultado. Si el negocio B, un competidor del negocio A, fueron capaces de tomar decisiones basadas en una opción mejor que el azar - más del 50 por ciento de probabilidad decisiones tomadas por el negocio B tendrían una mayor posibilidad de éxito. Si una empresa aplica de forma coherente las decisiones sobre la base de una mayor posibilidad de éxito, está en una posición mucho mejor para superar y vencer a sus competidores.

Capítulo 26 - SQL Server Analysis Services

473

Algoritmos En el centro de la minería de datos hay un conjunto de algoritmos que SSAS aplica a sus datos. Un algoritmo de minería dato es una ecuación matemática que cuando se aplica a sus datos le puede decir la probabilidad del resultado deseado.

Nota El profesor de matemáticas que todos teníamos decía "todo en el mundo es descrito por las matemáticas" esto era correcto aunque todos pensábamos que el maestro estaba loco.

Categorías de algoritmo Los algoritmos de minería de datos se pueden dividir en seis categorías básicas: Clasificación Asociación Regresión Pronostico (forecasting) Análisis de Secuencia Análisis de desviaciones Los algoritmos de Clasificación se utilizan para predecir un resultado basado en un conjunto de atributos de entrada. A los atributos se les da una ponderación igual y se envían a través de múltiples iteraciones contra los datos a fin de encontrar agrupaciones naturales. Un algoritmo de asociación se utiliza para predecir una correlación donde el orden de los elementos considerados no es importante. El resultado de un algoritmo de asociación es la probabilidad de que un resultado particular se produzca basándose en las condiciones actuales. Por ejemplo, si un cliente ya colocó una caja de cerveza en su carro de compras, un algoritmo de asociación puede decirle la probabilidad de que ese cliente también comprará una bolsa gigante de papas fritas.

Los algoritmos de Regresión se utilizan para predecir el rendimiento futuro en base a resultados anteriores. La clave para un algoritmo de regresión es que el atributo de predicción es continuo. Los atributos se pueden clasificar como: Discreto

conjunto de valores específicos que no están relacionados y no se superponen

Continuo

el dato se construye de una serie que es una secuencia incremental

Ordenado

los datos de entrada se clasifican

Cíclico

los datos tienen patrones de repetición

Discretizada

datos continuos que se han dividido en un conjunto discreto de rangos

474

Parte VII Business Intelligence

Usted también puede tener un atributo que se discretiza. Los atributos discretizados contienen una serie continua de datos que se han dividido en segmentos para el análisis, como romper un atributo de ingresos o edad en un conjunto de rangos de valores que no se solapan. Por ejemplo, se podría romper una columna de ingresos en tres bloques que son etiquetados como bajo, medio y alto, para fines estadísticos.

Los algoritmos de Pronóstico tratan de predecir el rendimiento futuro en base a los resultados anteriores al igual que un algoritmo de regresión. Sin embargo, un algoritmo de pronóstico requiere una serie de tiempo como entrada e intenta predecir un valor futuro basado no sólo en los resultados pasados, sino también como factor de la evolución cíclica de los datos, tales como la compra de ropa en el tiempo.

Los algoritmos de Secuencia predicen la probabilidad de que un evento futuro suceda basado en los eventos que se han producido en el pasado. Con el análisis de la secuencia, el orden de los acontecimientos del pasado es tan importante como el acontecimiento actual que se ha producido en la predicción de la probabilidad de un evento futuro. El análisis de Desviación se utiliza para encontrar los datos que divergen desde un estado normal. Una de las aplicaciones de un algoritmo de desviación es identificar personas sospechosas en un aeropuerto en base a su comportamiento significativamente diferentes de lo normal.

Algoritmos de minería de datos SSAS SQL Server viene con siete algoritmos de minería de datos que abarcan todas las categorías de la minería, excepto el análisis de desviación. Los algoritmos de minería de datos que están disponibles para usted son: Naïve Bayes Árboles de decisión de Microsoft ❏

Regresión lineal de Microsoft



Árboles de regresión Microsoft

Microsoft Clustering Clústeres de secuencia Reglas de asociación Redes Neuronales Series de tiempo

Modelos y estructuras de minería El proceso de extracción se inicia con la definición de la estructura de minería. El modelo de explotación minera se basa en un origen de datos que puede ser una base de datos relacional o un cubo OLAP. Una vez definido, el modelo de minería es procesado. El procesamiento de un modelo de minería que se conoce como "entrenamiento" del modelo, no es más que SSAS mediante una instrucción OPENQUERY para recuperar datos del origen de datos definido y corriendo todos los datos a través del algoritmo de minería de datos seleccionado.

Capítulo 26 - SQL Server Analysis Services

475

Nota Dado que cada algoritmo realiza los cálculos utilizando diferentes algoritmos matemáticos y que se pueden aplicar a múltiples problemas, es muy común que incluya más de un algoritmo de minería en una estructura de minería. Cada algoritmo de minería de datos especificado por una estructura de minería se conoce como un modelo de minería.

Cada fila recuperada desde la fuente de datos para el procesamiento se conoce como “un caso”. Las columnas/atributos que se procesan son variables en el algoritmo. Una vez que el “entrenamiento” se haya completado, su estructura de minería está lista para su análisis y contendrá la definición de cada modelo de minería, así como los datos que han sido “entrenados” para la estructura.

En el siguiente ejercicio, creará un modelo de minería para determinar qué productos son más probables que coexisten en un carrito de compras.

Construir un modelo de minería y estructura de minería 1. Haga doble clic en el DSV SQL2008SBSDW para abrir el editor de DSV. 2. Haga clic en Agregar/Quitar objetos, añada las vistas v_CustomerOrders y v_OrderProducts al DSV y haga clic en Aceptar.

3. Haga clic-derecho en OrderKey en v_OrderProducts y seleccione Nueva relación. Vincule (join) la columna OrderKey entre v_OrderProducts y v_CustomerOrders, haga clic en Aceptar y haga clic en Si para crear una clave principal lógica.

476

Parte VII Business Intelligence

4. Seleccione OrderKey y ProductName en v_OrderProducts, haga clic derecho y seleccione “Configurar Clave Primaria Lógica” (Set Logical Primary Key), guarde y cierre el DSV.

5. Haga clic-derecho en Estructuras de minería en el Explorador de soluciones, seleccione Nueva estructura de minería, y haga clic en Siguiente. 6. Seleccione “Desde la base de datos relacional existente. . .” (From Existing Relational Database) y haga clic en Siguiente.

Capítulo 26 - SQL Server Analysis Services

477

7. Seleccione “Reglas de asociación de Microsoft” de la lista desplegable y haga clic en Siguiente.

8. Seleccione la vista de origen de datos SQl2008SBSDW que ya definió en el proyecto y haga clic en Siguiente.

478

Parte VII Business Intelligence

9. Seleccione v_CustomerOrders como “la tabla de casos” y v_OrderProducts como la tabla anidada y haga clic en Siguiente.

10. Seleccione la columna OrderKey como columna clave para v_CustomerOrders y la ProductName como clave, entrada, y columna de predicción para la tabla anidada y haga clic en Siguiente.

Capítulo 26 - SQL Server Analysis Services

11. Deje los tipos de contenido y de datos con el valor predeterminado que figuran y haga clic en Siguiente.

12. Establezca en 30% el porcentaje de datos para pruebas y haga clic en Siguiente.

479

480

Parte VII Business Intelligence

13. Déle un nombre al modelo de minería y a la estructura como “Product Association” y haga clic en Finalizar.

14. Haga clic en la ficha Modelos de minería y revise la configuración del modelo ProductAssociation. 15. Implemente el proyecto en SSAS y procese la estructura de minería. 16. Seleccione la vista de modelo de minería para revisar las reglas que se han encontrado en los datos.

Capítulo 26 - SQL Server Analysis Services

481

482

Parte VII Business Intelligence

17. Seleccione la ficha “Conjuntos de elementos” (Itemsets) para recuperar los conjuntos que se encontraron dentro de los datos.

18. Seleccione la ficha “Red de dependencias” (Dependency Network) para revisar las relaciones entre los diversos productos.

19. Seleccione el visor de contenido genérico (Generic viewer) y revise los resultados.

Capítulo 26 - SQL Server Analysis Services

483

Minería de Datos Desmitificada La Minería de datos siempre ha sido esfera de "gente en batas blancas de laboratorio con 18 doctorados en matemáticas aplicada" y generalmente se considera inaccesible para gente "normal ". La minería de datos no es una forma de arte místico, ni un proceso mágico. La minería de datos es sencillamente la aplicación de las matemáticas, por lo general en el campo de la estadística, a los conjuntos de datos. Dentro de los últimos años, algunos fabricantes como Microsoft, han producido conjuntos de herramientas que permiten a un "simple mortal" definir y aprovechar la minería de datos sin necesidad de entender las matemáticas.

Si usted gasta un poco de tiempo en trabajar a través de algunas de las matemáticas, encontrará que la minería de datos no es muy diferente a muchas otras operaciones que se realizan en SQL Server. Para ayudar a desmitificar la minería de datos, el siguiente entorno utiliza el algoritmo Naïve Bayes a lo largo de cálculos brutos para demostrar cómo se obtienen los resultados dentro de un modelo de minería. Entonces podría crear un conjunto de datos que coincida con el escenario, pasarlo por el algoritmo Naïve Bayes, y ver los mismos resultados dentro de SSAS.

El algoritmo Naïve Bayes es: P (E | H) * P (H) P (H | E) = P (E) P (H) define la probabilidad de una hipótesis. P (E) define la probabilidad de la evidencia. P (E | H) define la probabilidad de las hipótesis con respecto a las evidencias reunidas.

484

Parte VII Business Intelligence

Una encuesta de 1277 personas fueron tomadas para determinar las preferencias de compra. Cada persona fue encuestada con una serie de preguntas para determinar qué factores influyeron en su decisión de compra de un vehículo particular. Dentro del grupo había 652 hombres y mujeres 625. Su tarea es determinar si un comprador es hombre o mujer en base a las respuestas a las preguntas de la encuesta. Si tuviera que adivinar al azar que el comprador es un hombre, usted tendría la posibilidad del 51,1 por ciento de ser correcta y el 48,9 por ciento de posibilidades de ser incorrectos, un empate estadístico. Mediante la aplicación Naïve Bayes a las respuestas de la encuesta, usted debería ser capaz de hacer una mejor estimación y aumentar sus posibilidades de ser correcta.

La Tabla 26-1 muestra los cinco factores considerados, así como el número en que cada grupo dijo “sí” o “no” durante cinco factores específicos. TABLA 26-1

Factores que influyen en la compra de vehículos Puntuación de consumidores

Precio

F

M

F

M

F

631

479

492

603

141

463

20

143

53

6

492

161

Tipo de Apelación a Marca carrocería

Garantía

M

F

M

F

M



126

482

238

522

No

518

85

397

58

Respuesta

En base a los resultados de la encuesta, se pueden calcular las probabilidades de cada respuesta para cada factor. La tabla 26-2 muestra las probabilidades de cada respuesta de la encuesta. TABLA 26-2

Probabilidad de cada respuesta de la encuesta

Tipo de Respuesta Atractivo de Marca carrocería

Puntuación de consumidores

Precio

F

M

F

M

F

Garantía

M

F

M

F

M



19,6%

85,0%

37,5%

90,0% 96,9%

77,0%

91,8%

99,0%

22,3%

74,2%

No

80,4%

15,0%

62,5%

10,0%

23,0%

8,2%

1,0%

77,7%

25,8%

3,1%

Si te dijeran que un encuestado dijo que el tipo de carrocería del vehículo no era importante y la marca, la garantía, la calificación de los consumidores, y el precio era importante, ahora podría hacer una predicción mucho mejor de si el encuestado es hombre o mujer. Para calcular la probabilidad de que el encuestado sea hombre, se multiplican las probabilidades de respuesta para cada factor: 19,6% * 62,5% * 96,9% * 91,8% * 22,3%. Para calcular la probabilidad de que sea una mujer, se multiplica la probabilidad de respuesta correspondientes a cada factor: 85,0% * 10,0% * 77,0% * 99,0% * 74,2%. En este punto, la probabilidad de que el encuestado sea masculino es 0,01238 y la probabilidad de que sea mujer es 0,02354.

Para terminar el cálculo, se toma la probabilidad masculina y se divide por la suma de las probabilidades. Lo mismo sucede con la probabilidad femenino. El resultado final le dice que en base a las respuestas de la encuesta, existe una probabilidad de 65,54 por ciento que el comprador sea mujer, mientras que sólo un 34,46 por ciento de probabilidad que el comprador sea un hombre.

Capítulo 26 - SQL Server Analysis Services

485

Capítulo 26 Referencia Rápida Para Definir una vista de origen de datos DSV

Haga lo siguiente Crear un origen de datos. Crear una vista de origen de datos basado en un origen de datos. Seleccione las tablas/vistas que quiere en su DSV.

Modificar las propiedades de una dimensión

Seleccione la dimensión y cambie las propiedades asociadas en el panel Propiedades.

Cambiar el valor mostrado para un miembro dentro de una dimensión

Especifique un NameColumn para un atributo.

Cambiar el método de agregación para una medida

Seleccione la medida y cambie la propiedad AggregationFunction.

Ajustar el formato de visualización

Configure la propiedad FormatString.

Añadir un atributo a una dimensión

Haga doble clic en la dimensión en el Explorador de soluciones. Arrastre una columna desde el panel de DSV a la lista de atributos.

Añadir una jerarquía a una dimensión

Arrastre atributos en el panel Jerarquías. Organice los atributos en el orden que desea navegar por la jerarquía.

Definir el orden de un atributo

Seleccione el atributo y especifique la propiedad OrderBy.

Añadir un cálculo personalizado a un cubo

Seleccione la ficha Cálculos en el diseñador de cubos, agregue un nuevo cálculo y especifique la expresión MDX a usar.

Crear una estructura de minería de datos

Haga clic-derecho en “Estructuras de minería” en el Explorador de soluciones y seleccione Nueva estructura de minería. Seleccione la técnica de minera. Especifique el DSV a usar. Configure la tabla(s) y/o la vista (s) a usar para el caso y, opcionalmente, tablas anidadas. Seleccione la clave, entrada, y columna de predicción (s). Configure el tipo de contenido.

Entrenar a un modelo de minería

Procese la estructura de minería para leer en los datos de origen y calcular contra el algoritmo de minería seleccionado.

Índice Símbolos y Números . Ldf, 53 . Mdf, 53, 57 . Ndf, 53 . NET Framework 2.0, 17 . NET Framework 3.5, 22

A accent sensitivity, 19 accounts, service, 17–19, 35–38 ACTIVATION, 242 ActiveX scripts, 319–20, 381 Ad Hoc Distributed Queries, 260 administrative procedures, 196 administrative users, 269–73 AdventureWorks2008, 28 AdventureWorksDW2008, 28 AFTER, 213 after image, 167 aggregate functions, 199, 279–80 Aggregate transform, 383 aggregating data, 123, 138–39 derived tables, 139–40 fi ltering aggregates, 143–44 multiple permutations, 140–42 OLAP (Online Analytic Processing), 453–54 pivot tables, calculating, 145 ranking data, 146–47 result sets, 147–49 running aggregates, 144–45 alerts, 6. See also SQL Server Agent creating, 329–32 Database Mail, 42–43 jobs, 321–25 monitor server, 357 algorithms data mining, 472 categories, 473–74 hash algorithms, 282–84 aliases, 123 ALL, 105, 263 ALTER, 76–77, 208, 275 ALTER DATABASE, 59, 216 ALTER FUNCTION, 208 ALTER INDEX, 99–100 ALTER INDEX. . .REBUILD, 309–10 ALTER PARTITION SCHEME, 105 ALTER PROCEDURE, 208 ALTER TABLE, 216 ALTER TRIGGER, 208

ALTER VIEW, 208 Analysis Services. See SQL Server Analysis Server (SSAS) Analysis Services Execute DDL Task, 380 ANSI character set, 70 ANSI_Nulls, 183 API (SQL Trace Application Programming Interface), 44 applications client redirect, 354 line of business, 9–10 architecture data storage, 56 processor, 69 Service Broker, 226–28 archive tables, 108 arrays, 129 articles, 364 AS clause, 104 AS PARTITON clause, 105 AS SNAPSHOT OF, 219 ascending sort, 126 assemblies, 279–80 association algorithm, 473 Association Rules, 474 Asymmetric Key, login, 264–68 asymmetric keys, 265, 281–82, 285–86 asynchronous message queuing architecture, 226–28 contracts, 232–33 conversations, 235–36 message types, 229–32 overview, 225–26 prioritization, 245 queues, 233–34, 242–44 sending/receiving messages, 236–42 services, 234–35 attach, database moving, 59–60 attribute-centric XML format, 151 attributes, OLAP, 453–54 attributes, regression algorithms, 473–74 auditing data capture, 173–75 sys.database_audit, 334 tracking changes, 171–73 authentication modes, 19, 259 AUTO, 151 availability database mirroring, 348 caching, 353–54 client redirect, 354 Database Snapshots, 349, 354 endpoints, 350–51 initializing, 355–56

487

488

AVG operating modes, 351–53 page corruption, 354 roles, 349–50 failover clustering, 345–48 log shipping, 356 components, 356–57 initialization, 357–63 overview, 7 replication, 363 agents, 365–66 components, 364 confi guring, 367–73 methods, 366–67 roles, 365 AVG, 183, 383

B background processing, reports, 441 backup job, 358 BACKUP MASTER KEY, 282 backups, 301 database mirroring, 355–56 database restores, 311–16 Database Snapshot, 220 db_backupoperator, 269 differential backups, 307–8, 314–15 fi legroups, 308 full backups, 302–5, 311–12 log shipping, 358–59 maintenance plans, 325–28 page corruption, 308–9 partial, 107 recovery models, 309–11 transaction log backups, 305–7, 315–16 balanced trees (B-trees), 88–89 BCP (Bulk Copy Program), 34, 309–10, 366 before image, 167 BEGIN statements, 190–91 BEGIN TRAN, 167–68 BEGIN. . .END statements, 190–91 BI (business intelligence), 9–14 BIDS (Business Intelligence Development Studio), 46 overview, 378–80 tasks, 380–82 transforms, 382–85 bigint, 68 binary data, 72 bit, 72 BLOBs (Binary Large Objects), 74 blocking, tables, 112 bookmarks, reports, 431 Books Online, 31–33 boundary points, 103–5, 128 BREAK, 191 B-trees (balanced trees), 88–89 Bulk Copy Program (BCP), 34, 309–10, 366 BULK INSERT, 309–10, 382

Bulk Insert task, 382 Bulk Logged recovery model, 309–11 bulkadmin, 266 Business Intelligence (BI), 9–14 Business Intelligence Development Studio (BIDS), 46 overview, 378–80 tasks, 380–82 transforms, 382–85

C CA (certifi cate authority), 285–86 Cache transform, 383 caches, 353–54, 444–49 calculations data retrieval, 122 functions, 199–205 key performance indicators (KPIs), 470 measures, OLAP, 454 OLAP, 462–66 pivot tables, 145 processors and, 69 variables and, 187 CALLED ON NULL INPUT, 201–2 CALLER, 202 CASE function, 125–26 case sensitivity, 19 CAST, 123–26 catalogs, full-text, 223 CATCH, 192–93 CDOC (Cross Database Ownership Chaining), 260 certifi cate authority (CA), 285–86 Certifi cate, login, 264–68 certifi cates, 265, 281–82, 285–86 change tables, 171–73 change tracking, 171–75, 333 CHANGE_TRACKING, 250 char, 70 char(n), 70 CHAR/VARCHAR, 249 CHAR/VARCHAR/XML, 249 character data, 19, 69–71, 129, 384 Character Map, 384 charts, formatting, 423–28 CHECK, 204–11 check constraints, 82 CHECK_EXPIRATION, 265 CHECK_POLICY, 265 CHECKSUM, 304, 309 classifi cation algorithms, 473 client connections, 37 client redirection, 354 CLOSE, 194–96 CLOSE MASTER KEY, 282 CLR (Common Language Runtime), 196, 260, 279–80, 333 CLR Enabled, 260 clustered indexes, 91–93

489 creating clustering key, 91–93 clustering, failover, 7, 345–48 clustering, SSRS, 416 COALESCE, 124 Code Access Security, 279–80 CodePlex web site, 28 COLLATE, 75 collation, 75 collation sequences, 19 column fi lter, 364 columns, table clustered indexes, 91–93 computed, 77–78 data retrieval, 122–23, 126 included columns, indexes, 95–96 properties, 75 sparse, 78–79 views, 181–82 command line utilities OSQL, 34 SQLCMD, 34 commenting code, 186 COMMIT, 167 COMMIT TRAN, 167–68 Common Language Runtime (CLR), 196, 260, 279–80, 333 common table expressions (CTEs), 149–50 communications protocols endpoints, 260–63 Service Broker architecture, 226–28 contracts, 232–33 conversations, 235–36 message types, 229–32 overview, 225–26 prioritization, 245 queues, 233–34, 242–44 sending/receiving messages, 236–42 services, 234–35 SQL Server Confi guration Manager, 37 compound criteria, fi ltering data, 127–30 compression, backups, 304 computations Aggregate transforms, 383 data retrieval, 125 views, 181 COMPUTE, 179, 183 COMPUTE BY, 179, 183 concatenated data, 124 conditional expressions, 125 Conditional Split, 384 conditions, 290–93 confi guration fi le, SSIS packages, 406–9 confi guration functions, 199 Confi guration Manager, 35–38 confi guring. See also Confi guration Manager Database Mail, 42–43 SQL Server Management Studio (SSMS), 39–40

CONNECT, 261–62 connection strings, 386–90 connections, server endpoints, 260–63 query execution stats, 339–40 SSIS, 386–90 consistency checks, 325–28 constants, 122 constraints check, 82 clustered indexes, 92 default, 82–83 DML triggers, 213 foreign keys, 83–84 primary keys, 79–81 unique, 81 XML indexes, 101 CONTAINS, 251–55 CONTAINSTABLE, 251–55 CONTINUE, 191 CONTINUE_PAST_ERROR, 304 CONTROL, 275 control fl ow, 390–94 control fl ow constructs, 189–92 control fl ow options, 320 Control Flow, SSIS tab, 380 CONVERT, 123–26 COOKIE INTO, 202 cookies, 202 copy job, 358 Copy Objects Wizard, 22 copying BCP (Bulk Copy Program), 34, 309–10, 366 Object Explorer, 95 Copy-On-Write, 220–21 correlated sub-queries, 133 COUNT, 125 covering indexes, 95–96 CREATE, 76–77 CREATE BROKER PRIORITY, 245 CREATE DATABASE, 52, 57–58, 216, 219–20 CREATE ENDPOINT, 262 CREATE INDEX, 309–10 CREATE PARTITION SCHEME, 105 CREATE TABLE, 159 CREATE USER, 268–69 creating alerts, 329–32 clustered indexes, 92–93 cubes, 454–62 database diagrams, 85–86 databases, 51–58 functions, 200–3 indexes, 93–94, 96, 98–99, 101, 107–8 jobs, 319–25 maintenance plans, 325–28 reports, SSRS, 418–38 schemas, 64–66, 72–74

490

Cross Database Ownership Chaining (CDOC) service accounts, 17–19 stored procedures, 185 tables, 76–77, 80–82 XML indexes, 101 Cross Database Ownership Chaining (CDOC), 260 CROSS JOIN, 131–33, 181 CROSS/OUTER APPLY, 183, 204–11 cryptographic functions, 199 CSS (Microsoft Customer Service and Support), 34–35 CTEs (common table expressions), 149–50 CUBE operator, 141–42 cubes, OLAP (Online Analytic Processing), 13–14, 454–62 dimensions, measures, calculations, 462–66 hierarchies, 467–70 partitions, 471 perspectives, 471 translations, 471–72 cursors, 194–96, 199 cut, Object Explorer, 95

D DAC (Dedicated Admin Connection), 260 data availability, 7 BLOBs (Binary Large Objects), 74 Bulk Copy Program (BCP), 34 character, 69–71 data fl ow, SSIS, 394–403 date and time, 124 loss exposure, 358 numeric, 67–69 SPATIAL, 74–75 storage, 56, 72–75 Tablediff, 34 types of, 67 data cache, 353 Data Collectors, Performance Studio, 45–46 Data Conversion transform, 384 Data Defi nition Language (DDL), 76–77, 269, 380 data encryption. See encryption data fi legroups, 56 data fi les, 53–57 Data Flow, SSIS, 380, 382–85 data manipulation deleting data, 161–64 functions, 123 inserting data, 153–59 MERGE, 164–66 OUTPUT, 166–67 tracking changes, 171–75 transaction handling, 167–71 updating data, 159–61 Data Manipulation Language (DML), 76–77, 236–37, 290–93 data mining, 380 algorithms, 473–74 demystifi ed, 483–84

models and structures, 474–83 overview, 472 Data Mining Engine, 14 Data Mining Extensions (DMX), 38 Data Mining Query, 380 data recovery backups, 301 database restores, 311–16 differential backups, 307–8, 314–15 fi legroup backups, 308 full backups, 302–5, 311–12 page corruption, 308–9 recovery models, 309–11 transaction log backups, 305–7, 315–16 data retrieval aggregating data, 138–39 derived tables, 139–40 fi ltering aggregates, 143–44 multiple permutations, 140–42 pivot tables, calculating, 145 ranking data, 146–47 result sets, 147–49 running aggregates, 144–45 common table expressions (CTEs), 149–50 fi ltering data, 127–30 functions, 204–11 multiple tables, 131–33 overview, 121 SELECT statement, 126, 137–38 sorting results, 126 unique results, 134–35 views creating, 179–80 indexed views, 182–84 modifying data, 181–82 XML data querying, 150–51 Data Transformation Services (DTS), 10 data types changing, 123–26 security, 279–80 Visual Studio to SQL Server mapping, 384 data warehousing, 451–52 data, unstructured. See full-text indexing DATA_BASE_MIRRORING, 350–51 Database Diagrams, 85–86 Database Engine availability, 7 creating account, 17–19 installing, 22–29 overview, 3 programming interface, 5–6 replication, 6–7 security subsystem, 4–5 Service Broker, 6 SQL Server Agent, 6 Storage Engine, 4 Database Engine Tuning Advisor (DTA), 44–45 database level principals, 268–69 Database Mail, 42–43, 260

disabling, index database master key, 281–82 database mirroring, 263, 348 caching, 353–54 client redirect, 354 Database Snapshots, 354 endpoints, 350–51 initializing, 355–56 operating modes, 351–53 overview, 7 page corruption, 354 roles, 349–50 TCP endpoints, 262 Database Snapshots, 221–22 Copy-On-Write, 220–21 database mirroring, 349, 354 overview, 219–20 reverting data, 222–23 DATABASE_MIRRORING, 261 databases creating, 57–58 designing, 64–67 diagrams, 85–86 fi le structure, 53–57 maintenance plans, 325–28 moving, 59–60 attach, 60 overview, 51–53 sample, installing, 28–29 vs. spreadsheets, 67 data-driven subscriptions, 441 DATEADD, 208 dates, 71–72, 124, 199, 424 datetime, 71–72 datetime2, 71–72 datetimeoffset, 71–72 db_accessadmin, 269 db_backupoperator, 269 db_datareader, 269 db_datawriter, 269 db_ddladmin, 269 db_denydatareader, 269 db_denydatawriter, 269 db_owner, 269–73 db_securityadmin, 269 dbcreator, 266 dbo.syspolicy_managment_facets table, 290 DCM (Differential Change Map), 307–8 DDL (Data Defi nition Language), 76–77, 269, 380 DDL triggers, 216, 218, 295 deadlocking, tables, 112 DEALLOCATE, 194–96 debugging IF statements, 191 WHILE statements, 191 decimals, 67–69 DECLARE, 186, 194–96 decryption, 284. See also encryption Dedicated Admin Connection (DAC), 260

DEFAULT, 154, 204–11 default constraints, 82–83 DEFAULT fi legroup, 56–58 defense in depth, 259 defragmenting, indexes, 99–100 DELETE db_datawriter, 269 db_denydatawriter, 269 deleting data, 161–63 DML triggers, 213 locks, 168 MERGE, 164–66 OUTPUT, 167 performance degradation, 93–94 permissions, 275 transaction handling, 167–68 deleted tables, 166–67 deleting data, 161–64 DENSE_RANK, 146 dependent objects, 202 deploying packages, SSIS, 409–10 deploying reports, SSRS, 439–40 Derived Column transform, 384 derived tables, 139–40 descending sort, 126 designing databases, 85–86 designing tables, 63–64 binary data, 72 columns, 75, 77–79 constraints, 79–84 creating tables, 76–77 data types, 67–71 database design, 64–67 database diagrams, 85–86 date and time data, 71–72 FILESTREAM, 74 hierarchyID data, 75 naming objects, 64 schemas, 64–66 SPATIAL data, 74–75 XML data, 72–74 detach, database moving, 59–60 deviation analysis, 474 diagnostics object size, 336 SQLDiag, 34–35 sys.dm_os, 334 DIALOG, 236 dialog handles, 236 differential backups, 307–8, 314–15 Differential Change Map (DCM), 307–8 Digital Rights Management (DRM), 201 digital signatures, 285–86 dimension tables, 454 dimensions, OLAP, 453–54, 462–66 directories, permissions, 347 DISABLED, 261–62 disabling, index, 100

491

492

disaster recovery disaster recovery. See also database mirroring backups, 301 database restores, 311–16 differential backups, 307–8, 314–15 fi legroup backups, 308 full backups, 302–5, 311–12 page corruption, 308–9 recovery models, 309–11 transaction log backups, 305–7, 315–16 discretized attributes, 474 disk confi guration, 346 disk drives, failover clustering, 345–48 disk space, installation requirements, 17 diskadmin, 266 DISTINCT, 134–35, 138, 181, 183 Distrib.exe, 366 Distribution Agent, 366–67 distribution statistics, 97 distributor, 365 DML (Data Manipulation Language), 76–77, 236–37, 290–93 DMVs (dynamic management views) indexes, 337–39 object size, 336 overview, 333–34 query execution stats, 339–40 retrieving object metadata, 334–35 DMX (Data Mining Extensions), 38 documentation, 31–33 documents, XML, 72–73 drag and drop, Object Explorer, 95 DRM (digital rights management), 201 DROP, 76–77 DROP TRIGGER, 216 DROP/CREATE, 208 DTA (Database Engine Tuning Advisor), 44–45 DTS (Data Transformation Services), 10 dynamic execution, 193–94 dynamic management views (DMVs) indexes, 337–39 object size, 336 overview, 333–34 query execution stats, 339–40 retrieving object metadata, 334–35 dynamic row fi lter, 364 dynamic scalability, 242

E editions, SQL Server, 15–16 EKM (Extensible Key Management), 287 EKM (External Key Management), 260 element-centric XML data, 151 ELEMENTS, 151 ELSE statements, 190–91 e-mail architecture, 226–28 contracts, 232–33

conversations, 235–36 message types, 229–32 overview, 225–26 prioritization, 245 queues, 233–34, 242–44 sending/receiving messages, 236–42 services, 234–35 EMPTY, validation option, 229 encryption asymmetric keys, 285–86 certifi cates, 285–86 Extensible Key Management (EKM), 287 hash algorithms, 282–84 key management, 260 master keys, 281–82 overview, 280–81 SQL Server Confi guration Manager, 37 SSRS, 415 symmetric keys, 284 TCP endpoints, 263 Transparent Data Encryption (TDE), 286–87 ENCRYPTION, 201, 236 Encryption Keys, 415 END statements, 190–91 endpoints, 260–63, 350–51 equality, 127–28 equality joins, 133 errors, 192–93, 329–32 evaluation order, 125 event groups, 216 Event Handlers, SSIS, 380 event logs, SQLDiag, 34–35 EVENTDATA(), 216 events alerts, creating, 329–32 confi guration, 334 notifi cation policies, 295 SQL Server Profi ler, 44 WMI, BIDS tasks, 382 Excel documents, 249 EXCEPT, 148–49, 181, 183 exception handling, SSIS, 403–6 exclusive locks, 168 EXEC, 189, 193–94 EXECUTE, 202, 275 EXECUTE AS, 201–2, 273 Execute tasks, 381 execution, dynamic, 193–94 EXISTS, 133 EXPLICIT, 151 Export Column, 384 exporting data, 34 Extensible Key Management, 287 Extensible Markup Language (XML). See XML (Extensible Markup Language) extents, 55 External Key Management (EKM), 260 EXTERNAL_ACCESS, 279–80

HTTP, los puntos finales 493

F facets, 290 fact tables, 454 failover clustering, 7, 345–48 fatal error codes, 193 FETCH, 194–96 File System task, 382 FILEGROUP, 248 fi legroups, 56–57 backups, 308 database mirroring, 348 message queues, 233 partitions, 105, 110 FILEGROWTH, 54–55 fi les. See FILESTREAM fi les, structure of, 53–57 FILESTREAM, 219. See also full-text indexing creating, 57–58 data storage, 74 database mirroring, 348 Database Snapshot, 223 fi legroups, 56–57 index fi les, 55 security, 260 Filestream Access Level, 260 fi ll factor, indexes, 99–100 fi ltered indexes, 97–98 fi ltering aggregate fi ltering, 143–44 data retrieval, 127–30 EXISTS, 133 full text indexes, 249 replication, 364 table joins, 131–33 fi rewalls, endpoints, 261 fl oat(n), 68 footers, formatting, 423–28 For Loop, 381 FOR PATH, 101 FOR PROPERTY, 101 FOR VALUE, 101, 104 FOR XML, 151 Foreach Loop, 381 forecasting algorithm, 474 foreign keys, 83–84 formatting date and time data, 124 reports, SSRS, 423–28 XML data queries, 151 FORMSOF, 254 forwarding pointers, 91 fragmentation, 99–100, 337 FREETEXT, 251–55 FREETEXTTABLE, 251–55 FROM, 138–39 data retrieval, 122 deleting data, 161–62

functions, 204–11 pivot tables, 145 updating data, 159–61 FROM clause, 131–33 FTP tasks, 382 FULL OUTER JOIN, 131–33 Full recovery model, 309–11 full text catalogs, 57, 223, 247–48 full text fi legroups, 56–57 full text indexing, 249–51 Database Snapshot, 220 Dynamic Management Views (DMVs), 334 fi le structure, 55 fi legroups, 57 partitions, 112 querying, 251–55 Full Text Search, 17–19. See also full-text indexing functions, 199 CLR security, 279–80 creating, 200–3 nesting in queries, 125 retrieving data from, 204–11 system functions, 199 Fuzzy Grouping, 383 Fuzzy Lookup, 383

G geography data, 74, 102 geometry data, 74, 102 global variables (@@), 186–88 GOTO, 192 GROUP BY, 138–39, 142, 181 grouping data, reports, 423–28 GROUPING SETS, 142

H hash algorithms, 282–84 HAVING, 144–45, 181 headers, formatting, 423–28 health checks, 347 heap, 91 hidden tables, 228, 233–34 hierarchies encryption, 281–82 OLAP, 453–54, 467–70 permissions, 274–77 ROLLUP operator, 142 hierarchyID, 75 high availability operating mode, 351–52 high performance operating mode, 352–53 high safety operating mode, 353 histogram, 97 HTML, full text indexes, 249 HTTP, endpoints, 261

494

identifiers, objecto

I identifi ers, object, 64 IDENTITY, 75 IF statements, 190–91 image, 72, 104, 423–28 IMAGE data type, 126, 249 image functions, 200 IMPERSONATE, 273 Import Column, 384 importing data, 34 IN, 129 IN PATH, 248 included columns, indexes, 95–96 INCREMENT, 75 indexed views, 103–8, 182–84 indexes administrative procedures, 196 clustered indexes, 91–93 covering indexes, 95–96 Database Engine Tuning Advisor (DTA), 44–45 dynamic management views (DMVs), 337–39 fi ltered indexes, 97–98 full text, 55, 57, 220, 249–51, 334 full text catalogs, 247–48 included columns, 95–96 index key, 129 maintenance plans, 325–28 management and maintenance, 93–95, 99–100 nonclustered, 93–95 online index creation, 98–99 partitions, 103–8, 110–16 querying full text data, 251–55 searching, 129 spatial, 102 structure, 87–91 XML, 100–1 inequality, 127–28 INFLECTIONAL, 254 infrastructure requirements, 17 INIT/NOINIT, 304 initiator, communication, 227 injection attack, SQL, 194 inline table valued functions, 201 INNER JOIN, 131–33, 149 in-place upgrades, 20–21 input parameters, 189 INSERT, 153–59 Database Snapshots, 222 db_datawriter, 269 db_denydatawriter, 269 DML triggers, 213 locks, 168 MERGE, 164–66 OUTPUT, 167 performance degradation, 93–94 permissions, 275 SELECT INTO, 159 transaction handling, 167–68

inserted tables, 166–67 installing SQL Server 2008, 22–29 authentication modes, 19 collation sequences, 19 edition descriptions, 15–16 infrastructure requirements, 17 instances, 20 sample databases, 28–29 service accounts, 17–19 upgrading, 20–22 instance level principals, 264–68 instances, 20, 216, 345–48. See also policy-based management instance-to-disk ratio, 346 INSTEAD OF, 181, 213 int, 68 integers, 67–69 Integration Services. See SQL Server Integration Server (SSIS) interactive elements, reports, 431–34 INTERSECT, 148–49, 181, 183 INTIATOR, 232 INTO, 159, 165, 179 IP addresses, 262–63, 345–48 IsAlive test, 347 ISNULL, 124, 130 isolation levels, 170–71 ISQL, 34

J jobs, 319–25, 358 join fi lter, 364 join operators, 131–33, 144–45, 149, 204–5

K kana sensitivity, 19 KEY INDEX, 250 key performance indicators (KPIs), 470 keys Asymmetric Key login, 264–68 asymmetric keys, 265, 281–82, 285–86 clustering key, 91–93 Encryption Keys, 415 foreign keys, 83–84 index key, 129 KEY INDEX, 250 management of, 260, 287 master keys, 281–82 partitioning key, 107, 113 primary keys, 79–81, 92, 101, 113, 171 private keys, 285 public keys, 285–86 symmetric keys, 284 KPIs (key performance indicators), 470

mensajes

L language fi les, 249, 471–72 leaf page, indexes, 88–91, 93–95, 99–100 LEFT OUTER JOIN, 131–33 LIFETIME, 236 LIKE operator, 129 lines, formatting, 423–28 linked reports, 443–44 LISTENER_IP, 262–63 LISTENER_PORT, 262–63 local SID, 264–68 local variables (@), 186–88 lock escalation, 169–70 locks partitions and, 112 shared, 168 transaction handling, 168–70 log fi les performance, 309–10 transaction log, 53 Log Reader Agent, 365–66 Log Sequence Number (LSN), 305–7, 355 log shipping, 356 components, 356–57 database mirroring, 353–54 initialization, 357–63 overview, 7 LOGIN, 202 loginless users, 271 logins administrative users, 269–73 instance level principals, 264–68 security of, 260 logon triggers, 218 Logread.exe, 365–66 LooksAlive test, 347 lookup tables, 84 Lookup transform, 383 LSN (Log Sequence Number), 173, 305–7

M mail. See e-mail maintenance indexes, 99–100 plans, creating, 325–28 Manage Schedules, 320 management disk storage, 54–55 dynamic management views (DMVs) indexes, 337–39 object size, 336 overview, 333–34 query execution stats, 339–40 retrieving object metadata, 334–35 encryption keys, 415 indexes, 93–95, 99–100 locks, 169–70

membership roles and permissions, 269 messaging process, 235–36 partitions, 110–16 performance, 44–46 policy-based management compliance, 298 conditions, 290–93 facets, 290 overview, 289–90 policies, 295–98 targets, 293–94 transaction log data, 56 Management Studio, SQL Server (SSMS), 38–40, 290–93 management system functions, 199 management tools Bulk Copy Program (BCP), 34, 309–10, 366 Database Mail, 42–43 OSQL, 34 Resource Governor, 35, 334 SQL Server Confi guration Manager, 35–38 SQL Server Management Studio (SSMS), 38–40, 290–93 SQLCMD, 34 SQLDiag, 34–35 Tablediff, 34 manipulating data. See data manipulation mantissa, 68 master database, 52 master keys, 281–82. See also keys materialized views (indexed views), 103–8, 182–84 mathmatical functions, 200 matrices, formatting, 423–28 MAX, 183, 383 MAX_QUEUE_READERS, 242 MAXSIZE, 55 MDAC (Microsoft Data Access Components), 354 MDX (Multidimensional Expression), 38 measures, OLAP, 453–54 memory, 35, 67 memory buffers, 351 MERGE, 110, 164–66 Database Snapshots, 222 db_datawriter, 269 db_denydatawriter, 269 inserted and deleted tables, 167 performance degradation, 93–94 Merge Agent, 366 Merge Join, 384 merge replication, 364, 367 Merge transform, 384 Message Queue, 382 MESSAGE TYPE, 237 MESSAGE_FORWARDING, 263 MESSAGE_FORWARDING_SIZE, 263 messages, 6, 42–43, 229–32 architecture, 226–28 contracts, 232–33 conversations, 235–36

495

496

metadata message types, 229–32 overview, 225–26 prioritization, 245 queues, 233–34, 242–44 sending/receiving messages, 236–42 services, 234–35 metadata database mirroring, 353–54 functions, 200 operation, 111 retrieving object metadata, 334–35 security, 277–78 SSRS, 415 Microsoft Clustering, 474 Microsoft Connect, 32–33 Microsoft Customer Service and Support (CSS), 34–35 Microsoft Data Access Components (MDAC), 354 Microsoft Decision Trees, 474 Microsoft Developer Network (MSDN), 32 Microsoft Linear Regression, 474 Microsoft Regression Trees, 474 MIN, 183, 383 mirror databases, 220 mirror role, database, 349 MIRROR TO, 304 mirrored backup, 304 model database, 52 monetary data, 67–69 monitor server, 357 MOVE, 312 moving, databases, 59–60 msdb database, 52 MSDN (Microsoft Developer Network), 32 Multicast, 385 Multidimensional Expression (MDX), 38, 470 multi-platform processing, 225–26 multiple-instance cluster, 345

N naming objects, 64 Nave Bayes, 474, 483–84 nchar(n), 70 NEAR, 254 network confi guration, failover clustering, 346 network names, failover clustering, 345–48 Neural Networks, 474 NEXT USED fl ag, 110 NO REVERT, 202 NODE, 101 noise words, 249 nonclustered indexes, 93–95 NONE, validation option, 229 NORECOVERY, 312 NOT NULL, 75 NOT, search queries, 130 notifi cations, jobs, 321–25

NTEXT, 70, 104, 126 NTILE, 147 NULL, 75 CUBE operator, 141 data retrival, 124 functions, 201–2 search queries, 130 transforms, 384 XML data queries, 151 nullability, 75 numeric data, 67–69 nvarchar(max), 70–71 nvarchar(n), 70

O Object Explorer, 40, 95 objects dependent, 202 dynamic management views (DMVs), 336 metadata, retrieving, 334–35 naming, 64 permissions, 278–79 policy-based management conditions, 290–93 facets, 290 overview, 289–90 policies, 295–97 policy categories, 297–98 policy compliance, 298 policy targets, 293–94 schemas, 273–74 OFFLINE, indexes, 98–99 OLAP engine (Online Analytic Processing). See also Database Engine cubes, 454–62 dimensional model, 453–54 dimensions, measures, calculations, 462–66 hierarchies, 453–54, 467–70 key performance indicators (KPIs), 470 overview, 13–14, 452–53 partitions, 471 perspectives, 471 translations, 471–72 OLE Automation Procedures, 260 OLE DB, 385 OLTP (online transaction processing), 13–14. See also Database Engine ON, 92 ON ALL SERVER, 216 ON clause, 106–7, 131–33 ON DATABASE, 216 Online Analytic Processing (OLAP) cubes, 454–62 dimensional model, 453–54 dimensions, measures, calculations, 462–66 hierarchies, 453–54, 467–70 key performance indicators (KPIs), 470

gestión basada en políticas overview, 13–14, 452–53 partitions, 471 perspectives, 471 translations, 471–72 online indexes, 98–99 online transaction processing (ONTP), 93–94. See also Database Engine ONLINE, indexes, 98–99 OPEN, 194–96 OPEN MASTER KEY, 282 OPENDATASOURCE, 260 OPENROWSET, 260 operating system, 56–57, 260, 319–20 operations, order of, 139 operators, jobs, 321–25 Optimizer, 97, 169–70, 201, 338 OPTION, 179 ORDER BY, 126, 130, 138, 146, 179, 183 order of operations, 139 OSQL, command line utility, 34 OUT, 189 outbound mail messages, 42–43. See also e-mail OUTPUT, 166–67, 188–89

P Package Explorer, SSIS, 380 packages confi guration fi le, 406–9 connections, 386–90 control fl ow, 390–94 data fl ow, 394–403 deploying, 409–10 exception handling, 403–6 page splitting, 90 PageNumber, 423 pages, 55 corruption of, 354 Database Snapshot, 220–21 fi ll factor, index, 99–100 full backups, 302–5 indexes, 88–91, 93–95 nonclustered indexes, 93–95 object size, 336 page corruption, 308–9 page-level locks, 169 partitioning, pointers, 111–13 parameters, reports, 445 parameters, stored procedures, 188–89 parent-child relationship, 84 parsing data, 123 PARTITION BY, 146 partitioning Database Engine Tuning Advisor (DTA), 44–45 managing partitions, 110–16 overview, 103 partition functions, 103–5

partition schemes, 105 SSAS (SQL Server Analysis Services), 471 sys.partition, 334, 336 tables and indexes, 106–8 partitioning key, 107, 113 PARTNER, 263 passwords instance level principals, 264–68 security of, 260 SQL Server Confi guration Manager, 35–38 paste, Object Explorer, 95 patches, 20 PATH, 101, 151 PATH XML, 101 payloads, endpoints, 261 percent (%), wildcard searches, 129 Percentage transform, 385 performance alerts, creating, 329–32 backups, 304 cubes, processing, 471 database mirroring, 351–54 indexed views, 183 key performance indicators (KPIs), 470 locks, 169–70 logging, 309–10 management tools, 44–46 Performance Studio, 45–46 queries, 93–94, 133, 184, 204–5, 252 report caching, 444–49 report parameters, 434–38 Resource Governor, 35 searching, 129 SQL Server Profi ler, 44 stored procedures, 340 performance counters, 34–35 Performance Data Warehouse, 45–46 Performance Reports, 45–46 Performance Studio, 45–46 permissions, 274–77 access permissions, 279–80 directories, 347 objects, 278–79 service accounts, 347 perspectives, 471 phantom read, 170 ping, 347 PIVOT, 145, 183 pivot tables, 145 Pivot transform, 385 pointers, 91, 111–13 policies, 265, 295–97. See also policy-based management policy-based management conditions, 290–93 facets, 290 overview, 289–90 policies, 295–97

497

498

port 1433 policy categories, 297–98 policy compliance, 298 policy targets, 293–94 port 1433, 262–63 ports, 262–63 PowerPoint documents, 249 primary database, 357 PRIMARY fi legroup, 56–57 primary keys, 79–81 change tracking, 171 clustered indexes, 92 partitions, 113 XML indexes, 101 PRIMARY, XML indexes, 100–1 principal role, database, 349 principals administrative users, 269–73 database level, 268–69 impersonation, 273 instance level, 264–68 private keys, 285 procedures, stored, 260, 277, 279–80 processadmin, 266 processing, multi-platform, 225–26 processors, 35, 69 Profi ler, 44 profi ler traces, 34–35 programming interface, 5–6 PROPERTY, 101 proximity searching, 254 public key certifi cates, 285–86 public keys, 285 public, fi xed database role, 269 publications, 364 publisher, 365

Q Qrdrsvc.exe, 366 quality assurance, testing, 20 queries. See also indexes Data Mining Query, 380 Database Engine Tuning Advisor (DTA), 44–45 execution stats, 339–40 full text indexing, 251–55 functions, performance of, 204–5 indexed views, 184 multiple tables, 131–33 NULL values, 124, 130 Optimizer, 97 OSQL, command line utility, 34 performance of, 184 SQLCMD, 34 sub-queries, 133 views, substitution, 180 WHERE clause, 138 XML data, 150–51 query cache, 340, 353

query() method, 150 Queue Reader Agent, 366 queuing, messages, 6 architecture, 226–28 contracts, 232–33 conversations, 235–36 message types, 229–32 overview, 225–26 prioritization, 245 queues, 233–34, 242–44 sending/receiving messages, 236–42 services, 234–35

R RANGE LEFT, 104 RANGE RIGHT, 104 RANK, 146, 254 ranking data, 146–47 ranking functions, 200 RAW, 151 Read Committed isolation, 170 Read Uncommitted isolation, 170 read/write data fi les, 55 real, 68 RECEIVE, 237 RECOVERY, 312 recovery, data. See also database mirroring backups, 301 database mirroring model, 355–56 database restores, 311–16 differential backups, 307–8, 314–15 fi legroup backups, 308 full backups, 302–5, 311–12 page corruption, 308–9 recovery models, 309–11 transaction log backups, 305–7, 315–16 redirection, clients, 354 redundancy. See database mirroring; replication REFERENCES, 275 Registered Servers, 39 registry keys, 347 regression algorithm, 473 RELATED_CONVERSATION, 236 RELATED_CONVERSATION_GROUP, 236 Relational Engine, 8 relational indexes, 91–95 Remote Admin Connections, 260 remote connections, 259–60 Repeatable read isolation, 170 replication, 363. See also database mirroring agents, 365–66 caching, 353–54 components, 364 confi guring, 367–73 creating jobs, 319–20 Database Engine, 6–7 methods, 366–67 roles, 365

seguridad Replmerge.exe, 366 Report Designer, 12 Report Manager URL, 413 reporting building reports, 418–23 computations, 429–31 confi guring, 413–16 deploying, 439–40 formatting, 423–28 interactive report elements, 431–34 linked reports, 443–44 parameters, 434–38 Performance Studio, 45–46 report caching and snapshots, 444–49 SQL Server Management Studio (SSMS), 40 subscriptions, 441–43 Web site, 417 Reporting Services. See also SQL Server Reporting Services ReportServer, 415 ReportServerTemp, 415 ReportServerTempDB, 444–49 requirements, SQL Server 2008 installation, 17 Resource Governor, 35, 334 resources, 169–70, 242, 245 restore database mirroring, 355–56 job, 358 log shipping, 358–59 partial, 107 RESTORE, 312 RESTORE MASTER KEY, 282 restore paths, 312–14 RETENTION, 233, 237 retrieving data aggregating data, 138–39 derived tables, 139–40 fi ltering aggregates, 143–44 multiple permutations, 140–42 pivot tables, calculating, 145 ranking data, 146–47 result sets, 147–49 running aggregates, 144–45 common table expressions (CTEs), 149–50 fi ltering data, 127–30 functions, 204–11 multiple tables, 131–33 overview, 121 SELECT statement, 126, 137–38 sorting results, 126 unique results, 134–35 views, 179–84 XML data querying, 150–51 RETURN, 190 return codes, 188 RETURNS NULL ON NULL INPUT, 201–2

reverting data, Database Snapshots, 222–23 RIGHT OUTER JOIN, 131–33 ROLLBACK, 167 ROLLBACK TRAN, 167–68 ROLLUP operator, 142 root pages, indexes, 88–91, 93–95 Row Count transform, 385 row fi lter, 364 Row Sampling, 385 ROW_NUMBER(), 146 rows, table cursors, 194–96 row-level locks, 169 TRUNCATE, 164 rowset functions, 200 run-time activity, 337

S SAFE, 279–80 salting a hash, 284 sample databases, 28–29 SARG (search argument), 127–31 scalability, dynamic, 242 scalar functions, 200, 203 scheduling, 6, 320. See also SQL Server Agent SCHEMABINDING, 183, 201–2 schemas, 64–66, 72–74, 273–77, 366 SCOPE_IDENTITY(), 158 Script, 381 script generators, 335 Script transform, 385 scripting tasks, 381 SEARCH, 134–35 search argument (SARG) fi ltering data, 127–30 join clauses, 131 WHERE clause, 138 searching. See also full-text indexing character data, fragments, 129 full text queries, 251–55 Full Text Search, 17–19 index pages, 88–91 weighted proximity searches, 254 wildcards, 253 secondary database, 357 SECONDARY, XML indexes, 100–1 securables, 273–77 security attack surface, confi guring, 259–60 authentication modes, 19 backups, 301 certifi cates, 285–86 CLR security, 279–80 cubes, OLAP, 454–62 Database Engine, 4–5 database level principals, 268–69

499

500

security functions database mirroring, 351–53 encryption asymmetric keys, 285–86 Extensible Key Managment (EKM), 287 hash algorithms, 282–84 master keys, 281–82 overview, 280–81 symmetric keys, 284 TCP endpoints, 263 Transparent Data Encryption (TDE), 286–87 endpoints, 260–63 EXECUTE AS, 202 failover clustering, 346–47 impersonation, 273 job steps, 320 metadata, 277–78 ownership chains, 277–79 permissions, 274–77 principals, 264–73 reports, linked, 443–44 schemas, 273–74 securables, 273–74 SQL Server Confi guration Manager, 35–38 security functions, 200 Security Identifi er (SID), 346 securityadmin, 266 SEED, 75 SELECT Database Snapshots, 222 db_datareader, 269 db_denydatareader, 269 DMVs (dynamic management views), 334 functions, retrieving data, 204–11 locks, 168 permissions, 275 recovering data, 312 script generators, 335 SELECT INTO, 159 variables, 187 SELECT INTO, 139, 159, 309–10 SELECT statements, 137–38 embedded (sub-queries), 133 fi ltering data, 127–30 general syntax, 121–26 multiple tables, data from, 131–33 sorting results, 126 views creating views, 179–84 self-signed certifi cates, 285 SEND, 236–37 Send Mail, 382 Sequence, 381 sequence analysis, 474 Sequence Clustering, 474 Serializable isolation level, 170 server blocking, 34–35 server confi guration, 34–35 server connections, 260–63

Server Management Objects (SMO), 290 server roles, 264–68 serveradmin, 266 service accounts creating, 17–19 failover clustering, 346–48 SQL Server Confi guration Manager, 35–38 Service Broker architecture, 226–28 contracts, 232–33 conversations, 235–36 endpoints, 263 message types, 229–32 overview, 6, 225–26 priortization, 245 queues, 233–34, 242–44 sending/receiving messages, 236–42 services, 234–35 TCP endpoints, 262 service master key, 281–82 service packs, 20 SERVICE_BROKER, 261 SET, 159–61, 187, 192–93 setupadmin, 266 shared lock, 168 SID, local, 264–68 side-by-side upgrades, 21–22 signatures, digital, 285–86 Simple recovery model, 309–11 single-instance cluster, 345 Slowly Changing Dimensions, 385 smalldatetime, 71–72 smallint, 68 smallmoney, 68 SMO (Server Management Objects), 290 Snapshot Agent, 365–67 Snapshot isolation level, 170–71 Snapshot.exe, 365 snapshots, 221–22 Copy-On-Write, 220–21 Database Engine, 6–7 database mirroring, 349, 354 overview, 219–20 replication, 366–67 reports, 444–49 reverting data, 222–23 SOAP, 261 sorting, 126 sp_confi gure, 260 sp_executesql, 193–94 space utilization, 336 SPARSE, 78–79 sparse fi les, 220 SPATIAL data, 74–75 spatial indexes, 102 SPLIT operator, 110 spreadsheets, 67 SQL injection attack, 194

SSRS (SQL Server Reporting Services) SQL Mail XPs, 260 SQL Server Agent account, creating, 17–19 alerts, creating, 329–32 change tracking, 173 jobs, creating, 319–25 maintenance plans, creating, 325–28 msdb database, 52 overview, 6 schedule policies, 295 SQL Server Analysis Services (SSAS), 13–14 Analysis Services Execute DDL Task, 380 creating account, 17–19 data mining, 472 algorithms, 473–74 demystifi ed, 483–84 models and structures, 474–83 data warehousing, 451–52 installing, 22–29 OLAP (Online Analytic Processing) cubes, 454–62 dimensional model, 453–54 dimensions, measures, calculations, 462–66 hierarchies, 467–70 key performance indicators (KPIs), 470 overview, 452–53 partitions, 471 perspectives, 471 translations, 471–72 SQL Server Compact Edition, 16 SQL Server Confi guration Manager, 35–38 SQL Server Developer Edition, 16–17 SQL Server Enterprise Edition, 16–17 SQL Server Evaluation Edition, 16 SQL Server Express Edition, 16 SQL Server Integration Services (SSIS), 10–11 account, creating, 17–19 BIDS, 378–80 tasks, 380–82 transforms, 382–85 jobs, creating, 319–20 msdb database, 52 overview, 377 package building confi guration fi le, 406–9 connections, 386–90 control fl ow, 390–94 data fl ow, 394–403 deploying, 409–10 exception handling, 403–6 SQL Server Management Studio (SSMS), 38–40, 290–93 SQL Server Profi ler, 44 SQL Server Reporting Services (SSRS), 12–13 building reports, 418–23 computations, 429–31 confi guring, 413–16 creating account, 17–19

deploying reports, 439–40 formatting, 423–28 installing, 22–29 interactive report elements, 431–34 linked reports, 443–44 parameters, 434–38 report caching and snapshots, 444–49 subscriptions, 441–43 Web site, 417 SQL Server Standard Edition, 16 SQL Server Workgroup Edition, 16 SQL Trace Application Programming Interface (API), 44 SQLCMD, 34 SQLDiag, 34–35 SSAS (SQL Server Analysis Services ), 13–14 Analysis Services Execute DDL Task, 380–85 BIDS, 380 creating account, 17–19 data mining, 472 algorithms, 473–74 demystifi ed, 483–84 models and structures, 474–83 data warehousing, 451–52 installing, 22–29 OLAP (Online Analytic Processing) cubes, 454–62 dimensional model, 453–54 dimensions, measures, calculations, 462–66 hierarchies, 467–70 key performance indicators (KPIs), 470 overview, 452–53 partitions, 471 perspectives, 471 translations, 471–72 SSIS (SQL Server Integration Services) BIDS, 378–80 tasks, 380–82 transforms, 382–85 creating account, 17–19 creating jobs, 319–20 installing, 22–29 msdb database, 52 overview, 10–11, 377 package, building confi guration fi le, 406–9 connection managers, 386–90 control fl ow, 390–94 data fl ow, 394–403 deploying, 409–10 exception handling, 403–6 SSMS (SQL Server Management Studio), 38–40, 290–93 SSMS Reports, 40 SSRS (SQL Server Reporting Services), 12–13 BIDS, 378 building reports, 418–23 computations, 429–31 confi guring, 413–16

501

502

Gestor de configuración SSRS creating account, 17–19 deploying reports, 439–40 formatting, 423–28 installing, 22–29 interactive report elements, 431–34 linked reports, 443–44 parameters, 434–38 report caching and snapshots, 444–49 subscriptions, 441–43 Web site, 417 SSRS Confi guration Manager, 413 Standard SQL Server login, 264–68 STANDBY, 312 STARTED, 261–62 startup mode, service, 35–38 static computations, 205 static row fi lter, 364 statistics, 325–28, 337, 339–40. See also algorithms STATUS, 233 STDEV, 183 stemmers, 249 stop words, 249 STOP_ON_ERROR, 304 STOPAT, 315 STOPATMARK, 315 STOPBEFOREMARK, 315 STOPPED, endpoints, 261–62 storage. See also message queuing binary data, 72 character data, 69–71 data, architecture, 56 date and time data, 71–72 FILESTREAM data, 74 hierarchyID, 75 histograms, 97 index pages, 88–91, 93–95 management of, 54–55, 110–16 memory and, 67 numeric data, 67–69 object size, 336 partitions, 103–8, 110–16 sparse columns, 78–79 SPATIAL data, 74–75 temporary, 52–53 XML data, 72–74 Storage Engine, 4 stored procedures, 185 administrative procedures, 196 CLR procedures, 196 CLR security, 279–80 commenting code, 186 control fl ow constructs, 189–92 creating, 185 cursors, 194–96 dynamic execution, 193–94 error handling, 192–93 executing, 189

message queue, 242 ownership chains, 277 parameters, 188–89 performance, 340 return codes, 188 variables, 186–88 string functions, 200 striped backup, 303 sub-queries, 133 sub-reports, formatting, 423–28 subscriber, 365 subscriptions, reports, 441–43 SUM, 383 SWITCH operator, 111–13 symmetric keys, 281–82, 284 synchronizing fi les, 164–66. See also FILESTREAM sys.assembly, 333 sys.change_tracking, 333 sys.conversation, 333 sys.database_fi les, 336 sys.database_mirroring, 334 sys.database_mirroring_witnesses, 349 sys.dm.db, 334 sys.dm_audit, 334 sys.dm_broker, 334 sys.dm_clr, 333 sys.dm_db_index_operational_stats, 337 sys.dm_db_index_physical_stats, 337 sys.dm_db_index_usage_stats, 337 sys.dm_db_missing_index, 338 sys.dm_db_missing_index_group_stats, 338 sys.dm_exec, 334 sys.dm_exec_cached_plans, 340 sys.dm_exec_connections, 340 sys.dm_exec_procedure_stats, 340 sys.dm_exec_query_plans, 340 sys.dm_exec_query_stats, 340 sys.dm_exec_requests, 340 sys.dm_exec_sessions, 340 sys.dm_exec_sql_text, 340 sys.dm_fts, 334 sys.dm_os, 334 sys.dm_resource_governor, 334 sys.dm_xe, 334 sys.fulltext, 334 sys.partition, 334, 336 sys.resource_governor, 334 sys.server_events, 334 sys.service, 334 sys.sp_cdc_enable_db, 173 sys.trace, 334 sys.xml, 334 sysadmin, 266, 269–73 system functions, 199–200 system statistics, 200 system stored procedures, 260

desencadenadores

T Tablediff, 34 tables. See also indexes; also Tablediff change, 171–73 columns, 91–93, 95–96 creating, 76–77 data retrieval aliases, 123 derived tables, 139–40 multiple tables, 131–33 SELECT, general syntax, 121–26 table joins, 131–33 deleted, 166–67 designing, 63–64 binary data, 72 character data, 69–71 columns, 75, 77–79 constraints, 79–84 data types, 67 database design, 64–67 database diagrams, 85–86 date and time data, 71–72 FILESTREAM data, 74 hierarchyID data, 75 naming objects, 64 numeric data, 67–69 schemas, 64–66 SPATIAL data, 74–75 XML data, 72–74 formatting reports, SSRS, 423–28 inline table valued functions, 201 inserted, 166–67 lookup, 84 partitions, 103–8, 110–16 pivot, calculating, 145 table-level locks, 169 temporary tables, 139–40 triggers DDL triggers, 216, 218, 295 DML triggers, 213–15 views creating views, 179–80 indexed views, 182–84 modifying data, 181–82 table-valued functions, 203 TAKE OWNERSHIP, 275 TARGET, 232 target, communication, 227 TCP endpoints, 261–63 TDE (Transparent Data Encryption), 286–87 Template Explorer, 39 templates, model database(s), 52 temporary storage, 52–53 temporary tables, 139–40 Term Extraction, 385 Term Lookup, 385 terminating executions, 190

testing, quality assurance, 20 text, 70 full, 56–57 partitions, 104 report formatting, 423–28 TEXT, 126, 249 text functions, 200 text index fi les, 55, 57, 112 text mining, 385 THESAURUS, 254 thesaurus fi les, 251, 254 time, 71–72, 124, 424 time functions, 199 Time Series, 474 timestamp, 104 tinyint, 68 tmpdb database, 52–53 TO clause, 105 Toolbox, SSIS, 380 tools BI Dev Studio, 46 Bulk Copy Program (BCP), 34 Database Engine Tuning Advisor (DTA), 44–45 Database Mail, 42–43 documentation, 31–33 OSQL, 34 Performance Studio, 45–46 Resource Governor, 35 SQL Server Confi guration Manager, 35–38 SQL Server Management Studio (SSMS), 38–40 SQL Server Profi ler, 44 SQLCMD, 34 SQLDiag, 34–35 Tablediff, 34 TOP, 183 TOP (n), 237 TOP operator, 130, 138, 179, 181 TotalPages, 423 Trace Application Programming Interface (API), 44 traces, 334 tracking changes, 171–75 transaction handling, 167–71, 216 transaction log, 351 backups, 305–7, 314, 325–28 database mirroring, 349 recovery models, 309–11 restoring backup, 315–16 transaction log fi le, 53, 56, 223 transactional replication, 367 Transact-SQL (T-SQL), 5, 38, 319–20 transforms, SSIS, 382–85 translations, 471–72 Transparent Data Encryption (TDE), 286–87 transports, endpoints, 261 triggers CLR security, 279–80 DDL triggers, 216, 218, 295 DML triggers, 213–15

503

504

Triple DES Triple DES, 281–82 troubleshooting IF statements, 191 SQLDiag, 34–35 WHILE statements, 191 TRUNCATE, 164 TRUNCATE TABLE, 164 TRY, 192–93 T-SQL (Transact-SQL), 5, 262–63 TYPE, 151 TYPE COLUMN, 250

U underscore (_), wildcard searches, 129 Unicode data, 70, 252 UNION, 147–49, 179, 181, 183 UNION ALL, 147–49, 179, 181 unique constraints, 81, 92 unique indexes, 92 uniqueidentifi er, 236 UNPIVOT, 183 Unpivot transform, 385 UNSAFE, 279–80 unstructured data, 74 UPDATE Database Snapshots, 222 db_datawriter, 269 db_denydatawriter, 269 DML triggers, 213 locks, 168 MERGE, 164–66 OUTPUT, 167 performance degradation, 93–94 permissions, 275 transaction handling, 167–68 update locks, 168 updating data, 159–61 upgrading, 20–22 USER, 202 USING. . .ON, 165 utilities, 34

V VALID_XML WITH SCHEMA COLLECTION, 229 VALIDATION, 229 VALUE, 101 value() method, 216 VALUES, 154 VAR, 183 VARBINARY, 72, 249 VARBINARY(MAX), 104, 249–50 varchar(max), 70–71, 104 varchar(n), 70 variables, stored procedures, 186–88

VARP, 183 verb tenses, 249 verifi cation, 309 VIEW DEFINITION, 275 views dyanamic management views (DMV) indexes, 337–39 object size, 336 overview, 333–34 query execution stats, 339–40 retrieving object metadata, 334–35 indexed, 182–84 modifying data, 181–82 triggers DDL triggers, 216, 218 DML triggers, 213–15 virtual tables, 139–40 Visual Studio, 378, 384

W WAITFOR, 191 WAITFOR DELAY, 191 WAITFOR RECEIVE, 191 WAITFOR TIME, 191 Web Service URL, 413 Web Services, 382 web sites CodePlex, 28 SSRS Web site, 417 weighted proximity searches, 254 WELL_FORMED_XML, 229 WHEN, 165 WHERE clause, 181 conditions, 290–93 data retrieval, 127–30 fi ltering data, 133, 143–44 functions, retrieving data, 204–11 join clauses, 131 queries, 138 updating data, 159–61 WHILE, 191, 195 wildcard characters, searching, 129, 253 Windows accounts, 347 Windows group, login, 264–68 Windows login, 264–68 Windows Management Instrumentation (WMI), 329–32, 382 Windows password policy, 265 Windows performance counters, 34–35 Windows security API, 265 Windows Server 2003, 17, 265 Windows Server 2008, 17, 265 Windows Service Control Applet, 35 Windows versions, 19 Windows Vista, 17

Directiva XSNIL Windows XP Professional, 17, 19 WITH CHECK OPTION, 181 WITH FORMAT, backup, 304 WITNESS, 263 witness server, 349, 352–53 WMI (Windows Management Instrumentation), 329–32, 382 WMI Data Reader task, 382 WMI Event Watcher, 382 word breakers, 249 Word documents, 249 words, full text searches, 251–55 workload, 35 write/read data fi les, 55

X X.509 standard, 285 XACT_ABORT, 192–93

XML (Extensible Markup Language), 5–6. See full-text indexing BIDS tasks, 382 data querying, 150–51 data storage, 72–74 documents, 72–73, 216 full text indexes, 249 indexes, 100–1 message types, 229 schemas, 72–74, 151 sorting results, 126 sys.xml, 334 thesaurus fi les, 254 XML for Analysis (XMLA), 38 XMLA (XML for Analysis), 38 Xp_cmdshell, 260 XQUERY, 216 XSNIL directive, 151

505

Acerca del Autor Mike Hotek Mike Hotek es el vicepresidente de las Empresas de MHS, Inc., y Semiologic, Inc., ambas empresas de los Estados Unidos, y el presidente de Filam Software Technology, Inc., una corporación de Filipinas. Mike ha sido un profesional de SQL Server por casi dos décadas y un desarrollador de aplicaciones que se remonta casi a tres décadas. Él enseña, escribe, da consultaría, y desarrolla productos y soluciones que abarcan todas las funciones dentro de SQL Server, así como desarrollo de aplicaciones en múltiples lenguajes. Es autor o coautor de ocho libros, siete de esos libros de SQL Server, junto con la edición de docenas de artículos para varias revistas comerciales. Ha impartido cientos de sesiones de conferencias y seminarios, además enseñar en docenas de clases en todo el mundo.

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF