J'ai un certain nombre de bases de données sur plusieurs serveurs qui ne semblent plus être utilisés. J'aimerais laisser tomber ces bases de données, mais je suis incertain s'ils sont réellement utilisés.
Je ne trouve pas leurs propriétaires, il n'y a pas de processus qui leur sont liés, et rien n'a été écrit aux tables depuis quelques mois maintenant.
L'audit de connexion n'a pas été activé avant aujourd'hui.
Les versions de serveurs vont de 2005 à 2014, mais la plupart d'entre elles sont sur 2008 R2.
Existe-t-il un moyen de vérifier l'historique des connexions pour ces bases de données, de remonter 6 mois, d'une double vérification avec ces utilisateurs, avant de prendre les bases de données hors ligne?
J'ai une suggestion d'examiner l'historique d'utilisation de l'index; Quelqu'un est-il capable de partager un script pour cela?
I blogué à propos de i T exactement il y a un mois. Étant donné que les réponses de liaison seules sont découragées et coller ici tout le blog sera ridicule, voici un résumé de ce que vous trouverez là-bas.
Fondamentalement, vous devez enregistrer l'utilisation d'index dans une table utilisateur, afin de vous assurer que le serveur redémarrage et la maintenance d'index ne supprimez pas les entrées des bases de données qui vous intéressent.
Une deuxième méthode implique une utilisation d'index d'audit au moyen de streaming une session d'événements étendue qui capture les événements acquis de verrouillage. Cette méthode est particulièrement utile pour capturer des informations supplémentaires sur qui accède aux tableaux sans avoir à capturer des informations détaillées (audits et cibles de fichier XE serait trop verbeuse pour cette tâche).
J'espère que tu trouves cela utile.
Vous avez une suggestion sur la recherche de l'historique d'utilisation de l'index, tout le monde heureux de partager un script s'il vous plaît
Le script ci-dessous vous obtiendrait l'historique d'utilisation de l'index:
D'en bas, nous pouvons avoir une idée du nombre de recherches, de numérisations, de recherches et de mises à jour globales (insérer, mettre à jour et suppression) s'est produite.
DECLARE @dbid INT
--To get Datbase ID
SET @dbid = Db_id( )
SELECT
Db_name( d.database_id ) database_name
,Object_name( d.object_id ) object_name
,s.name index_name
,c.index_columns
,d.*
FROM
sys.dm_db_index_usage_stats d
INNER JOIN sys.indexes s
ON d.object_id=s.object_id
AND d.index_id=s.index_id
LEFT OUTER JOIN ( SELECT DISTINCT
object_id
,index_id
,Stuff( ( SELECT
','+Col_name( object_id, column_id ) AS 'data()'
FROM
sys.index_columns t2
WHERE t1.object_id=t2.object_id
AND t1.index_id=t2.index_id
FOR XML PATH ('') ), 1, 1, '' ) AS 'index_columns'
FROM
sys.index_columns t1 ) c
ON c.index_id=s.index_id
AND c.object_id=s.object_id
WHERE database_id=@dbid
AND Objectproperty( d.object_id, 'IsIndexable' )=1
ORDER BY
index_columns
,object_name
,( user_seeks+user_scans+user_lookups+system_seeks+system_scans+system_lookups ) DESC
-- To find index scans
SELECT
Db_name( d.database_id ) database_name
,Object_name( d.object_id ) object_name
,s.name index_name
,c.index_columns
,d.*
FROM
sys.dm_db_index_usage_stats d
INNER JOIN sys.indexes s
ON d.object_id=s.object_id
AND d.index_id=s.index_id
LEFT OUTER JOIN ( SELECT DISTINCT
object_id
,index_id
,Stuff( ( SELECT
','+Col_name( object_id, column_id ) AS 'data()'
FROM
sys.index_columns t2
WHERE t1.object_id=t2.object_id
AND t1.index_id=t2.index_id
FOR XML PATH ('') ), 1, 1, '' ) AS 'index_columns'
FROM
sys.index_columns t1 ) c
ON c.index_id=s.index_id
AND c.object_id=s.object_id
WHERE database_id=@dbid
AND Objectproperty( d.object_id, 'IsIndexable' )=1
AND ( d.user_scans+d.system_scans )>0
ORDER BY
d.user_scans+d.system_scans
--To find unused indexes
-- This query will give you details of unused indexes with details like object_name index_name,index_type , index columns .
-- We are considering only indexes so we are omitting index_type heap, clustered since it represents tables
SELECT
Object_name( i.object_id ) object_name
,i.name index_name
,i.index_id index_id
,i.type_desc type_desc
,c.index_columns
FROM
sys.indexes i
LEFT OUTER JOIN sys.dm_db_index_usage_stats d
ON d.object_id=i.object_id
AND i.index_id=d.index_id
AND d.database_id=@dbid
LEFT OUTER JOIN ( SELECT DISTINCT
object_id
,index_id
,Stuff( ( SELECT
','+Col_name( object_id, column_id ) AS 'data()'
FROM
sys.index_columns t2
WHERE t1.object_id=t2.object_id
AND t1.index_id=t2.index_id
FOR XML PATH ('') ), 1, 1, '' ) AS 'index_columns'
FROM
sys.index_columns t1 ) c
ON c.index_id=i.index_id
AND c.object_id=i.object_id
WHERE Objectproperty( i.object_id, 'IsIndexable' )=1
AND d.index_id IS NULL
AND i.type_desc NOT IN ( 'heap', 'clustered' )
-- To find only indexes which are only updated but not used in index seek, lookup or scan.
SELECT
Object_name( i.object_id ) object_name
,i.name index_name
,i.index_id index_id
,i.type_desc type_desc
,c.index_columns
,d.user_updates
,d.user_seeks
,d.user_scans
,d.user_lookups
,d.system_updates
,d.system_seeks
,d.system_scans
,d.system_lookups
FROM
sys.indexes i
INNER JOIN sys.dm_db_index_usage_stats d
ON d.object_id=i.object_id
AND i.index_id=d.index_id
AND d.database_id=@dbid
LEFT OUTER JOIN ( SELECT DISTINCT
object_id
,index_id
,Stuff( ( SELECT
','+Col_name( object_id, column_id ) AS 'data()'
FROM
sys.index_columns t2
WHERE t1.object_id=t2.object_id
AND t1.index_id=t2.index_id
FOR XML PATH ('') ), 1, 1, '' ) AS 'index_columns'
FROM
sys.index_columns t1 ) c
ON c.index_id=i.index_id
AND c.object_id=i.object_id
WHERE Objectproperty( i.object_id, 'IsIndexable' )=1
AND i.type_desc NOT IN ( 'heap', 'clustered' )
AND ( d.user_updates>0
OR d.system_updates>0 )
AND d.user_seeks=0
AND d.user_scans=0
AND d.user_lookups=0
AND d.system_seeks=0
AND d.system_scans=0
AND d.system_lookups=0
Remarque * Les valeurs de ces compteurs sont réinitialisées chaque fois que vous redémarrez SQL Server. De plus, les valeurs pour les données renvoyées par sys.dm_db_index_operational_stats
n'existe que tant que l'objet de cache de métadonnées qui représente le tas ou l'index est disponible.
De plus, ce que je préfère personnellement pour les situations ci-dessus, c'est utiliser sp_blitzindex pour analyser les informations d'utilisation de l'index. Veuillez passer par le lien mentionné comme cela simplifie le problème dans une large mesure.
Y a-t-il un moyen de vérifier l'historique des connexions pour ces bases de données, de remonter 6 mois, de vérifier avec ces utilisateurs, avant de prendre les bases de données hors ligne
Pour vérifier vos bases de données non utilisées. S'il vous plaît vérifier cet excellent article d'Aaron qui m'a beaucoup aidé avec 4 façons légères de dire si une base de données est utilisée