Transaction log事务日志的作用
要明白备份的相关知识,首先必须理解transaction log。事务日志是SQL Server最重要的文件,每个数据库都有一个事务日志,用户对数据的所有修改(DML&DDL)操作都详细记录在事务日志中,另外还有一些schema修改操作,设置变化等等,但不会记录查询语句等对数据没有影响的操作。记录详细到什么地步呢?当用户运行
insert into table values(…)这样的语句时,这条语句会被完整记录到事务日志中。其原因不难理解:当事务失败需要全部rollback时,SQL Server需要读取事务日志中的相关记录并逐条回滚。
另外SQL Server提供名为log shipping的解决方案,可以将主数据库同步到从数据库上。其实现方案就是将主数据库的事务日志通过网络不间断的传输到从数据库所在的服务器,并按照log中的记录在从数据库上重做所有操作,从而实现数据同步。可见事务日志需要记录多么详细的信息,才能完全复制出一个一模一样的从数据库。
从以上事务日志的作用可推断出,对于不改变数据的查询语句是不会被记录的。虽然如此,对于负载较重的数据库,事务日志可能会在短时间内就填满硬盘。TLog无法工作必然导致数据库无法正常工作,此时数据库只可查询,所有修改操作都会被挂起(suspend)。
另外事务日志是供SQL Server内部使用而非给用户或管理者查询的,因此事务日志不可读。只有使用第三方工具才能将其内容转换为可读的。
Rollback and Rollforward 前滚和回滚
数据库的前滚和回滚是事务日志的另一个重要作用。当数据库正常运行时,总是有多个事务正在运行。当数据库shutdown时(正常或非正常关闭,主动或非主动关闭),可能有一些事务没有完成(与是否正常关闭