SQL2005中,差異備份的數據如何還原?

---涛声依旧--- 2007-04-04 04:23:09
一個同事不小時把一個表裡的一部分數據刪除了,服務器沒有日誌備份,有2007.4.1全備份和2007.4.2~2007.4.4的差異備份:
Training_backup_200704020100.bak
Training_backup_200704030100.bak
Training_backup_200704040100.bak

我已經把2007.4.1以前的數據恢復了(恢復到本地),但是2號到4號的差異備份始終還原不了。
請各位幫忙了。先謝了!

方法1:
右鍵數據庫名-->任務tasks-->還原restore-->DataBase-->From Device-->Add File(Training_backup_200704020100.bak)-->Restore打上勾-->Options一、四選項打上勾-->點擊確定報錯:The log or differential backup cannot be restored because no files are ready rollforward.

方法2:通過文件組還原
右鍵數據庫名-->任務tasks-->還原restore-->Files and FileGroups>From Device-->Add File(Training_backup_200704020100.bak)-->Restore打上勾-->Options一、四選項打上勾-->點擊確定報錯:The file or filegroup "Training_log"cannot be selected for this operation.

...全文
1785 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
---涛声依旧--- 2008-07-17
  • 打赏
  • 举报
回复
/****** Object: StoredProcedure [dbo].[SP_Sys_LockInfo] Script Date: 07/17/2008 15:24:13 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/*--處理鎖死

查看當前進程,或鎖死進程,並能自動殺掉死進程

因為是針對死的,所以如果有鎖死進程,只能查看鎖死進程
當然,你可以通過參數控制,不管有沒有鎖死,都只查看鎖死進程

--調用示例

exec SP_Sys_LockInfo
--*/
create proc [dbo].[SP_Sys_LockInfo]
@kill_lock_spid bit=0, --是否殺掉鎖死的進程,1 殺掉, 0 僅顯示
@show_spid_if_nolock bit=1 --如果沒有鎖死的進程,是否顯示正常進程資訊,1 顯示,0 不顯示
as
declare @count int,@s nvarchar(4000),@i int
select id=identity(int,1,1),標誌,
進程ID=spid,線程ID=kpid,塊進程ID=blocked,資料庫ID=dbid,
資料庫名=db_name(dbid),用戶ID=uid,用戶名=loginame,累計CPU時間=cpu,
登陸時間=login_time,打開事務數=open_tran, 進程狀態=status,
工作站名=hostname,應用程式名=program_name,工作站進程ID=hostprocess,
功能變數名稱=nt_domain,網卡位址=net_address
into #t from(
select 標誌='鎖死的進程',
spid,kpid,a.blocked,dbid,uid,loginame,cpu,login_time,open_tran,
status,hostname,program_name,hostprocess,nt_domain,net_address,
s1=a.spid,s2=0
from master..sysprocesses a join (
select blocked from master..sysprocesses group by blocked
)b on a.spid=b.blocked where a.blocked=0
union all
select '|_犧牲品_>',
spid,kpid,blocked,dbid,uid,loginame,cpu,login_time,open_tran,
status,hostname,program_name,hostprocess,nt_domain,net_address,
s1=blocked,s2=1
from master..sysprocesses a where blocked<>0
)a order by s1,s2

select @count=@@rowcount,@i=1

if @count=0 and @show_spid_if_nolock=1
begin
insert #t
select 標誌='正常的進程',
spid,kpid,blocked,dbid,db_name(dbid),uid,loginame,cpu,login_time,
open_tran,status,hostname,program_name,hostprocess,nt_domain,net_address
from master..sysprocesses
set @count=@@rowcount
end

if @count>0
begin
create table #t1(id int identity(1,1),a nvarchar(30),b Int,EventInfo nvarchar(3500))
if @kill_lock_spid=1
begin
declare @spid varchar(10),@標誌 varchar(10)
while @i<=@count
begin
select @spid=進程ID,@標誌=標誌 from #t where id=@i
insert #t1 exec('dbcc inputbuffer('+@spid+')')
if @標誌='鎖死的進程' exec('kill '+@spid)
set @i=@i+1
end
end
else
while @i<=@count
begin
select @s='dbcc inputbuffer('+cast(進程ID as varchar)+')' from #t where id=@i
insert #t1 exec(@s)
set @i=@i+1
end
select a.*,進程的SQL語句=b.EventInfo
from #t a join #t1 b on a.id=b.id
end
OracleRoob 2007-04-06
  • 打赏
  • 举报
回复
Log Explorer for SQL Server v4.0.2 的下载地址

http://www.315safe.com/download/downlinks.asp?downid=2426
gahade 2007-04-06
  • 打赏
  • 举报
回复
来了,听说有分接.呵呵
xiaoku 2007-04-05
  • 打赏
  • 举报
回复
顶顶...我没有 2005
---涛声依旧--- 2007-04-05
  • 打赏
  • 举报
回复
查了一下幫助,改用下面的,出現2個問題:
1、用WITH NORECOVERY還原完全備份的,無法使用,因為數據庫還在恢復中;
2、無法找到ID號為2的文件:
Cannot find file ID 2 on device 'd:\Training_backup_200704020100.bak'.

RESTORE DATABASE training
FROM disk='d:\Training_backup_200704010100.bak'
WITH NORECOVERY,
MOVE 'FIHTraining_Data' TO 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\Training.mdf', ---主数据文件名
MOVE 'FIHTraining_Log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\Training_log.ldf',--日志文件名
file=1---这里输入完全备份的文件号

