• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >MsSql > SQL Server 2008及更高版本数据库恢复方法之日志尾部备份

SQL Server 2008及更高版本数据库恢复方法之日志尾部备份

作者:發糞塗牆 字体:[增加 减小] 来源:互联网 时间:2017-05-11

發糞塗牆通过本文主要向大家介绍了sql server 2008,sql server 2008 r2,sql server 2008下载,sql server 2008 密钥,sql server 2008教程等相关知识,希望本文的分享对您有所帮助

        经常看到有人误删数据,或者误操作,特别是update和delete的时候没有加where,然后就喊爹喊娘了。人非圣贤孰能无过,做错可以理解,但不能纵容,这个以后再说,现在先来解决问题。

        遇到这种情况,一般都是没有做备份,不然也不会来发问了。首先要冷静,否则会有更大的灾难。直到你放弃。

解决方法:

       对于这类问题,主要是找回误操作之前的数据,在2008之前,有个很出名的工具Log Exploer,听说还挺好用的,这个网上大把教程,这里就不多说了。但是唯一遗憾的是,不支持2008及更高版本,这时除了其他第三方工具,那么最常用的就是本文提到的方法——日志尾部备份。本文实验环境2008R2,对于2008及其以上版本可以使用这个方法,其实2005也可以,2000很少用,没试过,只是2008之前可以使用Log Exploer,所以就没必要用这种方法。

      下面图文并茂讲解操作方法,至于原理,不属于本文范围,而且我相信真遇到误操作的时候,估计没人会看原理了。

步骤:

(1)、检查数据库的恢复模式,如图:



或者使用脚本检查:

SELECT recovery_model,recovery_model_desc 
FROM sys.databases 
WHERE name ='
</div>

结果如下:


        确保数据库的恢复模式最起码不能为【简单】。至于如何修改成完整模式,我觉得这些应该没必要多说了。 

       切记,对于任何重要环境,不仅仅是客户正式环境(俗称生产环境),都强烈建议使用【完整恢复模式】,虽然对于另外两种(大容量日志(BULK_LOGGED)、简单(SIMPLE))来说,完整恢复模式产生的日志会大,但是在出现问题的时候,就会觉得这些都不算什么了。并且我也想不到任何理由对于正式环境不使用完整恢复模式。只要管理得当,完整恢复模式的日志也不会太变态。 

(2)、这里其实隐含另外一步,曾经做过最少一次的完整备份。因为所有类型的备份都基于完整备份,如果没有最少一次完整备份,其他类型的备份都是多余的,所以在这里强调一下,在创建完一个新数据库之后,强烈建议甚至强制做一次完整备份。

SELECT database_name,recovery_model,name 
FROM ms
</div>

使用上面的语句粗略可以看到有那些数据库做过备份,由于测试,所以做了几次备份,可以看到我这个时间点已经做了备份了。


(3)、确保别人不再连接数据库,然后做一次日志尾部备份:

首先先创建一点数据:

由于tempdb永远为简单恢复模式,所以不适合做案例。 
这里使用微软的示例数据库AdventureWorks 

*/ 
USE AdventureWorks 
GO 
IF OBJECT_ID('testRestore') IS NOT NULL 
 DROP TABLE testRestore 
GO 
CREATE TABLE testRestore 
 ( 
  id INT IDENTITY(1, 1) , 
  NAME VARCHAR(50) 
 ); 
--插入测试数据:  
INSERT INTO testRestore(Name) 
SELECT 'test1' 
UNION ALL 
SELECT 'test2' 
UNION ALL 
SELECT 'test3' 
UNION ALL 
SELECT 'test4' 
UNION ALL 
SELECT 'test5' 
UNION ALL 
SELECT 'test6' 
UNION ALL 
SELECT 'test7' 
UNION ALL 
SELECT 'test8' 
SELECT * FROM testRestore 
</div>

检查一下结果:


然后来做个删除操作,为了定位是啥时候发生的,我加了一个waitfor命令,让它在某个时间发生,这样恢复的时候就有准确性:

USE AdventureWorks 
GO 
WAITFOR TIME '21:45' 
DELETE FROM dbo.testRestore 
</div>

现在来看看数据:

USE AdventureWorks 
GO 
SELECT * FROM dbo.testRestore 
</div>


到这一步,灾难出现了,但是切记要冷静。

下面就是本文的重点开始,做一次日志备份,最重要是选择【备份日志尾部】


