SQL Server 2000 y XML

Anuncio
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
Descargar