已要求我找出谁在Azure SQL数据库上创建了某个扩展事件会话。但是,从DMV来看,有很多属性,但是没有什么东西可以指示创建它的时间或创建者。
有没有办法确定这一点?
谢谢。
答案 0 :(得分:2)
可以在Azure中完成此操作,但是必须在数据库或服务器级别启用SQL审核。然后,您必须使用sys.fn_get_audit_file
函数执行以下操作:
SET NOCOUNT ON;
SELECT
server_principal_id
, database_principal_id
, target_server_principal_id
, target_database_principal_id
, session_server_principal_name
, server_principal_name
, server_principal_sid
, database_principal_name
, target_server_principal_name
, target_server_principal_sid
, target_database_principal_name
, server_instance_name
, database_name
, schema_name
, object_name
, statement
, additional_information
FROM sys.fn_get_audit_file(
'https://blob_storage_name.blob.core.windows.net/sqldbauditlogs/SERVER_NAME/DATABASE_NAME/SqlDbAuditing_ServerAudit/2018-11-27' -- INSERT date here
, DEFAULT
, DEFAULT
)
WHERE statement LIKE '%CREATE EVENT SESSION%';
这应该为您提供所需的信息。请记住,SQL审核可以生成大量数据,因此您可能需要每天甚至每小时查询审核文件(您可以了解如何使用sys.fn_get_audit_file
here使用日期模式)。
如果发现数据量太大而无法查询,则可以随时下载审核文件(.xel文件,通过扩展事件实现SQL审核),并编写一个自定义工具来执行此操作(Microsoft提供了一个库来解析)通过LINQ扩展事件文件。请参见详细信息here。