2011-04-07 8 views
5

Tengo una base de datos con muchas tablas que se usan y muchas tablas que ya no se usan. Si bien podría ordenar manualmente cada tabla para ver si todavía están en uso, sería una tarea engorrosa. ¿Hay algún software/función oculta que pueda usarse en una base de datos de SQL Server/Oracle que arrojaría información como "Las tablas x, y, z no se han utilizado en el último mes"? Las tablas a, b, c se han usado 17 veces hoy "? ¿O posiblemente una forma de ordenar las tablas por "Fecha de última modificación/selección de"?¿Existe un "Cobertura de código" equivalente para bases de datos SQL?

¿O hay una manera mejor de hacer esto? Gracias

edit: Encontré una columna "modify_date" cuando ejecuté "SELECT * FROM sys.tables ORDER BY modify_date desc", pero parece que solo hace un seguimiento de las modificaciones a la estructura de la tabla, no a su contenido.

Respuesta

6

reemplazar spt_values con el nombre de tabla le interesa, la consulta dará la última vez que se utilizó y lo que fue utilizado por

A partir de aquí: Finding Out How Many Times A Table Is Being Used In Ad Hoc Or Procedure Calls In SQL Server 2005 And 2008

SELECT * FROM(SELECT COALESCE(OBJECT_NAME(s2.objectid),'Ad-Hoc') AS ProcName,execution_count, 
    (SELECT TOP 1 SUBSTRING(s2.TEXT,statement_start_offset/2+1 , 
     ((CASE WHEN statement_end_offset = -1 
     THEN (LEN(CONVERT(NVARCHAR(MAX),s2.TEXT)) * 2) 
     ELSE statement_end_offset END) - statement_start_offset)/2+1)) AS sql_statement, 
     last_execution_time 
FROM sys.dm_exec_query_stats AS s1 
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS s2) x 
WHERE sql_statement like '%spt_values%' -- replace here 
AND sql_statement NOT like 'SELECT * FROM(SELECT coalesce(object_name(s2.objectid)%' 
ORDER BY execution_count DESC 

que tener en cuenta si reinicia el recuadro, esto se borrará

+0

¿Este reinicio se desconecta/se vuelve a unir o se reinicia el servidor? – JNK

+0

Sí, si reinicia el cuadro, se reiniciará – SQLMenace

+0

Lo siento, pero no estoy seguro de entender lo que quiere decir al reiniciar el cuadro. ¿Reiniciar el servidor? – tom

0

Si usa el desencadenador puede detectar la inserción o eliminación de la actualización en la tabla.

El acceso es problably más difícil.

0

Utilizo una combinación de análisis estático en los metadatos para determinar las tablas/columnas que no tienen dependencias ni rastreos de tiempo de ejecución en SQL Server para ver qué actividad está sucediendo.

+0

¿Se puede obtener información precisa de dependencia entre bases de datos de esta manera? – JNK

+0

@JNK No: está restringido al límite DB. Lo mismo que con cualquier código de "cliente". Solo las huellas pueden decirle realmente si se puede intentar algo. –

+0

Para SQL Server 2008 'sys.sql_expression_dependencies' tiene columnas para bases de datos y nombres de servidores referenciados. –

0

Algunas consultas más que pueden ser útiles para usted.

select * from sys.dm_db_index_usage_stats 

select * from sys.dm_db_index_operational_stats(db_id(),NULL,NULL,NULL) 

select * from sys.sql_expression_dependencies /*SQL Server 2008 only*/ 

La diferencia betweeen lo que informan los 2 primeros DMV es explained well in this blog post.

1

En Oracle puede utilizar la ASH (Active historia de las sesiones) para encontrar información acerca de SQL que se utilizó. También puede realizar pruebas de cobertura de código con el generador de perfiles jerárquico, donde puede encontrar qué partes de los procedimientos almacenados se usan o no.

Si se pregunta acerca de las actualizaciones en los datos de la tabla, también puede usar DBA_TAB_MODIFICATIONS. Esto muestra cuántas inserciones, actualizaciones y eliminaciones se realizan en una tabla o partición de tabla. Tan pronto como se generan estadísticas de objetos nuevos, la fila de la tabla especificada se elimina de DBA_TAB_MODIFICATIONS. Todavía tiene ayuda aquí, ya que también puede echar un vistazo en el historial de estadísticas de la tabla. Esto no muestra nada sobre las tablas que solo se consultan. Si realmente necesita saber acerca de esto, debe usar la CENIZA.

Nota, tanto para ASH como para el acceso al historial de estadísticas, necesita la licencia del paquete de diagnóstico o ajuste. (normalmente querrías esto de todos modos).

0

La herramienta de código abierto de Ed Elliott, SQL Cover, es una buena opción y tiene soporte incorporado para la popular herramienta de pruebas unitarias, tSQLt.

Cuestiones relacionadas