slqserver 时间点恢复
备份可以通过图形化备份
点数据库点任务点备份
slqserver 时间点恢复_第1张图片
完整模式
选项里面完成后验证备份
slqserver 时间点恢复_第2张图片
常规里面备份的文件名字可以自己写  可以全备份 日志备份
还原的时候是需要覆盖原先数据库的
slqserver 时间点恢复_第3张图片
命令行备份的话
slqserver 时间点恢复_第4张图片
/****** Script for SelectTopNRows command from SSMS  ******/
backup database test to disk='c:/backup/1600.bak' with init
backup log test to disk='c:/backup/1605.logs' with init
restore database test from disk='c:/backup/1634full.bak' WITH REPLACE,NORECOVERY
restore log test from disk='c:/backup/1636.logs'
with stopat='11/14/2013 16:36:37'
如果遇到一直显示正在还原那么则

restore database test from disk='c:\backup\1634full.bak' with recovery

slqserver 时间点恢复_第5张图片

看出了数据库处于一只还原的状态是怎么回事呢,那是因为你最后被分到的日志文件的时间还没有到你最后一个恢复的日志的时间那么这个还原将一直延续到 10:56分解决办法看如下图的文件把时间写在创建文件之前或者相同的时间,所以请把时间写在你备份文件创建的时间(注意是所有的日志文件恢复的时间点只要不超出最后一个日志文件的时间就好了)。

slqserver 时间点恢复_第6张图片

几个词语的解释init是备份的时候覆盖
norecovery是还原还继续下面的
recovery是还原直接结束

replace是还原覆盖的意思




以下是模拟出来的实战:
工作中最好的办法模拟生产环境
第一步:

/*create database backuptest*/

use backuptest

create table [dbo].[table_test]

([id] [int] not null,[timestamp] [timestamp] not null,

constraint [PK_table_test] PRIMARY KEY CLUSTERED

( [id] ASC

)with (pad_index = off,statistics_norecompute = off,

ignore_dup_key = off,allow_row_locks = on,allow_page_locks = on)

on [primary])

on [primary]   解释创建了一个表

第二步:


use backuptest

backup database backuptest to disk='c:/ni/NO1.bak' with init

insert into table_test(id,timestamp) values(1,default)

WAITFOR DELAY '00:00:05'

insert into table_test(id,timestamp) values(2,default)

backup log backuptest to disk='c:/ni/no1.logs' with init

create table lisi(id int,bb int)

insert into  lisi values(1,2)

backup log backuptest to disk='c:/ni/no2.logs' with init

WAITFOR DELAY '00:00:10'

update lisi set bb=8

WAITFOR DELAY '00:00:05'

create table nihao(id int,wei nchar(10))

insert into nihao values(1,'nihao')

insert into nihao values(2,'helloword')

backup log backuptest to disk='c:/ni/no3.logs' with init


解释首先做一次全备份数据库的全备份

之后做正常的工作insert

正常的备份日志

在其中做了一次误操作update没有加条件

之后数据库仍然在运行仍然在做日志备份


第三步:



backup log backuptest to disk='c:/ni/no4.logs' with init

backup database backuptest to disk='c:/ni/NO2.bak' with init

restore database backuptest from disk='c:/ni/NO1.bak' WITH norecovery,replace

restore log backuptest from disk='c:/ni/no2.logs'  with stopat='11/18/2013 10:51:37',recovery

/*把正确的数据导出 主意上面的那个时间点必须就在你最后一次备份的日志的时间之前否则会显示一直在还原 也就是之前的数据取出*/

restore database backuptest from disk='c:/ni/NO2.bak' WITH norecovery,replace

restore log backuptest from disk='c:/ni/no4.logs' with recovery

/*线上之后做的事情也不能忽略 最后把那个表删除把取出的数据放进去变对就OK*/


解释:当别人告诉你做了错误操作想恢复的时候你首先 做一次日志备份做一次全备份

(当然如果你是新建一个库在新的库里面去还原的话就不需要做全备份了,最后反正你只是想恢复错误的)

你开始还原到错误操作之前的时间点,使用最先的数据备份和使用最后备份的日志 配合参数stopat恢复到错误之前 这时候你就需要把这个错误之前的数据导出去可以使用navicat等等工具把正确的数据导出去只要再能导入就行了

第一件事情是授权给装navicat的机子
然后打开软件navicat
点连接 输入用户dba 密码tonglu
点击导出就可以去导出了 如果想把列的信息一起导出的话就用exexl数据导出的方式否则execl文件导出就可以了
另外如果你的表特大很有可能导出去的不能用那么就一页一页的导出去吧
slqserver 时间点恢复_第7张图片
做好这些后再 恢复到罪恶现场,也就是你先恢复到你最后做的一次数据备份的还原
再手动做一次日志的备份然后还原到当前,
最后把那个误操作的表内容清空然后把导出去的表的数据导入这个被清空的表OK 搞定 鼓掌