假设我正在运行日志备份,而日志备份需要10分钟才能完成。在这10分钟的窗口中,将运行进一步的事务。给定下面的示例,日志备份实际上包含哪些事务?
发布于 2019-10-30 18:09:45
日志备份文件应包含到备份完成时为止的所有事务(包括尚未提交的事务),您可以按如下方式验证它:
CREATE DATABASE MyDB;
ALTER DATABASE MyDB SET RECOVERY FULL;
USE MyDB;
CREATE TABLE LogTest (numbers int);
一旦创建了数据库和测试中将要使用的表,就可以进行第一个完全备份,这样以后就可以进行日志备份了。
BACKUP DATABASE MyDB
TO DISK = 'C:\Program Files\Microsoft SQL Server\MSSQL14.SQL2017\MSSQL\Backup\MyDB_FULL.bak';
现在已经完成了完全备份,让我们在表中插入一些数据:
USE MyDB;
INSERT INTO LogTest(numbers) VALUES (1);
BEGIN TRAN
INSERT INTO LogTest(numbers) VALUES (2);
请注意,第二个插入位于尚未提交的BEGIN TRAN
下。接下来,我们将使用函数[fn_dblog ]检查日志文件的内容,然后再进行日志备份。
SELECT [Current LSN], [Operation], [SPID], [Transaction Name], [Begin Time], [End Time] FROM fn_dblog(NULL, NULL);
在图中我们可以看到与第一和第二INSERT
相关的LSNs。
BACKUP LOG MyDB
TO DISK = 'C:\Program Files\Microsoft SQL Server\MSSQL14.SQL2017\MSSQL\Backup\MyDB_LOG.trn';
进行了日志备份,我们可以使用以下查询使用函数fn_转储_dblog读取其内容:
SELECT [Current LSN], [Transaction ID], [Transaction Name], [Operation], [Begin Time]
FROM fn_dump_dblog (NULL, NULL, N'DISK', 1, N'C:\Program Files\Microsoft SQL Server\MSSQL14.SQL2017\MSSQL\Backup\MyDB_LOG.trn',
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);
正如我们所看到的,那些与未完成的事务相关的LSNs实际上在事务日志备份上,即使它们没有提交。问题是,作为微软说
事务日志是数据库的关键组件。如果出现系统故障,您将需要该日志将数据库恢复到一致状态。
因此,在执行日志备份的还原之后,与那些未完成的事务相关的数据将被回滚,以保持数据库处于一致状态(请参见恢复和事务日志)。
您可以考虑安全(可以恢复)所有已提交的事务。可以通过删除数据库MyDB和还原上述步骤生成的备份来验证它。
发布于 2019-10-30 12:11:47
事务日志包含事务日志完成时已完全提交的所有事务。
要使用上面的示例,事务日志包含A和B。这类似于完整备份,后者包含备份完成时提交的所有事务的尾日志备份。
本网站是优秀的进一步阅读。https://sqlbak.com/academy/transaction-log-backup
https://dba.stackexchange.com/questions/252191
复制相似问题