我们知道在SqlServer实例启动过程中数据库会进行还原(Redo,Undo)然后打开提供服务,但我们知道tempdb是不提供重做机制的(Redo)那tempdb是如何还原的呢?如果tempdb损坏我们该怎么办,这里我将通过实例给大家介绍.
有时tempdb因为一些原因会变得非常巨大,一些DBA的解决方式就是重启数据库实例,的确重启后tempdb就会恢复到初始设置大小,理由很简单tempdb会重新创建.
Tempdb的创建过程.
1在model库打开后进行tempdb创建(可以日志中看到model总是在tempdb之前打开)
2从model库中拷贝extent(s)到tempdb主文件并根据master库中的meta data信息创建tempdb主数据文件(Mdf)
3 根据master中定义tempdb的主文件大小填充主文件
4 根据master中定义的主日志文件大小创建日志文件
5 创建,附加其他文件
注:如果tempdb不能创建,则实例shutdown
这里我们做个测试在model库中简单的创建一个表然后重启实例
code
use modelcreate table t1(id int)
重启实例后我们可以发现tempdb中也存在表t1 如图1-1,其实就是tempdb启动时主文件要从model中拷贝扩展区(extent).我们甚至可以分析相应的数据页,可以看到相应的数据页tempdb与model是完全一致的.感兴趣的朋友可以自行尝试.
新闻热点
疑难解答