Últimas entradas

Ultima ejecución de procedimientos almacenados en bases de datos SQL Server

Debido a diferentes razones en nuestras bases datos, para este caso SQL Server, se acumulan procedimientos almacenados que quedan en desuso, lo cual se traduce a su vez en riesgos de seguridad y problemas de control de código, por lo que debemos identificar cuáles son los procedimientos almacenados que no están siendo utilizados por nuestras aplicaciones.

La siguiente consulta nos muestra la fecha de ultima ejecución de un procedimiento almacenado.

USE MASTER;
GO

IF OBJECT_ID('tempdb..#temp') IS NOT NULL 
      DROP TABLE #temp;
      CREATE TABLE #temp ([database_name] NVARCHAR(255), [procedure_name] NVARCHAR(255), last_execution_time DATETIME);

EXEC sp_MSForEachDB '   
      USE [?];

      IF ''[?]'' NOT IN (''[master]'', ''[model]'', ''[msdb]'', ''[tempdb]'')
      BEGIN
            INSERT INTO #temp
                  SELECT
                        ''[?]''
                        ,p.name
                        ,last_execution_time
                  FROM sys.procedures AS p
                  LEFT OUTER JOIN sys.dm_exec_procedure_stats AS s
                  ON    p.[object_id] = s.[object_id]
                  WHERE SUBSTRING(p.name,1,3) not in (''dt_'',''sp_'')
                  ORDER BY  p.name, s.last_execution_time;
      END';

SELECT
   [database_name]
   ,[procedure_name]
   ,[last_execution_time]
FROM #temp;

IF OBJECT_ID('tempdb..#temp') IS NOT NULL 
      DROP TABLE #temp;
GO 

La consulta itera en todas las bases de datos de la instancia en la cual se ejecute excluyendo las bases de datos del sistema, buscando la fecha de la última ejecución de los procedimientos almacenados de estas en la vista de administración dinámica sys.dm_exec_procedure_stats, excluyendo los procedimientos almacenados que tengan los prefijos dt_ (utilizados para soportar los diagramas de bases de datos) y sp_ (considerado una mala práctica por razones que todos conocemos) en sus nombres.

Agregue un comentario

Su dirección de correo no se hará público. Los campos requeridos están marcados *