0
点赞
收藏
分享

微信扫一扫

Oracle日志组与SQL Server VLF状态对比


Oracle: 

select * from v$log;

SQL Server : 

dbcc loginfo(dbname)

status含义:
0:reusable或unused
2:active或recoverable

或者用

SELECT [name], COUNT(l.database_id) AS 'vlf_count' FROM sys.databases s CROSS APPLY sys.dm_db_log_info(s.database_id) l GROUP BY [name] HAVING COUNT(l.database_id) > 100

status含义:
0 - VLF is inactive 
1 - VLF is initialized but unused 
2 - VLF is active.

状态含义对比

Oracle

含义

SQL Server

含义

备注

CURRENT

当前正在使用的日志文件组。该联机重做日志组是活动的

ACTIVE

VLF中存在属于活动事务(未结束的事务)的日志记录

 

ACTIVE 

该组是活动的但不是当前组,实例恢复时需要这组日志。

 

文件中的数据没有全部写入数据文件,一旦需要实例恢复,必须借助该文件中保存的内容。

 

已归档没归档均可。

RECOVERABLE

VLF中不包含活动事务的日志记录,此时DB处于维护一个完整日志序列的状态,但是某些操作(例如数据库镜像、复制、日志备份等)还需要用到这些数据,因此不可以被覆盖。

sqlserver的有点类似Oracle归档还没被DG应用不可删除

INACTIVE

该组联机重做日志当前处于空闲状态。

 

文件中的数据全部写入数据文件,实例恢复已不再需要这组联机重做日志组了。

 

已归档没归档均可。

REUSABLE

VLF中的数据已经不需要了,可以被覆盖(该状态也称为“可截断”)

 

UNUSED 

该联机重做日志文件组对应的文件还从未被写入过数据。

 

通常是刚创建或重建

UNUSED

VLF从未被使用

 

CLEARING

在执行了 ALTER DATABASE CLEAR LOGFILE 后,表示该组重做日志正被重建(重建后该状态会变成UNUSED)

无对应

 

 

CLEARING_CURRENT

表示该组重做日志重建时出现错误,如io错误。

无对应

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SQL Server 日志维护状态

以下两种情况视为sqlserver数据库处于非完整日志维护状态

1. 从未进行过全库备份

select last_log_backup_lsn from sys.database_recovery_status where db_name(database_id)='tpcc'
-- last_log_backup_lsn 为NULL

2. 数据库恢复模式为sample

select recovery_model_desc from sys.databases where name='tpcc'
-- 查询结果为SAMPLE

若sqlserver处于非完整日志维护状态

执行checkpoint操作后,sqlserver会直接重用日志文件中不包含活动事务的VLF,因为VLF可以不断被重用

若sqlserver处于完整日志维护状态

checkpoint操作不会重用VLF,执行事务日志备份后,sqlserver会自动重用reusable状态的VLF

 

参考:

https://docs.microsoft.com/en-us/sql/relational-databases/system-dynamic-management-views/sys-dm-db-log-info-transact-sql?view=sql-server-2017

https://docs.microsoft.com/en-us/sql/relational-databases/sql-server-transaction-log-architecture-and-management-guide?view=sql-server-2017#physical_arch

https://blog.51cto.com/jimshu/1174474


举报

相关推荐

0 条评论