然后在【选项】页选择:除【事务日志】除,其他红框包裹的地方为强烈建议勾选的地方。并且保证数据库不要有别人在连接,因为备份日志尾部会使数据库处于还原状态,拒绝其他会话的连接,如果不断开其他连接,是备份不了的。


然后按确定,当然,可以使用上方的【脚本】来生成语句:

USE Master 
GO 
BACKUP LOG [AdventureWorks] TO DISK = N'E:\AdventureWorks.bak' WITH NO_TRUNCATE , NOFORMAT, NOINIT, NAME = N'AdventureWorks-事务日志 备份', SKIP, NOREWIND, NOUNLOAD, NORECOVERY , COMPRESSION, STATS = 10, CHECKSUM 
GO 
declare @backupSetId as int 
select @backupSetId = position from msdb..backupset where database_name=N'AdventureWorks' and backup_set_id=(select max(backup_set_id) from msdb..backupset where database_name=N'AdventureWorks' ) 
if @backupSetId is null begin raiserror(N'验证失败。找不到数据库“AdventureWorks”的备份信息。', 16, 1) end 
RESTORE VERIFYONLY FROM DISK = N'E:\AdventureWorks.bak' WITH FILE = @backupSetId, NOUNLOAD, NOREWIND 
GO 


</div>

此时,数据库会处于【正在还原】的状态



如果发现备份不了可以用下面语句查看,并把spid杀掉:

SELECT  * FROM sys.sysprocesses WHERE dbid=DB_ID('AdventureWorks') 

执行结果:


然后kill掉。

接着继续备份。

 然后进行还原,如图:

先要还原完整备份,选择最近的那次,由于日志备份的特性(以后其他文章再说),只认最后一次备份,所以要选择最新的那次,否则还原不了。


这里又有一个注意事项,记得选择:


接着还原日志文件,这是最最重要的一步:


然后:


由于实验的时候出了点问题,后面重做了,所以时间选择到22:19分,我是在22:20分删除数据的。这里不用太在意,只要把时间点指定到你误删除的时间之前即可。而由于日志尾部备份都是最后一个备份文件,所以这里选则红框部分即可:


现在再检查一下:


可以看到,数据已经还原成功。

总结:

平时不做备份,出问题来喊急,这是苟有自取,还有一些脑袋发热的人喜欢看到ldf很大就直接删除,那以后出问题就别怪微软

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • SQL Server 移动系统数据库
  • SQL Server 使用 SET FMTONLY ON 获得表的元数据
  • 简述SQL Server 2005数据库镜像相关知识
  • 利用SQL SERVER 2005数据库镜像实现可用性分析
  • SQL server 视图(view)介绍
  • SQL Server 索引介绍
  • shp2sqlserver 用法简析
  • SQL Server CROSS APPLY和OUTER APPLY的应用详解
  • SQLServer分布式事务问题
  • sqlserver 2008手工修改表结构,表不能保存的问题与解决方法

相关文章

  • 2017-05-11SQL Server 2008安装图解(详细)
  • 2017-05-11sql2008启动代理未将对象应用到实例解决方案
  • 2017-05-11Sql Server2005实现远程备份数据库
  • 2017-05-11安装sql server 2008时的4个常见错误和解决方法
  • 2017-05-11SQL Server 中 RAISERROR 的用法详细介绍
  • 2017-05-11SQL Server 2005基础知识详细整理
  • 2017-05-11Sql Server安装出错,安装程序配置服务器失败的解决方法小结
  • 2017-05-11SQL Server 2008 R2安装配置方法图文教程
  • 2017-05-11SQL Server 2008 安装和配置图解教程(附官方下载地址)
  • 2017-05-11SQL Server 2008中的代码安全(二) DDL触发器与登录触发器

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • SQL Server2005异地自动备份方法
    • Win2008中安装的MSSQL2005后无法访问的解决方法
    • SQL Server中的XML数据进行insert、update、delete
    • sql2008 附加数据库时出现错误5123提示的解决方法
    • sqlserver2005使用row_number() over分页的实现方法
    • SQL Server 2005 中使用 Try Catch 处理异常
    • SQL Server 2005 定时执行SQL语句的方法
    • win2008 enterprise R2 x64 中安装SQL server 2008的方法
    • SQL Server 2008中的代码安全(二) DDL触发器与登录触发器
    • sql2005开发版 没有任何功能可以安装

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有