sql server 备份与回复种类三 轻巧恢复生机情势下的备份与还原

发布时间:2019-10-30  栏目:NoSQL  评论:0 Comments

二.备份演示

  在简约苏醒格局下主要的备份是完好备份和反差备份。小编那边有TestLog库,Curry有三个表。借使周天做三回完整备份,周少年老成到星期天晚上每一天做一遍差距备份,到第二周的周日时带头新的基准线。如下所示

use test
exec sp_addumpdevice 'disk', 'BackupTestDevice','F:\SqlService\backup\BackupTestBackup.bak'

  图片 1

--设置恢复模式为简单恢复
 ALTER DATABASE TestLog SET RECOVERY simple
go
-- 做一次完整备份到备份设备中(备份基准) 假设在周日晚上
backup database  TestLog to BackupTestDevice
go

图片 2

go
--差异备份 周一晚
backup database TestLog to BackupTestDevice with differential 
go
--差异备份 周二晚
backup database TestLog to BackupTestDevice with differential 
go
--差异备份 周三晚
backup database TestLog to BackupTestDevice with differential 
go
--差异备份 周四晚
backup database TestLog to BackupTestDevice with differential 
go
--差异备份 周五晚
backup database TestLog to BackupTestDevice with differential 
go
--差异备份 周六晚
backup database TestLog to BackupTestDevice with differential 
go
--完整备份 周日晚(新基准)
backup database TestLog to BackupTestDevice with differential 
go
--差异备份 周一晚
backup database TestLog to BackupTestDevice with differential 

 在备份设备中查阅备份集
  图片 3

-- 通过脚本查看

select distinct
s.first_lsn,s.last_lsn,s.database_backup_lsn,s.position,
s.backup_finish_date,s.type,y.physical_device_name,s.backup_size
from msdb..backupset as s inner join
msdb..backupfile as f on f.backup_set_id=s.backup_set_id inner
join
msdb..backupmediaset as m on s.media_set_id=m.media_set_id inner
join
msdb..backupmediafamily as y on m.media_set_id=y.media_set_id
where s.database_name=’TestLog’
order by s.position asc

图片 4

 

一.概述

  当数据库发生损坏,数据库的各类文件都能张开,只是个中的一些页面坏了,这种情状可以依赖DBCC
CHECKDB实行数据库检查修复。假如要保障数据库不扬弃,或修复不佳,管理员只好做数据库完整过来,为了少数页面恢复生机整个数据库,代价是比较高的,sql
server引进了页面还原著用,能够内定还原若干页面,进而能够大大节约数据库恢复生机时间。
  页面还原用于修复隔开分离的毁伤页面,还原恢复生机时间比文件越来越快,减弱了过来进程中居于离线的数据量,当某个文件的大度页面都现身破坏,能够一向还原该公文(必要有文件备份)。要拓宽复原的页面是在访问该页面,蒙受错误而标志为”疑忌”,能够实行去找msdb.dbo.suspect_pages表。在页面还原后,也急需还原全体的日记文件备份
  1.1 还原的限量,不可能还原的页
    (1)事务日志不可能重整旗鼓。
    (2)分配页面:全局分配映射GAM页面,分享全局分配映射SGAM页面和可用空间PFS页面,这个连串页面损坏,页面还原不能够复苏。
    (3)全体数据文件的页面0 的(文件运转页面)。
    (4)页面1:9的(数据库运营页面)。
  1.2 还原规范
    (1) 必得采用完全复苏格局。
    (2) 只读文件组中的页面不能恢复生机。
    (3) 还原顺序必须是从完整备份,文件备份中回复页面开头。
    (4) 页面还原要求收尾到眼下几日记文件的连续几日日志备份
    (5) 数据库备份和页面还原不可能何况打开。

一.概述

  后边讲了备份的部分理论知识,那篇早先讲在简约苏醒格局下的备份与回复。在简约方式下是不能够做日志备份的,产生灾害后,数据库最终二回备份之后做的数额纠正将是整个不见的,所以在生育条件下,数据又很珍惜,日常不建议采纳这种方式。
举例对贰个数据库有5次完整数据备份,时间是t5,  之后发生患难,就能够部错失。

图片 5

  当数据库越来越大,完整备份时间会越加长,为了裁减错过风险,引进差距备份。比如下图演示:在第叁回建设构造数据库完整备份后,创建了三回差距备份,之后再次创下建完全备份,从而确立新的歧异基准。不管是完整备份依然间隔备份,平日只可以在早上进展。若是数额比较宏大又不一样意长日子数额遗失,这轻易恢复生机形式是不可能满意的。

图片 6

六. 还原

use master
--从完整数据库备份,开始还原,指定要还原的PAGE页
restore database BackupPageTest page='1:89' from BackupTestDevice with file=39,  norecovery
--创建新的尾日志备份
backup log BackupPageTest to BackupTestDevice

 
 那时会见数据表PageTest将会发错,如下图所示,注脚在还原经过中多少是不行采访的。

 图片 7

