0

0

SQL Server检索SQL和用户信息的需求

絕刀狂花

絕刀狂花

发布时间:2025-07-13 08:44:51

|

182人浏览过

|

来源于php中文网

原创

在sql server中,获取历史sql执行者的需求确实是一个挑战,因为sql server的动态管理视图(dmv)主要用于实时监控和获取当前活动的信息,而不是历史数据。让我们来探讨一下这个问题,并提供一些可能的解决方案。

首先,让我们回顾一下你提供的信息:

  1. Oracle的实现:在Oracle中,可以通过v$sql视图的parsing_schema_name字段获取执行SQL的用户信息。

  2. SQL Server的现状

    • 你找到了sys.dm_exec_cached_planssys.dm_exec_sql_text来获取当前缓存的SQL语句,但这些视图不包含用户信息。
    • 你也尝试了sys.dm_exec_sessions来获取登录用户信息,但无法直接关联到具体的SQL语句。
    • 最后,你找到了一条查询,可以获取当前正在执行的SQL和会话信息,但这仅限于当前执行的SQL,不包括历史数据。
  3. 大师的建议:SQL Server不能通过DMV视图直接查询历史SQL,只能通过不断采集当前会话的SQL并保存下来。

基于这些信息,我们可以考虑以下解决方案:

1. 使用SQL Server Profiler或Extended Events

SQL Server Profiler和Extended Events可以用来捕获SQL语句的执行信息,包括用户信息。这些工具可以设置为持续运行,并将数据保存到文件或表中。

示例使用Extended Events:

CREATE EVENT SESSION [CaptureSQLExecutions] ON SERVER 
ADD EVENT sqlserver.sql_batch_completed(
    ACTION(sqlserver.client_hostname, sqlserver.username)
    WHERE ([sqlserver].[database_name]=N'XXX')
)
ADD TARGET package0.event_file(SET filename=N'C:\SQLServer\CaptureSQLExecutions.xel')
WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=30 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=NONE,TRACK_CAUSALITY=OFF,STARTUP_STATE=OFF)
GO
<p>ALTER EVENT SESSION [CaptureSQLExecutions] ON SERVER STATE = START
GO

你可以使用以下查询来读取捕获的数据:

麦布商业名录
麦布商业名录

功能介绍:对每一个登记的企业都要进行信息审核管理,付费后即可加入;对搜索关键词具有只能辨别功能,可选择智能或模糊;具有企业信誉测评功能,搜索排名按照用户打分的分值排列;对每一个企业都进行票数统计,积分统计和点击数统计;星级会员企业功能,会员等级高的企业更容易被客户搜索到;具有省市检索功能,可以搜索该省市的所有企业;企业信息自动更新替换,信息需要经过审核;高级分类查找功能,对每个城市的企业进行单独的

下载
SELECT 
CAST(event_data AS XML).value('(/event/action[@name="username"]/text())[1]', 'nvarchar(128)') AS [Username],
CAST(event_data AS XML).value('(/event/data[@name="batch_text"]/value)[1]', 'nvarchar(max)') AS [SQLText]
FROM sys.fn_xe_file_target_read_file('C:\SQLServer\CaptureSQLExecutions*.xel', NULL, NULL, NULL)

2. 使用SQL Server Audit

SQL Server Audit可以用来记录数据库活动,包括SQL语句和执行用户。

示例设置Audit:

USE [master]
GO</p><p>CREATE SERVER AUDIT [SQLExecutionsAudit]
TO FILE 
(   FILEPATH = N'C:\SQLServer\Audit\'
,MAXSIZE = 0 MB
,MAX_ROLLOVER_FILES = 2147483647
,RESERVE_DISK_SPACE = OFF
)
WITH
(   QUEUE_DELAY = 1000
,ON_FAILURE = CONTINUE
)
GO</p><p>ALTER SERVER AUDIT [SQLExecutionsAudit] WITH (STATE = ON)
GO</p><p>USE [XXX]
GO</p><p>CREATE DATABASE AUDIT SPECIFICATION [DatabaseAuditSpec]
FOR SERVER AUDIT [SQLExecutionsAudit]
ADD (SELECT ON DATABASE::XXX BY [public])
WITH (STATE = ON)
GO

你可以查询审计日志来获取SQL语句和用户信息:

SELECT <em> FROM fn_get_audit<em>file('C:\SQLServer\Audit\SQLExecutionsAudit</em></em>.sqlaudit', NULL, NULL)

3. 第三方工具

有许多第三方工具(如ApexSQL、Redgate SQL Monitor等)可以提供更高级的监控和历史数据记录功能。这些工具通常可以捕获SQL语句、执行用户和其他相关信息,并提供详细的报告和分析功能。

结论

SQL Server的设计确实没有直接提供一个类似Oracle的v$sql视图来获取历史SQL执行者的信息。微软的设计可能基于性能和安全考虑,限制了历史数据的直接查询。然而,通过使用Extended Events、SQL Server Audit或第三方工具,你可以实现类似的功能。

希望这些建议能帮助你解决在SQL Server中获取历史SQL执行者的需求。如果你有进一步的问题或需要更详细的指导,请随时告诉我。

SQL Server检索SQL和用户信息的需求

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

1133

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

340

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

381

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

2152

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

380

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

1683

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

585

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

440

2024.04.29

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
SQL 教程
SQL 教程

共61课时 | 4.3万人学习

Java 教程
Java 教程

共578课时 | 81万人学习

oracle知识库
oracle知识库

共0课时 | 0.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号