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

Sql server SQL Server 2000/5-获取活动或非活动数据库(系统数据库除外)列表的脚本,sql-server,Sql Server,我需要帮助为SQL 2005 server上的所有数据库编写脚本,并可能查看它们的活动(特别是上次活动的日期)。 我需要删除服务器上所有不活动的数据库。您可以从 select name from sysdatabases where sid <> 0x01 从sysdatabases中选择名称 其中sid 0x01 然后对返回的每个数据库名称执行 select name from sysdatabases where sid <> 0x01 从sysdataba

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

您可以从

select  name from sysdatabases
where sid <> 0x01
从sysdatabases中选择名称
其中sid 0x01
然后对返回的每个数据库名称执行

select  name from sysdatabases
where sid <> 0x01
从sysdatabases中选择名称
其中sid 0x01

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

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

最好的方法是在服务器上运行一个非常轻量级的探查器跟踪,只记录“审核登录”事件。让它运行一周/一个月/任何时间,然后查看跟踪日志以查看当前正在使用的数据库。如果运行查询,则只会看到当前使用的数据库,而不会看到上周/上月使用的数据库。

这里有一个技巧:使用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]

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

这里有一个技巧:使用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]

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

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

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

对活动数据库的查询可以细化如下

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

正如上面@cmsjr和@Mark Allison所建议的那样,我将选择这两个选项。实际上,我喜欢使用SQL Profiler获取非活动数据库列表的想法。我将设置配置文件并让它运行至少1周。ThanksI将采用@cmsjr和@Mark Allison建议的两种方法。实际上,我喜欢使用SQL Profiler获取非活动数据库列表的想法。我将设置配置文件并让它运行至少1周。谢谢