调用存储过程的统计信息

时间:2019-02-13 08:37:34

标签: sql-server tsql stored-procedures usage-statistics

有没有办法找出SQL Server上对存储过程的调用的统计信息?

我正在寻找以下信息:

  1. 调用存储过程的日期和时间
  2. 谁调用了存储过程(用户名)
  3. 即使用户收到错误消息“对对象'sp_name',数据库'db_name',架构'schema_name'的EXECUTE权限被拒绝,我也希望具有以上信息”

1 个答案:

答案 0 :(得分:2)

默认情况下,SQL Server不维护此类信息。 您必须设置以下方法之一来收集它:

  • SQL审核
  • 扩展事件
  • SQL跟踪

用于此类任务的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/