1,简单、完整模式我都明白,一个是不允许恢复到某一个时点一个是允许,这么说虽然简单点,但是应该没有问题2,关于 大容量日志记录恢复 这个我看了联机丛书也从网络上找了资料可是还没有明白,
不明白之处有一下几点 一, 大容量日志记录恢复 到底可以不可以恢复到某一时点(不含特殊例外)
二, 联机丛书上说的“如果日志损坏,或者自最新的日志备份后发生了大容量操作,则必须重做自上次备份后所做的更改”
是什么意思, 是不是说 如果发生了所谓的大容量操作就无法回复到过往的某一个时点,没有发生所谓的 大容量操 就可以恢复到某一个时点
还是正好相反, 哪位高手能用比较简单生动的话语告知一下,谢谢了,我是新手
不明白之处有一下几点 一, 大容量日志记录恢复 到底可以不可以恢复到某一时点(不含特殊例外)
二, 联机丛书上说的“如果日志损坏,或者自最新的日志备份后发生了大容量操作,则必须重做自上次备份后所做的更改”
是什么意思, 是不是说 如果发生了所谓的大容量操作就无法回复到过往的某一个时点,没有发生所谓的 大容量操 就可以恢复到某一个时点
还是正好相反, 哪位高手能用比较简单生动的话语告知一下,谢谢了,我是新手
大容量复制操作:
SELECT INTO。
大容量装载操作(bcp 和 BULK INSERT)。
CREATE INDEX(包括索引视图)。
text 和 image 操作(WRITETEXT 和 UPDATETEXT)。
-- 数据还原到指定时间点的处理示例
-- 创建测试数据库
create database db
gobackup database db to disk='c:\db.bak' with format
go--创建测试表
create table db.dbo.TB_test(id int)
insert into db.dbo.tb_test values (3)
insert into db.dbo.tb_test values (5)
-- 延时1秒钟,再进行后面的操作(这是由于sql server 的时间精度最大为百分之三秒,不延时的话,可能会导致还原到时间点的操作失败)
waitfor delay '00:00:03'
go
-- 假设我们现在误操作删除了db.dbo.tb_test这个表 select * from db.dbo.tb_test
--drop table db.dbo.tb_testdelete from db.dbo.tb_test where id=5
-- 保存删除表的时间,这个时间其实你是可以知道的,比如现实操作中你不小心删除某个表的时间
select dt=getdate() into #
go
-- 进行一个所谓的大数据量操作,看看能否执行回滚到大数据量之前的操作
create unique clustered index i_temp_number
on db.dbo.tb_test(id)
gobackup log db to disk ='c:\db_log.bak' with format
gorestore database db from disk='c:\db.bak' with replace,norecovery
godeclare @dt datetime
select @dt=dateadd(ms,-20,dt) from # --获取比表被删除时间略早的时间
restore log db from disk='c:\db_log.bak' with recovery,stopat=@dt
go
---------------------------------------------
-- 执行到这里就发生了如下提示的错误服务器: 消息 4327,级别 16,状态 1,行 3
此备份集中的日志包含最小日志记录更改。禁止进行时点恢复。RESTORE 将前滚到日志的结尾,而不恢复数据库。
已处理 16 页,这些页属于数据库 'db' 的文件 'db'(位于文件 1 上)。
已处理 2 页,这些页属于数据库 'db' 的文件 'db_log'(位于文件 1 上)。
RESTORE LOG 操作成功地处理了 18 页,花费了 0.048 秒(3.050 MB/秒)。此点证明:
一旦执行了类似创建索引的所谓大容量数据操作,就无法进行时点恢复了,
哪怕是你要恢复的时点是进行大容量数据操作之前select * from db.dbo.tb_test
go-- 删除测试数据库 和 临时表
DROP DATABASE Db
drop table #