图片 8

--最后还原新的尾日志备份
restore log BackupPageTest from BackupTestDevice with file=40,  recovery

   数据修复过来了,如下图:

  图片 9

  再一次CHECKDB 检查表状态

  图片 10

三. 还原演示

   将叁个数据库还原,供给结构三个科学的过来顺序。在还原经过中,备份文件结尾使用norecovery事务但是来(正在苏醒。。)不可读写,在终极八个备份文件结尾使用recovery事务恢复生机。数据库恢复不奇怪。

-- 切换到master库
use master

--设置单用户模式(否则执行下面报错:“因为数据库正在使用,所以无法获得对数据库的独占访问权”)
ALTER DATABASE TestLog SET OFFLINE WITH ROLLBACK IMMEDIATE

-- 从备份恢复一个全备份 ,norecovery(正在还原...)不可读写. file指备份集位置号
restore database TestLog from BackupTestDevice with file=1, norecovery 

  图片 11图片 12

-- 恢复到差异备份文件3,跳过差异备份2 ,看是否备份成功
restore database TestLog from BackupTestDevice  with file=3, recovery

  图片 13图片 14

-- 备份结束之后,结束单用户模式
ALTER  database  TestLog  set   online  

 下边在来演示还原差别文件,使用旧标准。还原看会怎样

-- 从旧基准中恢复一个全备份 ,norecovery(正在还原...)不可读写. file是1
restore database TestLog from BackupTestDevice with file=1, norecovery 

--新基准file是8, 恢复到差异备份文件9 
restore database TestLog from BackupTestDevice  with file=9, recovery

图片 15

 

 总结:对于简易恢复生机情势,没有日记备份,恢复生机只要求二个安然无恙数据库备份,以致尾声四个出入备份。
对于四个出入备份文件,在还原时无需LSN的三番五回性(在同贰个标准化内)。

三. 备份

  为了演示损坏的数目页面,新建三个PageTest表,初阶化多个PAGE页,前边人为的毁坏四个数码页面。

use BackupPageTest
-- 创建表
create table PageTest
(
    ID int,
    name varchar(8000)
)
-- 产生
insert into PageTest
select 1, REPLICATE('a',8000)
insert into PageTest
select 1, REPLICATE('b',8000)
insert into PageTest
select 1, REPLICATE('c',8000)

 sys.system_internals_allocation_units 查看分配页景况

 图片 16

/* 
第1个参数:库名
第2个参数:表名
第3个参数:-1: 显示所有IAM、数据分页、及指定对象上全部索引的索引分页
PageFID: 文件ID
PageType=1 指数据页面
PageType=10 IAM页面
*/ 
-- 未公开的命令,语法如下:
DBCC IND(dbname,tablename,-1)

  图片 17

--更新第三条数据,结果报错
update PageTest set  id=2  where ID is null

  图片 18

-- 插入第4条是成功的
insert into PageTest
select 4, REPLICATE('d',8000)

  图片 19

二.还原步骤      

  (1) 获取要还原的毁伤页面包车型客车页ID,当sql
server碰着校验或残破写错误时,会回到页面编号。能够通过查询msdb数据Curry的suspect_pages表,可能监视事件和errorlog文件里记录的错误音讯,查找到损坏的页面ID。
  (2)
从满含页的完全部据库备份,文件备份或文件组备份开端开展页面还原。在restore
database 语句中,使用page子句列出全数要还原的页ID。
  (3) 应用近期的出入备份。
  (4) 应用持续的日记备份。
  (5) 创设新的数据库尾日志备份。
  (6) 还原新的尾日志备份,应用这一个新的日记备份后,就瓜熟蒂落了页面还原。

  图片 20

use master
-- 完整备份
backup database  BackupPageTest to BackupTestDevice

四 模拟页面损坏

  使用PagePID为89的数目页面进行现身说法,通过dbcc
page查看该页面,知道该页数据是蕴蓄的第三条数据。

dbcc traceon (3604)
dbcc page('BackupPageTest',1,89,1)

  图片 21

  使用 dbcc wirtepage来模拟该面损坏:

-- 未公开的命令语法为如下
dbcc writepage ({ dbid, 'dbname' }, fileid, pageid, offset, length, data)

-- 模拟页面损坏
dbcc writepage(BackupPageTest,1,89,96,10,0x65656565656565656565)

图片 22

-- 查询该表时,第三条数据显示NULL
select * from PageTest

五. 获取要修复的数目页面 

-- 使用checkdb检查
DBCC CHECKDB(BackupPageTest)

  通过校验,提示不可能管理面(1:89)如下图

  图片 23

留下评论

网站地图xml地图