Existe-t-il un moyen de trouver les bases de données SQL Server 2005 inutilisées ?
Je suis en train de mettre à niveau et de migrer mon serveur vers SQL Server 2008 x64 dans une nouvelle instance de serveur à partir de 2005 32 bit.
Existe-t-il un moyen de trouver les bases de données SQL Server 2005 inutilisées ?
Je suis en train de mettre à niveau et de migrer mon serveur vers SQL Server 2008 x64 dans une nouvelle instance de serveur à partir de 2005 32 bit.
Ce n'est pas une méthode infaillible. Voici quelques exemples qui me viennent à l'esprit.
Voir quelles bases de données ont peu de pages dans le pool de mémoire tampon.
select db.name, COUNT(*) As page_count
from sys.databases db LEFT JOIN sys.dm_os_buffer_descriptors bd ON db.database_id = bd.database_id
group by db.database_id, db.name
order by page_count
Ou regardez les statistiques d'utilisation des index pour chaque base de données.
SELECT db.name,
(SELECT MAX(T) AS last_access FROM (SELECT MAX(last_user_lookup) AS T UNION ALL SELECT MAX(last_user_seek) UNION ALL SELECT MAX(last_user_scan) UNION ALL SELECT MAX(last_user_update)) d) last_access
FROM sys.databases db
LEFT JOIN sys.dm_db_index_usage_stats iu ON db.database_id = iu.database_id
GROUP BY db.database_id, db.name
ORDER BY last_access
Vous pourriez également utiliser des déclencheurs de connexion pour enregistrer les accès en cours pendant une certaine période, juste pour être sûr que rien ne semble accéder aux bases de données "mortes" avant de les mettre hors ligne.
Avec SQL Server 2005, vous pouvez utiliser la vue de gestion dynamique sys.dm_db_index_usage_stats. Le nom dit "index" mais c'est un peu trompeur - chaque table a une entrée dans cette vue, même si elle n'a pas d'index. Voici une requête utile de SQL Magazine :
SELECT
t.name AS 'Table',
SUM(i.user_seeks + i.user_scans + i.user_lookups)
AS 'Total accesses',
SUM(i.user_seeks) AS 'Seeks',
SUM(i.user_scans) AS 'Scans',
SUM(i.user_lookups) AS 'Lookups'
FROM
sys.dm_db_index_usage_stats i RIGHT OUTER JOIN
sys.tables t ON (t.object_id = i.object_id)
GROUP BY
i.object_id,
t.name ORDER BY [Total accesses] DESC
Voici l'article original :
http://www.sqlmag.com/Article/ArticleID/53878/sql_server_53878.html
Gardez à l'esprit que ces statistiques d'utilisation sont réinitialisées lorsque le serveur SQL redémarre.
Combinez l'une ou l'autre de ces méthodes pour découvrir quelles bases de données sont toujours en service
liens de listage
select * from sys.dm_exec_connections
liste des processus actifs
select * from sys.sysprocesses
énumération des statistiques d'exécution
select DB_NAME(database_id),
max(isnull(isnull(last_user_scan, last_user_update),
isnull(last_user_seek, last_system_scan)))
from sys.dm_db_index_usage_stats
group by DB_NAME(database_id)
stockage des horodatages de LOGON
créer un TRIGGER DE LOGON et insérer le EVENTDATA le contenu dans un tableau pour une interrogation ultérieure, exemples aquí , aquí
Essayez ceci : si le last_access
est nulle, alors aucune lecture ou écriture n'a eu lieu :
WITH cte AS (
SELECT database_id, dt, op
FROM sys.dm_db_index_usage_stats
UNPIVOT (dt for op in (last_user_lookup, last_user_scan, last_user_seek, last_user_update)) b)
SELECT d.name DB, MAX(c.dt) last_access, MAX(i.sqlserver_start_time) sqlserver_start_time, GETUTCDATE() captured
FROM sys.databases d
LEFT JOIN cte c ON d.database_id=c.database_id
CROSS JOIN sys.dm_os_sys_info i
WHERE d.database_id>4
GROUP BY d.name
ORDER BY d.name;
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.