在完整恢复模式下,SQL Server将所有日志都记录在日志文件中,那么,SQL Server是怎样记录日志的呢?
先查看下日志文件里面所存的内容
select * from sys.fn_dblog(null,null)
CurentLSN:当前日志序列号
Operation:操作类型
TransactionID:事务ID
Log Record Fixed Length:记录所占虚拟日志文件的固定长度
PreviousLSN:前一个日志序列号
AllocUnitID:修改的数据所属分配单元ID
AllocUnitName:修改的对象名称
Page ID:数据所在的页
Slot ID:数据所在页面的第几条行记录
CheckPoint Begin:CheckPoint 开始时间
CheckPoint End:CheckPoint 结束时间
Dirty Pages:脏数据页
Oldest Replicated Begin LSN:如果数据库配置复制,最老的复制LSN
Next Replicated End LSN:下一个复制LSN
Last Distributed End LSN:最新的分发LSN
Beginlog Status:开始记录事务日志的状态,这个状态表示现时能够正常记录事务日志
Begin Time:事务开始时间
Transaction Time:事务开始时间
End Time:事务结束时间
Transaction Begin:记录这个事务的begin transaction的时候的cureent LSN
Preplog Begin LSN:启动数据库前的前一个事务日志LSN
Prepare Time:准备启动数据库的时间
New Split Page:哪个数据页产生了页拆分
Rows Deleted:数据页有多少行被删除了
Description:描述这个事务是干什么的
-----------------------------------------------
常见Operation和Context
Operation |
Context |
解释 |
LOP_SET_BITS |
LCX_DIFF_MAP |
设置位图,资料: 差异(Differential)备份:只备份上次完整备份后,做修改的部分。备份单位是区(Extent)。意味着某个区内即使只有一页做了变动,则在差异备份里会被体现.差异备份依靠一个BitMap进行维护,一个Bit对应一个区,自上次完整备份后,被修改的区会被置为1,而BitMap中被置为1对应的区会被差异备份所备份。而到下一次完整备份后,BitMap中所有的Bit都会被重置为0 而这个BitMap在数据库第7页: DCM页 差异变更(Differential Changed Map,DCM)页面他跟踪一个文件中的哪一个区在最新一次完整数据库备份之后被修改过。SQLSERVER用在增量备份时只对已发生数据变更的分区进行增量备份即可 |
LOP_BEGIN_XACT |
事务开始 |
|
LOP_MODIFY_ROW |
LCX_HEAP |
修改堆表中的某一行记录 |
LOP_PREP_XACT |
准备启动数据库 |
|
LOP_COMMIT_XACT |
提交事务 |
|
LOP_MODIFY_ROW |
LCX_BOOT_PAGE |
修改数据库启动页 |
LOP_MODIFY_HEADER |
LCX_PFS |
修改PFS页的页头部信息 |
LOP_INSERT_ROWS |
LCX_CLUSTERED |
插入数据到聚集索引的索引页 |
LOP_INSERT_ROWS |
LCX_INDEX_LEAF |
插入数据到索引的叶子节点即数据页 |
LOP_FORMAT_PAGE |
LCX_CLUSTERED |
重新组织聚集索引 |
LOP_DELETE_SPLIT |
LCX_CLUSTERED |
删除聚集索引表的一行记录引起页拆分 |
LOP_MODIFY_HEADER |
LCX_HEAP |
修改堆表的某页的页头信息 |
LOP_BEGIN_CKPT |
LCX_NULL |
检查点开始 |
LOP_END_CKPT |
LCX_NULL |
检查点结束 |
LOP_SET_FREE_SPACE |
LCX_PFS |
修改PFS页设置那个数据页是空闲的 |
LOP_ROOT_CHANGE |
LCX_CLUSTERED |
聚集索引的根节点改变 |
LOP_INSERT_ROWS |
LCX_HEAP |
插入数据到堆表 |
----------------------------------------------------------------------------------------------------------------------------
在大容量日志模式下,日志不会记录对数据页的操作,当使用bcp,bulk insert,select into 等大容量日志操作的时候,像下图的修改数据和插入数据的记录在日志记录中找不到。
所以,在大容量日志模式下,插入速度才比较快。