通过日志恢复MSSQL数据例子

本文介绍在 SQL Server 中如何通过日志和时间点恢复丢失的数据。包括更改数据库恢复模式、创建测试环境、执行备份与恢复操作等步骤,并演示了如何通过事务日志还原误删的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这段时间看了关于在SQL server 中通过日志和时间点来恢复数据。也看了一些网上的例子,看如何通过日志来恢复数据。 

    前提条件:

        数据库的故障恢复改为非简单模式,去掉自动关闭和自动收缩两个选项     

      如果是简单模式: 类似下面的语句操作数据就不会记录到日志中:  select * into t from [表名] 

      这时为保证数据的完整要将数据库的恢复模式改成“完整” 

    测试环境:    

       1,建立数据库和测试表         

create database  zp

create table [zping.com]
(
 id 
int
,
 name 
varchar(20
)
)

   插入测试数据:   

insert into [zping.com] (id,name)
values(1,'zping.com1'
)
insert into [zping.com]
(id,name)
values(2,'zping.com2'
)
insert into [zping.com]
(id,name)
values(3,'zping.com3'
)
insert into [zping.com]
(id,name)
values(4,'zping.com4')

  备份数据库,可以通过sql server的可视化操作,下面是生成的代码:

BACKUP DATABASE [zp] TO  DISK = N'C:/k.bak' WITH  NOFORMAT, NOINIT,  
NAME 
= N'zp-完整 数据库 备份', SKIP, NOREWIND, NOUNLOAD,  STATS = 10

GO

   查看数据: 

  

  注意:这时我们做一个完整备份

 这时可能一不小心删除了一些数据。我们模拟一下:(假定删除了1,2的数据) 

delete from [zping.com] where (id=1 or id =2)

   注意:要记住大体的删除时间

 

  这时发现删除错误了,怎么把数据找回来啊。方法有两个:

       1,通过Log Explorer 查找进行恢复数据(我网站有此工具)

       2,另一种方法通过恢复日志(指定时间点恢复)来恢复数据。

 

    说明:第一个方法可以在线操作。

            第二个方法必须停止数据库或者再另一个数据库恢复(前提是必须有一个完全备份和日志备份)

  

   这里我们来讨论第二中方法指定时间点恢复:

      1,这时对数据库事务日志做备份(注意,如果没做个数据库完整备份,是不能做事务日志备份的

 

     这时新建一个数据库zp(将以前的数据库改名),恢复数据库

 

   这时我们看到,有两个还原的数据库备份,因为我对zp数据库备份了两次,两次的备份的数据文件都一样。这里我们选择最近时间的备份  

 

  默认在数据库的设置如下:是追加到备份集里,所以会有两个备份,如下图:

 

 

   同时,在”选项“里设置”不回滚“事务, 

   注意:通过事务日志还原数据库,必须选择"不回滚"事务

   确定后:出现下面情况:

 

  这时发现,数据库一直是”正在还原“,这时还原数据库事务日志,

   1,“常规”里选择时间,(刚删除的时间)

   2,“选项”里将恢复状态设置为”回滚未提交“事务

   

 

  确定后,查询数据库,发现数据回来了。

 

  总结

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

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

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

 

 原文: http://www.cnblogs.com/zping/archive/2008/08/21/1273416.html

0
0
(请您对文章做出评价)
### 配置MSSQL数据库自动备份 为了实现MSSQL数据库的自动化备份,最佳实践涉及创建SQL Server代理作业来安排定期执行备份操作。此过程不仅简化了管理还提高了数据安全性[^1]。 #### 创建SQL Server Agent Job以实现自动备份 首先确认SQL Server Agent服务正在运行。接着按照以下说明构建新的Agent Job: - **打开SQL Server Management Studio (SSMS)** 并连接至目标实例。 - **导航到SQL Server代理节点**, 右键点击 "Jobs", 选择 “New Job”。 定义新Job基本信息之后进入步骤设定: ```sql -- 定义备份逻辑, 如下所示为全量备份例子 DECLARE @backupPath NVARCHAR(260); SET @backupPath = N'\\NetworkShare\Backups\' + REPLACE(CONVERT(NVARCHAR(MAX), GETDATE(), 112), '/', '') + '_FULL.bak'; BACKUP DATABASE YourDatabaseName TO DISK = @backupPath WITH FORMAT; ``` 上述脚本会生成带有日期戳记的文件名并将其保存在网络共享位置上[^3]。 对于更复杂的场景,比如希望每天只保留一次完整副本加上频繁的日志记录,则可以在同一任务内添加额外步骤用于处理事务日志备份[^5]: ```sql -- 日志备份部分 DECLARE @logBackupPath NVARCHAR(260); SET @logBackupPath = N'\\NetworkShare\LogBackups\' + REPLACE(CONVERT(NVARCHAR(MAX), GETDATE(), 112), '/', '') + '_LOG.trn'; BACKUP LOG YourDatabaseName TO DISK = @logBackupPath WITH NOFORMAT, INIT, NAME = N'Database Log Backup-', SKIP, NOREWIND, NOUNLOAD, STATS = 10; ``` 最后一步是调度该Job按需触发——无论是每晚固定时间还是其他周期模式都可以通过图形界面轻松配置[^4]。 #### 使用第三方工具增强功能 除了内置机制外,还可以考虑利用专门设计的应用程序如【ucache灾备云】来进行更加灵活高效的灾难恢复准备活动;这类解决方案往往提供了更为简便的操作流程以及更好的性能表现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值