--还原差异备份
RESTORE DATABASE training
FROM disk='d:\Training_backup_200704020100.bak'
with file=2
--还原差异备份
RESTORE DATABASE training
FROM disk='d:\Training_backup_200704030100.bak'
with file=2
--还原差异备份
RESTORE DATABASE training
FROM disk='d:\Training_backup_200704040100.bak'
with file=2
---涛声依旧--- 2007-04-05
  • 打赏
  • 举报
回复
TO:ReViSion(和尚) ( ) 信誉:100

---两条语句一起运行,仍然報錯:

Msg 3117, Level 16, State 1, Line 2
The log or differential backup cannot be restored because no files are ready to rollforward.
Msg 3013, Level 16, State 1, Line 2
RESTORE DATABASE is terminating abnormally.
feixiangVB 2007-04-05
  • 打赏
  • 举报
回复
MARK!
---涛声依旧--- 2007-04-05
  • 打赏
  • 举报
回复
TO:wangtiecheng(不知不为过,不学就是错!) ( ) 信誉:100
--"还原备份集",选择"数据库--差异"

這個選項SQL2005中沒有啊
---涛声依旧--- 2007-04-05
  • 打赏
  • 举报
回复

restore database training from disk='d:\Training_backup_200704040100.bak' with norecovery

行不通,報錯如下:
Msg 3117, Level 16, State 1, Line 1
The log or differential backup cannot be restored because no files are ready to rollforward.
Msg 3013, Level 16, State 1, Line 1
RESTORE DATABASE is terminating abnormally.
---涛声依旧--- 2007-04-05
  • 打赏
  • 举报
回复
謝謝各位了,我一個一個的試試看
---涛声依旧--- 2007-04-05
  • 打赏
  • 举报
回复
誰有SQL Log Explorer的正確下載地址啊?
誰搞定就誰給100分。
ReViSion 2007-04-04
  • 打赏
  • 举报
回复

---建立备份文件
backup database northwind to disk='c:\a.bak'
backup database northwind to disk='c:\b.bak' WITH DIFFERENTIAL



---测试如下(还原完敕备份)

RESTORE DATABASE northwind
FROM disk='c:\a.bak'
WITH NORECOVERY,
MOVE 'northwind' TO 'D:\Microsoft SQL Server\MSSQL\Data\northwnd.mdf', ---主数据文件名
MOVE 'northwind_log' TO 'D:\Microsoft SQL Server\MSSQL\Data\northwnd_log.ldf', --日志文件名
file=1---这里输入完全备份的文件号


--还原差异备份
RESTORE DATABASE northwind
FROM disk='c:\b.bak'
--MOVE 'MyNwind' TO 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\NewNwind.mdf', ---主数据文件名
--MOVE 'MyNwindLog1' TO 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\NewNwind.ldf' --日志文件名
with file=1---这里输入差异备份的文件号
ReViSion 2007-04-04
  • 打赏
  • 举报
回复
RESTORE DATABASE MyNwind
FROM disk='在这里输入完全备份文件的路径'
WITH NORECOVERY,
MOVE 'MyNwind' TO 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\NewNwind.mdf', ---主数据文件名
MOVE 'MyNwindLog1' TO 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\NewNwind.ldf' --日志文件名
,with file=1---这里输入完全备份的文件号


RESTORE DATABASE MyNwind
FROM disk='在这里输入差异备份文件的路径'
--MOVE 'MyNwind' TO 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\NewNwind.mdf', ---主数据文件名
--MOVE 'MyNwindLog1' TO 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\NewNwind.ldf' --日志文件名
with file=1---这里输入差异备份的文件号


---两条语句一起运行
ReViSion 2007-04-04
  • 打赏
  • 举报
回复
如果全备份文件和差异备份在不同的文件,还真不知道怎么还原
adverse 2007-04-04
  • 打赏
  • 举报
回复
帮顶,学习一下
OracleRoob 2007-04-04
  • 打赏
  • 举报
回复
进行差异恢复
企业管理器--右键"数据库"--所有任务--还原数据库
--"还原为数据库库"中选择数据库名:test
--还原选择"从设备"--选择设备--添加--添加你的备份文件
--确定,回到数据库还原的界面
--"还原备份集",选择"数据库--差异"
--"恢复完成状态",选择"使数据库可以继续运行,但无法还原其它事务日志"
--确定

--或用SQL语句:
restore database 数据库 from disk='c:\你的差异备份文件名' with norecovery
OracleRoob 2007-04-04
  • 打赏
  • 举报
回复
--进行差异备份的还原:

http://blog.csdn.net/xluzhong/archive/2005/04/09/299601.aspx
---涛声依旧--- 2007-04-04
  • 打赏
  • 举报
回复
謝謝各位了!

Log Explorer英文版或繁體版的哪儿有啊?
我想試試看能否恢復SQL2005的

---涛声依旧--- 2007-04-04
  • 打赏
  • 举报
回复
TO:roy_88(中国风_燃烧你的激情!!!)
那要怎樣選擇得了呢?
中国风 2007-04-04
  • 打赏
  • 举报
回复
偶曾测试过在(SQL2000,SQL2005在同一台机)
SQL2000是默认实例安装,可以在2000可以

只装2005情况下,楼主可以测试一下.几分钟就会有结果
加载更多回复(7)

34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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