Sql server 特殊只读查询是否存储在SQL Server事务日志中?
在SQL Server 2008中,数据库恢复模型配置为Sql server 特殊只读查询是否存储在SQL Server事务日志中?,sql-server,sql-server-2008,transaction-log,Sql Server,Sql Server 2008,Transaction Log,在SQL Server 2008中,数据库恢复模型配置为full,查询如下 从TableName中选择col1、col2、col3 记录到事务日志文件 换言之,我是否可以使用事务日志备份确定在特定日期在数据库上运行了哪些查询?否。事务日志根本不记录查询。它只记录前滚或后滚事务所需的信息(并且SELECT查询根本不会生成任何记录的活动) 你可以试试 select top 100 * from sys.fn_dblog(default,default) 来看看记录下来的东西 如果需要此类信息,则需
full
,查询如下
从TableName中选择col1、col2、col3
记录到事务日志文件
换言之,我是否可以使用事务日志备份确定在特定日期在数据库上运行了哪些查询?否。事务日志根本不记录查询。它只记录前滚或后滚事务所需的信息(并且
SELECT
查询根本不会生成任何记录的活动)
你可以试试
select top 100 *
from sys.fn_dblog(default,default)
来看看记录下来的东西
如果需要此类信息,则需要设置跟踪/扩展事件会话/n来记录它。在大多数环境中,这可能是令人望而却步的沉重负担
您可以使用以下内容来大致了解正在运行的特殊查询
SELECT text
from sys.dm_exec_cached_plans
cross apply sys.dm_exec_sql_text(plan_handle)
where objtype='Adhoc'
实际上,如果计划使用工作表,
SELECT
查询可以生成日志(在tempdb
中)。当然,它们没有备份,所以这与@op无关,但我想我只是为了正确起见才提到它:)@Quassnoi-(不否认可能是这种情况,但是…)为什么需要记录?tempdb
只需要ACI
而不需要ACID
。每次重新启动都会重新创建它。@马丁:因为事务日志提高了性能(使用顺序写入访问)。当然,并不是所有内容都被记录下来:只有页面分配或缓存计划中的持久工作表之类的内容@Quassnoi-这些将出现在什么类型的SELECT
查询中?我刚刚尝试了一个带有假脱机的查询,但在tempdb
中没有其他记录项-它需要散列连接还是什么啊,刚刚注意到你的链接。也许一个大的排序操作就可以了。谢谢你的信息。因此,看起来我可以使用dm_exec_cached_plans查询来查找最近的即席查询,但非常旧的查询可能不存在(即使SQL Server未重新启动)。您是在尝试性能优化、故障排除,还是需要某种审计跟踪?这根本不用于性能优化。我可以用车管所的。我只需要确定是否有人查询了数据库中的特定表。我知道这是一个远射;但我想我还是会问这个问题。