SQLServer数据文件和日志文件怎么不改变?

chary8088 2010-09-06 03:04:53
我首选创建一个表
create table mstest..newtable([key] varchar(5));
然后插入两条数据
Insert into mstest..newtable values(2)
Insert into mstest..newtable values(3)

但是发现 MSTEST_log.ldf
MSTEST_log.mdf
并没有变化,修改时间没有变化,大小也没有变化
请问日志和数据保存在哪里了??


多谢
...全文
245 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
obuntu 2010-09-06
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 chary8088 的回复:]

引用 10 楼 obuntu 的回复:

空间满后,自动扩展也会改变。。

如果单纯的插入,删除数据是不会改变文件的时间。


能否具体说下,谢谢
[/Quote]

还真没找到这方面的相关资料,曾经也有和你这样的疑问,后面才慢慢发现在在这两个条件的触发下,才会导致数据文件的最后修改时间(lastAccessTime)发生改变。

如果真要解释的话,可以参考下我的理解吧:

1,我们常见的像txt,doc文件,都是单个文件,OS在处理这些文件的时候,会在内存里产生相关的Handle,这些Handle是对应单个文件的,所以在每次修改txt,doc文件的内容时,handle的信息会同样更新,这也包括了最后修改时间;

2,对于数据文件和日志文件而言,OS不是直接对单个数据文件产生相关的HANDLE来处理,而是通过SQLOS(2005 和 2008)或者UMS (sqlserver 2000)里的Access method模块来操作数据文件的,这个时候根本就不关OS的什么事,所以修改时间的属性就不会发生改变;

3,如果文件需要扩展时,文件控制权又交到了OS手上,修改时间就会发生改变了。

其他方面的就参考楼上几位的吧。不过知道“对表数据的更改,不会改变数据文件的更改时间”就可以了。

没权威答案,只是自己的理解,仅供参考。
:)
claro 2010-09-06
  • 打赏
  • 举报
回复
对于日期的部分,您看联机丛书16F的回复即可。

借您宝地,发2图,关于学习习惯和提问的智慧。谢谢!

好的学习习惯


提问的智慧
chary8088 2010-09-06
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 claro 的回复:]

引用 15 楼 chary8088 的回复:
这个解释有点笼统,也为说出为什么
伙计,去给俺买块豆腐。

一会回复你关于数据和日志的问题。因为我机器有点问题,暂时给你数据。

关于日期的问题,这跟数据库的定义有关。建议你在查询分析器中输入sys.databases,然后全选按F1,了解联机丛书中关于它(各字段)的详细定义。
[/Quote]

期待你的回复
claro 2010-09-06
  • 打赏
  • 举报
回复
/*--以下数据仅表示在完全模式下,数据库会直观呈现数据和日志分别增长的情况,与数据量和事务有关
------------------------------------------------------------------------
-- Author : clArO
-- Date : 2010-09-06

-- Version: Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86)
-- Jul 9 2008 14:43:34
-- Copyright (c) 1988-2008 Microsoft Corporation
-- Enterprise Edition on Windows NT 6.0 <X86> (Build 6001: Service Pack 1)
------------------------------------------------------------------------



*/
USE master
go
create database mstest
go
--命令已成功完成。
create table mstest..newtable([key] varchar(5));
go
--命令已成功完成。

sp_helpdb mstest
--result1:
name db_size
mstest 2.81 MB
--result2:
size
2304 KB
576 KB

---插入10万数据
DECLARE @counter int
SET @counter=1
WHILE(@counter<=100000)
BEGIN
INSERT mstest..newtable values ('a')
SET @counter=@counter+1
END

--再查看数据库大小,注意此时数据文件肯定有变化
sp_helpdb mstest
--result1:
name db_size
mstest 3.81 MB
--result2:
size
3328 KB --已经显示容量增大
576 KB


---插入100万数据
DECLARE @counter int
SET @counter=1
WHILE(@counter<=1000000)
BEGIN
INSERT mstest..newtable values ('a')
SET @counter=@counter+1
END


select COUNT(1) from mstest..newtable
--2100000

sp_helpdb mstest
--result1:
name db_size
mstest 32.06 MB
--result2:
size
32000 KB
832 KB --日志增长



drop database mstest
--命令已成功完成。


/*--以下数据仅表示在完全模式下,数据库没有直观呈现数据和日志分别增长的情况,与数据量和事务有关

*/
USE master
go
create database mstest2
go
--命令已成功完成。
create table mstest2..newtable([key] varchar(5));
go
--命令已成功完成。
use mstest2
--命令已成功完成。
-->查看日志记录数
select COUNT(1) from fn_dblog (NULL,NULL)
--result1:
86

