为什么呢?不会是什么bug吧? 相信很多人都会有这样的反应。下面我们通过实验来看看数据库的数据文件与事务日志文件在什么情况或条件下, 修改日期(Date Modified)才会变化.首先创建一个TEST数据库,查看其数据文件或事务日志文件的修改日期如下:
USE [master];GO CREATE DATABASE [TEST] ON PRIMARY ( NAME = N'TEST', FILENAME = N'E:\SQL_DATA\test.mdf' , > MAXSIZE = UNLIMITED, FILEGROWTH = 1MB ) LOG ON ( NAME = N'TEST_LOG', FILENAME = N'E:\SQL_DATA\test_log.ldf' , > MAXSIZE = 2048GB , FILEGROWTH = 10%);GO
我们先查看一下数据库数据文件大小、空间使用情况,依此以为参照,判别数据库数据文件或事务日志的增长情况
USE TEST;GO SELECT DB_NAME(database_id) AS DataBaseName ,Name AS LogicalName ,type_desc AS FileTypeDesc ,Physical_Name AS PhysicalName ,CAST(size * 8.0 / 1024 AS DECIMAL(8, 4)) AS [Size(MB)] ,FILEPROPERTY(name, 'SpaceUsed') * 8.0/1024 AS [Used_Size(MB)] ,CURRENT_TIMESTAMP AS CURRENT_DATETIMEFROM sys.master_filesWHERE database_id = DB_ID('TEST');
我们通过一个大批量插入操作,使数据库的数据文件实现自增长,如下所示,当数据库的数据文件或事务日志文件增长时,其修改日期就会变化。
SET NOCOUNT ON;GO CREATE TABLE TEST (OBJECT_ID INT, NAME VARCHAR(600)); CREATE CLUSTERED INDEX PK_TEST ON TEST(OBJECT_ID) DECLARE @Index INT =0; WHILE @Index < 200000BEGIN INSERT INTO TEST SELECT @Index, REPLICATE('it is only test', 40); SET @Index = @Index +1;ENDGO
然后你用执行一些其他DML操作,前提是不要使数据文件增长,那么你会发现数据库数据文件与事务日志文件的修改日期是不会变化的,也就是说即使数据库的数据文件和日志文件有读写操作,它的修改日期是不会变化的,这个跟普通文件是有区别的。
DECLARE @Index INT =0; WHILE @Index < 20 BEGIN INSERT INTO TEST SELECT @Index, REPLICATE('it is only test', 40); SET @Index = @Index +1; END GO 所以即使你看到你的数据库里面数据文件或事务日志文件的修改日期是几天前、甚至是几个月前的日期,也不要大惊小怪,这个并不代表这这个数据库并没有任务事务操作或活动事务,而是仅仅因为数据库的数据文件和事务日志文件没有扩展而已。因为可能数据文件或事务日志文件有大量空间可用,或是最近数据增长很少的缘故。