II.- Diseño Físico y Administración Introducción ♦ SQL Server™ 2000 es una base de datos relacional, escalable, basada en SQL con compatibilidad de XML (Lenguaje de marcado extensible) integrada para aplicaciones de Internet. – SGBDR cliente-servidor que usa Transact-SQL para envío de peticiones – Integrado con Windows NT/2000 – Soporte a XML (recuperación de datos XML utilizando Transact-SQL y inserción directa de datos XML en el SGBDR. © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 5 Tareas de Administración ♦ Instalación y configuración ♦ Gestión del espacio ♦ Gestión de la seguridad ♦ Gestión de datos ♦ Mantenimiento del sistema © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Instalación y Configuración ♦ Definir tipo de instalación (local o remota) ♦ Definir lo que se incluirá en la instalación (sólo herramienta cliente, herr. cliente y servidor, o sólo conectividad) ♦ Creación de instancias (predeterminadas o con nombre) ♦ Seleccionar modo de autenticación © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 6 Gestión de Espacio ♦ Estimación de requisitos almacenamiento ♦ Monitorizar espacio usado ♦ Crear dispositivos de datos y ‘log’ ♦ Crear bases de datos ♦ Cambiar tamaños de BD y dispositivos © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Gestión de la Seguridad ♦ Diseñar e implementar políticas de seguridad ♦ Proporcionar acceso a servidores SqlServer y sus BD ♦ Permisos de usuario © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 7 Gestión de Datos ♦ Transferencias de datos ♦ Carga de copia de seguridad © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Mantenimiento del sistema ♦ Programación de tareas automática ♦ Implementación de alertas sobre tareas ♦ Política de copia de seguridad ♦ Monitorización y ajuste fino ♦ Ajustes a parámetros de configuración del sistema ♦ ... © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 8 Mejoras en SQL Server 2000 ♦ ♦ ♦ ♦ ♦ ♦ Compatibilidad con XML Instancias múltiples de Servidores Servidores de bases de datos federados Funciones definidas por el usuario Vistas indexadas Nuevos tipos de datos – Bigint (entero de 8 bytes): permite la creación de índices en tablas con más de 2000 millones de registros – Sql_variant (valores de tipos de datos diferentes) – Table (conj. resultados para procesarlo más adelante) ♦ Triggers Instead of y After © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Compatibilidad con XML ♦ SQL Server 2000 introduce nuevas características que contemplan el uso de XML: – Capacidad para obtener acceso a SQL Server mediante HTTP. – Compatibilidad con esquemas XDR (XML simplificado) y posibilidad de especificar consultas XPath contra estos. – La capacidad de recuperar y escribir datos XML: • Recuperar datos XML utilizando la instrucción SELECT y la cláusula FOR XML. • Escritura de datos XML mediante el proveedor de conjunto de filas OPENXML. • Recuperación de datos XML mediante el lenguaje de consultas XPath. – Mejoras en el Proveedor Microsoft OLE DB para SQL Server 2000 (SQLOLEDB) que permite definir documentos XML como texto de comando y devolver conjuntos de resultados como un flujo. © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 9 Instancias de Servidores ♦ Con SQL Server 2000 es posible instalar varias copias o instancias de SQL Server en un solo equipo. ♦ Al realizar una instalación nueva o mantener una instalación existente, puede especificarla como: instancia predeterminada o instancia con nombre. ♦ Una instancia predeterminada de SQL Server: – Se identifica por el nombre de red del equipo en el que se ejecuta. – Las aplicaciones que utilizan software de cliente de versiones anteriores de SQL Server pueden conectarse a una instancia predeterminada. – Los servidores SQL Server versión 6.5 o 7.0 pueden funcionar como instancias predeterminadas. – Sin embargo, un equipo sólo puede disponer de una versión en funcionamiento como instancia predeterminada al mismo tiempo. © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Instancias de Servidores ♦ Una instancia con nombre de SQL Server: – Se define por el nombre de red del equipo más el nombre de una instancia, con el formato: <computername>\<instancename> – Las aplicaciones deben utilizar los componentes de cliente de SQL Server 2000 para conectarse a una instancia con nombre. – Se puede ejecutar cualquier número de instancias de SQL Server con nombre simultáneamente. – Una instancia con nombre puede ejecutarse al mismo tiempo que una instalación existente de SQL Server versión 6.5 o 7.0. – Un nombre de instancia nuevo debe empezar por una letra, la "y" comercial (&) o un carácter de subrayado (_) y puede contener números, letras u otros caracteres. © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 10 Consideraciones.. ♦ Existen instancias múltiples y únicas de SQL Server 2000 (predeterminadas o con nombre) en SQL Server 2000 Personal, SQL Server 2000 Standard o SQL Server 2000 Enterprise. ♦ Instancias predeterminadas: – No se puede instalar una instancia predeterminada SQL Server 2000 en un equipo en el que también se esté ejecutando SQL Server 7.0. – Debe actualizar la instalación de SQL Server 7.0 a una instancia predeterminada SQL Server 2000 o mantener la instancia predeterminada de SQL Server 7.0 e instalar una instancia con nombre de SQL Server 2000. – Se puede instalar una instancia predeterminada de SQL Server 2000 en un equipo en el que se ejecute SQL Server 6.5, pero la instalación de SQL Server 6.5 y la instancia predeterminada de SQL Server 2000 no pueden ejecutarse simultáneamente. © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Consideraciones.. ♦ Instancias múltiples: – Hay más de una instancia de SQL Server 2000 instalada en un equipo. – Cada instancia funciona independientemente de las demás, y las aplicaciones pueden conectarse a cualquiera de las instancias. – El número de instancias que puede ejecutarse en un solo equipo depende de los recursos disponibles (máximo = 16). – Cuando se instala SQL Server 2000 en un equipo por primera vez, el programa de instalación elige una instancia predeterminada. Se puede deseleccionar la opción Predeterminada en el cuadro de diálogo Nombre de instancia para instalar SQL Server 2000 como instancia con nombre. – En cualquier momento se puede instalar una instancia con nombre de SQL Server 2000: antes, después, o en lugar de instalar la instancia predeterminada de SQL Server 2000. – Cada instancia predeterminada consta de un conjunto de servicios distinto y tiene una configuración de intercalación y de otras opciones diferente. © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 11 Instancias Múltiples ♦ Cada instancia con nombre de SQL Server 2000 tiene una ubicación específica para los archivos de programa y otra para los archivos de datos, distintas de las de la instancia predeterminada de SQL Server. Para cada instancia con nombre de SQL Server, los directorios predeterminados serán: …\Binn para los archivos ejecutables. …\Data para los archivos de datos. © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Servidores Federados ♦ Las BD se pueden repartir entre un grupo de servidores de BD autónomos compatibles con los requisitos de aumento de proc. de los sitios Web de gran tamaño y de los sistemas de proc. de datos empresariales creados con DNA de Windows. ♦ Windows DNA* divide las unidades de procesamiento de un sistema en niveles lógicos: – Nivel de servicios del usuario: presenta la interfaz que ven los usuarios y suele llamar al segundo nivel para el procesamiento de lógica empresarial. – Nivel de servicios empresariales: contiene la lógica empresarial que controla la operación del sitio Web y utiliza el almacenamiento de datos persistentes que proporciona el tercer nivel. – Nivel de servicios de datos: almacena los datos persistentes necesarios para ejecutar el sitio Web. © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV *Windows Distributed interNet Applications Architecture 12 Servidores Federados © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Servidores Federados ♦ La escala hace referencia al proceso de agregar recursos a un nivel para que pueda controlar las cargas de trabajo en aumento. ♦ La escala se puede hacer de dos maneras: – Ampliar verticalmente: aumenta la capacidad de procesamiento de un servidor utilizando un equipo más eficaz. – Ampliar horizontalmente: aumenta la capacidad de proc. de un sistema diseñado de manera modular (convirtiéndose en un clúster de equipos, al agregar uno o más equipos adicionales, o nodos, al sistema. ♦ Los requisitos de crecimiento de los sitios Web de mayor tamaño dan lugar a cargas de procesamiento que exceden la capacidad de servidores individuales grandes. ♦ En estos casos, escalar hacia afuera puede ser la mejor opción para aumentar la capacidad de procesamiento del sistema. © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 13 Servidores Federados (resumen) ♦ Aunque una federación de servidores presenta la misma imagen ante las aplicaciones que un único servidor de BD, existen algunas diferencias internas: © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 2.- Gestión de Dispositivos (‘devices’) y Bases de Datos 14 Databases, Devices y Transaction Logs ♦ Una Base de Datos es una colección de datos, tablas y otros objetos ♦ Un dispositivo (‘device’) es en 6.5 un fichero del sistema operativo en el que Bases de Datos y Logs de Transacciones se almacenan. En 7.0 desaparece ♦ Un log de transacciones es un área reservada por Sql*Server para almacenar cambios realizados en una BD © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Tablas e índices ♦ Tablas: tipo de datos, valores por defecto y reglas asociadas a columnas ♦ Índices: – clustered: datos almacenados ordenados (diccionario) – nonclustered: datos almacenados no ordenados (índice de libro) © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 15 Otros objetos de BD ♦ Vistas ♦ Procedimientos almacenados – Sentencias precompiladas escritas en TransactSql ♦ Triggers – Sentencias Transact-Sql ejecutadas cuando datos son insertados, borrados o modificados en una tabla © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Administración Sql*Server ♦ Instalación y Configuración ♦ Gestión del almacenamiento ♦ Gestión de la seguridad (permisos) ♦ Gestión de datos – (transferencia entre BDs, replicación,...) ♦ Mantenimiento del Sistema – (copias de seguridad, monitorización, ajuste fino...) © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 16 Herramientas de Administración de 6.5 / 7.0 (1) ♦ SQL Enterprise Manager ♦ SQL Service Manager --> en barra de tareas ♦ SQL/w ---> Sql Server Query Analyzer ♦ SQL Security Manager --> integrado ♦ SQL Trace ---> Sql Server Profiler ♦ SQL Client Configuration Utility ♦ SQL Performance Monitor © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Herramientas de Administración de 6.5 / 7.0 (2) ♦ MS Query ♦ SQL Server Web Assistant ♦ SQL Server Books Online ♦ Microsoft ODBC SQL Server Driver ♦ SQL Distributed Management Objects --> MS DTC ♦ SQL Setup ---> Uninstall SQL Server 7.0 © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 17 Herramientas de Administración en SQL Server 2000 ♦ Administrador Corporativo (el SGBDR) – Gestión de datos, Proceso de consultas y transacciones, Integridad de datos, SQL Server Agent ♦ Analizador de Servicios (SQL Service Manager) ♦ Analizador de Consultas (SQL Query Analyzer) ♦ Analizador de SQL Server (Profiler) ♦ Herramienta de red de cliente ♦ Herramienta de red de servidor ♦ Herramienta de configuración de XML en SQL ♦ MS DTC: gestor de transacciones distribuidas © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Herramientas internas ♦ Tablas del sistema (‘system tables’) – catálogo de Bds y del sistema ♦ Procedimientos almacenados del sistema (‘system-stored procedures’) ♦ Sentencias DBCC (‘Data Base Consistency Checker’) – DBCC CHECKDB (nombre-bd) © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 18 Tablas de sistema – – – – – syslogins (en master) sysmessages (en master) sysdatabases (en master) sysusers (en todas) sysobjects (en todas) © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV En fase de setup se crean en 6.5... ♦ Los dispositivos de BDs MASTER, MSDBDATA y MSDBLOG ♦ Las Bds master, model, tempdb y pubs, almacenadas en el dispositivo MASTER ♦ la Bd msdb almacenada en MSDBDATA. Su log de transacciones se almacena en MSDBLOG © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 19 Bases de Datos del Sistema en 6.5 ♦ master ♦ model ♦ msdb ♦ tempdb ♦ pubs © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV SQL Server 2000 Componentes del Motor de Base de datos ♦ El servidor de BD relacional de SQL Server 2000 dispone de dos partes principales: el motor relacional y el motor de almacenamiento. ♦ Uno de los cambios de arquitectura más importantes realizados en SQL Server 7.0 fue la separación estricta de los componentes de motor relacional y de almacenamiento en el servidor y hacer que utilicen la API OLE DB para comunicarse el uno con el otro. © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 20 SQL Server 2000: Componentes de Cliente ♦ Los clientes no tienen acceso directo a SQL Server 2000; en su lugar, utilizan aplicaciones escritas para tener acceso a los datos de SQL Server. ♦ SQL Server 2000 admite dos clases principales de aplicaciones: – Aplicaciones de BD relacional que envían instrucciones Transact-SQL al motor de base de datos, con los resultados devueltos como conjuntos de resultados relacionales. – Aplicaciones de Internet que envían instrucciones TransactSQL o consultas XPath al motor de base de datos, con los resultados devueltos como documentos XML. © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV SQL Server 2000: Comunicaciones de Cliente © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 21 SQL Server 2000: Componentes del Servidor © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV En fase de setup se crean en 2000 ♦ 5 bases de datos de sistema y 2 de usuario: – master, model, tempdb, msdb – pubs, northwind © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 22 Ventajas de SQL Server 2000 como servidor de base de datos ♦ Puede proporcionar los servicios de BD necesarios para sistemas extremadamente grandes. ♦ Los servidores de gran tamaño pueden tener miles de usuarios conectados a una instancia de SQL Server 2000 al mismo tiempo. ♦ Los sitios de Internet pueden dividir sus datos entre varios servidores, extendiendo la carga de procesamiento entre varios equipos para que el sitio sirva a miles de usuarios simultáneos. ♦ En un único equipo se pueden ejecutar varias instancias de SQL Server 2000. Las aplicaciones del servidor se pueden ejecutar en el mismo equipo que SQL Server 2000. ♦ Esto permite utilizar SQL Server 2000 en sistemas pequeños en los que una aplicación debe almacenar los datos localmente. © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Ventajas de SQL Server 2000 ♦ Una instancia de SQL Server 2000 actuando como servidor de base de datos para un sitio Web de gran tamaño y un sistema cliente-servidor heredado. © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 23 Practica 1 ♦ Conexión a Sql*Server ♦ Visualización Estructura Objetos © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV En 6.5 ... Creación de dispositivos ♦ Un dispositivo es un fichero de sistema operativo usado para almacenar datos. ♦ De dos tipos: • Database: almacenan bases de datos y logs de transacciones • Backup: almacenan backups de bds y logs ♦ Antes de crear una BD hay que crear sus dispositivos © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 24 Creación ♦ Tamaño mínimo 1M ♦ Dispositivo local, no remoto ♦ De dos formas – SQL Enterprise Manager – sentencia DISK INIT © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV DISK INIT ♦ Solo SA DISK INIT NAME = ‘device1’ (nombre lógico) PHYNAME=‘c:\mssql\data\device1.dat’ VDVNO=1 SIZE=5120 ♦ Con sp_helpdevice puedo obtener todos los vdvno para saber cual puedo usar © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 25 Sentencia CREATE DATABASE en 6.5 CREATE DATABASE ejemplo ON DEVICE1=5, DEVICE2=10 LOG ON DEVICE3=2 ¡Documentar siempre secuencia de operaciones relacionadas con la BD (creación, alter, ‘resize’, ‘move’)! © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV ♦ Sentencia EXEC dev_frag_info nombre_bd para recrear secuencia de operaciones de creación (ejecutar dev_frag.sql en master) ♦ sp_help_revdatabase: crea un script que permite recrear la BD en otro server © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 26 Creación de BD en 7.0/2000 ♦ Un fichero de datos primario (.mdf) ♦ Uno o más ficheros de log (.ldf) ♦ Opcionalmente, ficheros de datos secundarios (.ndf) ♦ página de 8K ♦ extensión= 8 páginas continuas ♦ tamaño del log por defecto = 25% de datos © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV CREATE DATABASE nombre [ON {[PRIMARY] (NAME=nombre fichero lógico, FILENAME = ‘nombre fichero físico’ [, SIZE = tamaño ] [, MAXSIZE = tamaño máximo ] [, FILEGROWTH = incremento ]) } [,...n ] ] [LOG ON {(NAME= nombre fichero lógico, FILENAME=‘nombre fichero físico’ [, SIZE = tamaño ] } [,...n ] ] [FOR RESTORE] © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 27 A. Crear una base de datos que especifique los archivos de registro de datos y de transacciones USE master GO CREATE DATABASE Sales ON ( NAME = Sales_dat, FILENAME = 'c:\mssql7\data\saledat.mdf', SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5 ) LOG ON ( NAME = 'Sales_log', FILENAME = 'c:\mssql7\data\salelog.ldf', SIZE = 5MB, MAXSIZE = 25MB, FILEGROWTH = 5MB ) GO © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Acerca del log de transacciones... ♦ Registran todas las modificaciones de datos ♦ Pueden ser almacenados en – el mismo dispositivo de la BD – otro diferente ♦ Si están en dispositivos distintos: – El backup del log se hace independiente – El log no compite por espacio de la BD – Mejor rendimiento (escribir en log no interfiere con escribir en BD) © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 28 ¿Como funciona el log? ♦ Aplicación manda modificación de datos ♦ Páginas de datos cargadas en “buffer cache” y modificadas ♦ Modificación almacenada en log en disco ♦ Checkpoint escribe modificación en base de datos © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Opciones de BD (1) ♦ Select Into/Bulk Copy ♦ DBO Use Only ♦ No Checkpoint on Recovery (determinaba si un Checkpoint se agregaba o no a una base de datos recuperada - ya no está disponible) ♦ Read Only ♦ Single User ♦ Columns Null by Default ♦ Truncate Log on Checkpoint ♦ Autoshrink © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 29 Opciones de BD (2) ♦ Offline ♦ Published ♦ Subscribed Estas 3 opciones no están accesibles en el Enterprise Manager: se gestionan con la sentencia ♦ sp_dboption [nombre_bd,nombre_opt,{true|false} ♦ sp_helpdb [nombre_bd ] ♦ sp_spaceused [nombre_objeto] © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Practica 2 ♦ Crear Base de Datos ♦ Crear Objetos de Bases de Datos © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 30 CREATE TABLE CREATE TABLE [nombreBaseDatos.[propietario]. | propietario. ] nombreTabla ( { <definiciónColumna> | nombreColumna AS expresiónColumnaCalculada | <restricciónTabla> } [,…n] ) [ON {grupoArchivos | DEFAULT} ] [TEXTIMAGE_ON {grupoArchivos | DEFAULT} ] © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV CREATE TABLE <definiciónColumna> ::= { nombreColumna tipoDatos } [ [ DEFAULT expresiónConstante ] | [ IDENTITY [(inicialización, incremento ) [NOT FOR REPLICATION] ] ] ] [ ROWGUIDCOL ] [ <restricciónColumna>] [ ...n] © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 31 CREATE TABLE <restricciónColumna> ::= [CONSTRAINT nombreRestricción] { [ NULL | NOT NULL ] | [ { PRIMARY KEY | UNIQUE } [CLUSTERED | NONCLUSTERED] [WITH FILLFACTOR = factorRelleno] [ON {grupoArchivos | DEFAULT} ]] ] | [ [FOREIGN KEY] REFERENCES tablaRef [(columnaRef) ] [NOT FOR REPLICATION]] | CHECK [NOT FOR REPLICATION] (expresiónLógica) } © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV CREATE TABLE <restricciónTabla> ::= [CONSTRAINT nombreRestricción] { [ { PRIMARY KEY | UNIQUE } [ CLUSTERED | NONCLUSTERED] { ( columna[,...n] ) } [ WITH FILLFACTOR = factorRelleno] [ON {grupoArchivos | DEFAULT} ] ] | FOREIGN KEY [(columna[,...n])] REFERENCES tablaReferencia [(columnaReferencia[,...n])] [NOT FOR REPLICATION] | CHECK [NOT FOR REPLICATION] (condicionesBúsqueda) } © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 32 CREATE TABLE CREATE TABLE empleado (emp_id empid CONSTRAINT PK_emp_id PRIMARY KEY NONCLUSTERED CONSTRAINT CK_emp_id CHECK (emp_id LIKE '[A-Z][A-Z][A-Z][1-9][09][0-9][0-9][0-9][FM]' or emp_id LIKE '[A-Z]-[A-Z][1-9][0-9][0-9][0-9][09][FM]'), fname varchar(20) NOT NULL, minit char(1) NULL, lname varchar(30) NOT NULL, job_id smallint NOT NULL DEFAULT 1 REFERENCES jobs(job_id), job_lvl tinyint DEFAULT 10, pub_id char(4) NOT NULL DEFAULT ('9952') REFERENCES publishers(pub_id), hire_date datetime NOT NULL DEFAULT (getdate()) ) © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Expansión de dispositivos en 6.5 ♦ Sólo para hacerlos más grandes ♦ Con SQL Enterprise Manager ♦ Con el comando DISK RESIZE © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 33 Cambios de tamaño en BDs en 7.0/2000 ♦ Se puede hacer más grande o más pequeña ♦ Con SQL Enterprise Manager (opciones Expand Database o Shrink Database resp.) ♦ ALTER DATABASE para expansión o DBCC SHRINKDB para reducción ♦ La BD MASTER solo puede expandirse en el dispositivo MASTER (DISK RESIZE del disp. Master) © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Cambios de tamaño en BDs en 7.0 ALTER DATABASE bd {ADD FILE esp-fichero [TO FILEGROUP grupo-ficheros][FOR RESTORE] |ADD LOG FILE esp-fichero |DROP FILE nombre-lógico-fichero |CREATE FILEGROUP nombre-grupo-ficheros |DROP FILEGROUP nombre-grupo-ficheros |MODIFY FILE esp-fichero } esp-fichero incluye NAME,FILENAME,SIZE,MAXSIZE, FILEGROWTH © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 34 Reducción de tamaño en 7.0/2000 ♦ DBCC SHRINKDATABASE (bd, %) reduce el tamaño de los ficheros de datos, no de los de log ♦ DBCC SHRINKFILE (fichero, cantidad) ♦ Automáticamente con una opción de BD © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Borrado de Bds ♦ Con el Administrador Corporativo (SQL Server Enterprise Manager) ♦ Con la sentencia DROP DATABASE ♦ NO SE PUEDE BORRAR SI: – 1. Está siendo restaurada la BD – 2. Un usuario está conectado – 3. La BD se publica a causa de replicación © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 35 Estimación de espacio 1.- Calcular nº de bytes en una fila Tamaño total fila = datosTñoFijo + datosTñoVar + mapaBitsNulo +4 * 2.- Determinar nº de filas por página (8096 bytes disponibles por página): – Núm. filas por página = ( 8096 ) / (tñoFila + 2) Dado que las filas no abarcan varias páginas, el número de filas por página debe redondearse a la fila completa anterior. 3.-Calcule el número de páginas necesarias para almacenar todas las filas: Núm. de páginas = númFilas / (filasPorPág - filasLibresPorPág) 3.- Dividir el nº de filas de la tabla por el número de filas de la pág. de datos. * Se reserva para administrar la aceptación de valores NULL en las columnas © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 3.- Gestión de Usuarios 36 Inicio de sesión (Login id) ♦ Proporciona acceso a Sql*Server (y a la BD por defecto) ♦ Único para cada usuario ♦ Necesario para poder acceder a cualquier servidor ♦ Almacenado en la tabla master..syslogins © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Creación de logins (7.0 y 2000) ♦ Windows NT-2000 – sp_grantlogin (‘login’) – sp_revokelogin (‘login’) – sp_denylogin (‘login’) ♦ SQL Server – sp_addlogin (‘login’) [,’password’ [,’db’]] ♦ 2 logins por defecto: sa (para SQL Server) y BUILTIN/Administrators (para NT) © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 37 Usuario de BD (User) ♦ Proporciona acceso a la BD ♦ Estará declarado en cada una de las BD a las que tenga acceso ♦ Asignado a un Login Id ♦ GUEST y DBO: usuarios especiales © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Cuentas de usuario en 7.0 ♦ Con el Administrador Corporativo ♦ sp_grantdbaccess [@loginame =] 'inicioSesión' [,[@name_in_db =] 'nombreEnBaseDatos' [OUTPUT]] EXEC sp_grantdbaccess 'Corporate\GeorgeW', 'Georgie' ♦ sp_revokeaccess ♦ sp_change_users_login © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 38 ♦ sp_change_users_login [@Action =] 'acción' [,[@UserNamePattern =] 'usuario'] [,[@LoginName =] 'inicioSesión'] --Add the new login. USE master go EXEC sp_addlogin 'NewMary' go --Change user account to link with the 'NewMary' login. USE pubs go EXEC sp_change_users_login 'Update_One', 'Mary', 'NewMary‘ Update_One: vincula al usuario especificado de la base de datos actual con login. © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Alias de usuario de BD ♦ Relaciona un ‘login’ con un ‘user name’ ♦ El usuario asume todos los permisos del alias ♦ Usuario con alias DBO tiene todos los privilegios del creador de la BD ♦ En SQL Server 2000 los alias son innecesarios: los usuarios pueden pertenecer simultáneamente a más de una función de BD. © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 39 Grupos ♦ Colección de usuarios de la BD ♦ Sus miembros tienen los privilegios asignados al grupo ♦ Public: grupo por defecto para todo usuario ♦ Se almacenan en sysusers ♦ SA o DBO para crear o borrar grupos © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Gestión de ‘logins’ y ‘users’ ♦ Logins creados por SA (administradores de sistema o de seguridad) ; db_accessadmin) users por SA,DBO (db_owner o ♦ Los logins tienen el servidor como ámbito ♦ Los users tienen la BD como ámbito ♦ Crear login (previo a crear user) – introducir password y determinar acceso a BD válidas y BD por defecto, seleccionar funciones de servidor y de BD. © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 40 Roles ♦ Mecanismo de “ensamblaje” de usuarios en unidades a las que aplicar permisos ♦ Fijos de servidor ♦ Fijos de Base de Datos ♦ Definidos por el usuario (sp_addrole, sp_addrolemember, sp_droprole, sp_droprole member) © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Descripción Función fija de servidor sysadmin Permite realizar cualquier actividad en SQL Server. serveradmin Permite configurar opciones para todo el servidor. setupadmin Permite agregar y quitar servidores vinculados, y ejecutar algunos procedimientos almacenados del sistema, como sp_serveroption. securityadmin Permite administrar las cuentas de inicio de sesión del servidor. processadmin Permite administrar los procesos que se ejecutan en SQL Server. dbcreator Permite crear y modificar bases de datos diskadmin Permite administrar archivos de disco. bulkadmin* Permite realizar insersiones masivas (sin anotar en el log de transacciones) con la sentencia BULK INSERT * Novedad de SQL Server 2000 © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 41 Función fija de base de datos Descripción db_owner Permite realizar las actividades de todas las funciones de base de datos, además de otras de mantenimiento y configuración de la base de datos. db_accessadmin Permite agregar o quitar grupos de Windows NT, usuarios de Windows NT y usuarios de SQL Server de la base de datos. db_datareader Permite leer todos los datos de todas las tablas de usuario de la BD. db_datawriter usuario. Permite agregar, cambiar o eliminar datos de todas las tablas de db_ddladmin Permite agregar, modificar o eliminar objetos de la base de datos. db_securityadmin Permite administrar funciones y miembros de funciones de BD, y los permisos de instrucciones y de objetos de la base de datos. db_backupoperator Permite realizar una copia de seguridad de la base de datos. db_denydatareader Impide ver cualquier dato de la base de datos. db_denydatawriter Impide cambiar datos de la base de datos. © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV El rol “public” ♦ Sin permisos definidos, un usuario tiene los de “public”, que incluyen: – ejecución de sentencias que no requieren privilegios (print,etc.) – ver información de tablas de sistema o ejecutar sp para recuperar información de master o de BDs de usuario a las que se tenga acceso – acceder a una BD con “guest” © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 42 Cuentas de Inicio de Sesión ♦ La siguiente estructura de cuenta de inicio de sesión y permisos sigue las recomendaciones ofrecidas por Microsoft para la creación de grupos y la asignación de permisos: – Agregar usuarios de red de Windows 2000 a grupos de Windows 2000. – Crear una única cuenta de inicio de sesión de SQL Server 2000 para el grupo de Windows 2000. – Crear una cuenta de usuario en la BD para la cuenta de usuario de inicio de sesión. – Agregar la cuenta de usuario a una función de BD definida por el usuario. – Conceder permisos a la función para las vistas y los proc.almacenados. © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Roles de aplicación ♦ Restringen el acceso de usuarios a los datos si no es en el ámbito de una aplicación ♦ No tienen miembros: se activan con sp_setapprole ‘nombre’,’password’ — EXEC sp_setapprole 'SalesApp', ’xyz_123' ♦ Creación: sp_addapprole nombre, password — EXEC sp_addapprole 'SalesApp', 'xyz_123' © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 43 Practica 3 ♦ Crear login y usuario administrador para las Bases de Datos ♦ Crear un usuario guest © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Gestión de la Seguridad (6.5) ♦ Estándar – Los logins de usuario los valida SQL*Server ♦ Integrada – Los logins de usuario los valida WindowsNT ♦ Mixta – Pueden ser validados por ambos © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 44 Gestión de la Seguridad 7.0/2000 ♦ Autentificación Windows 2000-NT ♦ Logins SQL Server (verifica password adicional) © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Permisos de Sistema con SQL Enterprise Manager (6.5) ♦ Abrir Base de Datos, ventana Edit Database ♦ Seleccionar “Permissions” ♦ Seleccionar los privilegios correspondientes para los usuarios definidos en la base de datos © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 45 Permisos de Sistema con el Administrador Corporativo 7.0/2000 ♦ Seleccionar BD --> Usuarios ♦ Seleccionar Usuario ---> Propiedades ♦ Introducirlo en la Función de Servidor / Base de Datos que proceda © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Permisos de Sistema con SQL ♦ GRANT {ALL| lista_permisos} TO PUBLIC | lista_usuarios ♦ REVOKE {ALL| lista_permisos} FROM PUBLIC {lista_usuarios © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 46 Práctica 4 ♦ Asignar permisos de sistema al usuario creado © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Permisos de Sistema Versus Permisos sobre objetos ♦ Permisos de sistema: sobre tareas de la base de datos – CREATE DATABASE, PROCEDURE, TABLE,DEFAULT, RULE, VIEW,INDEX – BACKUP DATABASE, BACKUP LOG Seleccionar una BD Æ Propiedades Æ Permisos ♦ Permisos sobre objetos (qué sentencias podrá ejecutar y sobre qué objetos) – SELECT, UPDATE, INSERT,DELETE, (Declarative Referencial Integrity), EXECUTE DRI © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 47 Permisos de Sistema Versus Permisos sobre objetos ♦ Solo miembros de sysadmin, db_owner o db_securityadmin pueden conceder permisos de sistema ♦ GRANT (puede ejecutar acción) / REVOKE (no puede y nadie lo puede evitar) / DENY (no puede, pero puede ser anulada por un permiso de rol) © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Jerarquía de permisos ♦ SA ♦ Propietario de la Base de Datos (DBO) ♦ Propietario del objeto ♦ Usuario de la Base de Datos © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 48 Asignación de Permisos sobre objetos (6.5) ♦ Con SQL Enterprise Manager ♦ ventana Server Manager, seleccionar server, base de datos, permissions del menu object, by user/by object ♦ Textual: GRANT... ON... TO... ; REVOKE ... ON... FROM... © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Asignación de Permisos sobre objetos (7.0/2000) ♦ Abrir BD ♦ Seleccionar objeto ♦ Seleccionar “Todas las Tareas” ♦ Seleccionar Administrar Permisos © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 49 Sentencia GRANT ♦ GRANT {ALL[PRIVILEGES] | PERMISSION_LIST[COLUMN_LIST ] } ON {table_name ([column_list )] | view_name ([column_list )] | stored_procedure_name } TO {PUBLIC | name list} [WITH GRANT OPTION ] © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Sentencia REVOKE ♦ REVOKE [GRANT OPTION FOR ] {ALL[PRIVILEGES] | PERMISSION_LIST[COLUMN_LIST ]} ON {table_name ([column_list )] | view_name ([column_list )] | stored_procedure_name } FROM {PUBLIC | name list} [CASCADE ] © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 50 Práctica 5 ♦ Definición de usuarios para el caso práctico ♦ Asignación de permisos ♦ Definición de roles de usuario © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 4.- Otros objetos de BD 51 Vistas ♦ CREATE VIEW nombreVista [(columna [,…n])] [WITH ENCRYPTION | SCHEMABINDING ] AS instrucciónSelección [WITH CHECK OPTION ] © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Escenarios de utilización de vistas ♦ Para centrarse en datos específicos: uso de vistas como mecanismo de seguridad. ♦ Para simplificar la manipulación de datos: las combinaciones, proyecciones, consultas UNION y consultas SELECT que se utilizan frecuentemente pueden definirse como vistas. ♦ Para personalizar datos: permiten que varios usuarios puedan ver los datos de modo distinto, aunque estén utilizando los mismos simultáneamente. ♦ Para exportar e importar datos: puede copiar datos de forma masiva en y desde vistas. ♦ Para combinar datos de particiones: el operador UNION puede utilizarse dentro de una vista para combinar los resultados de dos o más consultas de tablas distintas en un solo conjunto. © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 52 -- Create a view from the authors table that contains all authors. CREATE VIEW All_authors (au_fname, au_lname, address, city, zip) AS SELECT au_fname, au_lname, address, city, zip FROM pubs..authors GO -- Here, grant SELECT permissions on the view to public. GRANT SELECT ON All_authors TO public GO -- The view needs to be changed to include all authors from Utah. -- If ALTER VIEW is not used but instead the view is dropped and -- re-created, the above GRANT statement and any other statements -- dealing with permissions that pertain to this view must be redone. ALTER VIEW All_authors (au_fname, au_lname, address, city, zip) AS SELECT au_fname, au_lname, address, city, zip FROM pubs..authors WHERE state = 'UT' GO © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Modificación de vistas ♦ No se puede hacer: – INSERT o UPDATE que afecten a más de una tabla (mejorado en versión 7 a todos los casos en los que la conversión sin ambigüedad es posible) – INSERTs en vistas con columnas calculadas – INSERTs con columnas NOT NULL en tabla no incluidas en la vista – Todas las columnas modificadas deben respetar las restricciones para ellas definidas en la tabla – UPDATE sobre una vista que incluye funciones de agregación, GROUP BY o DISTINCT © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 53 Más consideraciones.. ♦ No puede asociar reglas, definiciones DEFAULT ni disparos ♦ No se puede generar índices ni crear definiciones de índices de texto (hasta la versión 7.0) ♦ WITH CHECK OPTION exige que todas las instrucciones de modificación de datos de la vista se ajusten a los criterios de la SELECT que define a la vista © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Vista Dividida ♦ Una vista dividida combina los datos divididos procedentes de un conjunto de tablas miembro en uno o más servidores, y hace que los datos parezcan proceder todos de una sola tabla. ♦ SQL Server 2000 distingue entre vistas con particiones locales y distribuidas. – En una vista local con particiones, todas las tablas que participan y la vista residen en la misma instancia de SQL Server. – En una vista con particiones distribuida, al menos una de las tablas participantes reside en un servidor diferente (remoto). – Además, SQL Server 2000 diferencia entre vistas con particiones que son actualizables y vistas que son copias de solo lectura de las tablas subyacentes. © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 54 Vista Dividida ♦ Las vistas con particiones distribuidas se pueden usar para implementar una federación de servidores de bases de datos. ♦ Una federación es un grupo de servidores que se administran independientemente, pero que colaboran para compartir la carga de proceso de un sistema. ♦ Formar una federación de servidores de base de datos mediante la partición de datos es el mecanismo que: – Permite ampliar horizontalmente un conjunto de servidores para admitir los requisitos de procesamiento de sitios Web de varios niveles y de gran tamaño. © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Vista Dividida ♦ Para definir una vista dividida es necesario realizar una partición horizontal de la tabla (la tabla original se reemplaza con varias tablas miembro más pequeñas). ♦ Cada tabla miembro tiene el mismo núm. de columnas, atributos, tipos de datos que la tabla original. ♦ Ejemplo: La tabla Customer se divide en tres tablas. La restricciones CHECK de estas tablas son: — On Server1: CREATE TABLE Customer_33 (CustomerID INTEGER PRIMARY KEY CHECK (CustomerID BETWEEN 1 AND 32999), ... — On Server2: CREATE TABLE Customer_66 (CustomerID INTEGER PRIMARY KEY CHECK (CustomerID BETWEEN 33000 AND 65999), ... — On Server3: CREATE TABLE Customer_99 (CustomerID INTEGER PRIMARY KEY CHECK (CustomerID BETWEEN 66000 AND 99999), ... © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 55 Vistas con particiones ♦ Es una vista definida mediante la instrucción UNION ALL, es decir, uniendo todas las tablas miembro estructuradas de la misma manera pero almacenadas en diferentes tablas del mismo servidor o en un grupo de Servidores federados de SQL Server 2000. ♦ Ejemplo: – Los datos de la tabla Customers están distribuidos en tres tablas miembro situadas en tres ubicaciones de servidor (Customers_33 en Server1, Customers_66 en Server2 y Customers_99 en Server3). Una vista con particiones en Server1 se definiría de esta manera: CREATE VIEW Customers AS SELECT * FROM CompanyData.dbo.Customers_33 UNION ALL SELECT * FROM Server2.CompanyData.dbo.Customers_66 UNION ALL SELECT * FROM Server3.CompanyData.dbo.Customers_99 © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Vistas ♦ Hasta la versión 7.0 – Es una consulta SQL Almacenada – No almacena datos (los extrae de las tablas subyacentes) – Puede hacer referencia a otra ♦ En la versión 2000 Æ Vistas Indexadas – Permite crear índices en vistas, cuyo conjunto de resultados se almacena e indexa en la base de datos – Las vistas pasan a tener datos asociados – Mejoran el rendimiento de una consulta realizada frecuentemente (recuperación de datos) © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 56 Vistas Indexadas ♦ SCHEMABINDING – Enlaza la vista al esquema. Cuando se especifica SCHEMABINDING, instrucciónSelección debe incluir los nombres con dos partes (propietario.objeto) de las tablas, vistas o funciones definidas por el usuario a las que se hace referencia. – Todas las funciones a las que se hace referencia en las expresiones de la vista deben ser deterministas. La propiedad IsDeterministic de la función OBJECTPROPERTY informa de si una función definida por el usuario es determinista. © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Vistas Indexadas – ejemplo: USE pubs GO --Set the options to support indexed views SET NUMERIC_ROUNDABORT OFF SET ANSI_PADDING,ANSI_WARNINGS,CONCAT_NULL_YIELDS_NULL, ARITHABORT,QUOTED_IDENTIFIER,ANSI_NULLS ON --Create view CREATE VIEW vista_indexada WITH SCHEMABINDING AS (se asocia la vista al esquema de las tablas base subyacentes) SELECT a.au_id, a.au_lname, a.au_fname, t.title_id, t. title FROM dbo.authors a INNER JOIN dbo.titleauthor ta on a.au_id=ta.au_id INNER JOIN dbo.titles t ON t.title_id=ta.title_id WHERE state='CA‘ --Create view SELECT OBJECTPROPERTY (OBJECT_ID ('vista_indexada'), 'IsDeterministic') (Si retorna valor 1 es determinista si no es no determinista) --Create index on the view CREATE UNIQUE CLUSTERED INDEX VIndexada ON VistaIndexada (au_id, title_id) --This query will use the above indexed view SELECT * FROM vista_indexada © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 57 Práctica 6 ♦ Creación de vistas del caso práctico © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Índices ♦ Unique keys ♦ Ignore duplicate keys ♦ Clustered ♦ Ignore duplicate rows/Allow duplicate rows (no existe en 7.0) ♦ Sorted data / Unsorted data ♦ Fill Factor% © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 58 Índices CREATE [UNIQUE] [CLUSTERED | NONCLUSTERED] INDEX nombreÍndice ON tabla (columna [,…n]) [WITH [PAD_INDEX] [[,] FILLFACTOR = factorRelleno] [[,] IGNORE_DUP_KEY] [[,] DROP_EXISTING] [[,] STATISTICS_NORECOMPUTE] ] [ON grupoArchivos] © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Índice Agrupado © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 59 Índice No Agrupado © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Estadísticas de distribución (6.5) ♦ Number of steps: cuantos pasos le cuesta a Sql Server atravesar el índice durante la compilación del ejemplo ♦ Sampling step interval: número de filas de índice entre los puntos de ejemplo ♦ Average Row Hits: número medio de filas devuelto en una entrada de índice © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 60 Resultados (para más de 200 tuplas) ♦ Optimal (una fila por consulta) ♦ Very Good ♦ Good ♦ Fair ♦ Poor ♦ Very Poor (más del 5% de las filas) © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV En las versiones 7 y 2000... ♦ Existe un formato mejorado diferente, proporcionado por el Analizador de Consultas ♦ Se puede utilizar la instrucción DBCC SHOW_STATISTICS para obtener un informe de las estadísticas de distribución del índice – DBCC SHOW_STATISTICS (authors, aunmind) © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 61 Práctica 7 ♦ Creación de índices © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Procedimientos Almacenados – Colección precompilada de instrucciones Transact-SQL almacenadas bajo un nombre y procesadas como una unidad. – Un procedimiento almacenado se comunica con el programa que lo llama mediante sus parámetros. – Un procedimiento almacenado puede: • Aceptar parámetros de entrada y devolver varios valores en forma de parámetros de salida al proc. que realiza la llamada. • Contener instrucciones de programación que realicen operaciones en la BD, incluidas las llamadas a otros procs. • Devolver un valor de estado a un proc. que realiza una llamada para indicar si la operación se ha realizado correctamente o ha habido un error (y el motivo del mismo). © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 62 Procedimientos Almacenados – Utilizar procedimientos almacenados en SQL Server en vez de programas Transact-SQL almacenados localmente en equipos clientes presenta las siguientes ventajas: • • • • Permiten una programación modular. Permiten una ejecución más rápida. Pueden reducir el tráfico de red. Pueden utilizarse como mecanismo de seguridad. – Se pueden realizar muchas de las actividades administrativas a través de los proc. almacenados del sistema. © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Procedimientos Almacenados – Sintaxis: CREATE PROC [ EDURE ] procedure_name [ ; number ] [ { @parameter data_type } [ VARYING ] [ = default ] [ OUTPUT ] ] [ ,...n ] [ WITH { RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ] [ FOR REPLICATION ] AS sql_statement [ ...n ] © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 63 Procedimientos Almacenados – Algunas Consideraciones: • Las instrucciones CREATE PROCEDURE no se pueden combinar con otras instrucciones SQL en el mismo lote. • De forma predeterminada, el permiso para crear proc. almacenados corresponde al propietario de la BD, que puede transferirlo a otros usuarios. • Los proc. almacenados son objetos de BD y sus nombres deben ajustarse a las reglas para los identificadores. • Sólo puede crear un procedimiento almacenado en la base de datos actual. © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Procedimientos Almacenados CREATE PROCEDURE mod_empleado @emp_id int, @cargo int AS UPDATE empleados SET cargo=@cargo WHERE emp_id=@emp_id – EXECUTE mod_empleado ‘1,7’ – Con permiso EXEC, no es necesario definir permisos sobre la tabla implicada. © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 64 Ejemplo de Proc. Almacenado con parámetros comodín USE pubs CREATE PROCEDURE au_info2 @lastname varchar(30) = 'D%', @firstname varchar(18) = '%' AS SELECT au_lname, au_fname, title, pub_name FROM authors a INNER JOIN titleauthor ta ON a.au_id = ta.au_id INNER JOIN titles t ON t.title_id = ta.title_id INNER JOIN publishers p ON t.pub_id = p.pub_id WHERE au_fname LIKE @firstname AND au_lname LIKE @lastname © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Ejemplo de Proc. Almacenado con parámetros comodín – El proc. almacenado au_info2 se puede ejecutar de muchas maneras: • EXECUTE au_info2 • EXECUTE au_info2 'Wh%' • EXECUTE au_info2 @firstname = 'A%' • EXECUTE au_info2 '[CK]ars[OE]n' • EXECUTE au_info2 'Hunter', 'Sheryl' • EXECUTE au_info2 'H%', 'S%' © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 65 En este ejemplo se imprime una combinación de una variable local, funciones del sistema y una cadena de texto mediante la concatenación: USE Northwind DECLARE @MyObject NVARCHAR(128) SET @MyObject = 'Products' PRINT 'Object Name: ' + @MyObject PRINT ' Object ID: ' + STR(Object_ID(@MyObject)) PRINT 'The computer ' + RTRIM(@@SERVERNAME) + ' is running ’ + RTRIM(@@VERSION) -- This shows building a character variable into a print Message. Required for earlier versions of SQL server, in which the PRINT statement did not support Concatenation. DECLARE @Msg VARCHAR(255) SELECT @Msg = 'The computer ' + RTRIM(@@SERVERNAME)+’ is running ’+ RTRIM(@@VERSION) PRINT @Msg © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Proc. Almacenados Extendidos – Permiten crear rutinas externas propias, en un lenguaje de programación como C. – Se muestran ante los usuarios como proc. almacenados normales y se ejecutan del mismo modo. – Son bibliotecas de vínculos dinámicos (DLL) que SQL Server puede cargar y ejecutar dinámicamente. – Se ejecutan directamente en el espacio de direcciones de SQL Server y se programan mediante la API de Servicios abiertos de datos de SQL Server. – Una vez definido el proc. almacenado, los miembros de la función sysadmin pueden registrar el proc. con SQL Server y, otorgar permiso a otros usuarios para que lo ejecuten. – Estos procedimientos sólo se pueden agregar a la BD master. © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 66 Proc. Almacenados Extendidos – sp_addextendedproc Registra el nombre de un nuevo procedimiento almacenado extendido para SQL Server. – Sintaxis: sp_addextendedproc [ @functname = ] 'procedure' , [@dllname =] 'dll‘ – Ejemplo: USE master EXEC sp_addextendedproc xp_hello, 'xp_hello.dll' © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Práctica 8 ♦ Creación de procedimientos almacenados del caso de estudio © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 67 Disparos (triggers) ♦ La evolución de una BD es provocada por la ejecución de operaciones de actualización realizadas por usuarios o aplicaciones que acceden a la BD. ♦ Los triggers (disparos) permiten modelar un comportamiento activo del SGBD como respuesta a la ocurrencia de ciertos sucesos o condiciones. disparo ≡ regla de actividad © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Disparo Regla de actividad (ECA) evento - condición - acción ♦ Evento: especifica el suceso a cuya ocurrencia debe responder el sistema. ♦ Condición: especifica el contexto en el cual la regla cuyo evento se ha producido debe ser ejecutada. ♦ Acción: especifica las acciones que deben ser ejecutadas por el SGBD como respuesta a la ocurrencia del evento cuando la condición es cierta. © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 68 Disparo: sintaxis básica CREATE TRIGGER nombre_disparo ON { tabla | vista } { { FOR | AFTER | INSTEAD OF } { [ INSERT ],[ UPDATE ],[DELETE]} AS [ { IF UPDATE ( column ) [ { AND | OR } UPDATE ( column ) ] [ ...n ] | IF ( COLUMNS_UPDATED ( ) { bitwise_operator } updated_bitmask ) { comparison_operator } column_bitmask [ ...n ] }] /* Texto del Disparo*/ © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Disparos de inserción CREATE TRIGGER empl_ti ON empl FOR INSERT AS IF(SELECT COUNT(*) FROM inserted WHERE inserted.fecha_fin is not null)>0 BEGIN PRINT ‘Un nuevo empleado no puede tener esa fecha’ ROLLBACK TRANSACTION END © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 69 Disparos de modificación de tabla CREATE TRIGGER empl_tm ON empl FOR UPDATE AS INSERT empl_historico SELECT emp_id, dept_id, puesto,salario FROM deleted © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Disparos para una sola columna CREATE TRIGGER empl_tm ON empl FOR UPDATE AS IF UPDATE(fecha_contr) BEGIN Print ‘No se puede cambiar fecha de contratación’ ROLLBACK TRANSACTION END © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 70 Disparos de borrado CREATE TRIGGER depto_tb ON depto FOR DELETE AS UPDATE empl SET dept_id=NULL FROM empl e, deleted d WHERE d.dept_id=e.dept_id © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Integridad referencial CREATE TRIGGER empl_tir ON empl FOR INSERT AS DECLARE @rows int SELECT @rows=@@rowcount IF(SELECT COUNT(*) FROM inserted i,dept d WHERE inserted.dept_id=d.dept_id)<>@rows BEGIN PRINT ‘Departamento no existente’ ROLLBACK TRANSACTION END © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 71 Ejemplos (1) CREATE TRIGGER salario_correcto ON empleado FOR INSERT,UPDATE AS DECLARE @salario real, puesto char(255) SELECT @salario=emp_salario,@puesto=emp_puesto FROM inserted IF @puesto=‘jefe’ and @salario<100000 BEGIN raiseerror(‘Salario cutre para Jefe!’,1,1) ROLLBACK TRANSACTION END © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Ejemplos (2) CREATE TRIGGER salario_correcto ON empleado FOR INSERT,UPDATE AS DECLARE @salario real, @puesto char(255),@nombre (char 255) DECLARE e_cursor CURSOR FOR SELECT emp_nombre, emp_puesto, emp_salario FROM emp OPEN e_cursor ... © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 72 WHILE @@FECHT_STATUS<>-1 BEGIN FETCH NEXT FROM e_cursor INTO @nombre,@puesto,@salario IF @puesto=‘jefe’ and @salario<100000 BEGIN raiseerror(‘Salario cutre para Jefe!’,1,1) ROLLBACK TRANSACTION END END CLOSE e_cursor DEALLOCATE e_cursor © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV USE pubs IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'employeeData') DROP TABLE employeeData IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'auditEmployeeData') DROP TABLE auditEmployeeData GO CREATE TABLE employeeData ( emp_id int NOT NULL, emp_bankAccountNumber char (10) NOT NULL, emp_salary int NOT NULL, emp_SSN char (11) NOT NULL, emp_lname nchar (32) NOT NULL, emp_fname nchar (32) NOT NULL, emp_manager int NOT NULL ) GO © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 73 CREATE TABLE auditEmployeeData ( audit_log_id uniqueidentifier DEFAULT NEWID(), audit_log_type char (3) NOT NULL, audit_emp_id int NOT NULL, audit_emp_bankAccountNumber char (10) NULL, audit_emp_salary int NULL, audit_emp_SSN char (11) NULL, audit_user sysname DEFAULT SUSER_SNAME(), audit_changed datetime DEFAULT GETDATE() ) GO © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV CREATE TRIGGER updEmployeeData ON employeeData FOR update AS -- Check whether columns 2, 3 or 4 has been updated. If any or all of columns 2, 3 or 4 have been changed, create an audit record. -- The bitmask is: power(2,(2-1))+power(2,(3-1))+power(2,(4-1)) = 14 -- To check if all columns 2, 3, and 4 are updated, use = 14 in place of >0 (below). IF (COLUMNS_UPDATED() & 14) > 0 -- Use IF (COLUMNS_UPDATED() & 14) = 14 to see if all of columns 2, 3, -- and 4 are updated. BEGIN IF COLUMNS_UPDATED devuelve un patrón binario que indica qué columnas de la tabla se insertaron o se actualizaron. © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 74 -- Audit OLD record. INSERT INTO auditEmployeeData (audit_log_type, audit_emp_id, audit_emp_bankAccountNumber, audit_emp_salary,audit_emp_SSN) SELECT 'OLD', del.emp_id, del.emp_bankAccountNumber, del.emp_salary, del.emp_SSN FROM deleted del -- Audit NEW record. INSERT INTO auditEmployeeData (audit_log_type, audit_emp_id, audit_emp_bankAccountNumber, audit_emp_salary, audit_emp_SSN) SELECT 'NEW',ins.emp_id,ins.emp_bankAccountNumber,ins.emp_salary, ins.emp_SSN FROM inserted ins END GO © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV --Inserting a new employee does not cause the UPDATE trigger to fire. INSERT INTO employeeData VALUES ( 101, 'USA-987-01', 23000, 'R-M53550M', N'Mendel', N'Roland', 32) GO -- Updating the employee record for employee number 101 to change the salary to 51000 causes the UPDATE trigger to fire and an audit trail to be produced. UPDATE employeeData SET emp_salary = 51000 WHERE emp_id = 101 GO SELECT * FROM auditEmployeeData GO UPDATE employeeData SET emp_bankAccountNumber = '133146A0', emp_SSN = 'R-M53550M' WHERE emp_id = 101 GO SELECT * FROM auditEmployeeData GO © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 75 Práctica 9 ♦ Creación de triggers del caso de estudio para tratar las siguientes restricciones: 1) 2) 3) 4) Al introducir una fecha de asignación para una exclusiva hay que introducir un fotógrafo valido. Un fotógrafo sólo puede tener una exclusiva pendiente de entrega El precio de un reportaje se calcula en función del número de fotos y del precio por foto que corresponde al nivel del fotógrafo El nivel de un reportaje tiene que ser menor o igual al nivel del fotógrafo © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Disparos INSTEAD OF ♦ Son disparos “a priori” ♦ No se ejecutan antes de las acciones INSERT, UPDATE o DELETE sino que en lugar de ellas ♦ Para que se comporte como un disparo tradicional basta hacer referencia otra vez a la sentencia que lo disparó ♦ No son recursivos ♦ Naturaleza del disparo: FOR, AFTER, o INSTEAD OF? © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 76 Ejemplo CREATE TABLE departamentos( id int PRIMARY KEY, nombre varchar (20)) INSERT INTO departamentos VALUES (1, ‘informatica’) INSERT INTO departamentos VALUES (2, ‘contabilidad’) INSERT INTO departamentos VALUES (3, ‘rrhh’) CREATE TRIGGER t_dep_delete ON departamentos INSTEAD OF DELETE if NOT EXISTS (SELECT * from deleted where id=1) DELETE departamentos where id in (SELECT id from deleted) else print ‘No se puede borrar el departamento 1’ © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 5.- Protección contra Fallos: Copias de Seguridad 77 Copias de Seguridad ♦ Copia de tablas del sistema, objetos definidos por el usuario y datos ♦ “Dump” en 6.5 / Backup en 7.0 ♦ Se realizan en dispositivos de ‘backup’ (ficheros de disco o controladores de cinta) ♦ Escenario habitual: backups de base de datos frecuentes y backups de transaction log entre ellos. © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Transacciones y Puntos de Control ♦ Una transacción es una unidad de trabajo escrita en el log antes que en la BD: se realizar un “roll forward” si se completa, o un “roll backward” si no. ♦ Un “checkpoint” (punto de control) escribe todas las transacciones confirmadas desde cache a dispositivo de BD: ocurre periódicamente y de forma automática, aunque puede ser activado por el usuario © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 78 Consideraciones (1) ♦ ¿Con que frecuencia? ♦ ¿Que se va a salvar? ♦ ¿En que soporte? ♦ ¿Quien es el responsable de su ejecución? ♦ ¿Online o Offline? ♦ ¿Conviene usar un servidor de backup? ♦ ¿Como asegurar copias correctas? © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Consideraciones (2) ♦ ¿Dónde almacenarlas? ♦ ¿Manuales o Automáticos? ♦ ¿Cuál es el tiempo de respuesta ante la ocurrencia de un fallo? ♦ ¿Existe un plan para verificar la estrategia de copias de seguridad? © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 79 Bases de Datos “salvables” ♦ Todas las de usuarios (después de crear BD, índices, limpiar el log de transacciones, efectuar operaciones ‘no log’( BACKUP LOG WITH NO LOG, WRITETEXT o UPDATETEXT, BCP...)) ♦ De sistema (tras modificarlas) – master (con un CREATE/ALTER/DROP DATABASE, o ejecutando procedimientos de sistema) – msdb – model © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Actividades restringidas ♦ Crear o modificar BDs ♦ Crear índices ♦ Efectuar operaciones “nonlogged” © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 80 Crear dispositivos de backup ♦ Con Sql Enterprise Manager ♦ Usando sp_addumpdevice ♦ Una vez creado, se actualiza la tabla sysdevices de master – select * from sysdevices en master ♦ En 7.0 se les llama ficheros permanentes de backup © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV USE master EXEC sp_addumpdevice 'disk', 'mydiskdump', 'c:\dump\dump1.bak' USE master EXEC sp_addumpdevice 'tape', 'tapedump1', '\\.\tape0' © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 81 Ficheros temporales de backup ♦ Sentencia BACKUP DATABASE USE MASTER BACKUP DATABASE northwind TO DISK = ‘C:\TEMP \Micopia.bak’ © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Chequeo de Consistencia ♦ DBCC CHECKDB – Comprueba la asignación y la integridad estructural de todos los objetos de la BD especificada. ♦ DBCC NEWALLOC – Comprueba la asignación de las páginas de datos e índices de cada tabla dentro de las estructuras de extensión de la BD. ♦ DBCC CHECKCATALOG – Comprueba la coherencia de las tablas del sistema y de éstas entre sí, en la BD especificada. © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 82 Copias en paralelo ♦ Con SQL Enterprise Manager – especificar múltiples dispositivos de copia como dispositivos de destino ♦ Textualmente – 6.5 -> DUMP DATABASE basedatos TO dump1, dump2, ...., dumpn WITH INIT – 7.0 -> BACKUP DATABASE basedatos TO fichero1, fichero2, ... ficheron WITH NAME © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Opciones de backup ♦ INIT/NO INIT (sobreescribe/añade) ♦ FORMAT (escribe el encabezado del dispositivo o medio en todos los volúmenes utilizados) ♦ RESTART (Especifica que SQL Server reinicie la operación de copia de seguridad interrumpida) © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 83 Opciones para cinta ♦ UNLOAD (rebobina y extrae la cinta tras la copia) ♦ NOUNLOAD (la cinta no se descargará automáticamente de la unidad de cinta después de realizar una copia de seguridad. ♦ BLOCKSIZE (especifica el tamaño de bloque físico, en bytes) ♦ FORMAT (sobrescribe las cabeceras de todos los dispositivos en el backup set) ♦ SKIP (Deshabilita la comprobación de la caducidad y el nombre del backup set para impedir que se sobrescriban los conjuntos de copia de seguridad) ♦ NOSKIP (comprueba la fecha de caducidad de todos los backup set de los medios antes de permitir que se sobrescriban). © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV BACKUP DATABASE {nombreBaseDatos @varNombreBaseDatos} TO <dispositivoCopiaSeguridad> [,…n] [WITH [BLOCKSIZE = {tamañoBloque | @variableTamañoBloque}] [[,] DESCRIPTION = {texto | @variableTexto}] [[,] DIFFERENTIAL] [[,] EXPIREDATE = {fecha | @varFecha} | RETAINDAYS = {días | @varDías}] [[,] FORMAT | NOFORMAT] [[,] {INIT | NOINIT}] [[,] MEDIADESCRIPTION = {texto | @variableTexto}] [[,] MEDIANAME = {nombreMedio | @variableNombreMedio}] [[,] [NAME = {nombreConjuntoCopiaSeguridad | @varNombreConjuntoCopiaSeguridad}] [[,] {NOSKIP | SKIP}] [[,] {NOUNLOAD | UNLOAD}] [[,] [RESTART] [[,] STATS [= porcentaje]] ] © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 84 Tipos de copia ♦ De la BD completa ♦ Diferencial ♦ Del log de transacciones – Por defecto, conlleva a truncar el log de transacciones ♦ De un fichero o grupo de ficheros de la Base de Datos © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV -- Copia completa de Base de Datos USE master EXEC sp_addumpdevice 'disk', 'MyNwind_1', 'c:\mssql7\backup\MyNwind_1.dat' BACKUP DATABASE MyNwind TO MyNwind_1 WITH INIT -- para hacerlo diferencial añadir WITH DIFFERENTIAL -- Copia de log de transacciones. USE master EXEC sp_addumpdevice 'disk', 'MyNwindLog1', 'c:\mssql7\backup\MyNwindLog1.dat' -- Update activity has occurred before this point. BACKUP LOG MyNwind TO MyNwindLog1 © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 85 Copias de ficheros o grupos de ficheros ♦ Para base de datos muy grandes (VLDB) ♦ Copias individuales de los ficheros de la BD ♦ Todos los ficheros de una BD deben ser salvaguardados ♦ Índices y tablas asociados deben constituir una unidad única BACKUP DATABASE phoneorders FILE=order2 TO orderbackup2 © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Ejemplo de estrategia ♦ BD --> Fich1, Fich2, Fich3 ♦ Copia completa semanal (lunes a las 13.00h) ♦ Ficheros seleccionados para copia circularmente cada día a las 13.00h. ♦ Log de transacciones a las 12.00 y a las 18.00 diarios ♦ ¿Qué ocurre si el jueves a las 08.00 se daña Fich2? © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 86 Gestión del Transaction Log ♦ Colocarlo en dispositivo separado ♦ Monitorizar con – sp_spaceused – sp_helpdb ♦ Copias periódicas para que su tamaño sea manejable y evitar su llenado © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Opciones del Backup Log ♦ TRUNCATE_ONLY – Elimina parte inactiva sin hacer backup – Uso con backup de BD exclusivo ♦ NO_LOG – Elimina parte inactiva sin hacer backup – Uso cuando log se llena ♦ NO_TRUNCATE – Salva el log ♦ Opción trunc.log on chkpt. © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 87 ♦ Para iniciar el Asistente para creación de copias de seguridad de bases de datos • Expanda un grupo de servidores y, a continuación, expanda un servidor. • En el menú Herramientas haga clic en Asistentes.... • Expanda Administración. • Haga doble clic en Asistente para copia de seguridad. • Complete los pasos del asistente © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Práctica 8 Backup con Sql Ent.Manager ♦ Realizar backup de base de datos de cada grupo ♦ Realizar backup automático de base de datos de cada grupo © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 88 6.- Recuperación frente a fallos Actividades durante el proceso de restauración... ♦ Chequeo de seguridad – nombres distintos de BD, igualdad de ficheros, ficheros incompletos en copias multifichero ♦ Crea de nuevo BD y ficheros asociados © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 89 Verificando backups.. ♦ RESTORE HEADERONLY – Obtiene la información del encabezado sobre todos los conjuntos de copias de seguridad de un dispositivo determinado. ♦ RESTORE FILELISTONLY – Devuelve un conjunto de resultados que contiene la lista de los archivos de BD y de registro del conjunto de copias de seguridad. ♦ RESTORE LABELONLY – Devuelve un conjunto de resultados que contiene información acerca del medio de copia de seguridad identificado por un dispositivo de copia de seguridad. ♦ RESTORE VERIFYONLY – Comprueba la copia de seguridad pero no la restaura. © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Tareas previas al Restore... ♦ Opción de base de datos DBO – miembro de los roles sysadmin o db_owner ♦ Hacer backup del transaction log – asegura consistencia de la BD – Captura cambios entre último transaction log salvado y momento del error © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 90 RESTORE DATABASE {nombreBD | @variableNombreBD} [FROM <dispositivoCopiaSeguridad> [,…n]] [WITH [DBO_ONLY] [[,] FILE = númeroArchivo] [[,] MEDIANAME = {nombreMedio | @var.NombreMedio}] [[,] MOVE 'nombreArchivoLógico' TO 'nombreArchivoSistOp.'] [,...n] [[,] {NORECOVERY|RECOVERY|STANDBY = nombArchDes}] [[,] {NOUNLOAD | UNLOAD}] [[,] REPLACE] [[,] RESTART] [[,] STATS [= porcentaje]] ] RESTORE DATABASE MyNwind FROM MyNwind_1 © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Opciones ♦ RECOVERY (con el último backup; permite acceso a la BD, con “roll back” y “roll forward”) ♦ NORECOVERY (con todos los demás; previene acceso a la BD) ♦ FILE (número que indica un backup específico de un fichero de backup con muchos backups) ♦ MOVE TO (donde restaurar ficheros de backup cuando los cambio de ubicación) ♦ REPLACE (reemplaza BD existente, evitando el chequeo de seguridad) © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 91 RESTORE DATABASE MyNwind FROM MyNwind_1 WITH NORECOVERY, MOVE 'MyNwind' TO 'c:\mssql7\data\NewNwind.mdf', MOVE 'MyNwindLog1' TO 'c:\mssql7\data\NewNwind.ldf’ RESTORE LOG MyNwind FROM MyNwindLog1 WITH RECOVERY © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Restaurando en función del backup... ♦ De una copia completa de BD ♦ De la BD ♦ De una copia diferencial ♦ De una copia del log de transacciones (RESTORE LOG) ♦ De una copia de un fichero o grupo de ficheros © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 92 De una copia completa de BD... ♦ Usar ante – daños físicos en disco – toda la BD está dañada, corrupta o borrada – mantener un “standby SQL server” ♦ Especificar opciones de RECOVERY © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV De una copia diferencial... ♦ En la cláusula FROM, especificar fichero con copia diferencial: lo demás igual ♦ Solo recupera las partes de la BD cambiadas desde la última copia ♦ Requiere copia completa previa © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 93 De una copia del log de transacciones ♦ RESTORE LOG ♦ Permite recuperación hasta un punto temporal con la opción STOPAT RESTORE DATABASE MyNwind FROM MyNwind_1, MyNwind_2 WITH NORECOVERY RESTORE LOG MyNwind FROM MyNwindLog1 WITH NORECOVERY RESTORE LOG MyNwind FROM MyNwindLog2 WITH RECOVERY, STOPAT = 'Apr 15, 1998 12:00 AM' © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV De copia de fichs. o grupo de fichs. ♦ Aplica transacciones que solo afectan al fichero restaurado ♦ Restaura ficheros o grupos de ficheros con índices y tablas asociados como un todo © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 94 “Standby SQL Server” ♦ Es un segundo servidor que sirve de espejo al servidor en producción. ♦ Puede servir como copia de solo lectura, para reducir la actividad del servidor principal, o para detección de errores y chequeo de consistencia ♦ Opción STANDBY © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV -- Restore the initial database backup on the standby server. USE master RESTORE DATABASE MyNwind FROM MyNwind_1 WITH standby = 'c:\undo.ldf‘ -- Apply the first transaction log backup. RESTORE LOG MyNwind FROM MyNwind_log1 WITH standby = 'c:\undo.ldf' -- Apply the next transaction log backup. RESTORE LOG MyNwind FROM MyNwind_log2 WITH standby = 'c:\undo.ldf' -- Repeat for each transaction log backup created on the primary server. -- Time elapses.. -- Primary server fails. Back up the active transaction log on the primary server. BACKUP LOG MyNwind TO MyNwind_log3 WITH NO_TRUNCATE -- Apply the final (active) transaction log backup -- to the standby server. All preceding transaction log backups must have been already applied. RESTORE LOG MyNwind FROM MyNwind_log3 WITH standby = 'c:\undo.ldf' -- Recover database on the standby server, making it available for normal operations. RESTORE DATABASE MyNwind WITH RECOVERY © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 95 Restaurando BD de sistema dañadas... ♦ Desde un backup ♦ Reconstruyendo las Bds del sistema (si master no es accesible) – Rebuildm.exe (Mssql7/Binn) – Reiniciar servicio SQL Server – Restaurar copias de BDs del sistema © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Restaurar BDs del sistema ♦ Restaurar master, o recrearla con la información sobre Bds de usuario, ficheros de BD, dispositivos de copia, logins y roles SQL Server ♦ Restaurar msdb ♦ Restaura model © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 96 Restaurando Bds de usuario... ♦ A partir de backup ♦ Usar “sp_attach_db”, “sp_attach_file_db” si los ficheros de BD de usuario están sin error EXEC sp_detach_db @dbname = 'pubs' EXEC sp_attach_single_file_db @dbname = 'pubs', @physname = 'c:\mssql7\data\pubs.mdf' © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Modelo de Recuperación en v. 2000 (Completa) ♦ Se puede restaurar hasta el momento del error o hasta un tiempo determinado ♦ Las operaciones masivas se anotan en el transaction log completamente ♦ La seguridad es total pero las operaciones masivas no son más rápidas y el transaction log crece mucho. ♦ En este modelo se pueden realizar copias de seguridad de la BD, diferenciales y del transaction log. © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 97 Cómo restaurar la BD ante una caída (Completa) Realizar una copia de seguridad del registro de transacciones activo en el momento de la caída*. 2. Restaurar la última copia de la BD. 3. Restaurar la copia diferencial más reciente 4. Restaurar copias del trans. log desde la copia de BD/ diferencial, incluyendo la del log actual. 1. * En la v. 2000 esta opción puede realizarse aunque no haya el fichero de datos primario de la BD. © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Modelo de Recuperación en v. 2000 (Registro Masivo) ♦ Anota las operaciones masivas en el log de una manera mínima. ♦ Las operaciones masivas siguen siendo rápidas ♦ Puede hacerse copias del transaction log. ♦ Aunque puede copiarse el log activo tras la caída, hay riesgo de pérdida de las op. masivas ♦ En este modelo se pueden realizar copias de seguridad de la BD, diferenciales y del transaction log. © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 98 Cómo restaurar la BD ante una caída (Registro Masivo) 1. 2. 3. 4. 5. * Realizar una copia del registro de trans. activo en el momento de la caída*. Restaurar la última copia de la BD. Restaurar la copia diferencial más reciente Restaurar copias del trans. log desde la copia de BD/ diferencial + la del log actual. Repetir manualmente todos los cambios masivos hechos desde la última copia del log. Si ha habido operaciones masivas desde la última copia del log, se perderán. © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Modelo de Recuperación en v. 2000 (Simple) ♦ No permite realizar copias de seguridad del transaction log ♦ Las operaciones rápidas (masivas) son al máximo ♦ El trans. Log será siempre mínimo. Se trunca a cada checkpoint ♦ La seguridad es muy limitada ♦ En este modelo se pueden realizar copias de seguridad de la BD y diferenciales ♦ Misma funcionalidad del truncate log on checkpoint © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 99 Cómo restaurar la BD ante una caída (Simple) Restaurar la última copia de la BD. 2. Restaurar la copia diferencial más reciente 1. © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 7.- Herramientas de transferencia de datos 100 Herramientas de transmisión de datos ♦ Asistente para importación/exportación con servicios de transformación de datos (DTS) ♦ Diseñador de paquetes DTS ♦ Tareas de transferencia DTS ♦ “Bulk Copy Program” (bcp) ♦ Sentencias Transact-SQL (select .. into, insert.. select, bulk insert) ♦ Backup / Restore ♦ sp_attach_db (asigna BD a un servidor) © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Ejemplo de transferencia de datos ♦ Seleccione Sólo Microsoft SQL Server 2000 como el origen de los datos y especifique la base de datos. ♦ Seleccione Sólo Microsoft SQL Server 2000 como el destino de los datos y especifique la base de datos. ♦ Seleccione Transferir objetos y datos entre bases de datos de SQL Server 2000. ♦ Especifique los objetos y datos que se van a transferir. ♦ Lleve a cabo la transferencia. © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 101 Práctica 9 ♦ Estudiar Asistente para importación / exportación con servicios de transformación de datos (DTS) © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Paquetes DTS ♦ Un paquete DTS es una descripción auto contenida de todo el trabajo que debe realizarse como parte de una transformación. ♦ Cada paquete contiene uno o más pasos. ♦ Cada paso realiza una tarea como ejecutar una instrucción SQL, transformar datos, enviar correo electrónico o ejecutar un programa Win32® o un archivo por lotes. © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 102 Utilizar DTS incluye: 1. Definir PAQUETES DTS en al Administrador corporativo o en una aplicación mediante la API de DTS. Los Paquetes DTS incluyen estos componentes: • Objetos de conexión que definen cada origen de datos OLE DB de origen o de destino. • Objetos de tarea que definen las acciones específicas que se van a realizar. • Objetos de paso que definen la secuencia en la que se van a realizar las tareas. © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 2.- Almacenar los Paquetes DTS en: • • • Archivos DTS de almacenamiento con estructura COM. La base de datos msdb de Microsoft SQL Server™. Microsoft Repository. 3.- Ejecutar los Paquetes DTS mediante: • • • • • El programa dtsrun. El Diseñador DTS. Los asistentes para importación y exportación con DTS. El Agente SQL Server para ejecutar un trabajo programado. Una aplicación COM que llama al método Execute del objeto Package de los DTS. © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 103 Transformación de datos con paquetes DTS ♦ Creación del paquete DTS ♦ Transformaciones y correspondencias de datos ♦ Definición de tareas de transformación ♦ Definición de flujos de trabajo ♦ Ejecución y planificación © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Bcp: permisos necesarios ♦ Login/password en Sql Server ♦ Permisos sobre tablas de la BD y ficheros del SO ♦ Copia a destino: SELECT sobre sysobjects, syscolumns y sysindexes (concedidas automáticamente a public en la BD model) ♦ Copia desde destino: INSERT © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 104 Ejemplo de bcp ♦ bcp pub..authors out authors.txt -c -Usa -S miservidor ♦ bcp pubs..authors in authors.txt -c -Usa -S miservidor ♦ -m maxerror -f formatfile -e errfile -F firstrow -L lastrow -r \n (new line, terminador de fila) -t terminador de campo .... © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Fast/Slow bcp ♦ Fast bcp: sin índices. No hay LOG para inserciones – opción select into/bulk copy = true ♦ Slow bcp: con índices. Las inserciones, al LOG. © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 105 8.- Ajuste y monitorización Factores que afectan al rendimiento ♦ Hardware del servidor (procesadores, e/s, memoria,...) ♦ Sistema operativo (gestión de disco, actividades y servicio concurrentes en NT,...) ♦ Red ♦ SQL Server (configuración, “locking”, “logging”, actividades concurrentes,...) ♦ Aplicación de BD ♦ Aplicación cliente © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 106 Tareas de monitorización (1) ♦ A nivel de sistema → Microsoft Event Viewer, SQL Server Performance Monitor – Hardware – Sistema operativo – Aplicación ♦ En SQL Server 2000 el monitor de rendimiento esta incorporado al Analizador © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Tareas de monitorización (2) ♦ Específicas de SQL Server → SQL Server Profiler, ventana SQL Server Current Activity, procedimientos almacenados de sistema, sentencias T-SQL • Actividad SQL Server • Consistencia de datos © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 107 Tareas de monitorización (3) ♦ Rendimiento de consultas específicas → SQL Server Query Analyzer (Analizador de Consultas) – Depuración de procedimientos almacenados – Administración de índices y estadísticas – Asistente para optimización de índices © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Monitor de Rendimiento (SQL Performance Monitor) ♦ Selecciona los contadores a controlar – (predefinidos, específicos de SQL Server, de NT, o definidos por el usuario) ♦ En instalación, contadores predefinidos son: – Proporción de aciertos de caché del búfer – Lecturas de página/seg. – Escrituras de página/seg – Escrituras de puntos de comprobación/seg. – Conexiones de usuario – I/O-Transactions/sec © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 108 Monitor de Rendimiento – – – – – – – – I/O- Page Reads/sec I/O- Single Pages Writes/sec I/O User Connections Número de intentos de parametrización automática/seg. Número de transacciones activas Número de accesos “full scan” Número de bloqueos activos en el servidor Número de peticiones de bloqueo que terminan en bloqueo mortal © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Práctica 9-1 ♦ Análisis del monitor de rendimiento © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 109 Current Activity Window... ♦ ♦ ♦ ♦ Muestra información de procesos activos Reservas, bloqueos y abrazos mortales Gestión de procesos y reservas Para ver la actividad actual del servidor – Expanda un grupo de servidores y, a continuación, expanda un servidor. – Expanda Administración y, a continuación, expanda Actividad actual. – Haga clic en Información del proceso. La actividad actual del servidor se muestra en el panel de detalles © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Uso de T-SQL para monitorizar ♦ Proc. Almacenados de sistema (sp_who, sp_lock, sp_spaceused, sp_helpdb, sp_monitor, sp_helpindex, sp_ statistics) ♦ Variables globales (@@connections, @@error, @@options, @@spid, @@procid ) ♦ Sentencias T-SQL (set statistics IO, set statistics time, set showplan_all on/off ) ♦ Sentencias DBCC (memusage, sqlperf, perfmon, show_statistics, checkdb, newalloc, checktable,..) ♦ Flags de traza (dbcc traceon/traceoff) © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 110 Este ejemplo devuelve el Id. de proceso, el nombre de inicio de sesión y el nombre de usuario del proceso de usuario actual. SELECT @@SPID AS 'ID', SYSTEM_USER AS 'Login Name', USER AS 'User Name' Éste es el conjunto de resultados: ID Login Name User Name ----- ------------- ---------------------11 sa dbo En este ejemplo se habilita la presentación de los números de línea en los errores de sintaxis. DBCC TRACEON (106) GO © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV SQL Server Profiler (Analizador) ♦ Herramienta para supervisar la actividad actual del servidor Selección de eventos a monitorizar Selección de criterios para traza Selección de datos a capturar Agrupación razonable de datos ♦ Captura de datos en tiempo real ♦ Captura de datos en fichero © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 111 Práctica 9-2 ♦ Estudio del Analizador (SQL Server Profiler); realización de trazas ejemplo © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Manteniendo SQL Server... ♦ Desarrollar plan de mantenimiento de la BD – actualizar información de optimización • mantenimiento de índices usando FILLFACTOR • UPDATE STATISTICS • DBCC SHRINKDATABASE – verificación periódica de integridad de datos (DBCC CHECKALLOC, DBCC CHECKDB) – realización de copias – mantenimiento de un histórico de actividades ♦ Manual o automático (con asistente) © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 112 Práctica 9-3 ♦ Analizar asistente para generación de un plan de mantenimiento de la base de datos © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 9.- Alertas y tareas 113 Tareas y Alertas ♦ Tareas: ejecutadas periódicamente – Copias de seguridad – Transferencia de datos – Mantenimiento de índices ♦ Alertas: reconocimiento de y respuesta a problemas potenciales – respuesta a eventos de error SQL Server – definir condiciones de rendimiento para monitorizar problemas © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Componentes implicadas ♦ Servicio MSSQLServer – escribe eventos al log de WindowsNT ♦ Servicio EventLog – notifica el evento al servicio SQLServerAgent ♦ Servicio SQLServerAgent – al iniciar, se registra al servicio EventLog y se conecta a SQLServer. Asíes notificado de eventos ocurridos © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 114 Relaciones entre gestores ♦ Un evento llama a una alerta ♦ Una alerta activa una tarea ♦ Una tarea invoca un evento(alerta) Por ejemplo, un paso de tarea es copiar el transaction log, falla por estar lleno (error 9002). Se puede prevenir con una alerta que ejecute un TRUNCATE y avise a un operador de la ocurrencia de ese error. © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Automatizar la tareas de mantto. implica... ♦ Crear tareas ♦ Definir sus pasos ♦ Determinar la lógica del flujo de acciones para cada paso ♦ Programar las tareas ♦ Crear operadores a efectos de notificación ♦ Revisar y configurar el seguimiento histórico © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 115 Creación de tareas ♦ Con el asistente, o con el administrador corporativo ♦ Los pasos de una tarea contienen: – Comandos de SO (bcp, dtsrun...) – TSQL (sentencia Transac.SQL sin GO’s y máx. 255 caracteres) – Lenguajes de “script” (VBScript, JavaScript,...) © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Gestión de la historia de tareas ♦ Información en sysjobhistory (BD msdb) ♦ Con el administrador corporativo podemos: – ver información sobre tareas específicas (resultado de cada paso, duración, errores y mensajes, fecha y hora de ejecución,... – Configuración de tamaño: retener información de tareas, vaciar si se llega a un tope especifica-do,.... -> vigilar sysjobhistory, y mantener pequeña: puede llenar msdb © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 116 Práctica 10 ♦ Creación de Tareas © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Gestión de alertas ♦ para responder a problemas potenciales ♦ para responder a errores SQL Server ♦ para responder a errores definidos por el usuario (>50000) ♦ sobre condiciones de rendimiento © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 117 De manera predeterminada, se escriben los siguientes sucesos de SQL Server en el registro de aplicación de Windows NT: ♦ Errores sysmessages de gravedad 19 o superior. Utilizar sp_altermessage para designar errores sysmessages específicos como “siempre registrados” a mensajes de error del registro con una gravedad inferior a 19. ♦ Instrucciones RAISERROR llamadas mediante la sintaxis WITH LOG. RAISERROR WITH LOG es la manera que se recomienda para escribir en el registro de aplicación de Windows NT desde SQL Server. ♦ Cualquier aplicación registrada mediante xp_logevent © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Cómo configurar una alerta de base de datos de SQL Server (Monitor de rendimiento) ♦ En el menú Ver, haga clic en Alerta. ♦ En el menú Edición, haga clic en Agregar a alerta... ♦ En la lista Objeto, haga clic en un objeto de SQL Server y, a continuación, haga clic en un contador del cuadro Contador para basar en él la alerta. ♦ En Alertar si, haga clic en Superior a o en Inferior a y, a continuación, escriba un valor de umbral. La alerta se generará cuando el valor del contador quede por encima o por debajo del valor de umbral (depende de si ha elegido Superior a o Inferior a). ♦ Haga clic en Primera vez o en Siempre para determinar cuándo se generará la alerta. La opción predeterminada es Siempre. © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 118 A. Definir un mensaje personalizado En este ejemplo se agrega un mensaje personalizado a sysmessages. USE master EXEC sp_addmessage 50001, 16, N'Percentage expects a value between 20 and 100. Please reexecute with a more appropriate value.' B. Levantamiento de una alerta Con RAISERROR en procedimiento almacenado se genera mensaje de error y, definida una alerta para ese error, está controlado © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Publicando en la web (1) ♦ Muy sencillo con el asistente web. Permite – especificar la consulta – programar cuando se ha de ejecutar – seleccionar nombre de fichero de salida y el path para la página web – seleccionar opciones de formato (si no se usa una plantilla HTML) © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 119 Publicando en la web (2) ♦ Creación de una tarea web – sp_makewebtask ♦ Ejecución de una tarea web creada con el asistente – sp_runwebtask @procname=MIHTML, @outputfile=‘C:\WEB\MIFICH.HTML’ ♦ Borrado de una tarea web creada con asistente – sp_dropwebtask MIHTML, ‘C:\WEB\ MIFICH.HTML’ © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Práctica 11 ♦ Creación de alertas ♦ Generación de páginas web © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 120 10.- Optimización de Consultas Optimización (1) ♦ Optimizador basado en costes ♦ Dada una consulta, determina el mejor método de acceso a los datos, – orden en el que efectuar la reunión de tablas, – utilizar o no los índices que puedan haber sido definidos para dichas tablas. ♦ La información detallada sobre el método final de acceso seleccionado puede ser vista ejecutando la orden SET SHOWPLAN_ALL y SET SHOWPLAN_TEXT . ♦ Estructura en pasos (steps) para mostrar secuencia de acciones © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 121 Optimización (2) – Básicamente, cada paso incluye información sobre: el tipo de orden ejecutada (SELECT, INSERT UPDATE o DELETE), con la sintaxis “The type of query is...” – la tabla de la que se lee (FROM TABLE...), importante porque cuando se trata de reuniones, el orden en el que aparecen los FROMs es el orden en el que se efectúa la reunión, – cuando una orden modifica filas de otra tabla, la cláusula TO TABLE indica cuál es esa tabla. © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Optimización (3) – para ciertas consultas, como las que generan resultados ordenados o mostrados en grupos, el optimizador puede crear su propia tabla temporal, que será borrada cuando la orden inicial sea totalmente ejecutada. – worktable en la información que estamos analizando. © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 122 Optimización (4) – el método “Nested iteration” es la técnica empleada por defecto para hacer reuniones o para recuperar filas de una tabla. – Indica que el optimizador utiliza uno o más conjunto de bucles para • • • • ir recorriendo una tabla, recuperar una fila, comprobar si satisface la condición del WHERE, devolver la tupla si la comprobación tiene éxito, y pasar a la siguiente tupla. © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Optimización (5) – Métodos concretos de acceso a las tuplas: • table scan, que recorre toda la tabla secuencialmente y tupla a tupla • clustered index, que accede a la tabla a través de su índice agrupado principal • index: index_name, indicando acceso a través del índice correspondiente • dynamic index: se construye su propio índice para ejecutar la consulta (habitualmente de tipo OR) © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 123 Analizador de consultas en 2000 ♦ Seleccionar mostrar el plan de ejecución estimado ♦ Cada icono representa un paso ♦ Se muestra – – – – índices usados tipo de método de acceso trabajo de I/O aprox. Tiempo estimado de CPU para completar la consulta © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Práctica 12 ♦ Estudio del Analizador de Consultas desde la perspectiva de los planes de ejecución © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 124 III.- SQL Server 2000 y XML Introducción a XML © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 125 5 ideas básicas sobre XML ♦ Recomendación del consorcio W3C (no es un estándar industrial: ISO, ANSI, ...). ♦ Es un metalenguaje para la construcción de estructuras de información semiestructurada. ♦ Basado en marcas sintácticas que cumplen reglas léxicas y sintácticas. ♦ Se le puede asociar una gramática para definir un modelo de estructura de documento (DTD). ♦ La información se codifica en modo texto. © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV El XML no es tan nuevo como parece ♦ En 1996 comenzó su desarrollo, y desde febrero de 1998 es una “Recomendación” del W3C. ♦ Deriva del SGML (ISO 8879 desde 1986, autor Charles Goldfarb - IBM). ♦ Existen multitud de aplicaciones: – – – – Web y multimedia (SMIL, etc.) Comercio electrónico (sustituto del EDI, WAP, etc.). Ingeniería de la Programación: XMI, SOAP, etc. Publicación Electrónica (TEI, MathML, TEXML,etc.). © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 126 Codificación en XML Codificar una información en XML es generar un fichero de texto donde se combina la información fuente con metainformación estructural. Editor XML Documento Fuente Documento Estructurado (texto) XML © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Propiedades de la codificación en XML ♦ Información semi-estructurada. ♦ Información textual, – (pero no implica que vaya a ser leída por un ser humano). ♦ Una gramática (inambigua) para definir estructuras textuales. ♦ Soporta internacionalización en la codificación del texto (UNICODE). ♦ Independiente de la plataforma computacional. © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 127 Codificación “Bien Formada” Para insertar la metainformación se utilizan unas marcas que cumplen unas reglas básicas: ♦ Reglas léxicas: – Qué tipo de caracteres se pueden utilizar, – Cómo se codifican los caracteres, etc. ♦ Reglas sintácticas: – Todo bloque estructural debe tener dos marcas: una de comienzo y otra de final de bloque. – Bloques correctamente anidados, etc. © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Ejemplo de documento XML “bien-formado” <factura> <fecha>12/08/2000</fecha> <número>23-2000</número> <línea> ... </línea> ... Etc ... </factura> © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 128 Codificación “Valida” ♦ Opcionalmente se pueden aplicar restricciones gramaticales para definir un tipo particular de documento: – DTD (“Document Type Definition”). ♦ Están en desarrollo otros lenguajes de definición de esquemas para XML: – XML-Schema. – XML-Data, etc. © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Parece HTML, pero es más ♦ HTML es un tipo concreto de estructura textual. ♦ HTML mezcla información estructural y de presentación. ♦ HTML tiene marcas sintácticas con un significado fijo. ♦ En XML el significado de las marcas puede cambiar. ♦ HTML “es” un caso particular de documento XML (XHTML). © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 129 Diferencias entre XML y SGML ♦ XML es un subconjunto de SGML concebido para aplicaciones en Internet. ♦ XML impone unas reglas léxicas y sintácticas más rígidas, “parsers” más sencillos: – – – – – No se pueden omitir las marcas de finales. Forma compacta para los elementos vacíos. No existe el operador [&]. Distingue entre mayúsculas y minúsculas. Los valores de atributo deben ir entre comillas, etc. © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Herramientas XML ♦ Herramientas de desarrollo (“parsers”): – Dirigidos por eventos (SAX). – Dirigidos por la estructura (DOM). ♦ Herramientas de autor: – Editores XML. – Editores de DTD y esquemas. © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 130 III.- SQL Server 2000 y XML © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Introducción ♦ ¿Cómo representar entidades de negocio con XML*? – Representar columnas de tabla en XML – Representar relaciones en XML ♦ ¿Cómo recuperar datos XML utilizando Transact-SQL – Utilidad: Intercambio de datos entre aplicaciones y socios corporativos (neutral a la plataforma, el SO y lenguajes progr.) *(eXtensible Markup Language) © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 131 ¿Cómo representar entidades de negocio con XML? BD Relacionales XML Entidades Tablas Documentos Instancia Fila Elemento Atributos Columnas Atributos, valores de elemento o subelementos © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV ¿Cómo representar entidades de negocio con XML? ♦ Representar columnas de tabla en XML – Ejemplo: Cliente ClienteID 1001 1002 Nombre German Rosa Teléfono 555 111222 555 222666 © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 132 ¿Cómo representar entidades de negocio con XML? ♦ Columnas de tabla en XML centradas en el atributo <Clientes> <Cliente ClienteID=‘1001’ Nombre=‘German’ Telefono=555 111222> <Cliente ClienteID=‘1002’ Nombre=‘Rosa’ Telefono=555 111666> </Clientes> © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV ¿Cómo representar entidades de negocio con XML? ♦ Columnas de tabla en XML centradas en el elemento <Clientes> <Cliente> <ClienteID>1001</ClienteID> <Nombre>German</Nombre> <Telefono>555 111222</Telefono> </Cliente> <Cliente> <ClienteID>1002</ClienteID> <Nombre>Rosa</Nombre> <Telefono>555 111666</Telefono> </Cliente> </Clientes> © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 133 ¿Cómo representar entidades de negocio con XML? ♦ Columnas de tabla en XML en modo mixto (centradas en el atributo, valor del elemento y subelemento) <Clientes> <Cliente ClienteID=‘1001’> German <Telefono>555 111222</Telefono> <Telefono>555 111333</Telefono> </Cliente> <Cliente ClienteID=‘1002’> Rosa <Telefono>555 111666</Telefono> </Cliente> </Clientes> © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV ¿Cómo representar relaciones entre entidades en XML? ♦ Ejemplo: Pedidos PedidoNo 1235 1236 Fecha 01/01/2002 01/01/2002 Cliente 1001 1002 PedidoNo 1235 1235 1236 ProductoID 1432 1678 1432 Elementos ElementoNo 1 2 3 Precio 12,99 11,48 12,99 Cantidad 2 1 3 © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 134 ¿Cómo representar relaciones entre entidades en XML? ♦ Utilizar un documento XML anidado: <Pedidos> <Pedido PedidoNo=‘1235’ Fecha=’01/01/2002’ Cliente=‘1001’> <Elemento ProductoID=‘1432’ Precio=’12.99’ Cantidad=‘2’/> <Elemento ProductoID=‘1678’ Precio=’11.48’ Cantidad=‘1’/> </Pedido> <Pedido PedidoNo=‘1236’ Fecha=’01/01/2002’ Cliente=‘1002’> <Elemento ProductoID=‘1432’ Precio=’12.99’ Cantidad=‘3’/> </Pedido> </Pedidos> © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV ♦ Utilizar un esquema. – Ejemplo: Catálogo de productos por categoría <Schema name=‘catalogschema’> xmlns=‘urn:schemas-microsoft-com:xml-data’ xmlns=dt=‘urn:schemas-microsoft-com:datatypes’> <ElementType name=‘Categoria’ model=‘closed’> <AttributeType name=‘CategoriaID’ dt:type=‘id’/> <AttributeType name=‘NombreCategoria’ dt:type=‘string’/> <attribute type=‘CategoriaID’ /> <attribute type=‘NombreCategoria’ /> </ElementType> <ElementType name=‘Producto’ model=‘closed’> <AttributeType name=‘ProductoID’ dt:type=‘i4’/> <AttributeType name=‘NombreProducto’ dt:type=‘string’/> <AttributeType name=‘Categoria’ dt:type=‘idref’/> <attribute type=‘ProductoID’ /> <attribute type=‘NombreProducto’ /> Enlace entre productos <attribute type=‘Categoria’ /> y categorías </ElementType> <ElementType name=‘Catalogo’ content=‘eltOnly’ model = ‘closed’> <element type=‘Categoria’ maxOccurs=‘*’/> <element type=‘Producto’ maxOccurs=‘*’/> </ElementType> </Schema> © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 135 ♦ Utilizando este esquema, podría representar los datos de catálogo utilizando el siguiente documento XML <Catalogo xmlns=‘x-schema:catalogschema.xml’> <Categoria CategoriaID=‘1’ NombreCategoria=‘Juegos’/> <Categoria CategoriaID=‘2’ NombreCategoria=‘Educación’/> <Producto ProductoID=‘131’ NombreProducto=‘TicTacToe’ Categoria=‘1’/> <Producto ProductoID=‘1678’ NombreProducto=‘Diccionario’ Categoria=‘2’/> </Catalogo> © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV ¿ Como recuperar datos XML utilizando Transact-SQL? ♦ La sentencia SELECT … FOR XML SELECT lista_selección FROM tabla_fuente WHERE condición_búsqueda FOR XML RAW | AUTO | EXPLICIT [ , XMLDATA ] [ , ELEMENTS ] [ , BINARY BASE64 ] © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 136 Consideraciones (1) ♦ El modo RAW siempre devuelven XML centrado en atributos ♦ El modo AUTO devuelven XML centrado en atributos y en elementos – No admite utilizar GROUP BY ni ninguna función de agrupación ♦ El modo EXPLICIT permite controlar la forma del doc. XML ♦ La opción XMLDATA devuelve un esquema reducido de datos ♦ La opción ELEMENTS + modo AUTO devuelve columnas como subelementos ♦ La opción BINARY BASE64 devuelve los datos binarios (ej. Imágenes) codificados en BASE64 © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Consideraciones (2) ♦ La cláusula FOR XML no puede utilizarse: – En subconsultas – Con COMPUTE BY – En vistas ni en funciones definidas por el usuario – En el interior de proc. almacenados o si estos son llamados desde una instrucción INSERT ♦ La cadena devuelta por una consulta SELECT ... FOR XML no es un documento XML completo – Hay que añadir un elemento raíz a la cadena © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 137 ¿ Como recuperar datos XML utilizando Transact-SQL? ♦ Ejemplo: SELECT OrderID, ProductID, UnitPrice, Quantity FROM [Order Details] WHERE OrderID = 10248 FOR XML RAW ♦ Resultado: <row OrderID="10248" ProductID="11" UnitPrice="14" Quantity="12"/> <row OrderID="10248" ProductID="42" UnitPrice="9.8" Quantity="10"/> <row OrderID="10248" ProductID="72" UnitPrice="34.8" Quantity="5"/> RAW: Un elemento XML por cada fila y un atributo por cada columna Las consultas en este modo siempre devuelven XML centrado en atributos! © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV ¿ Como recuperar datos XML utilizando Transact-SQL? ♦ Ejemplo: Utilizar alias para indicar nombres de atributo SELECT OrderID InvoiceNo, SUM(Quantity) TotalItems FROM [Order Details] WHERE OrderID = 10248 GROUP BY OrderId FOR XML RAW ♦ Resultado: <row InvoiceNo="10248" TotalItems="27"/> RAW: Un elemento XML por cada fila y un atributo por cada columna Las consultas en este modo siempre devuelven XML centrado en atributos! © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 138 ¿ Como recuperar datos XML utilizando Transact-SQL? ♦ Ejemplo: SELECT OrderID, CustomerID FROM [Orders] WHERE OrderID = 10248 FOR XML AUTO ♦ Resultado: <Orders OrderID="10248" ClientID=“VINET”/> AUTO: Un elemento XML (con el nombre de tabla) por cada fila. Las consultas en modo AUTO devuelven XML centrado en atributos y en elementos! © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV ¿ Como recuperar datos XML utilizando Transact-SQL? ♦ Ejemplo: Uniones en el Modo Auto SELECT Invoice.OrderId InvoiceNo, OrderDate, ProductID, UnitPrice Price, Quantity FROM Orders Invoice JOIN [Order Details] Item ON Invoice.OrderID = Item.OrderID WHERE Invoice.OrderID = 10248 FOR XML AUTO ♦ Resultado: <Invoice InvoiceNo="10248" OrderDate="1996-07-04T00:00:00"> <Item ProductID="11" Price="14.0000" Quantity="12"/> <Item ProductID="42" Price="9.8000" Quantity="10"/> <Item ProductID="72" Price="34.8000" Quantity="5"/> </Invoice> Se puede cambiar el nombre de los elementos y Documento XML anidado © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 139 ¿ Como recuperar datos XML utilizando Transact-SQL? ♦ El mismo ejemplo anterior con la opción (AUTO, ELEMENTS) produce resultados XML centrados en elementos: ♦ Resultado: <Invoice> <InvoiceNo>10248</InvoiceNo> <OrderDate>1996-0704T00:00:00</OrderDate> <Item> <ProductID>11</ProductID> <Price>14.0000</Price> <Quantity>12</Quantity> </Item> <Item> ... <Invoice> © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV ¿ Como recuperar datos XML utilizando Transact-SQL? ♦ Modo EXPLICIT – Las consultas en este modo definen fragmentos XML en términos de una tabla universal – Tabla Universal: una columna por cada dato y dos columnas adicionales (Tag, Parent) para definir metadatos del fragmento XML – Tag: identifica únicamente el elemento XML utilizado para representar cada fila en los resultados – Parent: Controla el anidamiento de los elementos – Cada fila de datos de la tabla universal representa un elemento en el documento XML resultante. © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 140 Modo EXPLICIT ♦ Considere una lista de clientes en el siguiente formato XML: <Item InvoiceNo=OrderID>ProductID</Item> <Item InvoiceNo=OrderID>ProductID</Item> ..... ♦ La tabla universal que representa este doc. es: Tag 1 1 ... Parent NULL NULL ... Item!1 ProductID ProductID ... Item!1!InvoiceNo OrderID OrderID ... Los elementos no tienen elemento padre © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Modo EXPLICIT ♦ ¿Como obtener la tabla universal a partir de los datos de la tabla Customers? SELECT 1 AS Tag, NULL AS Parent, ProductID AS [Item!1], OrderID AS [Item!1!InvoiceNo] FROM [Order Details] WHERE OrderID = 10248 FOR XML EXPLICIT ♦ Resultado: <Item InvoiceNo=“10248”>11</Item> <Item InvoiceNo=“10248”>42</Item> <Item InvoiceNo=“10248”>72</Item> © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 141 Práctica 13 ♦ Generación de documentos XML del caso práctico © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Práctica 13 Ejemplo: SELECT Fotografo.dni, nombre, direccion, nivel FROM Fotografo, exclusiva WHERE Fotografo.dni = exclusiva.fotografo ORDER BY Fotografo.dni FOR XML AUTO, ELEMENTS <RAIZ> <Fotografo> <dni>111122</dni><nombre>Joao</nombre><direccion>dfgdfg</direccion> <nivel>1</nivel> </Fotografo> <Fotografo> <dni>111122</dni><nombre>Joao</nombre><direccion>dfgdfg</direccion> <nivel>1</nivel> </Fotografo> </RAIZ> © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 142 Práctica 13 Ejemplo: SELECT Fotografo.dni, nombre, direccion, nivel FROM Fotografo, exclusiva WHERE Fotografo.dni = exclusiva.fotografo ORDER BY Fotografo.dni FOR XML AUTO, XMLDATA - <Schema name="Schema2" xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:datatypes"> - <ElementType name="Fotografo" content="empty" model="closed"> <AttributeType name="dni" dt:type="string" /> <AttributeType name="nombre" dt:type="string" /> </ElementType> </Schema> © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Utilizar HTTP para el acceso a datos Aplicación cliente / Navegador IIS http OLEDB Directorio Virtual+ Sqlisapi.dll SQL Server Para acceder a una BD através de una URL HTTP (http://mywebserver/mydatabase ♦ Las aplicaciones cliente pueden solicitar los datos: – – – – Enviando una consulta FOR XML como cadena de consulta en la URL Enviando una plantilla de consulta XML a la aplicación ISAPI Especificando una plantilla de consulta XML en un directorio virtual del servidor web Especificando un esquema XML en un directorio virtual del servidor web © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 143 Utilizar HTTP para el acceso a datos ♦ Publicar una base de datos a través de un directorio virtual de IIS (usando la herramienta Configurar la compatibilidad con SQL XML en IIS) – – – – Indicar un nombre y una ubicación para el directorio virtual Seguridad del directorio virtual Indicar el origen de datos Indicar las opciones de acceso a datos (consulta URL, plantilla, esquema) © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV Práctica 14 ♦ Acceso a datos utilizando consultas HTTP – Consultas de la BD vía URL © 2003, Silvia Abrahão y Oscar Pastor , DSIC-UPV 144