-->插入2行数据
insert into mstest2..newtable values ('a')
insert into mstest2..newtable values ('b')
(1 行受影响)

(1 行受影响)

-->再查看日志情况
select COUNT(1) from fn_dblog (NULL,NULL)
--result2:
110

--显示日志已增长。
/*为何日志增长了,但在DBCC LOGINFO或sp_helpdb中看不到呢?
1、没有数据论证,但肯定跟数据库的日志增长设置有关,比如设置增长比例或者最大值等。
2、事务导致日志增长不没有达到最小显示值。在数据文件中通常是按块比如8K进行存储。
*/

drop database mstest2
--命令已成功完成。
claro 2010-09-06
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 chary8088 的回复:]
这个解释有点笼统,也为说出为什么
[/Quote]伙计,去给俺买块豆腐。

一会回复你关于数据和日志的问题。因为我机器有点问题,暂时给你数据。

关于日期的问题,这跟数据库的定义有关。建议你在查询分析器中输入sys.databases,然后全选按F1,了解联机丛书中关于它(各字段)的详细定义。

chary8088 2010-09-06
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 claro 的回复:]

修改日期obuntu已经回复了,跟数据库级的操作有关,跟数据操作无关。
[/Quote]
这个解释有点笼统,也为说出为什么
claro 2010-09-06
  • 打赏
  • 举报
回复
修改日期obuntu已经回复了,跟数据库级的操作有关,跟数据操作无关。

chary8088 2010-09-06
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 guguda2008 的回复:]

这样的,新建数据库时,会有一个初始分配的空间,然后你建了一张表,往里插数据,这些操作因为数据量比较小,所以只是在初始分配的空间里申请了一个数据页,然后写入了几行信息。所以你的数据库文件还是那么大,至于修改日期就不知道WINDOWS怎么计算的了,扩展数据文件空间时应该会变吧。
[/Quote]

是的,这点我也想不通
guguda2008 2010-09-06
  • 打赏
  • 举报
回复
这样的,新建数据库时,会有一个初始分配的空间,然后你建了一张表,往里插数据,这些操作因为数据量比较小,所以只是在初始分配的空间里申请了一个数据页,然后写入了几行信息。所以你的数据库文件还是那么大,至于修改日期就不知道WINDOWS怎么计算的了,扩展数据文件空间时应该会变吧。
chary8088 2010-09-06
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 obuntu 的回复:]

空间满后,自动扩展也会改变。。

如果单纯的插入,删除数据是不会改变文件的时间。
[/Quote]

能否具体说下,谢谢
obuntu 2010-09-06
  • 打赏
  • 举报
回复
空间满后,自动扩展也会改变。。

如果单纯的插入,删除数据是不会改变文件的时间。
obuntu 2010-09-06
  • 打赏
  • 举报
回复
在分离或附加时,会改变。
喜-喜 2010-09-06
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 chary8088 的回复:]
引用 3 楼 happycell188 的回复:

数据文件与日志文件大小是按照“百分比”或“一定数值”呈阶梯型递增的,少量数据不足以文件大小的变化...


那至少文件的修改时间会变化吧????
[/Quote]

这个不太晓得,也许文件的修改时间是随着文件大小变动而变动的,既然文件的大小是呈阶梯性变化的,那么可以设想一下,文件的修改时间也可能是间断性变化。你可以在 mstest 数据库中插入更多个表,更多的数据来验证一下...
cjzm83 2010-09-06
  • 打赏
  • 举报
回复
区中还有可分配的页吧,你加1万条试试
chary8088 2010-09-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 claro 的回复:]

这个数据变化你肉眼无法识别。

想吃饭吗?==,给你两粒米!
[/Quote]
怎么日志文件Ldf和数据文件mdf的修改时间没变化呢?
chary8088 2010-09-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 happycell188 的回复:]

数据文件与日志文件大小是按照“百分比”或“一定数值”呈阶梯型递增的,少量数据不足以文件大小的变化...
[/Quote]

那至少文件的修改时间会变化吧????
claro 2010-09-06
  • 打赏
  • 举报
回复
这个数据变化你肉眼无法识别。

想吃饭吗?==,给你两粒米!
喜-喜 2010-09-06
  • 打赏
  • 举报
回复
数据文件与日志文件大小是按照“百分比”或“一定数值”呈阶梯型递增的,少量数据不足以文件大小的变化...
chary8088 2010-09-06
  • 打赏
  • 举报
回复
运行了,还是那样
修改时间没有变化,大小也没有变化
guguda2008 2010-09-06
  • 打赏
  • 举报
回复
运行CHECKPOINT再看看

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