【问题标题】:How to get last accessed date time of Azure database如何获取 Azure 数据库的上次访问日期时间
【发布时间】:2020-07-21 06:51:44
【问题描述】:

我正在尝试获取 Azure 服务器中每个数据库的上次访问日期和时间。到目前为止,我发现下面的查询为我们提供了最后一次访问:

'SELECT max(last_user_update) lastUpdate ,max(last_user_scan) as last_user_scan FROM sys.dm_db_index_usage_stats'

但是,这里的问题是,我必须对每个数据库运行此查询以确定最后一次访问。我没有找到直接在主数据库上运行单个查询的方法,可以满足我的需求。

我知道如果服务器重新启动,最后访问日期会被清除并重置。

任何帮助将不胜感激!

【问题讨论】:

  • "last access" - 除非您启用审核,否则 SQL Server 不会记录该数据 - 但即便如此,它也不是特别有用的信息。考虑诸如缓存和只读辅助文件之类的事情……如果数据库处于READ_ONLY ON 模式,则根本不会记录任何内容。
  • @Dai,已经考虑过这种情况。上面的查询给了我我需要的东西,但唯一的问题是,我必须为每个数据库打开一个新的查询编辑器并对那个数据库运行这个查询。我一直在寻找更好的方法
  • Azure SQL 的“服务器”实际上并不存在 - 它们只是共享一些安全 LOGIN 设置的数据库的逻辑分组。这就是USE 语句在 SSMS 中不起作用的原因。您可以通过 shell 脚本或 Linqpad 查询完成您所追求的目标,但不能通过单个 SSMS 查询完成,抱歉。
  • @Dai,我有这种感觉。谢谢回复。我打算试试 Shell-Script 看看能不能达到我需要的效果。

标签: sql sql-server azure azure-sql-database


【解决方案1】:

您可以做的是,使用SQLCMD 生成输出文件,然后使用 DOS Shell 将结果附加到文件中。您必须一个接一个地连接到另一个数据库并获取结果并附加到文件中。

如果仔细观察,首先 SQLCMD 创建输出文件 (>),随后的 SQLCMD 将附加到输出文件 (>>)。

SQLCMD -S ServerName -D DatabaseName1 -Q "SELECT max(last_user_update) lastUpdate 
,max(last_user_scan) as last_user_scan, DB_NAME() AS Database_Name FROM
 sys.dm_db_index_usage_stats" > c:\dev\userAccessDetails.txt #creates outputfile

SQLCMD -S ServerName -D DatabaseName1 -Q "SELECT max(last_user_update) lastUpdate 
,max(last_user_scan) as last_user_scan, DB_NAME() AS Database_Name FROM 
sys.dm_db_index_usage_stats" >> c:\dev\userAccessDetails.txt ##appends to output file

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-18
    • 1970-01-01
    • 2019-10-18
    • 1970-01-01
    • 1970-01-01
    • 2013-08-28
    • 1970-01-01
    相关资源
    最近更新 更多