- 论坛徽章:
- 0
|
首先,强调一下,这是一个非常危险的操作,没有必要的话不要尝试。
1. 如果有条件,强烈建议先做好所有用户数据库,包括master数据库的备份
至少要做一个master数据库的备份
2. 将下列master数据库中系统表进行bcp备份
master..sysusages
master..sysdevices
master..sysdatabases
master..syslogins
master..sysconfigures
master..syscharsets
3. isql -Usa -Ppasswd -Sservername
1>; use master
2>; go
1>; sp_configure "allow updates", 1
2>; go
1>; begin transaction
2>; go
1>; select * from sysusages
2>; where dbid = db_id('tempdb')
3>; go
1>; select * from sysusages where dbid=2
2>; go
例:
dbid segmap lstart size vstart pad unreservedpgs
------ ----------- ----------- ----------- ----------- ------ -------------
2 7 0 1024 4100 NULL 380
2 3 1024 76800 33554432 NULL 76500
2 4 77824 25600 33631232 NULL 25500
如果其中两兆(即lstart为0 size为1024)的行中segmap不为7,需要先将其更改为7
1>; update sysusages
2>; set segmap = 7 where dbid = db_id('tempdb')
3>; and lstart = 0
4>; go
如果已经为7,上述步骤可以略过
删除其中lstart不为0的所有行
1>; delete sysusages where dbid = db_id('tempdb')
2>; and lstart != 0
3>; go
检查删除后的结果是否正确
1>; select * from sysusages where dbid = db_id('tempdb')
2>;go
例:
dbid segmap lstart size vstart pad unreservedpgs
------ ----------- ----------- ----------- ----------- ------ -------------
2 7 0 1024 4100 NULL 380
剩且仅剩一行信息。
如果发现删除后信息不正确,马上回滚所有已作动作
1>; rollback transaction
2>; go
如果正确,提交已作动作,这样将无法恢复
1>; commit transaction
2>; go
重新启动数据库服务器
1>; checkpoint
2>; go
1>; shutdown
2>; go
之后如果服务器正常,在没有用户进程连接进行操作的情况下,新建数据库tempdb设备,并进行数据库tempdb的扩容,之后如果一切正常,进行master数据库的备份。
1>; dump database master to " dump_device"
2>; go |
|