【问题标题】:Statistics for calls to stored procedure对存储过程的调用统计
【发布时间】:2019-02-13 08:37:33
【问题描述】:
有什么方法可以在 SQL Server 上找出调用存储过程的统计信息?
我正在寻找以下信息:
- 调用存储过程的日期和时间
- 谁调用了存储过程(用户名)
- 即使用户收到错误消息“对象 'sp_name'、数据库 'db_name'、架构 'schema_name' 的 EXECUTE 权限被拒绝”,我也希望获得上述信息
【问题讨论】:
标签:
sql-server
tsql
stored-procedures
usage-statistics
【解决方案1】:
默认情况下,SQL Server 不维护此类信息。
您必须设置以下方法之一来收集它:
此类任务的 SQL 审计示例:
-- step 1:
USE [master]
GO
CREATE SERVER AUDIT [SrvAudit_sp_execution]
TO FILE
( FILEPATH = N'E:\DBA_Audit'
,MAXSIZE = 20 MB
,MAX_ROLLOVER_FILES = 50
,RESERVE_DISK_SPACE = OFF
)
WITH
( QUEUE_DELAY = 1000 -- equal to 1 second
,ON_FAILURE = CONTINUE
)
GO
-- step 2:
CREATE DATABASE AUDIT SPECIFICATION [DBAudit_sp_execution]
FOR SERVER AUDIT [SrvAudit_sp_execution]
GO
-- step 3:
ALTER DATABASE AUDIT SPECIFICATION [DBAudit_sp_execution]
FOR SERVER AUDIT [SrvAudit_sp_execution]
ADD (EXECUTE ON OBJECT::dbo.proc1 BY [public]) ;
-- step 4:
ALTER SERVER AUDIT [SrvAudit_sp_execution] WITH (STATE = ON);
USE [_DemoDB]
ALTER DATABASE AUDIT SPECIFICATION [DBAudit_sp_execution]
FOR SERVER AUDIT [SrvAudit_sp_execution] WITH (STATE = ON);
审计数据可以在SSMS中进一步查看或通过以下方式查询:sys.fn_get_audit_file
参考资料:
https://www.mssqltips.com/sqlservertip/3259/several-methods-to-collect-sql-server-stored-procedure-execution-history/