恢复数据库失败,错误信息如正文,各位大哥给点意见
Server: Msg 3270, Level 16, State 1, Line 2
An internal consistency error occurred. Contact Technical Support for assistance.
Server: Msg 3013, Level 16, State 1, Line 2
RESTORE DATABASE is terminating abnormally.
问题点数:100、回复次数:8Top
1 楼lvltt(未完成)回复于 2003-12-01 14:55:50 得分 10
一个内在的一致性错误。
http://expert.csdn.net/Expert/topic/2359/2359124.xml?temp=.4968531
数据库备份/恢复方案 邹建Top
2 楼zjcxc(邹建)回复于 2003-12-01 15:03:07 得分 80
试试用下面的存储过程恢复
/*--恢复数据库
--邹建 2003.10--*/
/*--调用示例
--完整恢复数据库
exec p_RestoreDb @bkfile='c:\db_20031015_db.bak',@dbname='db'
--差异备份恢复
exec p_RestoreDb @bkfile='c:\db_20031015_db.bak',@dbname='db',@retype='DBNOR'
exec p_backupdb @bkfile='c:\db_20031015_df.bak',@dbname='db',@retype='DF'
--日志备份恢复
exec p_RestoreDb @bkfile='c:\db_20031015_db.bak',@dbname='db',@retype='DBNOR'
exec p_backupdb @bkfile='c:\db_20031015_log.bak',@dbname='db',@retype='LOG'
--*/
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_RestoreDb]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_RestoreDb]
GO
create proc p_RestoreDb
@bkfile nvarchar(1000), --定义要恢复的备份文件名
@dbname sysname='', --定义恢复后的数据库名,默认为备份的文件名
@dbpath nvarchar(260)='', --恢复后的数据库存放目录,不指定则为SQL的默认数据目录
@retype nvarchar(10)='DB', --恢复类型:'DB'完事恢复数据库,'DBNOR' 为差异恢复,日志恢复进行完整恢复,'DF' 差异备份的恢复,'LOG' 日志恢复
@filenumber int=1, --恢复的文件号
@overexist bit=1, --是否覆盖已经存在的数据库,仅@retype为'DB'/'DBNOR'是有效
@killuser bit=1 --是否关闭用户使用进程,仅@overexist=1时有效
as
declare @sql varchar(8000)
--得到恢复后的数据库名
if isnull(@dbname,'')=''
select @sql=reverse(@bkfile)
,@sql=case when charindex('.',@sql)=0 then @sql
else substring(@sql,charindex('.',@sql)+1,1000) end
,@sql=case when charindex('\',@sql)=0 then @sql
else left(@sql,charindex('\',@sql)-1) end
,@dbname=reverse(@sql)
--得到恢复后的数据库存放目录
if isnull(@dbpath,'')=''
begin
select @dbpath=rtrim(reverse(filename)) from master..sysfiles where name='master'
select @dbpath=reverse(substring(@dbpath,charindex('\',@dbpath),4000))
end
--生成数据库恢复语句
set @sql='restore '+case @retype when 'LOG' then 'log ' else 'database ' end+@dbname
+' from disk='''+@bkfile+''''
+' with file='+cast(@filenumber as varchar)
+case when @overexist=1 and @retype in('DB','DBNOR') then ',replace' else '' end
+case @retype when 'DBNOR' then ',NORECOVERY' else ',RECOVERY' end
print @sql
--添加移动逻辑文件的处理
if @retype='DB' or @retype='DBNOR'
begin
--从备份文件中获取逻辑文件名
declare @lfn nvarchar(128),@tp char(1),@i int
--创建临时表,保存获取的信息
create table #tb(ln nvarchar(128),pn nvarchar(260),tp char(1),fgn nvarchar(128),sz numeric(20,0),Msz numeric(20,0))
--从备份文件中获取信息
insert into #tb exec('restore filelistonly from disk='''+@bkfile+'''')
declare #f cursor for select ln,tp from #tb
open #f
fetch next from #f into @lfn,@tp
set @i=0
while @@fetch_status=0
begin
select @sql=@sql+',move '''+@lfn+''' to '''+@dbpath+@dbname+cast(@i as varchar)
+case @tp when 'D' then '.mdf''' else '.ldf''' end
,@i=@i+1
fetch next from #f into @lfn,@tp
end
close #f
deallocate #f
end
--关闭用户进程处理
if @overexist=1 and @killuser=1
begin
declare @spid varchar(20)
declare #spid cursor for
select spid=cast(spid as varchar(20)) from master..sysprocesses where dbid=db_id(@dbname)
open #spid
fetch next from #spid into @spid
while @@fetch_status=0
begin
exec('kill '+@spid)
fetch next from #spid into @spid
end
close #spid
deallocate #spid
end
--恢复数据库
exec(@sql)
goTop
3 楼CrazyFor(冬眠的鼹鼠)回复于 2003-12-01 15:03:52 得分 10
TRY:
到企业管理器->到"数据库"这个字上右键,不要选中某个库->所有任务->恢复数据库->
1,输入新的数据库名,并打开你的备份文件.
2,在选项中,选中在现有数据库上强制恢复,并在下面输入新的还原目录.Top
4 楼stone_lin(师大林)回复于 2003-12-01 15:25:32 得分 0
TO:zjcxc(邹建)
出现如下错误:
restore database Peanut1130 from disk='E:\Microsoft SQL Server\MSSQL\BACKUP\Peanut_db_200311300312.BAK' with file=1,replace,RECOVERY
(9 row(s) affected)
Server: Msg 3270, Level 16, State 1, Line 1
An internal consistency error occurred. Contact Technical Support for assistance.
Server: Msg 3013, Level 16, State 1, Line 1
RESTORE DATABASE is terminating abnormally.
TO:CrazyFor(冬眠的鼹鼠)
尝试多次,还是一样的错误
Top
5 楼zjcxc(邹建)回复于 2003-12-01 21:01:31 得分 0
看来应该是你的备份文件出了问题Top
6 楼zjcxc(邹建)回复于 2003-12-01 21:02:28 得分 0
查询分析器执行:
restore filelistonly from disk='E:\Microsoft SQL Server\MSSQL\BACKUP\Peanut_db_200311300312.BAK'
及
restore mediaonly from disk='E:\Microsoft SQL Server\MSSQL\BACKUP\Peanut_db_200311300312.BAK'
的结果分别是什么?Top
7 楼stone_lin(师大林)回复于 2003-12-02 11:04:35 得分 0
TO:zjcxc(邹建)
Peanut_Data D:\BDDATA\MSSQL\Data\Peanut\Peanut_Data.MDF D PRIMARY 126484480 35184372080640
Forums D:\BDDATA\MSSQL\Data\Peanut\Forums_Data.NDF D Forums 2097152 35184372080640
WebVisit D:\BDDATA\MSSQL\Data\Peanut\WebVisit_Data.NDF D WebVisit 16121856 35184372080640
DomainUser D:\BDDATA\MSSQL\Data\Peanut\DomainUser_Data.NDF D DomainUser 446824448 35184372080640
Mail D:\BDDATA\MSSQL\Data\Peanut\Mail_Data.NDF D Mail 288423936 35184372080640
IdxForums D:\BDDATA\MSSQL\Data\Peanut\IdxForums_Data.NDF D IdxForums 2097152 35184372080640
IdxDomainUser D:\BDDATA\MSSQL\Data\Peanut\IdxDomainUser_Data.NDF D IdxDomainUser 197853184 35184372080640
PeanutStatic D:\BDDATA\MSSQL\Data\Peanut\PeanutStatic_Data.NDF D PeanutStatic 1048576 35184372080640
Peanut_log D:\BDDATA\MSSQL\Data\Peanut\Peanut_log.LDF L NULL 211419136 35184372080640
RESTORE LABELONLY的结果是:
NULL NULL 1 1 {52A1D9AF-0000-0000-0000-000000000000} 1 0 NULL Microsoft SQL Server 4608 2003-11-30 03:12:00.000
谢谢你热情的帮助
同时我在原数据中执行数据库维护计划中一致性检查出现错误,错误号22029,执行失败,没有其他信息
Top
8 楼zjcxc(邹建)回复于 2003-12-02 11:42:18 得分 0
估计真的是备份文件有问题了.没办法Top




