Published on

February 17, 2023

Identificación de objetos no válidos en SQL Server

Como administrador de bases de datos, una de tus responsabilidades clave es garantizar la integridad de la base de datos, el esquema y los datos almacenados en ella. Esto incluye identificar y solucionar cualquier objeto no válido o roto en la base de datos.

Un objeto no válido o roto en una base de datos se refiere a un objeto que hace referencia a otro objeto que ha sido renombrado o eliminado. Por ejemplo, si un procedimiento almacenado hace referencia a una tabla que ha sido eliminada o renombrada, el procedimiento almacenado se vuelve no válido o roto.

Es importante verificar regularmente los objetos no válidos en tu base de datos, especialmente después de implementar parches o scripts. Al identificar y solucionar proactivamente estos objetos, puedes mantener la estabilidad y confiabilidad de tu base de datos.

En este artículo, exploraremos cómo identificar y manejar objetos no válidos en SQL Server utilizando una demostración sencilla.

Configuración de la demostración

Para esta demostración, crearemos una base de datos llamada “HospitalManagement” con un esquema de muestra que contiene cinco tablas, dos procedimientos almacenados y una vista. Las tablas incluyen “Patients” (Pacientes), “Doctors” (Doctores), “Appointments” (Citas), “Medication” (Medicación) y “Medical_Records” (Registros Médicos). Los procedimientos almacenados son “sp_Get_Doctor_Patient” y “sp_Get_Patient_Medications”, y la vista es “vw_PatientData” (Datos del Paciente).

Para crear las tablas, puedes utilizar el siguiente script:

USE hospitalmanagement;
CREATE TABLE patients (
    patient_id INT PRIMARY KEY,
    first_name VARCHAR(50),
    last_name VARCHAR(50),
    date_of_birth DATE,
    address VARCHAR(100),
    phone_number VARCHAR(15),
    emergency_contact_name VARCHAR(50),
    emergency_contact_phone VARCHAR(15)
);
-- Crear otras tablas...

De manera similar, puedes crear los procedimientos almacenados y la vista utilizando los scripts proporcionados.

Encontrar objetos no válidos

En SQL Server, a diferencia de Oracle, no hay una tabla de metadatos específicamente diseñada para encontrar objetos no válidos. Sin embargo, podemos utilizar un script personalizado para identificar objetos de base de datos no válidos o rotos.

Para encontrar objetos no válidos, debemos determinar las dependencias de objetos del objeto de base de datos eliminado. Esto se puede lograr consultando las vistas del sistema “sys.sql_expression_dependencies” y “sys.all_objects”.

Aquí tienes un ejemplo de script que ayuda a identificar la lista de objetos no válidos:

SET NOCOUNT ON;

IF OBJECT_ID('tempdb.dbo.#invalid_db_objects') IS NOT NULL
    DROP TABLE #invalid_db_objects;

CREATE TABLE #invalid_db_objects (
    invalid_object_id INT PRIMARY KEY,
    invalid_obj_name NVARCHAR(1000),
    custom_error_message NVARCHAR(3000) NOT NULL,
    invalid_obj_type CHAR(2) NOT NULL
);

INSERT INTO #invalid_db_objects (invalid_object_id, invalid_obj_name, custom_error_message, invalid_obj_type)
SELECT
    cte.referencing_id,
    obj_name = QUOTENAME(SCHEMA_NAME(all_object.[schema_id])) + '.' + QUOTENAME(all_object.name),
    'Nombre de objeto no válido ''' + cte.obj_name + '''',
    all_object.[type]
FROM (
    SELECT
        sed.referencing_id,
        obj_name = COALESCE(sed.referenced_schema_name + '.', '') + sed.referenced_entity_name
    FROM sys.sql_expression_dependencies sed
    WHERE sed.is_ambiguous = 0
        AND sed.referenced_id IS NULL
) cte
JOIN sys.objects all_object ON cte.referencing_id = all_object.[object_id];

SELECT
    invalid_obj_name AS [Nombre de objeto no válido],
    custom_error_message AS [Mensaje de error],
    invalid_obj_type AS [Tipo de objeto]
FROM #invalid_db_objects;

Al ejecutar este script en tu base de datos, puedes obtener una lista de objetos no válidos o rotos.

Automatización del proceso

Para agilizar la identificación de objetos no válidos, puedes automatizar la ejecución del script utilizando trabajos de SQL Server Agent. Al programar evaluaciones regulares de la salida del script, puedes mantener proactivamente el esquema de tu base de datos eliminando o solucionando cualquier objeto no válido.

Verificar regularmente y solucionar objetos no válidos es una buena práctica que ayuda a garantizar la estabilidad y confiabilidad de tu base de datos de SQL Server.

Esperamos que este artículo te haya proporcionado información sobre cómo identificar y manejar objetos no válidos en una base de datos de SQL Server.

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.