martes, 25 de diciembre de 2012

SQL Server: Uso de directivas y condiciones para saber si hay tablas sin índice cluster

En el artículo "SQL Server: Cómo saber si hay tablas sin índice cluster en una base de datos" de la semana pasada (17 de diciembre) os indicaba la forma de localizar las tablas sin índice cluster mediante una consulta... en este artículo os explicaré la forma de hacerlo mediante el uso de directivas y condiciones, funcionalidad incorporada a partir de SQL Server 2008.

La mejor forma de verlo será con un ejemplo utilizando la base de datos AdventureWorks, los pasos a realizar serían los siguientes:
  1. Lo primero que haremos es lanzar la consulta que comentaba en el artículo del 17 de diciembre para comprobar si hay en la base de datos AdventureWorks tablas sin índice cluster definido, aparecen cuatro: DatabaseLog, ProductProductPhoto, Sales_Summary y SSIS Configurations.

    -- Buscar tablas sin índice cluster en base de datos
    SELECT OBJECT_NAME(OBJECT_ID) as TableName
    FROM SYS.INDEXES
    WHERE INDEX_ID = 0
    AND OBJECTPROPERTY(OBJECT_ID,'IsUserTable') = 1
    ORDER BY TableName
    

  2. Vamos a " Administración\Administración de directivas", pulsamos botón derecho sobre "Condiciones" y seleccionamos la opción "Nueva condición..."


  3. Generamos una condición (conCheckClusteredIndex) con las siguientes características:

    Nombre de la condición: conCheckClusteredIndex
    Faceta: Table (tabla)
    Campo: @HasClusterdIndex (tiene índice cluster)
    Operador: =
    Valor: True
    

  4. Generamos otra condición (conDatabaseName) que nos servirá para aplicar la directiva sobre una base de datos concreta, para ello informamos en la siguiente pantalla:

    Nombre de la condición: conDatabaseName
    Faceta: Database (base de datos)
    Campo: @Name (nombre de la base de datos)
    Operador: =
    Valor: 'AdventureWorks'
    

  5. A continuación creamos la directiva (dirCheckClusteredIndex). Pulsamos botón derecho sobre "Directivas" y seleccionamos la opción "Nueva directiva". Introducimos en la pantalla que aparece los siguientes datos:
    Nombre de la directiva: dirCheckClusteredIndex
    Condición comprobación (Check condition): conCheckClusteredIndex
    Para destinos (Against targets): Every Table in conDatabaseName Database
    Modo de evaluación (Evaluation Mode): A demanda (On Demand)
    

  6. Seleccionamos la directiva que acabamos de crear y pulsamos botón derecho del ratón sobre ella y seleccionamos la opción "Evaluar", nos aparece la siguiente pantalla donde se muestra que ha fallado la directiva para las 4 mismas tablas que se han comentado en el punto 1.


Ahora que hemos comprobado que la directiva funciona podríamos cambiar el modo de evaluación a "On Schedule" y crear un trabajo para que la compruebe periódicamente. Si queréis ver el uso del modo de evaluación "On Schedule" podéis leer el artículo Control proactivo del espacio disponible en BDs SQL Server 2008 donde encontraréis más detalles de todo el proceso (creación de la programación, trabajo, alerta, envío al operador...).

Lo normal sería que ahora os preguntarais ¿y mediante el uso de directivas y políticas puedo evitar que se creen tablas sin índice cluster? Porque hay un modo de evaluación de directivas que es "On Change: Prevent" (Al cambiar - Prevenir)... La respuesta es no ya que este modo de evaluación no es aplicable a la faceta "Tabla" (que hemos seleccionado en el paso 3), si fuera aplicable podría ser posible pero no es el caso. Sobre los distintos modos de evaluación y aplicabilidad a las distintas facetas hablaremos en otro artículo, tiene contenido y complejidad suficiente para ello.

Espero que el artículo os haya sido interesante, dentro de areaTIC puedes encontrar otros artículos, no dudes en consultar nuestro archivo; también puedes seguirnos por RSS o las principales redes sociales (twitter, facebook, linkedin...)


LECTURAS RELACIONADAS RECOMENDADAS POR AREATIC.NET

No hay comentarios:

Publicar un comentario