got*_*tqn 4 sql-server sql-server-2012 transaction-log
有没有办法找到作为阻止重用事务日志文件 VLF 的活动事务的一部分的 T-SQL 语句?
我每 15 分钟执行一次 tlog 备份,但有时会返回以下查询ACTIVE_TRANSACTION
或LOG_BACKUP
(甚至这样):
SELECT [name]
,[recovery_model_desc]
,[log_reuse_wait_desc]
FROM [sys].[databases]
Run Code Online (Sandbox Code Playgroud)
如果我运行,DBCC Loginfo
我可以看到 firsts 和 lasts 行都有 status 0
。
LOG_REUSE_WAIT_DESC
将LOG_BACKUP
随时显示至少有一个事务尚未备份(当数据库处于完全恢复模式时)。
通过查看此查询的结果,您可以查看每个会话的活动会话、请求和事务计数:
SELECT SessionID = s.session_id
, HostName = s.host_name
, ProgramName = s.program_name
, SessionElapsedTime = s.total_elapsed_time
, RequestCommand = r.command
, DatabaseName = d.name
, StatementExecuting = case when r.statement_end_offset > 0 THEN
SUBSTRING(t.text, r.statement_start_offset, r.statement_end_offset -
r.statement_start_offset)
ELSE t.text END
, tst.open_transaction_count
FROM sys.dm_exec_sessions s
LEFT JOIN sys.dm_exec_connections c ON s.session_id = c.session_id
LEFT JOIN sys.dm_exec_requests r ON s.session_id = r.session_id
LEFT JOIN sys.databases d ON r.database_id = d.database_id
LEFT JOIN sys.dm_tran_session_transactions tst ON s.session_id = tst.session_id
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) t;
Run Code Online (Sandbox Code Playgroud)
如果我将该查询包装在一个事务中,您可以看到该open_transaction_count
字段显示1
,这是预期的,因为我的平板电脑上没有其他正在进行的活动。