SqlServer2008误操作数据(delete或者update)后恢复数据的方法

实际工作中,有时会直接在数据库中操作数据,比如对数据进行delete或者update操作,当进行这些操作的时候,如果没有加上 where条件或者where条件不合理,那么导致的结果可想而知,如果操作的又是线上数据库,那么这个后果将会非常严重。

当事情发生后,我们要想办法补救,针对于sqlserver2005数据库,有个很出名的工具Log Exploer。具体操作使用大家可以自行搜索;针对于sqlserver2008也有这样的工具,但是大多是需要付费的...我们尝试用 sqlserver的事务日志来恢复这些受影响的数据。

用事务日志恢复数据,需要两个必要条件:

1、正确的完整数据库的最后一次备份

如果没有数据库完整备份,是不能做事务日志备份的,所以建议创建数据库时,恢复模式一项,应当选择'完整'。

2、正确的即时点

即所要恢复到数据的时间点,这个时间点一般选择误操作发生时间往前一点的时间点,所以当误操作发生时,应尽量记下这个时间点,不然可能导致恢复的数据不够准确。比如,

误操作发生于16:00,这个时间点我们可以选择15:59,如果选择的太靠前,比如15:30,那么15:30--15:59这段时间内的数据就不能被恢复了。

下面记录具体的操作步骤:

首先新建一个数据库dbtest,注意创建数据库时恢复模式一项选择'完整',在数据库中新建一个Table_1,并插入一些数据,然后对该数据库做一个完整备份。

这个备份,主要是模拟实际工作中对数据库的备份,实际中由于数据库可能很大,所以一般备份是一天或者两天进行一次。

备份成功后,接着再往Table_1中插入几条数据, 模拟在原数据库基础上新增加的数据,然后执行一个sql语句:delete from Table_1,模拟误操作,并记录下时间,比如16:00.误操作发生后,我们要赶紧进行事务日志的备份,我们就是根据此备份来还原数据的。

事务日志备份完后,我们可以新建个数据库dbtest1,然后把之前备份的数据库在新建的数据中进行还原,之所以这么做,是因为用事务日志 恢复数据库需要获得数据库的独占访问权,如果在原库上进行恢复,那么这需要对原库停止对外服务,但是这样,可能会导致线上系统不能正常运行,造成非常大的 影响,所以我们新建个数据库用作数据的还原,而不影响线上系统的正常进行。最后把新库中还原回来的数据,再导入到原库中。

对dbtest1进行还原时,注意"选项"的配置

数据库还原成功后,此时dbtest1应为正在还原的状态:,接着对数据库进行还原:任务—>还原—>事务日志,

时间点选择误操作之前的一个时间点,比如15:59:59,然后确定,完成全部数据恢复操作。  

下面的一段话源自其他帖子:

1、这是一般大型网站数据安全的一个办法,因为数据库比较大(可能有几百G)数据,做一次完整备份时间很长,而且影响数据库服务器的性能, 为保证数据安全,大多采用完整备份+事务日志备份来保证数据安全。例如:一天做一次或者2天做一次完整备份,几个小时内做一次日志备份。(当然可以用写一 个job来实现)

2、如SQL server 2005里的镜像就是采用的这种事务日志同步的方法保证数据的同步。

3、如果恢复的日志数据出现”LSN“太早和太晚说明了事务日志间的不连续。这时要注意备份 的时间和顺序。

参考文章:

SQL Server 2008数据库误删数据如何进行数据恢复

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

拯救你的数据 通过日志恢复MSSQL数据

以上就是本文的全部内容,希望对大家的学习有所帮助。

(0)

