Chinaunix首页 | 论坛 | 博客
  • 博客访问: 832488
  • 博文数量: 328
  • 博客积分: 7000
  • 博客等级: 少将
  • 技术积分: 3810
  • 用 户 组: 普通用户
  • 注册时间: 2006-12-15 22:00
文章分类

全部博文(328)

文章存档

2009年(2)

2008年(84)

2007年(207)

2006年(35)

我的朋友

分类: Sybase

2007-01-08 18:30:45

二、恢复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) |
给主人留下些什么吧!~~