SQLServer 以上误操作数据库恢复方法Word文档下载推荐.docx
- 文档编号:8298516
- 上传时间:2023-05-10
- 格式:DOCX
- 页数:13
- 大小:1.37MB
SQLServer 以上误操作数据库恢复方法Word文档下载推荐.docx
《SQLServer 以上误操作数据库恢复方法Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《SQLServer 以上误操作数据库恢复方法Word文档下载推荐.docx(13页珍藏版)》请在冰点文库上搜索。
1.SELECT
recovery_model,recovery_model_desc
2.FROM
sys.databases
3.WHERE
name
='
AdventureWorks'
结果如下:
确保数据库的恢复模式最起码不能为【简单】。
至于如何修改成完整模式,我觉得这些应该没必要多说了。
切记,对于任何重要环境,不仅仅是客户正式环境(俗称生产环境),都强烈建议使用【完整恢复模式】,虽然对于另外两种(大容量日志(BULK_LOGGED)、简单(SIMPLE))来说,完整恢复模式产生的日志会大,但是在出现问题的时候,就会觉得这些都不算什么了。
并且我也想不到任何理由对于正式环境不使用完整恢复模式。
只要管理得当,完整恢复模式的日志也不会太变态。
(2)、这里其实隐含另外一步,曾经做过最少一次的完整备份。
因为所有类型的备份都基于完整备份,如果没有最少一次完整备份,其他类型的备份都是多余的,所以在这里强调一下,在创建完一个新数据库之后,强烈建议甚至强制做一次完整备份。
database_name,recovery_model,name
msdb.dbo.backupset
使用上面的语句粗略可以看到有那些数据库做过备份,由于测试,所以做了几次备份,可以看到我这个时间点已经做了备份了。
(3)、确保别人不再连接数据库,然后做一次日志尾部备份:
首先先创建一点数据:
1./*
2.由于tempdb永远为简单恢复模式,所以不适合做案例。
3.这里使用微软的示例数据库AdventureWorks
4.*/
5.USE
AdventureWorks
6.GO
7.IF
OBJECT_ID('
testRestore'
)
IS
NOT
NULL
8.
DROP
TABLE
testRestore
9.GO
10.CREATE
11.
(
12.
id
INT
IDENTITY(1,
1)
13.
NAME
VARCHAR(50)
14.
);
15.--插入测试数据:
16.INSERT
INTO
testRestore(Name)
17.SELECT
'
test1'
18.UNION
ALL
19.SELECT
test2'
20.UNION
21.SELECT
test3'
22.UNION
23.SELECT
test4'
24.UNION
25.SELECT
test5'
26.UNION
27.SELECT
test6'
28.UNION
29.SELECT
test7'
30.UNION
31.SELECT
test8'
32.SELECT
*
FROM
检查一下结果:
然后来做个删除操作,为了定位是啥时候发生的,我加了一个waitfor命令,让它在某个时间发生,这样恢复的时候就有准确性:
1.USE
2.GO
3.WAITFOR
TIME
21:
45'
4.DELETE
dbo.testRestore
现在来看看数据:
3.SELECT
到这一步,灾难出现了。
但是切记要冷静。
下面就是本文的重点开始,做一次日志备份,最重要是选择【备份日志尾部】
然后在【选项】页选择:
除【事务日志】除,其他红框包裹的地方为强烈建议勾选的地方。
并且保证数据库不要有别人在连接,因为备份日志尾部会使数据库处于还原状态,拒绝其他会话的连接,如果不断开其他连接,是备份不了的。
然后按确定,当然,可以使用上方的【脚本】来生成语句:
Master
3.BACKUP
LOG
[AdventureWorks]
TO
DISK
=
N'
E:
\AdventureWorks.bak'
WITH
NO_TRUNCATE
NOFORMAT,
NOINIT,
AdventureWorks-事务日志
备份'
SKIP,
NOREWIND,
NOUNLOAD,
NORECOVERY
COMPRESSION,
STATS
10,
CHECKSUM
4.GO
5.declare
@backupSetId
as
int
6.select
position
from
msdb..backupset
where
database_name=N'
and
backup_set_id=(select
max(backup_set_id)
7.if
is
null
begin
raiserror(N'
验证失败。
找不到数据库“AdventureWorks”的备份信息。
16,
end
8.RESTORE
VERIFYONLY
FILE
@backupSetId,
NOREWIND
此时,数据库会处于【正在还原】的状态
如果发现备份不了可以用下面语句查看,并把spid杀掉:
sys.sysprocesses
WHERE
dbid=DB_ID('
执行结果:
然后kill掉。
接着继续备份。
然后进行还原,如图:
先要还原完整备份,选择最近的那次,由于日志备份的特性(以后其他文章再说),只认最后一次备份,所以要选择最新的那次,否则还原不了。
这里又有一个注意事项,记得选择:
接着还原日志文件,这是最最重要的一步:
然后:
由于实验的时候出了点问题,后面重做了,所以时间选择到22:
19分,我是在22:
20分删除数据的。
这里不用太在意,只要把时间点指定到你误删除的时间之前即可。
而由于日志尾部备份都是最后一个备份文件,所以这里选则红框部分即可:
现在再检查一下:
可以看到,数据已经还原成功。
总结:
平时不做备份,出问题来喊急,这是苟有自取,还有一些脑袋发热的人喜欢看到ldf很大就直接删除,那以后出问题就别怪微软了。
本文中的方法看上去有点繁琐,但是实操几次就觉得好了,但是步骤建议严格按照上面说的,因为一旦操作错误,就很麻烦,此时再次强调——冷静冷静再冷静!
!
这种方法有几个缺点:
1、
如果你发现误操作以后还有很多人做了操作,那么你还原成功后,别人的操作就会冲掉,所以发生误操作后,要马上停止别人对数据库的操作。
2、
这个方法要对数据库独占,所以你想偷偷恢复是不行的了。
勇敢承认错误吧。
对于核心数据表,还是要先做好预防操作,可以看:
SQLServer恢复表级数据。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SQLServer 以上误操作数据库恢复方法 以上 操作 数据库 恢复 方法