这是在恢复日志(用于Sql Server日志传送)之前等待空闲数据库目录的正确方法吗?

我想有一个单独的Sql Server实例专用于“报告”angular色。 我已决定通过日志传送来填充该服务器(因为镜像不起作用,而可用性组是疯狂的)。 我已经解决了,我只需要按时间间隔备份事务日志,将它们复制到报告实例可访问的位置,然后在目标实例处执行还原。

我还没有find被广泛接受的解决scheme的问题是,如果没有对目标目录的独占访问权限,就无法恢复日志。 我想经常刷新数据,但刷新过程等待最终用户运行的任何活动的报告/查询; 因为连接池,你不能跟踪打开的连接。 所以我的解决scheme的关键是能够确定数据库目录是否“繁忙”。 我已经提出了这个查询,列出了“活动”查询 – 我的进程应该等待的查询。 有谁知道为什么这不起作用,或者有人可以确认它会? (例如阻塞信息超出了我已经检查的内容?)

SELECT USER_NAME(user_id) AS LoginName , DB_NAME(database_id) AS DbCat , blocking_session_id AS BlockedBy , open_transaction_count AS OpenTrans , status AS ExecStatus , cpu_time AS CpuTime , logical_reads AS LogicalReads , * FROM sys.dm_exec_requests WHERE session_id != @@SPID AND database_id = DB_ID() AND status != 'background' --always non-client activity; not something that should block log-shipping. AND (open_transaction_count > 0 --open transactions always need to be waited on OR status != 'sleeping' --sleeping=idle, except when there's an open transaction. ); 

从本质上讲,如果这个查询返回零行,目录是空闲的,我做恢复。 如果没有,那么恢复不会在那个时候发生。

我没有自己尝试过,但是如果在configuration日志传送辅助时取消选中“在恢复备份时断开数据库中的用户”checkbox,则我认为您需要的function是内置的。

在这里输入图像说明

查询工作很好。 我正在成功使用它在还原作业。 在进行查询时,没有任何进程被踢出数据库。