请帮忙看看,只有一个.bak的数据库备份文件,现在无法还原数据库。

DoveFeng 2010-03-11 09:04:37
请帮忙看看,数据库备份文件错误,无法还原数据库。

1:现在只有sql server 的 .bak 备份文件。
restore verifyonly from disk = 'D:\recovery\sss.BAK' 是正常的。

2:还原数据库,报以下错误。

10% restored。
服务器: 消息 3270,级别 16,状态 1,行 1
发生内部一致性错误。请与技术支持联系以寻求协助。
服务器: 消息 3013,级别 16,状态 1,行 1
RESTORE DATABASE 操作异常终止。

看有没有别的办法?谢谢!
...全文
265 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
dlcyj 2010-03-12
  • 打赏
  • 举报
回复
用软件恢复的文件,你不要指望能还原了,因为数据恢复软件恢复的就是坏文件。
DoveFeng 2010-03-11
  • 打赏
  • 举报
回复
我这个是 完整数据备份。
东那个升 2010-03-11
  • 打赏
  • 举报
回复
可以强制还原吗。。。
东那个升 2010-03-11
  • 打赏
  • 举报
回复
是2000的数据库。。。。。
DoveFeng 2010-03-11
  • 打赏
  • 举报
回复

刚才用 蓝天白云 提供的办法报以下错误。
# ws_hgo
# (蓝天白云--(全面提升!!))
#
# 等 级:


(所影响的行数为 2 行)

服务器: 消息 3270,级别 16,状态 1,行 1
发生内部一致性错误。请与技术支持联系以寻求协助。
服务器: 消息 3013,级别 16,状态 1,行 1
RESTORE DATABASE 操作异常终止。
huangheguyun 2010-03-11
  • 打赏
  • 举报
回复
你的数据备份是完整的吗?

如果备份数据库出了问题 基本没救了
--小F-- 2010-03-11
  • 打赏
  • 举报
回复
如果备份数据库出了问题 基本没救了
DoveFeng 2010-03-11
  • 打赏
  • 举报
回复
因为磁盘坏了,后面恢复的磁盘里的数据,完全备份文件就成这样了。数据文件及日志文件都没有恢复出来。谢谢
sql_sf 2010-03-11
  • 打赏
  • 举报
回复
引用 7 楼 snowfoxmonitor 的回复:
请帮忙看看,数据库备份文件错误,无法还原数据库。

1:现在只有sql server 的 .bak 是完全备份文件。
restore verifyonly from disk = 'D:\recovery\sss.BAK' 是正常的。

2:还原数据库,报以下错误。

10% restored。
服务器: 消息 3270,级别 16,状态 1,行 1
发生内部一致性错误。请与技术支持联系以寻求协助。
服务器: 消息 3013,级别 16,状态 1,行 1
RESTORE DATABASE 操作异常终止。

看有没有别的办法?谢谢!

1正常
1不也是還原數據庫嗎?
dawugui 2010-03-11
  • 打赏
  • 举报
回复
是完全备份文件?

不会是损坏了吧?

DoveFeng 2010-03-11
  • 打赏
  • 举报
回复
请帮忙看看,数据库备份文件错误,无法还原数据库。

1:现在只有sql server 的 .bak 是完全备份文件
restore verifyonly from disk = 'D:\recovery\sss.BAK' 是正常的。

2:还原数据库,报以下错误。

10% restored。
服务器: 消息 3270,级别 16,状态 1,行 1
发生内部一致性错误。请与技术支持联系以寻求协助。
服务器: 消息 3013,级别 16,状态 1,行 1
RESTORE DATABASE 操作异常终止。

看有没有别的办法?谢谢!
Zoezs 2010-03-11
  • 打赏
  • 举报
回复
引用 3 楼 sql77 的回复:
备份文件出问题了?........

应该是备份文件的问题。
sql_sf 2010-03-11
  • 打赏
  • 举报
回复
你們下手特快了~~
太短了!
ws_hgo 2010-03-11
  • 打赏
  • 举报
回复
--或者用下面的存储过程.   

/*--恢复数据库

--邹建 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

--添加移动逻辑文件的处理
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)
ws_hgo 2010-03-11
  • 打赏
  • 举报
回复
还原数据库   
企业管理器中的操作:

企业管理器--右键"数据库"--所有任务--还原数据库
--"还原为数据库库"中输入还原后的数据库名
--还原选择"从设备"--选择设备--添加--添加你的备份文件--确定,回到数据库还原的界面
--选项--将"移至物理文件名"中的物理文件名修改为你的数据文件要存放的文件名
--如果要还原的数据库已经存在,选择"在现有数据库上强制还原"-
-确定
SQL77 2010-03-11
  • 打赏
  • 举报
回复
备份文件出问题了?........
dawugui 2010-03-11
  • 打赏
  • 举报
回复
如果你的备份文件是完全备份的话,是可以恢复的.
如果不是,就友情帮顶了.

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