二、恢复tempdb数据库的方法
恢复tempdb数据库的方法要分两个部分。首先将tempdb重设到默认大小;其次确认和改变tempdb数据库到新的设备上。
1.重设tempdb到默认大小
(1)将数据库以单用户的方式启动,保证其他用户不能访问数据库。如:
startserver -m
(2)以sa的身份登录到数据库中。如:
isql -Usa -Ppassword
(3)对master数据库进行备份,预防出错情况下恢复。如:
dump database master to 'device_name'
go
(4)对数据库中重要的数据进行备份,将需要备份的表的数据以bcp..out的方式导出到文件中。如:
bcp master..sysusages out sysusages.bcp -c -Usa -Ppassword
bcp master..sysdevices out sysdevices.bcp -c -Usa -Ppassword
bcp master..sysdatabases out sysdatabases.bcp -c -Usa -Ppassword
bcp master..syslogins out syslogins.bcp -c -Usa -Ppassword
bcp master..sysconfigures out sysconfigures.bcp -c -Usa -Ppassword
bcp master..syscharsets out syscharsets.bcp -c -Usa -Ppassword
(5)重新配置数据库,允许对系统目录可以修改。如:
use master
go
sp_configure 'allow updates',1
go
(6)显示sysusages中属于tempdb的记录,并记下记录的数目。如:
begin transaction
go
select * from sysusages where dbid=db_id('tempdb')
go
其中,db_id()函数是用来返回数据库的ID,在这里返回tempdb的ID。
(7)设置tempdb的初始空间(例如:2M)到数据段和日志段中。如:
update sysusages
set segmap=7 where dbid=db_id('tempdb') and lstart=0
go
(8)将sysusages中的关于tempdb的其他记录全部删除。如:
delete sysusages where dbid=db_id('tempdb') and lstart!=0
go
(9)确认sysusages中tempdb的入口点只有以下一行记录。如:
select * from sysusages where dbid=db_id('tempdb')
go
结果:
dbid segmap lstart size vstart
-- ------ ---- - ---- ------
2 7 0 1024 2564
(10)假如以上信息正确,继续到第11步执行交易,否则回滚交易。如:
rollback transaction
go
(11)完成交易。如:
commit transaction
go
(12)重新配置数据库,不允许修改系统目录。如:
sp_configure 'allow update',0
go
(13)马上执行checkpoint,关闭数据库。
注意:在下一次改变tempdb的大小之前,必须重启动数据库,假如不重启数据库继续运行,那么系统将会报严重错误
checkpoint
go
shutdown
go
(14)重启动数据库
2.确认和改变tempdb到新设备上
经过了以上步骤之后,我们已经将tempdb的大小减少到了初始的2M,在我们新增了设备之后,可以通过alter database命令将tempdb扩展到新的设备中。
(1)以sa的身份登录到数据库。如:
isql -Usa -Ppassword
(2)确认tempdb在master设备上有一个存储数据和日志的2MB的段,如:
sp_helpdb tempdb
go
(3)根据需要将tempdb扩展到新的设备上。如:
alter database tempdb on device_name = device_size
go
(4)重新备份master数据库。
dump database master to 'dump_device'
go
其中dump_device是目标dump设备的名字
阅读(1173) | 评论(0) | 转发(0) |