Cómo borrar de manera segura objetos de bases de datos SQL

Cuando se trata de borrar un objeto de la base de datos el cual tiene un objeto que depende de él, no se pueden causar problemas dado que no se permitirá borrarlo:

Drop failed for Table ‘HumanResources.Employee’. (Microsoft.SqlServer.Smo)
Could not drop object ‘HumanResources.Employee’ because it is referenced by a FOREIGN KEY constraint.

La situación es completamente diferente cuando un objeto de la base de datos que depende de otros objetos es borrado. No habrá mensajes de advertencia. Los problemas pueden aparecer después, cuando se nota que el objeto especificado es realmente aún necesario; no hubiera sido borrado si se hubiese sabido que era dependiente en otros objetos de la base de datos, o que aún es usado en bases de datos externas u otros proyectos.

Para estar seguros de que no se romperán referencias cuando se borre un objeto de la base de datos, verifique si hay otros objetos que dependen del que será borrado, y si hay alguno del que depende.

Para ver las dependencias del objeto:

  1. Abra SQL Server Management Studio
  2. Haga clic derecho en el objeto que va a aser borrado y selecione la opción Delete desde la lista desplegable:

  3. En el diálogo Delete object, haga clic en el botón Show dependencies:

  4. Revise la lista de objetos que dependen del objeto seleccionado y los objetos de los cuales él depende:

Las fallas de este método son:

  • La tabla sysobjects contiene la lista de todos los objetos en su base de datos:
  • No muestra todas las dependencias – como las referencias a los objetos en servidores enlazados.
  • No muestra si el objeto es usado en cualquier proyecto.

Otro método es analizar las tablas del sistema de SQL Server en la base de datos master:

  1. La tabla sysobjects contiene la lista de todos los objetos en su base de datos:
  2. La tabla sysdepends contiene la información de dependencia entre los objetos en la base de datos (vistas, procedimientos y desencadenadores) y los objetos que están contenidos en su definición (tablas, vistas y procedimientos).
    O use los procedimientos almacenados:
  3. Use el procedimiento almacenado sp_depends – muestra la información acerca de las dependencias de objetos de la base de datos. La mayor falla es que las referencias a objetos en bases de datos externas no son reportadas.
  4. Para SQL Server 2008 y posteriores, use los procedimientos almacenados sys.dm_sql_referencing_entities, sys.dm_sql_referenced_entities y sys.sql_expression_dependencies. Ellos retornan información para cada entidad en la base de datos actual que referencia otra entidad definida por el usuario por nombre, cada entidad definida por el usuario referenciada por nombre en la definición de la entidad de referencia especificada y cada dependencia por nombre en una entidad definida por el usuario en la base de datos actual, respectivamente.

Las fallas son de nuevo las mismas – no todas las dependencias son mostradas y consume tiempo.

ApexSQL Clean puede ayudar a determinar todas las dependencias en una base de datos, las dependencias con objetos en una base de datos externa o proyectos .NET, Delphi, C++ y ASP. También analiza las dependencias de los objetos de la base de datos SQL, así como el impacto de los cambios potenciales y eliminaciones en su base de datos SQL, y determina las interrelaciones de objetos dentro de la base de datos, entre diferentes bases de datos, scripts e incluso aplicaciones.

Para encontrar todas las dependencias para un objeto:

  1. Corra ApexSQL Clean
  2. En la ventana Main, haga clic en el botón New.
  3. Seleccione la base de datos SQL a la que desea conectarse.
  4. Si hay alguna base de datos externa que necesita ser analizada durante el proceso, cambie a la pestaña External databases y seleccione las bases de datos externas.
  5. Use Object filter para limitar el número de tipos de objetos a ser analizados, lo cual puede acelerar el proceso significativamente:

  6. Cuando todo esté establecido, haga clic en el botón OK.

    El estado referencial y la información del objeto será mostrada en la cuadrícula Results. Los objetos no referenciados serán marcados con un signo de verificación en la columna Unreferenced. Sólo estos objetos pueden ser borrados de la base de datos de manera segura:

     

  7. Use Object filter en el panel izquierdo para remover los tipos de objetos que no serán analizados.
  8. En la cuadrícula principal, seleccione los objetos que serán borrados.
  9. Haga clic en la opción Create drop script de la pestaña Home en el grupo Actions:

  10. Para ejecutar el script desde el editor de scripts, haga clic en Execute o presione F5.

Si una base de datos necesita ser limpiada y los objetos que no se necesitan deben ser removidos, ApexSQL Clean se asegura que ninguna dependencia sea rota.

Traductor: Daniel Calbimonte

diciembre 24, 2016