您好,欢迎访问一九零五行业门户网

数据库修复Part1:创建自己的测试corrupt数据库

以前看pual写过很多数据恢复的文章,他很多的测试都是自己创建的corrupt数据库,其实我们自己也可以。 1. 创建数据库数据表插入数据: use master go create database corrupt use corrupt go create table test ( id int , name varchar ( 10 )) declare @i
以前看pual写过很多数据恢复的文章,他很多的测试都是自己创建的corrupt数据库,其实我们自己也可以。
1.       创建数据库数据表插入数据:
use master
go
create databasecorrupt
use corrupt
go
create tabletest(idint, namevarchar(10))
declare @int asint
set @int = 1
while @int 20
begin
insert intotestvalues(@int,'allentest')
set @int += 1
end
2.       使用dbcc ind查看test表所在的pageid
dbcc ind(corrupt,test,1)
3.       用dbcc page查看test表的内容:
dbcc traceon(3604,-1)
go
dbcc page(corrupt,1,55,1)
这里我们只修改slot 1数据,偏移地址为78,转化为10进制为120.
所以当前slot1的实际地址为:55*8192+120=450680
4.       停掉sql server用xvi32打开数据文件然后输入地址找到对应的数据(可以看到数据与step3中看到的数据一致)。
5.       对数据进行修改保存关闭xvi32。
6.       重启sql server然后用dbcc page看page 55 slot1内容(已经被更改)
7.       dbcccheckdb检查数据库发现下面的错误:
dbcc checkdb withno_infomsgs
msg8928, level 16, state 1, line 1
object id2105058535, index id 0, partition id 72057594038779904, alloc unit id72057594039828480 (type in-row data): page (1:55) could not be processed. see other errors for details.
msg8939, level 16, state 98, line 1
table error: objectid 2105058535, index id 0, partition id 72057594038779904, alloc unit id72057594039828480 (type in-row data), page (1:55). test (is_off (buf_ioerr,pbuf->bstat)) failed. values are 12716041 and -4.
这样我们就创建了一个corrupt的数据库,稍后我会花时间测试恢复(page restore/ dbcc checkdbrepair_allow_data_loss/rebuildsql server log),然后把测试步骤发出来.
如果你不想自己创建的话,也可以使用paul提供的两个corrupt数据库做测试。
其它类似信息

推荐信息