导航
  • 主页
  • 基础类
  • 应用实例
  • 新技术前沿

用日志竟然恢复不了数据库!

thingking 2003-12-22 03:34:28
为了测试用日志恢复数据库,我做了如下操作:

1。新建数据库examDB
2。完全备分数据库:
backup database examDB
to disk='d:\data\15.dat'
3。备分日志:
backup log examDB
to disk='d:\log\15.log'
4。在examDB中建一个表table1并加入数据


现在假如数据库崩溃(我将数据库examDB删除),想恢复到故障点。

1。恢复数据库到完全备分时的状态:
restore database examDB
from disk='d:\data\15.dat'

2。恢复事物日志:
restore log examDB
from disk='d:\log\15.log'
这时总是包错:先前恢复没有使用norecovery后standby.
当我在第一步恢复中加入:
restore database examDB
from disk='d:\data\15.dat'
with nocovery
后,再执行第2。步总是发现数据库正在装载

这是怎么了,请高手援救!



...全文
5 点赞 收藏 5
写回复
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
--下面是测试

--1.新建数据库examDB
create database examDB
go

--2.完全备分数据库
backup database examDB to disk='c:\15.dat'
go

--3.备分日志:
backup log examDB to disk='c:\15.log'
go

--4.在examDB中建一个表table1并加入数据
use examdb
go
create table table1(id int)
insert into table1 values(1)
go
use master
go

--恢复
--下面是错误的操作
--1.恢复数据库到完全备分时的状态:
restore database examDB from disk='c:\15.dat'
go

--2.恢复事物日志:
restore log examDB from disk='c:\15.log'
go

--接着进行正确的恢复
--1.恢复数据库到完全备分时的状态:
restore database examDB from disk='c:\15.dat'
with norecovery,replace
go

--2.恢复事物日志:
restore log examDB from disk='c:\15.log'
with recovery
go

--删除测试的数据库
drop database examDB
回复
--上面的写错了,进行正确的恢复
--1.恢复数据库到完全备分时的状态:
restore database examDB from disk='c:\15.dat'
with norecovery,replace
go

--2.恢复事物日志:
restore log examDB from disk='c:\15.log'
with recovery
go
回复
restore database examDB
from disk='d:\data\15.dat' with nocovery,replace


restore log examDB
from disk='d:\log\15.log' with recovery
回复
txlicenhe 2003-12-22

系统中有一个数据库DB1,系统正在使用的过程中,不小心删除了某表T1的数据
现我可以按照用完整备份文件加日志备份时间点TIME1恢复的方法来恢复该数据库

但问题出在该数据库一直还必须在使用中,所以除了你删除了数据的TA表外,其它的
表的数据你不能只是恢复到错误时间点TIME1处,因为,TIME1以后也有数据变化

解决这个问题有两个方法
1:用LOG EXEPLORE 可以轻松搞定

2:先建立一个数据库DB2,将完整备份文件恢复到DB2中,再用DB2中的T1数据来更新
DB1中的T1数据即可.


--查看备份信息
RESTORE FILELISTONLY FROM DISK ='C:\Program Files\Microsoft SQL Server\MSSQL\BACKUP\db1_backup'

--还原旧的备份
RESTORE DATABASE db2 FROM DISK = 'C:\Program Files\Microsoft SQL Server\MSSQL\BACKUP\db1_backup' with replace,norecovery,
move 'db1_Data' to 'C:\Program Files\Microsoft SQL Server\MSSQL\data\db2_data.mdf',
move 'db1_Log' to 'C:\Program Files\Microsoft SQL Server\MSSQL\data\db2_log.ldf'

--还原数据日志到时间点
restore log db2 from disk='db_log_backup' with stopat='2003/4/22 9:57'
回复
txlicenhe 2003-12-22



/************************************* 差异备份 ********************/
http://expert.csdn.net/Expert/topic/2317/2317894.xml?temp=.8740045
下面的是详细的过程:

--清除环境,防止现有的数据影响测试结果
exec master..xp_cmdshell 'del c:\text.bak'
if exists(select * from master..sysdatabases where name='test')
drop database test
go

--创建数据库
create database test
go

--打开创建的数据
use test
go

--创建测试表
create table t(a int)

--切换回master数据库
use master
go

--插入数据1
insert into test..t select 1
go

--然后进行一次完整备份
backup database test to disk='c:\test.bak'
go

--插入数据2
insert into test..t select 2
go

--再进行一次完整备份
backup database test to disk='c:\test.bak'
go

--插入3,4
insert into test..t select 3
insert into test..t select 4
go

--差异备份:
backup database test to disk='c:\test.bak' with differential

--删除数据库
drop database test

--还原数据库和差异数据库备份
--还原完整备份
restore database test from disk='c:\test.bak' with file=2,norecovery
--还原差异备份的内容
restore database test from disk='c:\test.bak' with file=3,recovery

--显示恢复后的数据
select * from test..t
回复
发动态
发帖子
MS-SQL Server
创建于2007-09-28

3.2w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
社区公告
暂无公告