查看旧会话的详细信息

Spr*_*tty 7 sql-server sql-server-2012

有没有办法查看过去的会议细节(我完全希望答案是“否”)。我试图找出某个应用程序在哪个服务器上运行,该应用程序访问某个数据库。我知道该应用程序在周五晚上的某个时间运行,所以我希望 SQL Server 维护会话历史记录,以便我可以查找相关时间sp_who的详细信息。

就像我说的,我不希望这是可能的,但现在我绝对是在抓着稻草。

提前致谢。

编辑:我最终通过其他方式找到了有问题的服务器;该作业执行了一条 SQL 语句来创建一个文件,然后将该文件通过 FTPd 传输到另一个站点 - 该站点具有 FTP 日志记录,可以为我提供源服务器的名称和 IP 地址。感谢您的回答 - 我只希望我能接受他们,因为他们都提出了很好的观点并提供了很好的建议。

Aar*_*and 8

不,SQL Server 不会保留会话活动的历史记录,想象一下它会增长多快!正如您的问题所问,我认为,您从过去检索此信息的唯一希望是:

  1. 应用程序做了一些记录在默认跟踪中的事情(并且这些事件没有消失);
  2. 应用程序可能生成的错误清楚地表明它连接到的服务器最终出现在应用程序机器的事件日志中;或者,
  3. 应用程序可能生成的错误(如死锁、I/O 警告或登录失败)已在 SQL Server 错误日志或system_health session 中捕获。

现在,正如评论中提到的,您当然可以设置一些东西来在将来捕获此活动,因此您不必在应用程序运行时等待反复敲击 F5。您可以使用多种方式,甚至组合使用,具体取决于您是否只关心连接、只关心写入活动、只关心对特定表或数据库的访问等:


Geo*_*e K 5

除非您配置了第三方监控工具或某种其他类型的活动收集器,否则您不能这样做。如本答案所述,您可能会在以下内容中找到有用的信息plan cache

SELECT t.[text], s.last_execution_time
FROM sys.dm_exec_cached_plans AS p
INNER JOIN sys.dm_exec_query_stats AS s
   ON p.plan_handle = s.plan_handle
CROSS APPLY sys.dm_exec_sql_text(p.plan_handle) AS t
WHERE t.[text] LIKE N'%something unique about your query%'
ORDER BY s.last_execution_time DESC;
Run Code Online (Sandbox Code Playgroud)

但您似乎正在寻找其他信息。

对于未来,您绝对应该考虑使用一些工具SSMS Tools Pack(它不是免费的)或查看Brent Ozar 的这篇文章 - 这是一种完全免费的方式,sp_whoisactive可以通过 Adam Machanic 的免费程序记录您的服务器活动,因此您可以回答此类问题你刚才问的问题。