Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 跟踪SQL Server上的删除_Sql Server - Fatal编程技术网

Sql server 跟踪SQL Server上的删除

Sql server 跟踪SQL Server上的删除,sql-server,Sql Server,我打算跟踪在恢复模型简单的SQL Server DB上执行的删除操作 当数据库处于此模式时,是否会记录此类操作?您可以通过多种不同的方式实现目标。如果需要,可以从sql server事务日志中读取删除操作,但如果处于完全恢复模式,则在每次事务日志备份后都会将其“释放”。在简单恢复模型中,您无法控制事务日志内容 要查找特定表的删除操作,可以使用以下查询: DECLARE @MonitoredTable sysname SET @MonitoredTable = 'YouTable' SELECT

我打算跟踪在恢复模型简单的SQL Server DB上执行的删除操作


当数据库处于此模式时,是否会记录此类操作?

您可以通过多种不同的方式实现目标。如果需要,可以从sql server事务日志中读取删除操作,但如果处于完全恢复模式,则在每次事务日志备份后都会将其“释放”。在简单恢复模型中,您无法控制事务日志内容

要查找特定表的删除操作,可以使用以下查询:

DECLARE @MonitoredTable sysname
SET @MonitoredTable = 'YouTable'

SELECT
    u.[name] AS UserName
    , l.[Begin Time] AS TransactionStartTime
FROM
    fn_dblog(NULL, NULL) l
INNER JOIN
    (
    SELECT
        [Transaction ID]
    FROM 
        fn_dblog(NULL, NULL) 
    WHERE
        AllocUnitName LIKE @MonitoredTable + '%'
    AND
        Operation = 'LOP_DELETE_ROWS'
    ) deletes
ON  deletes.[Transaction ID] = l.[Transaction ID]
INNER JOIN
    sysusers u
ON  u.[sid] = l.[Transaction SID]
您可以使用的另一种方法是编写“审核触发器”,或者您可以直接使用sql server审核功能/sql server扩展事件,如本Apex网页中所述:


你可以通过许多不同的方式实现你的目标。如果需要,可以从sql server事务日志中读取删除操作,但如果处于完全恢复模式,则在每次事务日志备份后都会将其“释放”。在简单恢复模型中,您无法控制事务日志内容

要查找特定表的删除操作,可以使用以下查询:

DECLARE @MonitoredTable sysname
SET @MonitoredTable = 'YouTable'

SELECT
    u.[name] AS UserName
    , l.[Begin Time] AS TransactionStartTime
FROM
    fn_dblog(NULL, NULL) l
INNER JOIN
    (
    SELECT
        [Transaction ID]
    FROM 
        fn_dblog(NULL, NULL) 
    WHERE
        AllocUnitName LIKE @MonitoredTable + '%'
    AND
        Operation = 'LOP_DELETE_ROWS'
    ) deletes
ON  deletes.[Transaction ID] = l.[Transaction ID]
INNER JOIN
    sysusers u
ON  u.[sid] = l.[Transaction SID]
您可以使用的另一种方法是编写“审核触发器”,或者您可以直接使用sql server审核功能/sql server扩展事件,如本Apex网页中所述:


您可以使用触发器。您可以使用SQL Server更改数据捕获或更改跟踪-您也可以使用SQL Server Audit捕获删除操作请参见您可以使用触发器。您可以使用SQL Server更改数据捕获或更改跟踪-您也可以使用SQL Server Audit捕获删除操作请参见注意fn_dblog()是未记录的功能请注意fn_dblog()是未记录的功能