相关推荐

  • 设置sql server 2008 r2的身份验证模式的图文教程

    我在安装sql server2008R2的时候,选择了Windows身份验证模式,现在想把它改为sql server验证模式,怎么修改呢?其实方法步骤很简单,下面小编给大家分享修改方法. 方法如下所示: 1.先通过windows身份验证模式登录 2.选中服务器,右键属性,点击属性 3. 4. 以上所述是小编给大家介绍的设置sql server 2008 r2的身份验证模式的图文教程,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的.在此也非常感谢大家对我们网站的支持!

  • win2008 r2 服务器php+mysql+sqlserver2008运行环境配置(从安装、优化、安全等)

    win2008 r2 安装 http://www.jb51.net/article/38048.htm iis的安装 http://www.jb51.net/article/86390.htm php的安装注意事项: 下载非安全线程 版本 nts php 5.2.17 http://www.jb51.net/softs/268745.html 其它版本可以到 http://museum.php.net/php5/里面很多经典的老版本. PHP 5.5 (5.5.36) VC11 x64 Non

  • SQL Server 2008 r2 完全卸载方法分享

    "五一"时进行了系统重装,在没有卸载SQL Server 2008情况下尝试安装SQL Server 2008r2 ,安装提示成功但提示出现几个错误,发现没有找到SSMS,以及在SQL SERVER配置管理器里的服务也只有可怜的一项,瞬间感觉不妙,没办法只能重新卸载安装,在网上无绪找到了几个介绍卸载方法的文档,看似卸载完了,可但自己再安装的时候又出现了问题,出现了SSMS但配置管理器服务也只有一项,这种情况SSMS是连接不了服务器的,我就这样利用课余时间自己搜索瞎折腾了几天,有点快要崩

  • 图文详解SQL Server 2008R2使用教程

    本文为大家分享了SQL Server 2008R2简单使用教程,供大家参考,具体内容如下 1 首先找到开始菜单中相关内容:如下图:安装的组件不同可能有所不同:我的电脑中包括如下项: 商业智能:管理控制台:导入和导出数据:分析服务:集成服务:配置工具:文档和教程:性能工具: 因为偶装的组件多: 2 进入管理控制台 首先是登录:服务器类型选择 数据库引擎:此处先用Windows身份验证登录: 3 进入管理控制台 界面如下:看到 数据库 下有四个子项,系统数据库.数据库快照.ReportServer.

  • SQL Server 2008 R2 超详细安装图文教程

    一.下载SQL Server 2008 R2安装文件 cn_sql_server_2008_r2_enterprise_x86_x64_ia64_dvd_522233.iso 二.将安装文件刻录成光盘或者用虚拟光驱加载,或者直接解压,打开安装文件,出现下面的界面 安装SQL Server 2008 R2需要.NET Framework 3.5 SP1支持 这里我们的操作系统是Windows Server 2008 R2,已经默认自带了.NET Framework 3.5 SP1 直接点确定 选择

  • sql Server 2008 R2还原或删除数据库时总是出错的解决方法

    我们在还原或删除Windows Server 2008 R2数据库时经常出现因为数据库正在使用,所以无法获得对数据库的独占访问权等错误,非常烦恼,今天就教大家一招终极解决方法. 只需要新建一个查询,在里面执行下面代码即可: 复制代码 代码如下: ALTER DATABASE 你的数据库名称 SET OFFLINE WITH ROLLBACK IMMEDIATE ALTER DATABASE 你的数据库名称 SET OnLINE

  • SQLServer 2008 R2中使用Cross apply统计最新数据和最近数据

    使用 APPLY 运算符可以为实现查询操作的外部表表达式返回的每个行调用表值函数.表值函数作为右输入,外部表表达式作为左输入.通过对右输入求值来获得左输入每一行的计算结果,生成的行被组合起来作为最终输出.APPLY 运算符生成的列的列表是左输入中的列集,后跟右输入返回的列的列表. 注意:若要使用 APPLY,数据库兼容级别必须至少为 90. APPLY 有两种形式:CROSS APPLY 和 OUTER APPLY.CROSS APPLY 仅返回外部表中通过表值函数生成结果集的行.OUTER A

  • 图文详解Windows Server2012 R2中安装SQL Server2008

    入手一台Windows Server2012云服务器,搭建一下服务环境,选用SQL Server2008 直奔主题,下好安装镜像后,直接双击 选择运行程序而不获取帮助 如图: 进入安装中心后选择 安装 再选择全新安装 同样选择运行程序而不获取帮助 选择后如图: 程序会检测一下系统,没警告等大问题就可以点确定 输入产品秘钥,也可以选择试用版本:试用版本简直不能忍,我直接上秘钥,关于秘钥我会在最下面给出一个方案 接受条款,下一步 点安装即可 软件又检测一遍,没有警告就可以点下一步 选择第一项即可 你

  • SqlServer2008误操作数据(delete或者update)后恢复数据的方法

    实际工作中,有时会直接在数据库中操作数据,比如对数据进行delete或者update操作,当进行这些操作的时候,如果没有加上 where条件或者where条件不合理,那么导致的结果可想而知,如果操作的又是线上数据库,那么这个后果将会非常严重. 当事情发生后,我们要想办法补救,针对于sqlserver2005数据库,有个很出名的工具Log Exploer.具体操作使用大家可以自行搜索;针对于sqlserver2008也有这样的工具,但是大多是需要付费的...我们尝试用 sqlserver的事务日志

  • MySQL 两种恢复数据的方法

    一 前言 前一段时间接二连三的出现开发人员在测试环境和生产误操作导致数据库误删除/更新,对DBA而言,回滚数据着实是一件头疼的事情,凡涉及到恢复线上数据必然对应用带来一定的影响.大多数情况是开发误操作delete数据,update多数行,根据之前的操作经验,本文介绍常用的恢复方法. 二 常用的恢复方式 2.1 利用备份恢复 使用这种方式的前提必须有最近的备份集或者知道出现误操作起始的binlog 位点或者GTID,利用备份集恢复到中间的机器上,然后利用MySQL的slave 特性 START S

  • 解说mysql之binlog日志以及利用binlog日志恢复数据的方法

    众所周知,binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlog日志恢复增量数据部分),化险为夷! 废话不多说,下面是梳理的binlog日志操作解说: 一.初步了解binlog MySQL的二进制日志binlog可以说是MySQL最重要的日志,它记录了所有的DDL和DML语句(除了数据查询语句select),以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的. ---

  • window环境redis通过AOF恢复数据的方法

    首先要启动AOF持久化配置,在redis.windows-server.conf配置文件中做出如下更改 ................ appendonly yes # The name of the append only file (default: "appendonly.aof") appendfilename "appendonly.aof" ..................................... # appendfsync alwa

  • mysql5.7使用binlog 恢复数据的方法

    第一步:保证mysql已经开启binlog show variables like '%log_bin%'; log_bin 为 on是开启. 第二步:进入binlog文件目录,找到二进制日志文件 mysql> show binary logs; #获取binlog文件列表 mysql> show master status: #查看当前正在写入的binlog文件 mysql> reset master; 重置binlog 第三步: 通过mysqlbinlog工具命令查看数据库增删改查记

  • MySQL误操作后快速恢复数据的方法

    摘要: 利用binlog闪回误操作数据. 基本上每个跟数据库打交道的程序员(当然也可能是你同事)都会碰一个问题,MySQL误操作后如何快速回滚?比如,delete一张表,忘加限制条件,整张表没了.假如这还是线上环境核心业务数据,那这事就闹大了.误操作后,能快速回滚数据是非常重要的. 传统解法 用全量备份重搭实例,再利用增量binlog备份,恢复到误操作之前的状态.然后跳过误操作的SQL,再继续应用binlog.此法费时费力,不值得再推荐. 利用binlog2sql快速闪回 首先,确认你的MySQ

  • MongoDB利用oplog恢复数据的方法

    目录 数据全备 模拟故障 写入数据 模拟误操作 恢复步骤 备份oplog 解析oplog 将oplog备份和全备复制到standalone机 查找误操作时间点 进行数据恢复 检查恢复结果 当我们对数据出现误操作的时候,可以利用oplog恢复数据. 使用前提: 1.环境是副本集 2.必须有全备 2.全备后oplog没有被覆盖 数据全备 mongodump -h 172.16.254.133 --port 27017 -o /mongodb/backup/backup 模拟故障 写入数据 hando

  • 利用带关联子查询Update语句更新数据的方法

    Update是T-sql中再简单不过的语句了,update table set column=expression [where condition],我们都会用到.但update的用法不仅于此,真正在开发的时候,灵活恰当地使用update可以达到事半功倍的效果. 假定有表Table1(a,b,c)和Table2(a,c),现在Table1中有些记录字段c为null,要根据字段a在Table2中查找,取出字段a相等的字段c的值来更新Table1.一种常规的思路,通过游标遍历Table1中字段c为

  • mysql之delete删除记录后数据库大小不变

    当DELETE后面跟条件的时候,则就会出现这个问题 delete from table_name where 条件 删除数据后,数据表占用的空间大小不会变. 不跟条件直接delete的时候. delete from table_name 清除了数据,同时数据表的空间也会变为0 如果已经删除了表数据的很大一部分,或者有很多变化和变长表行(VARCHAR表,VARBINARY.BLOB或文本列)进行了更改,因为删除操作后在数据文件中留下碎片所致.DELETE只是将数据标识位删除,并没有整理数据文件,

  • 解决Mybatis返回update后影响的行数问题

    主要在JDBC链接中加入这个参数即可: useAffectedRows=true 补充知识:mybatis批量update,返回行数为-1 mybatis批量更新返回结果为1,是由于mybatis的defaultExExecutorType引起的, 它有三个执行器:SIMPLE 就是普通的执行器:REUSE 执行器会重用预处理语句(prepared statements): BATCH 执行器将重用语句并执行批量更新. BATCH可以批量更新操作,缓存SQL以提高性能,缺陷就是无法获取updat

随机推荐