Unidad 5: SQL Server 2008 Database
Unidad 5: SQL Server 2008 Database
Unidad 5: SQL Server 2008 Database
Practica 1
Al ejecutar el anterior ejemplo solo creara 2
archivos en la dirección específica para los
archivos de bases de datos, que se configuro
durante la instalación de SQL Server.
La direccion de los archivos es la siguiente:
C:\Program Files\Microsoft SQLServer\
MSSQL10.MSSQLSERVER\MSSQL\DATA\SampleDB.mdf
C:\Program Files\Microsoft SQLServer\
MSSQL10.MSSQLSERVER\MSSQL\DATA\SampleDB_log.ldf
El primer archivo es el de los datos de base de
datos, y el segundo archivo es el archivo de
registro de transacción de la base de datos.
Primeros pasos
Es importante conocer todas las características y
las opciones que están disponibles, en esta
sección se explicaran el proceso de crear una
nueva base de datos en modo gráfico con todas
las opciones
Creando una nueva base de datos
Crear una base de datos
gráficamente con SQL Server
Management Studio es muy fácil e
intuitivo.
Practica 2
Hay dos maneras de recuperar información acerca
de bases de datos.
Practica 3
sp_helpdb resultados sin especificar un nombre
de base de datos
sp_helpdb resultados con un nombre de base de datos
Otra forma de ver la información de base de
datos es mediante el uso de las vistas de
catálogo, las cuales fueron introducidas en SQL
Server 2005.
Practica 4
Usando vistas de catálogo para recuperar información de
bases de datos.
Archivos de Base de Datos
En los archivos de base de datos en la sección del
cuadro de diálogo Nueva base de datos, se muestra
el nombre lógico del primer archivo de datos, así
como el nombre lógico para el primer archivo de
registro se han dado nombres de forma automática.
El primer archivo de datos tiene el mismo nombre
que la base de datos y el archivo de transacciones se
le da el nombre de la base de datos con _log añadido
al final. Los nombres lógicos se utilizan para referirse
a los archivos de programación en el script T-SQL.
Ejemplo
Haga clic en el botón Agregar en la parte inferior del
cuadro de diálogo Nueva base de datos. Una nueva
fila de un archivo adicional se agrega en la sección
archivos de base de datos. Los valores
predeterminados de archivo nuevos para el tipo de
archivo de los datos de filas, se pueden cambiar a
cualquiera de registro o de datos FILESTREAM
seleccionándolo en la lista desplegable. Una vez que
la base de datos se crea, el tipo del archivo no puede
ser cambiado.
Para este ejemplo, dejar el tipo de archivo
como Rows Data. Escriba un nombre lógico
para el nuevo archivo de datos y luego en la
columna de grupo de archivos, haga clic en la
lista desplegable y elija <new filegroup>.>. El
nuevo grupo de archivos muestra el cuadro
de diálogo, como se observa en la Figura.
FILEGROUPS
Las Bases de datos son creadas sobre archivos que se organizan
en grupos de archivos.
Practica 5
Otras Opciones
Por defecto la sección “otras opciones” en la
pantalla de una nueva base de datos organiza las
opciones de manera categórica. Para efectos de
este debate, vamos a ordenarlas opciones en
orden alfabético. Cuando este sea el caso, los
comandos para configurar la opción de nivel de
conexión y la opción de configuración de base de
datos se mostraran a la vez.
Practica 6
ANSI NULLS Enabled
La configuración ‘‘ANSI NULLS Enabled’’ controla el
comportamiento de las comparaciones con valores
NULL.
Cuando se establece en TRUE, cualquier
comparación para un valor NULL tiene como
resultado desconocido.
Cuando se establece en FALSE, las
comparaciones con NULL devolverá True si los
valores son nulos.
Para su instalación en el nivel de conexión o el
nivel de base de datos, se utilizan los siguientes
comandos…
Practica 7
ANSI Padding Enabled
Cuando se configure en TRUE, “ANSI Padding
Enabled” dicta que los espacios finales de los datos
de caracteres y los ceros finales para los datos
binarios se anexan al final de las columnas de
caracteres y valores binarios que son de longitud fija.
Las columnas de caracteres y binarios que son de
longitud variable no se rellenan, y los espacios finales
o ceros finales no se recortan. Cuando se establece
en FALSE, las columnas de caracteres y binarios que
son de longitud fija y un conjunto NOT NULL se
comportan de la misma forma que cuando ANSI
Padding Enabled es true.
Sin embargo, columnas con valores nulos de
caracteres y binarios que son de longitud fija no
se rellenan, y los espacios finales o ceros finales
se recortan.
Las Columnas de longitud variable se comportan
como columnas de longitud fija que aceptan
valores NULL cuando “ANSI Padding Enabled” es
FALSE.
Para su instalación en el nivel de conexión o el
nivel de base de datos, se utilizan los siguientes
comandos…
Practica 8
ANSI Warnings Enabled
Cuando “ANSI Warnings Enabled” se establece
en TRUE, las advertencias incrementaran en el
motor de la base de datos cada vez que una
función de agregado se encuentre con un valor
NULL. Cuando se establece en False, no se
emiten advertencias.
Para su instalación en el nivel de conexión o el
nivel de base de datos, se utilizan los siguientes
comandos…
Practica 9
Arithmetic Abort Eneabled
Cualquier declaración o transacción que se
encuentra con un desbordamiento aritmético o error
de división por cero terminará cuando la Arithmetic
Abort Enabled se establece en True.
Cuando se establece en False, una advertencia se
muestra, pero la declaración o la transacción no se
dará por terminado. Para que esta opción tenga el
efecto deseado,Arithmetic Abort Enabled se debe
establecer en False.
Para su instalación en el nivel de conexión o el nivel
de base de datos, se utilizan los siguientes
comandos…
Practica 10
Auto Close
Cuando una base de datos es accedida por primera vez,
SQL Server abre y cierra todos los archivos que están
asociados con la base de datos.
Cuando “Auto Close” es TRUE, la base de datos será
cerrada, liberando a todos los archivos de los bloqueos,
cuando el último usuario conectado cierra la conexión.
Esta opción está desactivada por defecto porque el acto
de apertura y cierre de la base de datos en una
plataforma de servidores innecesaria y produce gastos
innecesarios.
La propiedad se establece en OFF por default por el
hecho de abrir y cerrar una base de datos en una
plataforma de servidores es innecesario y produce
sobrecarga.
Para su instalación en el nivel de base de datos,
se utilizan los siguientes comandos…
Practica 11
Auto Create Statics
Cuando Auto Create Statistics está configurado en TRUE, el
motor de base de datos va a generar las estadísticas de las
columnas sin índices, y cuando las columnas hagan referencia a
una clausula WHERE, o la clausula ON a una operación JOIN.
Las estadísticas utilizan el motor de la base de datos para
determinar la selectividad y la distribución de datos en una
columna. Si se establece en FALSE, el administrador de la base
de datos deberá crear estadísticas manuales cada que las
necesite.
Para su instalación en el nivel de base de datos, se utilizan los
siguientes comandos…
Practica 12
Auto Shrink
Cuando Auto Shrink está configurado en TRUE, el motor de
la base de datos examinara periódicamente el tamaño de
todos los archivos de la base de datos y comparara la
cantidad de datos almacenados.
Si hay más de 25% total libre en el espacio restante, el motor
de la base de datos realizara operaciones para reducir los
ficheros en la base de datos para reducir a un total del 25 %
del espacio total, el motor, esta opción está establecida en
FALSE de manera predeterminada, a excepción de SQL
Server Express Edición.
Practica 13
Auto Update Statistics
Cuando Auto Update Statistics está configurado en
TRUE, el motor de la base de datos actualiza
automáticamente la información estadística sobre las
columnas para mantener los planes de consulta lo
más eficientes posibles.
Esto normalmente ocurre cuando una consulta es
ejecutada y el procesador de consultas descubre
estadísticas fuera de fecha.
Si se establece en False, el administrador de la base
de datos tendrá que mantener las estadísticas de las
columnas de manera manual, se utilizan los
siguientes comandos…
Practica 14
Auto Update Statistics
Asynchronously
Cuando Auto Update Statistics Asynchronously se
establece en TRUE, las estadísticas que se descubren
fuera de fecha serán actualizadas durante la consulta,
pero la consulta que se estaba ejecutando cuando se
descubrió no va a esperar las nuevas estadísticas.
Las consultas posteriores tomaran ventaja de las
nuevas estadísticas. Cuando se establece en FALSE,
la compilación de la consulta no se producirá hasta
después de que las estadísticas se actualicen.
Se utilizan los siguientes comandos…
Practica 15
Broker Enabled
Cuando Broker Enabled está establecido es
TRUE, la base de datos se configura para la
participación en un Sistema de Mensajería
Service Broker*.
Cuando esta opción es habilitada en una nueva
base de datos, un identificador de Service Broker
es creado y se conserva en la base de datos.
Si Service Broker está deshabilitado y luego se
vuelve a habilitar, el identificador original será
utilizado.
Practica 16
Close Cursor on Commit Enabled
Cuando Close Cursor on Commit Enabled está establecido en:
TRUE, los cursores contenidos en una transacción se cerraran
después de que la transacción sea confirmada o revertida.
False, los cursores permanecen abiertos una vez que se confirma
la transacción.
Practica 17
Concatenate Null Yields Null
Cuando una cadena de caracteres se vincula con un
NULL, este devolverá NULL cuando el
“Concatenate Null Yields Null” se encuentre en
TRUE. Cuando se encuentra en FALSE, una
cadena de caracteres se vincula con un NULL
devolverá la cadena de caracteres.
Practica 18
Cross-database Ownership Chaining
Enabled
El “Cross-database Ownership Chaining Enabled” la
opción no está bien definida en el dialogo de
opciones solo indica el valor que se establece.
Cuando se encuentra en True, indica que la base de
datos puede contribuir en Cross-database
Ownership Chaining Enabled.
Esta opción solo se reconoce si la opción del nivel
de servidor esta desactivado.
Para su instalación en el nivel de conexión o nivel de
base de datos, se utilizan los siguientes comandos…
Practica 19
DataBase Read-Only
La base de datos de sólo lectura es una opción que
especifica que no se admiten modificaciones a la
base de datos cuando este se encuentra en TRUE.
Un acceso exclusivo a la base de datos es
necesario para establecer esta opción, a excepción
de la base de datos master.
Para configurar en nivel de base de datos se usan
los siguientes comandos:
Practica 20
DataBase State
Los estados de la base de datos, de esta opción
no se puede configurar en la interfaz gráfica, y,
en su mayor parte, no es directamente
configurable en absoluto.
La alteración es el ONLINE, OFFLINE, y estados
de emergencia. Los estados de la base de datos
indican valores diferentes en función de lo que
está ocurriendo en la base de datos.
En la siguiente tabla se describen los diferentes
estados en los que puede estar la base de datos:
Estado Descripción
ONLINE La base de datos está en línea y disponible, también puede
mostrar estado NORMAL.
OFFLINE La base de datos no está disponible. La base de datos es
establecida OFFLINE cuando ejecutamos el comando ALTER
DATABASE <DBName> SET OFFLINE. Esto se puede dar
cuando el DBA necesite mover un archivo de la base de datos de
un lugar a otro.
RESTORING Uno o más archivos están siendo restablecidos. La base de datos
no está disponible.
RECOVERING La base de datos está siendo recuperada. Una excepción se da
cuando la base de datos esta espejeada.
RECOVERY Una base de datos estará en este estado si SQL encuentra algún
PENDING error durante el proceso de recuperación. La base de datos no
estará disponible hasta que el DBA resuelva el error.
SUSPECT Uno o más archivos de la base de datos son marcados como
sospechoso por acceso a datos o un error de lectura. Cuando la
base de datos esta en este estado, no estará disponible hasta que
se corrija el problema
EMERGENCY La base de datos estará en este estado cuando el DBA establezca
este estatus. En este estado, la base de datos está en modo usuario
único, y pueda ser reparada o restaurada, si la base de datos está
marcada como sospechosa, este es el primer paso para corregir el
problema.
Date Correlation Optimized
Enabled
Cuando “Date Correlation Optimization Enabled”
se encuentra en modo TRUE, indica que el motor
de la base de datos mantiene actualizadas sus
estadísticas entre dos tablas que se unen en la
columna datetime por una restricción de clave
externa para optimizar consultas entre las dos
tablas donde el campo datetime es un filtro.
Para configurar en nivel de base de datos, usar
los siguientes comandos…
Practica 21
Default Cursor
A diferencia de variables locales y globales, cuyo
alcance se basa en las conexiones, los cursores son
siempre locales con respeto a la conexión en la que se
declaran. Cuando “Default Cursor” se establece en
global, se especifica que un cursor declarado puede
hacer referencia a cualquier proceso por lotes,
procedimiento almacenado o desencadenador que se
ejecute en la misma conexión. Si se establece en modo
Local, el cursor sólo puede hacer referencia a un lugar
dentro del lote, de procedimiento almacenado, o
desencadenador en que se declaró el cursor.
Para su instalación en el nivel de base de datos, se
utilizan los siguientes comandos…
Practica 22
Encryption Enabled
Cuando “Encryption Enabled” se encuentra en
modo True, todos los datos y archivos de registro
serán encriptados. Si una clave de cifrado de
base aún no ha sido creada, al tratar de
establecer esta opción se producirá un error.
Para fijarlo en el nivel de base, se utilizan los
comandos siguientes…
Practica 23
Honor Broker Priority
La opción “Honor Broker Priority” no se puede
configurar en SQL Server Management Studio y
debe ser cambiado a través de script T-SQL.
Cuando esta opción está activada.
Para su instalación en el nivel de base de datos,
los comandos que se utilizan son los siguientes…
Practica 24
Numeric Roud-Abort
Cuando “Numeric Roud-Abort” se encuentra en
True, significa que por cualquier redondeo
numérico que se produce se generará un error.
Por ejemplo, si “Numeric Roud-Abort” se
establece en True, se genera un error como se
muestra en el siguiente código…
Practica 24.1
El error se produce porque la variable decimal
fue declarada con una escala de 3. Recuerde
que la escala especifica cuántos dígitos se
encuentran a la derecha del punto decimal. Para
realizar este cálculo, SQL Server debe redondear
el número.
Cuando“Numeric Roud-Abort” se encuentra en
False, este código tendrá éxito…
Practica 24.2
Para su instalación en el nivel de conexión o el
nivel de base de datos, los comandos se utilizan
los siguientes…
Practica 25
Page Verify
La opción “Page Verify” permite al administrador
de base de datos establecer diferentes opciones
para verificación de una página.
Las opciones disponibles son:
Checksum
TORN_PAGE_DETECTION
Ninguno
En cuanto al rendimiento, la mejor opción es
Ninguno. Sin embargo, con Ninguno, las páginas
pueden salir dañadas durante las operaciones de
escritura en disco y no podrán ser descubiertos.
Con la opción de comprobación, SQL Server
calcula un valor de suma de comprobación y lo
almacenan en el encabezado de página. Este
valor de la suma es muy parecida a la
comprobación de redundancia cíclica (CRC) los
valores que se crean cuando los archivos
se escriben en el disco por el sistema operativo.
Cuando una página lee los datos desde el disco,
SQL Server vuelve a calcular la suma de
comprobación y compararla con la almacenada en
el encabezado de página.
Si los valores coinciden, la página está bien.
Si los valores no coinciden, la página se considera
dañada, un error 823 se incrementará, y el estado de
la base de datos se cambia de LÍNEA a sospechar
La opción configura TORN_PAGE_DETECTION SQL
Server sirve para escribir un bit de error en el
encabezado de página al final de cada ciclo de
escritura. Si el error está ausente cuando la página se
lee más adelante, un error 823 se eleva, y el estado
de la base de datos se cambia de LÍNEA a sospechar.
Cuando SQL Server genera un error 823, un registro
se añadirá a la tabla suspect_pages en msdb base de
datos.
El registro incluye la base de datos en donde se
produjo el error en el ID de la página, ID de archivo, y
varios otros piezas de información que será útil para
restaurar la página de una copia de seguridad. Esta
tabla se actualizará cuando la página se restaura,
pero los registros no se eliminará.
Page Verify - Checksum
Con la opción “Cheksum”, SQL server calculara
el valor de la suma de verificación y lo guardara
en el encabezado de la página. Cuando la página
de datos es leída, SQL server recalculara la
suma de verificación y la comparara contra la que
se encuentra en el encabezado de la página.
Si los valores concuerdan, la página está bien. Si
los valores no concuerdan, la pagina es
considerada corrupta, un error 823 será lanzado,
y la base de datos pasara del estatus ONLINe a
SUSPECT.
Torn Page Detection
La opción “Torn_Page_Detection” configura SQL
server para escribir un bit de error en el
encabezado de la página al final de cada ciclo. Si
el bit de error está ausente cuando la página es
leída después, lanzara el error 823, y la base de
datos cambiara su estatus de ONLINE a
SUSPECT.
Practica 28.2
Cuando la opción “Quoted Identifiers” está
establecida en:
True los corches y comillas son aceptados;
False solo los delimitadores de corchetes, serán
aceptados.
Practica 30
Restrict Access
La opción “Restrict Access” opción permite al
administrador de base de datos restringir el acceso a
una base de datos o a un conjunto definido de inicios
de sesión. El valor predeterminado de esta opción es
MULTI_USER, que permite a múltiples usuarios sin
privilegios para acceder a la base de datos. Las
otras dos opciones existen para restringir el acceso:
SINGLE_USER and RESTRICTED_USER.
Cuando la opción “SINGLE USER” esta activada,
sólo una cuenta de usuario se permite el acceso a la
base de datos a la vez.
Cuando la Opción “RESTRICTED USER” está
habilitada, sólo los miembros de las funciones
db_owner,dbcreator o el administrador del
sistema, puede conectarse a la base de datos.
Para su instalación en el nivel de base de datos,
se utilizan los siguientes comandos:
Practica 31
Service Broker Identifier
La Opción “Service Broker Identifier” no es
configurable en el SQL Server Management
studio y no se puede establecer directamente.
El identificador de Service Broker se crea la
primera vez que se habilita la base de datos para
utilizar Service Broker y se utiliza para identificar
de forma únical a base de datos en una
infraestructura de mensajería.
Trustworthy
“Trustworthy” no puede ser establecido a través de SQL
Server Management Studio.
La opción “TRUSTWORTHY” indica si la instancia de SQL
Server confía en la base de datos para acceder a recursos
externos o de la red. Si se establece en False, no se les
permite el acceso a cualquier recurso externo a la base de
datos a los componentes de base de datos de
programación creado con código administrado, o los
componentes de base de datos que necesitan para
ejecutar en el contexto de un usuario con muchos
privilegios,
Cuando una de estas dos situaciones es requerida, la
opción “Trustworthy” puede ser establecida en True.
Para su configuración a nivel de base de datos,
se utilizan los siguientes comandos:
Practica 32
VarDecimal Storage Format Enabled
Esta característica fue introducida por primera
vez en el Service Pack 2 para SQL Server2005 y
ahora está en desuso en SQL Server 2008
Para SQL Server 2008, se enceuntra encendido
y no se puede apagar.
Generando Scripts de
Creación de Base de datos
Ahora que ha pasado por todos los pasos y las
opciones de creación de una base de datos,
vamos a echar un vistazo a cómo puede crear un
script.
En el borde superior de la pantalla se encuentra
un botón llamado “script”.
Al hacer clic en la flecha que se encuentra a un
lado, desplegara todas las opciones disponibles
para crear scripts. Este script puede ser usado
para para crear una nueva base de datos con las
mismas opciones simplemente cambiando el
nombre lógico y físico de la base de datos y los
archivos asociados.
El siguiente ejemplo muestra cómo utilizar SQL
dinámico para crear una nueva base de datos
con un grupo de archivos definido por el usuario
marcado como por defecto…
Practica 33
Schema(Esquema)
Un esquema es simplemente una manera de
organizar tus objetos de la base de datos y
asignar permisos a los objetos que contiene.
El esquema mismo puede ser propiedad de
cualquier entidad de la base de datos,
incluyendo funciones de la base de datos y
funciones de aplicación mientras se contienen
muchos objetos pertenecientes a varios
usuarios.
Dentro de un esquema, los objetos no pueden
tener nombres duplicados, pero pueden tener
el mismo nombre si pertenecen a un esquema
distinto.
Por ejemplo, si una tabla llamada “Inventory” es
creada en el esquema “Sales” en el servidor
“AughtEight” su nombre se volvería:
AughtEight.Sales.Inventory
AughtEight.Marketing.Inventory
Aunque esto sea posible no es recomendable
hacerlo ya que puede llevar a la confusión para
alguien nuevo a la base de datos y puede
producir resultados inesperados en las consultas
más adelante.
Donde los esquemas realmente se vuelven útiles
es en la capacidad de formar ámbitos de
seguridad que pueden ser usados por el DBA
para controlar el acceso a todos los objetos del
esquema.
En SQL Server 2008, una entidad de la base de
datos es asignada como propiedad de un
esquema, y dicho esquema posee los objetos que
la componen, tales como tablas, vistas,
procedimientos almacenados y funciones.
Si un usuario que posee un esquema
necesita ser eliminado, la propiedad de ese
esquema necesita ser asignado a otro usuario
primero.
La manera más fácil es hacer que el usuario
dbo posea todos los esquemas.
El usuario dbo es un usuario incluido que se
le asigna a cualquier miembro del papel de
servidor fijo sysadmin.
El usuario dbo siempre existe y no puede ser
eliminado, así que es el candidato para
asignarle la propiedad del esquema.
Esquemas y resolución de nombres
Como los esquemas solamente son
contenedores para objetos, es importante
establecer el contexto de las referencias de
objeto cuando llaman a objetos de la base de
datos.
Cada usuario tiene un esquema
predeterminado.
Cuando el usuario se loguea en el servidor y
manda llamar objetos de la base de datos, el
esquema por defecto jugará un papel distinto
en cómo los objetos deben ser referenciados.
Por ejemplo, suponga que el usuario FredF
es creado en la base de datos
AdventureWorks2008 y se le asigna como
esquema por defecto de Sales.
AdventureWorks2008.Sales.CreditCard
Si el mismo usuario ejecuta la consulta
Ejemplo:
USE AdventureWorks2008
GO
CREATE SCHEMA Operations AUTHORIZATION dbo
Practica 33.2
Cualquier declaración en el ámbito del
esquema que siga después de la declaración
CREATE SCHEMA caerá dentro del alcance
del esquema recién creado, como en el
siguiente ejemplo…
Practica 33.3
Incluso aunque el esquema no fue especificado en la
declaración CREATE TABLE, el script coloca la tabla
DeliveryDriver dentro del esquema Operations.
con este transfiere el control del objeto para poder eliminar el esquema
con la consulta de arriba
Si el objeto de un esquema sigue siendo requerido, puede
ser transferido a un esquema diferente con la sentencia
ALTER SCHEMA:
Practica 34
Tablas
SQL Server 2008, como todos los sistemas
administradores de bases de datos relacionales,
almacena la información en objetos llamados tablas.
Practica 35
Cada columna está ahora ordenada y se puede
consultar utilizando la configuración de cotejamiento
del idioma nativo como se definió en los
requerimientos del negocio.
Practica 36
Particiones de tablas
SQL Server físicamente almacena todas las páginas de
datos en unidades lógicas llamadas particiones.
A menos que se separen específicamente, las tablas
son almacenadas en una sola partición definida en un
solo grupo de archivos (filegroup).
Sin embargo, SQL Server proporciona la posibilidad
para separar tablas grandes en unidades más
pequeñas y manejables mediante la partición horizontal
de las tablas a través de múltiples archivos gestionados
por las definiciones de grupos de archivos.
La característica de particionar las tablas está
disponible solamente en las ediciones Enterprise y
Developer de SQL Server 2008.
Por ejemplo, una tabla de transacciones con
millones de filas puede ser físicamente
particionadas de manera que todas las
transacciones para el año en curso son
separadas de aquellas de año anteriores. De
esta forma, solo un subconjunto de la tabla
necesitará ser escaneada para consultar, insertar
o actualizar las transacciones para el año
presente.
Practica 37
Para poblar la tabla recién creada, inserta todas las
filas de las tablas TransactionHistory y
TransactionHistoryArchive usando el operador
UNION:
Practica 38
Ahora que ya tenemos una tabla de buen tamaño,
ejecuta la siguiente consulta para ver el rendimiento
antes de la partición. La tabla contiene un total de
202,696 filas. De las filas de transacciones en la tabla,
12,711 tomaron lugar en el año 2001, 38,300 en 2002,
81,086 en 2003 y 70,599 tomaron lugar en 2004.
Practica 39
El script utiliza el comando DBCC DROPCLEANBUFFERS
para limpiar todas las páginas del buffer caché. Esto nos
permitirá ver cuántas lecturas son requeridas físicamente
para traer toda la información necesaria a la memoria.
También activa el reporteo de estadísticas con la opción
SET STATISTICS IO ON y luego consulta la tabla
dbo.Transaction para regresar el total del monto de ventas
y la cantidad de productos vendidos en 2002.
TotalQuantity TotalCost
------------- ---------------------
1472494 16427929.3028
(1 row(s) affected)
Table ‘Transactions’. Scan count 1, logical reads 1408, physical reads 26, readahead
reads 1407, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Como se puede apreciar, para satisfacer la consulta,
SQL Server tuvo que escanear la tabla. Para
encontrar las 38,800 filas que satisfacen el criterio de
la cláusula WHERE, SQL Server tuvo que buscar a
través de 202,696 filas. Esta búsqueda resultó en
1,408 lecturas físicas.
Ahora vamos a ver qué pasa cuando dividimos
físicamente la tabla en múltiples archivos partiendo la
tabla de tal manera que todas las transacciones sean
divididas por año.
En este caso se ha decidido perticionar físicamente la
tabla Transaction después de haber sido construida.
Desde que la información es almacenada en el
montón, estamos forzados a crear una nueva tabla
particionada y mover la información a ella, y luego
eliminar la tabla original.
El primer paso en la partición de la tabla es la creación de los
grupos de archivos que mantendrán los archivos de datos para ser
usados para almacenar las particiones de la tabla.
P45.txt
Indices Filtrados
P46.txt
Índices Jerárquicos
Como vimos en el capítulo 4, HierarchiID es un tipo
de dato nuevo que fue introducido en SQL
Server2008. Los índices pueden ser construidos en
las columnas de este nuevo tipo de dato utilizando
dos enfoques diferentes: breadth-first and depth-
first.
Índices Breadth-First
Mantiene agrupados todos los registros que
se encuentran dentro del mismo nivel. Esto
le permite a SQL responder de forma rápida
a las consultas.
En el código siguiente se crea un índice de
prioridad a la amplitud de una tabla de
empleados:
P47.txt
Indices Depth-First
Mantienen todos los registros agrupados juntos para una
cadena. Esto permite que SQL Server responda a las
consultas que están en busca de una jerarquía de una
forma rápida.
Para poder crear un índice de profundidad, lo que
tenemos que hacer es crear un índice en la columna
HierarchyID.
El siguiente código crea in índice de profundidad en la
tabla de empleados:
P48.txt
Indices Espaciales
(Spatial Indexes)
SQL Server tiene incluido un soporte para los datos
especiales a través de dos nuevos tipos de datos CLR:
geometry y geography.
La red de cada nivel puede ser configurada para ser una 4*4, 4*8, 8*16
o 16*16 red de celdas .
P53.txt
Una división de página se produce inmediatamente,
esto es porque no existe espacio en la página para
un nuevo registro. Para mantener un orden en las
filas lo que hace SQL es dividir en 113 páginas y
mueve aproximadamente el 50% de las filas a una
nueva página no asignada. Fig.
Como resultado de esta página dividida, cuando
SQL lee la paginas de datos para recuperar el
contenido de la tabla Slate.Employee este cambia
de grado 72 en la grado 119, y después vuelve a
cambiar al grado 72 para así poder continuar con la
exploración de fila.
Las divisiones de páginas causan fragmentación. La
fragmentación de los índices puede llegar a causar
que SQL realice un número excesivo de lecturas
para la recuperación de los datos, y esto resulta un
bajo rendimiento de consultas.
Para poder comprobar la fragmentación en todos los
índices de una tabla o en indices específicos,
podemos utilizar la función
sys.dm_bd_index_physcal_stats.
Esta función nos puede devolver gran cantidad de
información índices que existen en una tabla,
incluyendo la cantidad de datos en cada página, la
fragmentación, el tamaño medio de los registros de
un índice.
El nivel de fragmentación nos permite conocer los
índices que deben ser reconstruidos y que el
porcentaje medio del espacio de cada pagina y
nos dice que tan pronto es posible realizar más
divisiones de páginas. Para poder consultar la
vista de administración dinámica
sys.dm_db_index_physcal_stats usamos la
siguiente sintaxis:
P54.txt
La función sys.dm_db_index_physcal_stats requiere
de cinco parámetros que se le pasan cuando se
recupera la información del índice, en la siguiente
tabla se describen los parámetros:
Para practicar el mantenimiento de índices, ejecutaremos
el siguiente comando para crear la tabla MyPersons, la
cual usaremos en los siguientes ejemplos:
P55.txt
Para poder consultar la vista
sys.dm_db_index_physical_stats y devolver todos los
datos posibles en relación de la tabla de MyPersons
ejecutamos la siguiente consulta:
P56.txt
La ejecución de esta consulta devuelve más
información que la generalmente es necesitada, ya
que lo que realmente nos interesa es la
fragmentación del nivel de hoja del índice y el
porcentaje ocupado de las páginas de datos. Se
puede limitar la cantidad de datos devuelta
P58.txt
La consulta de la vista de administración dinámica
sys.dm_db_index_physical_stats ahora nos
devuelve datos interesantes
P59.txt
Casi es 97% del tiempo cuando SQL estaba leyendo las
páginas de datos, la siguiente página física no fue la
siguiente pagina lógica, esto debido a que se añadieron filas
a la tabla MyPersons, aparte de la fragmentación las páginas
de datos tiene ahora solo el 59% de su capacidad.
P60.txt
Muchos de los comandos DBCC van más allá de la
comprobación de coherencia de datos, es por eso
que DBCC se puede utilizar como un acrónimo para
la consola de comandos de la base de datos.
P61.txt
Reconstruyendo índices
Cuando un índice es reconstruido con el comando
ALTER INDEX, SQL Server en realidad descarta y
vuelve a crear el índice al igual que el comando
CREATE INDEX.
P62.txt
Reorganización de índices
La reorganización de índices consume la menor
cantidad de recursos del sistema, pero no como un
trabajo a fondo sino como una reconstrucción del
índice.
P63.txt
El siguiente ejemplo también se crea una
restricción de clave principal en el comando
CREATE TABLE, pero lo hace como parte de la
definición de la tabla al final de todas las
definiciones de columna:
P64.txt
En ambos casos, la palabra clave CONSTRAINT y
el nombre de la restricción son opcionales. Si el
nombre se omite, SQL Server asigna un nombre
generado por el sistema.
Se recomienda proporcionar un nombre para
todas las restricciones ya que es lo que se
mostrará dentro de SQL Server Management
Studio y en cualquier mensaje de error generado
por SQL Server, y un nombre más amistoso podría
ser útil.
El nombre que se elija debe ser único dentro del
esquema que contiene la tabla.
El último ejemplo muestra cómo agregar una
restricción de clave principal a una tabla ya
existente mediante el comando ALTER TABLE:
P65.txt
Además, recuerde que si la palabra clave
NONCLUSTERED se omite, SQL Server crea un
índice agrupado para exigir la clave si no está
definido.
P67.txt
Restricciones foreign key (Restricciones de llaves foraneas)
P68.txt
Para crear una restricción de clave externa con las
herramientas de gráficos, expanda la tabla
DriverRecord en el Explorador de objetos.
P69.txt
WITH NOCHECK
P70.txt
Restricciones en cascada
P71.txt
Aquí se borra todo lo que tiene “llave primaria”
ON UPDATE CASCADE
P72.txt
Aquí en vez de borrar se actualiza
ON DELETE SET NULL
P73.txt
Borra las columnas que tengan en referencia la
llave foranea
ON UPDATE SET NULL
P74.txt
No actualiza el dato lo pone null
ON DELETE SET DEFAULT
Cuando un registro padre es eliminado, el valor
correspondiente al hijo clave se fijará en el valor
especificado por cualquier restricción por defecto definida
en esa columna.
P75.txt
ON UPDATE SET DEFAULT
P78.txt
Diagramas de Base de Datos
Una vez que la base de datos y sus objetos han sido creados, a
menudo es conveniente ser capaz de crear diagramas entidad
relación que están vinculados a las estructuras subyacentes.
Ellos son muy similares a las tablas que hacen referencia, excepto
que son, por default, los objetos lógicos y los objetos no físicos.
P79.txt
Observe que la consulta devuelve 606 filas de la
base de datos AdventureWorksDW sin tener que
calificar el nombre del objeto, como el siguiente
ejemplo:
P80.txt
P83.txt
Usted debe obtener dos registros que se asemejan
a la figura (por supuesto, su LoginName y
EventTime pueden variar).
P84.txt
El código anterior es únicamente con fines
demostrativos y no funcionará ya que no existe un
procedimiento almacenado llamado
usp_AddCustomers en la base de datos
AdventureWorks.
P85.txt
Reglas
Las reglas, como por default, han quedado en
des uso. Una regla es como una restricción de
comprobación. Sin embargo, se creará una vez en
el nivel de base de datos y ligado a cualquier
columna que coincida con el tipo de datos
especificado.
P86.txt
Resumen
En este capítulo se ha cubierto una gran cantidad de información, y
apenas hemos arañado la superficie. Un libro entero se podría escribir
con tan sólo la base de datos de SQL Server y todas las características
que incluye, sin embargo, esto no es ese libro.