Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1268574
  • 博文数量: 510
  • 博客积分: 20296
  • 博客等级: 上将
  • 技术积分: 4680
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-30 03:58
文章存档

2011年(13)

2010年(92)

2009年(242)

2008年(163)

我的朋友

分类: 数据库开发技术

2009-04-01 20:41:10

引言

 

    本文内容来源于一篇白皮书,但在原文的基础上增加了部分内容,为了表示对原文作者

的尊重,并未标示为原创,特此申明。目的只是希望能与各位网友一起分享好文章,如有撰写不好的地方,请多多原谅,也感谢各位的支持!

 

 

tempdb介绍

 

    SQL Server2005里,tempdb系统数据库经历了许多的改变,包括一些新的用法以及内部的优化,但从SQL Server 2000SQL Server 2005,其架构大部分是没有改变的。

 

    tempdb系统数据库与用户数据库是非常相似的。主要的区别在于:SQL Server关闭以后,存储在tempdb里的数据将会被自动清除掉。(曾经遇到这样一个网友,在过大年前把一些业务测试数据以及相关数据库对象存储在tempdb里,在过年期间,由于服务器应用程序等某种原因造成磁盘空间填满,SQL Server服务异常关闭,磁盘问题解决以后,重启SQL Server,由于没有备份,存储在tempdb里的所有数据都丢失,我们应该避免这样的问题。)

 

    每次SQL Server重启时,tempdb数据库会从model系统数据库那复制一份,并继承某些model数据库的属性,比如“ALLOW_SNAPSHOT_ISOLATION”属性,当然有些属性并不能

继承,比如“恢复模式”属性,无论model数据库是什么恢复模式,tempdb只能是“简单恢复模式”,这是以便始终自动回收 tempdb 日志空间  ,且我们尝试修改其恢复模式时,也会抛出错误如下,提示你不能修改。

 

Msg 5058, Level 16, State 1, Line 1

Option 'RECOVERY' cannot be set in database 'tempdb'.

 

  tempdb中,不能创建和使用新的文件组:

 

    ALTER DATABASE tempdb

ADD filegroup tempdev2

GO

 

Msg 1826, Level 16, State 4, Line 1

User-defined filegroups are not allowed on "tempdb".

 

  也就意味着,tempdb只能使用默认的PRIMARY文件组,但可以为tempdb创建多个数据

文件和日志文件。数据文件的默认大小是8M,当SQL Server重新启动以后,tempdb又会

 

 

恢复到这个默认的配置值,而“自动增长“值只是临时性的,当SQL Server重新启动以后,又会重新恢复(最后这个关于自动增长值的说法,原文是这样:

Auto grow is temporary for tempdb (unlike other types of databases). It is reset when SQL Server restarts.)但经过我测试,并不是这样,重新启动以后,并不会重新恢复。

 

  用户可以在tempdb数据库创建和使用表,也可以使用事务和回滚事务。但是,不能在tempdb数据库中重做日志文件,这是因为一旦SQL Server重新启动,所有内容将不覆存在。因为事务日志并不会被闪回,所以在tempdb数据库中提交事务要比在用户数据库中快。在用户数据库中,事务具有ACID属性,但是在tempdb的事务中,并不具有。

 

  SQL Server使用tempdb存储一些内部对象,比如查询的中间结果集。大部分的这些内部操作不会生成日志纪录,因为它们不需要回滚,所以这些操作是非常快的。

 

  当然,在tempdb上也存在一些限制。另外的,一些数据库属性的操作不能使用在tempdb上,比如上面提到的修改恢复模型,更具体的内容,请参考联机帮助相关部分:

 

  不允许在tempdb上进行自动收缩。其数据库文件和日志文件收缩能力有限,这是因为存储在tempdb里的许多隐藏对象不能通过收缩操作除去。

 

  下面同样是一些tempdb的限制操作:

 

  .不能开启数据库的”CHECKSUM”属性。

  .不能创建数据库快照。

.不支持DBCC CHECKALLOCDBCC CHECKCATALOG操作。

.最好是离线完成DBCC CHECKTABLE检查操作。这句话的意思是:它需要一个TAB-S锁。

tempdb在使用时,会发生内部的一致性检查操作。如果检查失败,用户连接将会中断,使用了的空间会被中断的连接释放。

阅读(725) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~