您如何找到上次访问数据库的时间?

way*_*est 25 sql-server sql-server-2005

在SQL Server 2005中,您可以轻松确定某人查询数据库的最后时间.

Jam*_*len 24

SELECT
last_user_seek = MAX(last_user_seek),
last_user_scan = MAX(last_user_scan),
last_user_lookup = MAX(last_user_lookup),
last_user_update = MAX(last_user_update)
FROM
sys.dm_db_index_usage_stats
WHERE
[database_id] = DB_ID()
Run Code Online (Sandbox Code Playgroud)

使用此方法的一个警告是,每当您重新启动SQL Server时,DMV中的信息都将被清除并清空.


SQL*_*ood 12

扩展James Allen的答案:

SELECT d.name,
last_user_seek = MAX(last_user_seek),
last_user_scan = MAX(last_user_scan),
last_user_lookup = MAX(last_user_lookup),
last_user_update = MAX(last_user_update)
FROM sys.dm_db_index_usage_stats AS i
JOIN sys.databases AS d ON i.database_id=d.database_id
GROUP BY d.name
Run Code Online (Sandbox Code Playgroud)

如果您不希望每个数据库上下文生成结果并希望在结果集的开头包含数据库名称,请使用此修改版本.

  • 您也可以在没有 JOIN 的情况下执行此操作: SELECT DB_NAME(database_id)、last_user_seek = MAX(last_user_seek)、last_user_scan = MAX(last_user_scan)、last_user_lookup = MAX(last_user_lookup)、last_user_update = MAX(last_user_update) FROM sys.dm_db_index_usage_stats GROUP BY database_id ORDER BY DB_NAME(数据库 ID) (2认同)

STG*_*Gdb 6

MySQLtips找到了这个-对我有用

select d.name, x1 =
(select X1= max(bb.xx) 
from (
    select xx = max(last_user_seek) 
        where max(last_user_seek) is not null 
    union all 
    select xx = max(last_user_scan) 
        where max(last_user_scan) is not null 
    union all 
    select xx = max(last_user_lookup) 
        where max(last_user_lookup) is not null 
    union all 
        select xx = max(last_user_update) 
        where max(last_user_update) is not null) bb) 
FROM master.dbo.sysdatabases d 
left outer join 
sys.dm_db_index_usage_stats s 
on d.dbid= s.database_id 
group by d.name
Run Code Online (Sandbox Code Playgroud)


小智 5

刚刚看到这篇文章,就像今天被问到这个问题一样...好吧,被问到在一个有相当多的实例中未使用哪些数据库。\n因此,我将 Andrey Shvidky 的上述查询更改为写入临时表,然后选择结果,将已找到的任何内容与上次使用的最大日期进行比较,与 sys.databases\xe2\x80\xa6 中的任何剩余数据库理论是(和假设),这些最后都为 NULL使用日期,因此不会显示在主查询的结果中,因此是进一步调查以删除的候选者。

\n\n
SELECT UNPVT.[DataBase], \n       MaxLastUse = MAX(UNPVT.MaxLastUse)\n    INTO #tempdatabases\n   FROM\n    (\n       SELECT [DataBase], \n           last_user_seek, \n           last_user_scan, \n           last_user_lookup, \n           last_user_update\n      FROM\n    (\n        SELECT [DataBase] = DB.[name], \n               last_user_seek = MAX(IU.last_user_seek), \n               last_user_scan = MAX(IU.last_user_scan), \n               last_user_lookup = MAX(IU.last_user_lookup), \n               last_user_update = MAX(IU.last_user_update)\n        FROM sys.databases AS DB\n             INNER JOIN sys.dm_db_index_usage_stats AS IU ON IU.database_id = DB.database_id\n        GROUP BY DB.[name]\n    ) AS DBIU\n) AS P UNPIVOT(MaxLastUse FOR ColumnName IN(last_user_seek, \n                                            last_user_scan, \n                                            last_user_lookup, \n                                            last_user_update)) AS UNPVT\nGROUP BY UNPVT.[DataBase]\nHAVING MAX(UNPVT.MaxLastUse) IS NOT NULL\nORDER BY MAX(UNPVT.MaxLastUse) ASC;\nSELECT name, \n       create_date AS 'Created on', \n       'Not used since last instance start', \n(\n    SELECT create_date\n    FROM sys.databases\n    WHERE database_id = 2\n) AS 'Instance start date'\nFROM sys.databases\nWHERE database_id NOT IN(1, 2, 3, 4)\nAND name NOT IN\n(\n    SELECT [DataBase]\n    FROM #tempdatabases\n);\nDROP TABLE #tempdatabases;\n
Run Code Online (Sandbox Code Playgroud)\n


Ada*_*vis 0

这并不容易,但如果您打开 SQL Server 的日志记录功能,您可以使用软件检查日志,以发现最后一次查询的时间和内容。