functions/Get-DbaOpenTransaction.ps1
function Get-DbaOpenTransaction { <# .SYNOPSIS Displays all open transactions. .DESCRIPTION This command is based on open transaction script published by Paul Randal. Reference: https://www.sqlskills.com/blogs/paul/script-open-transactions-with-text-and-plans/ .PARAMETER SqlInstance The SQL Server instance .PARAMETER SqlCredential Connect using alternative credentials .PARAMETER EnableException By default, when something goes wrong we try to catch it, interpret it and give you a friendly warning message. This avoids overwhelming you with "sea of red" exceptions, but is inconvenient because it basically disables advanced scripting. Using this switch turns this "nice by default" feature off and enables you to catch exceptions with your own try/catch. .NOTES Tags: Database, Process, Session, ActivityMonitor Website: https://dbatools.io Copyright: (C) Chrissy LeMaire, clemaire@gmail.com License: MIT https://opensource.org/licenses/MIT .LINK https://dbatools.io/Get-DbaOpenTransaction .EXAMPLE Get-DbaOpenTransaction -SqlInstance sqlserver2014a Returns open transactions for sqlserver2014a .EXAMPLE Get-DbaOpenTransaction -SqlInstance sqlserver2014a -SqlCredential (Get-Credential sqladmin) Logs into sqlserver2014a using the login "sqladmin" #> [CmdletBinding()] param ( [parameter(Position = 0, Mandatory = $true, ValueFromPipeline = $True)] [Alias("ServerInstance", "SqlServer", "SqlServers")] [DbaInstance[]]$SqlInstance, [PSCredential]$SqlCredential, [switch]$EnableException ) begin { $sql = " SELECT SERVERPROPERTY('MachineName') AS ComputerName, ISNULL(SERVERPROPERTY('InstanceName'), 'MSSQLSERVER') AS InstanceName, SERVERPROPERTY('ServerName') AS SqlInstance, [s_tst].[session_id] as Spid, [s_es].[login_name] as Login, DB_NAME (s_tdt.database_id) AS [Database], [s_tdt].[database_transaction_begin_time] AS [BeginTime], [s_tdt].[database_transaction_log_bytes_used] AS [LogBytesUsed], [s_tdt].[database_transaction_log_bytes_reserved] AS [LogBytesReserved], [s_est].text AS [LastQuery], [s_eqp].[query_plan] AS [LastPlan] FROM sys.dm_tran_database_transactions [s_tdt] JOIN sys.dm_tran_session_transactions [s_tst] ON [s_tst].[transaction_id] = [s_tdt].[transaction_id] JOIN sys.[dm_exec_sessions] [s_es] ON [s_es].[session_id] = [s_tst].[session_id] JOIN sys.dm_exec_connections [s_ec] ON [s_ec].[session_id] = [s_tst].[session_id] LEFT OUTER JOIN sys.dm_exec_requests [s_er] ON [s_er].[session_id] = [s_tst].[session_id] CROSS APPLY sys.dm_exec_sql_text ([s_ec].[most_recent_sql_handle]) AS [s_est] OUTER APPLY sys.dm_exec_query_plan ([s_er].[plan_handle]) AS [s_eqp] ORDER BY [BeginTime] ASC" } process { foreach ($instance in $SqlInstance) { Write-Message -Level Verbose -Message "Attempting to connect to $instance" try { $server = Connect-SqlInstance -SqlInstance $instance -SqlCredential $SqlCredential -MinimumVersion 9 } catch { Stop-Function -Message "Failure" -Category ConnectionError -ErrorRecord $_ -Target $instance -Continue } $server.Query($sql) } } } |