SQL Server 2000/5 - 获取活动或非活动数据库列表的脚本(系统除外)

时间:2009-01-28 09:36:56

标签: sql-server

我需要帮助来编写SQL 2005服务器上的所有数据库的脚本,并可能查看它们的活动(特别是上次活动的日期)。 我需要删除服务器上不活动的所有数据库。

4 个答案:

答案 0 :(得分:2)

执行此操作的最佳方法是在服务器上运行非常轻量级的探查器跟踪,并仅记录“审核登录”事件。让它运行一周/每月/无论如何,然后查看跟踪日志以查看当前正在使用的数据库。如果您运行查询,那么您将只看到正在使用的当前数据库,而不是上周/月使用的数据库。

答案 1 :(得分:1)

这是一个技巧:使用SQL Server动态管理视图来获取有关已使用哪些索引的数据。

此查询将为您提供每个数据库中最近使用的索引。如果没有使用索引,那么数据可能也没有被使用。

SELECT db.[name] AS DatabaseName
, (SELECT TOP 1 last_user_seek FROM sys.dm_db_index_usage_stats ix1 WHERE ix1.database_id = db.database_id ORDER BY last_user_seek DESC) AS last_user_seek
, (SELECT TOP 1 last_user_scan FROM sys.dm_db_index_usage_stats ix1 WHERE ix1.database_id = db.database_id ORDER BY last_user_scan DESC) AS last_user_scan
, (SELECT TOP 1 last_user_lookup FROM sys.dm_db_index_usage_stats ix1 WHERE ix1.database_id = db.database_id ORDER BY last_user_lookup DESC) AS last_user_lookup
, (SELECT TOP 1 last_user_update FROM sys.dm_db_index_usage_stats ix1 WHERE ix1.database_id = db.database_id ORDER BY last_user_update DESC) AS last_user_update
FROM sys.databases db
ORDER BY db.[name]

一个警告:如果您的维护计划设置为定期自动重新索引数据库,或者是第三方碎片整理程序,那么这些日期可能是人为的最近日期。

答案 2 :(得分:0)

你可以从

开始
select  name from sysdatabases
where sid <> 0x01

然后对返回的每个数据库名称执行sp_helpdb

答案 3 :(得分:0)

对活动数据库的查询可以按如下方式进行细化

SELECT  name
FROM    master..sysdatabases
WHERE   DATABASEPROPERTY(name, 'IsOffline') = 0 
AND     DATABASEPROPERTY(name, 'IsReadOnly') = 0
AND     DATABASEPROPERTY(name, 'IsDetached') = 0
AND     DATALENGTH(sid) > 1
ORDER BY name