我正在開發一個Java應用程序,在其中運行一些查詢到SQL Server的系統表。現在我想從SQL Server Management Studio知道在特定數據庫上運行的查詢以及查詢執行的時間和查詢結果狀態,如查詢執行失敗或正在運行或成功執行。從SQL Server 2012管理工作室獲取歷史記錄
如何從SQL Server Management Studio中獲得此結果?
我正在開發一個Java應用程序,在其中運行一些查詢到SQL Server的系統表。現在我想從SQL Server Management Studio知道在特定數據庫上運行的查詢以及查詢執行的時間和查詢結果狀態,如查詢執行失敗或正在運行或成功執行。從SQL Server 2012管理工作室獲取歷史記錄
如何從SQL Server Management Studio中獲得此結果?
請查看Extended Events - 它們允許您在SQL Server實例上設置高級監視和審計。不是很容易設置,但有很多選項可供選擇。
更新時間: 下面應該飽您的需求,它會跟蹤所有系統中的所有DDL更改的DB(大師,模型,MSDB和tempdb)通過登錄'Your_Login'
完成,將開始和提交之間劃分:
CREATE EVENT SESSION [DDL_Track] ON SERVER
ADD EVENT sqlserver.object_altered(
ACTION(sqlos.task_time,sqlserver.client_app_name,sqlserver.client_connection_id,sqlserver.client_hostname,sqlserver.database_name,sqlserver.server_instance_name,sqlserver.server_principal_name,sqlserver.sql_text,sqlserver.transaction_id,sqlserver.username)
WHERE ([sqlserver].[equal_i_sql_unicode_string]([sqlserver].[username],N'Your_Login') AND [sqlserver].[database_id]<=(4))),
ADD EVENT sqlserver.object_created(SET collect_database_name=(0)
ACTION(sqlos.task_time,sqlserver.client_app_name,sqlserver.client_connection_id,sqlserver.client_hostname,sqlserver.database_name,sqlserver.server_instance_name,sqlserver.server_principal_name,sqlserver.sql_text,sqlserver.transaction_id,sqlserver.username)
WHERE ([package0].[not_equal_uint64]([database_id],(2)) AND [sqlserver].[not_equal_i_sql_unicode_string]([sqlserver].[username],N'DBA') AND [database_id]<>(13))),
ADD EVENT sqlserver.object_deleted(SET collect_database_name=(1)
ACTION(sqlos.task_time,sqlserver.client_app_name,sqlserver.client_connection_id,sqlserver.client_hostname,sqlserver.database_name,sqlserver.server_instance_name,sqlserver.server_principal_name,sqlserver.sql_text,sqlserver.transaction_id,sqlserver.username)
WHERE ([package0].[not_equal_uint64]([database_id],(2)) AND [package0].[not_equal_i_unicode_string]([sqlserver].[username],N'DBA') AND [database_id]<>(13)))
ADD TARGET package0.event_file(SET filename=N'DDL_Track',max_file_size=(250),max_rollover_files=(1))
WITH (MAX_MEMORY=8192 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=120 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=NONE,TRACK_CAUSALITY=OFF,STARTUP_STATE=ON)
這將創建一個保存到默認位置爲一個單一的文件中的信息來訪問信息只需打開從SSMS文件的事件:
如果你想要舊的歷史,你可以從計劃緩存中得到它,但是如果你的服務器重新啓動,這將是不準確的。
你可以嘗試用你需要的列即興查詢下面的內容。這會給你查詢跑,計數,CPU時間,內存授予
select txt.text,ec.execution_count,ec.max_worker_time,ec.max_grant_kb
from sys.dm_exec_query_stats ec
cross apply
sys.dm_exec_sql_text(ec.sql_handle) txt
進一步您可以使用擴展事件,以及審覈所有的查詢,並保存到文件供以後分析,此信息將甚至當服務器重新啓動
堅持
我正在使用sql分析器,但我可以找到哪個主機名或客戶端網絡地址查詢運行? –
分析器在當時很好,但現在它已經退役了。開始使用擴展事件,上面的應該會給你所需要的所有信息,以防萬一你需要將XE文件作爲常規表格讀取,從而產生一個新的問題,要求提供XE閱讀器。 –
我收到您建議的解決方案的以下例外 - Microsoft SQL Server Management Studio 存儲無法使用提供的參數進行初始化。 (Microsoft.SqlServer.XEventStorage) 日誌文件名稱「DDL_Track *」無效。驗證該文件是否存在以及SQL Server服務帳戶是否有權訪問該文件。 (Microsoft SQL Server,錯誤:25718) –