Sql server 通过T-SQL读取SQL事务日志
这是我从备份文件读取SQL事务日志(脱机日志)的脚本 我想让所有插入/更新/删除都由T-SQL执行(排除操作使用SSMS的GUI) 因此,问题是:Sql server 通过T-SQL读取SQL事务日志,sql-server,tsql,Sql Server,Tsql,这是我从备份文件读取SQL事务日志(脱机日志)的脚本 我想让所有插入/更新/删除都由T-SQL执行(排除操作使用SSMS的GUI) 因此,问题是: 我已经测试过这个脚本,它在大多数情况下都能正常工作。你知道有什么错案吗 你有更好的解决办法吗 谢谢你的贡献 DECLARE @From DATETIME, @To DATETIME DECLARE @FilePath NVARCHAR(1000) SET @FilePath = N'D:\abc.BAK' SET @From ='2015/10
DECLARE @From DATETIME, @To DATETIME
DECLARE @FilePath NVARCHAR(1000)
SET @FilePath = N'D:\abc.BAK'
SET @From ='2015/10/01 00:00:00'
SET @To ='2015/10/31 00:00:00'
SELECT *
INTO #Log
FROM fn_dump_dblog (
NULL, NULL, N'DISK', 1, @FilePath,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT)
SELECT l.[Transaction Name],
objectName.schemaname AS [Schema],
objectName.name AS [Object],
SUSER_SNAME (l.[Transaction SID]) AS [User],
l.[Begin Time],
endTime.[End Time],
l.[Transaction ID]
FROM #Log AS l
INNER JOIN (
SELECT l.[Transaction ID], l.[End Time]
FROM #Log AS l
WHERE Operation = 'LOP_COMMIT_XACT'
) AS endTime ON l.[Transaction ID] = endTime.[Transaction ID]
INNER JOIN(
SELECT [Transaction ID],AllocUnitName FROM #Log AS l
WHERE AllocUnitName IS NOT NULL
GROUP BY [Transaction ID], AllocUnitName
) AS alloc ON l.[Transaction ID] = alloc.[Transaction ID]
LEFT JOIN (
SELECT i.object_id, i.name AS IndexName,o.name,s.name+'.'+o.name+'.'+i.name AS keyname,s.name AS schemaname FROM sys.indexes AS i
INNER JOIN sys.objects AS o ON i.object_id = o.object_id
INNER JOIN sys.schemas AS s ON o.schema_id = s.schema_id
) AS objectName ON alloc.AllocUnitName = objectName.keyname
WHERE Operation = 'LOP_BEGIN_XACT'
AND [Transaction Name] IN ('INSERT','UPDATE','DELETE')
AND l.[Begin Time] BETWEEN @From AND @To
ORDER BY l.[Transaction ID]
DROP TABLE #Log