(4.10)快照的概念与使用

 最近,开发系统使用SqlServer2008 R2,但是由于系统数据压力的增加,准备增加一个和正式数据库同步的库,用来供接口和报表使用,所以开始对SqlServer里面的一些技术开始研究,第一篇先来研究一下最基本的数据库快照。

  基本概念

  先简单介绍一下快照的基本概念,数据库快照是 SQL Server 数据库(源数据库)的只读静态视图。 自创建快照那刻起,数据库快照在事务上与源数据库一致。 数据库快照始终与其源数据库位于同一服务器实例上。 当源数据库更新时,数据库快照也将更新。 因此,数据库快照存在的时间越长,就越有可能用完其可用磁盘空间。

  数据库快照操作的级别是“页面级别”,在第一次修改源数据库页之前,先将原始页从源数据库复制到快照, 快照将存储原始页,保留它们在创建快照时的数据记录。 对要进行第一次修改的每一页重复此过程。 对于用户而言,数据库快照似乎始终保持不变,因为对数据库快照的读操作始终访问原始数据页,而与页驻留的位置无关。其实就是快照一直会备份源数据的修改之前的原始页,所以随着数据的修改增多,快照的文件存储就会慢慢变大。

  为了存储复制的原始页,快照使用一个或多个“稀疏文件”。 最初,稀疏文件实质上是空文件,不包含用户数据并且未被分配存储用户数据的磁盘空间。 随着源数据库中更新的页越来越多,文件的大小也不断增长。 下图说明了两种相对的更新模式对快照大小的影响。 更新模式 A 反映的是在快照使用期限内仅有 30% 的原始页更新的环境。 更新模式 B 反映的是在快照使用期限内有 80% 的原始页更新的环境。

  

  数据库快照的优点  

  快照可用于报告目的。
  客户端可以查询数据库快照,这对于基于创建快照时的数据编写报表是很有用的。

  使数据免受管理失误所带来的影响。
  如果源数据库上出现用户错误,您可将源数据库恢复到创建给定数据库快照时的状态。 丢失的数据仅限于创建该快照后数据库中发生更新的数据。
例如,在进行重大更新(比如大容量更新或架构更改)前,对数据库创建数据库快照以保护数据。 一旦进行了错误操作,可以使用快照将数据库恢复到生成快照时的状态。 为此目的进行的。

  使数据免受用户失误所带来的影响。
  定期创建数据库快照,可以减轻重大用户错误(例如,删除的表)的影响。 为了很好地保护数据,可以创建时间跨度足以识别和处理大多数用户错误的一系列数据库快照。 例如,根据磁盘资源,可以每 24 小时创建 6 到 12 个滚动快照。 每创建一个新的快照,就删除最早的快照。

  若要从用户错误中恢复,可以将数据库恢复到在错误发生的前一时刻的快照。 为此目的进行的恢复很可能比从备份还原快得多;但是,此后您无法对数据进行前滚操作。
或者,也可以利用快照中的信息,手动重新创建删除的表或其他丢失的数据。 例如,可以将快照中的数据大容量复制到数据库中,然后手动将数据合并回数据库中。

  管理测试数据库。
  在测试环境中,当每一轮测试开始时针对要包含相同数据的数据库重复运行测试协议将十分有用。 在运行第一轮测试前,应用程序开发人员或测试人员可以在测试数据库中创建数据库快照。 每次运行测试之后,数据库都可以通过恢复数据库快照快速返回到它以前的状态。

  数据库快照的限制 

  源数据库的限制:

  不能对数据库进行删除、分离或还原。可以备份源数据库,这方面将不受数据库快照的影响。

  源数据库的性能受到影响。由于每次更新页时都会对快照执行“写入时复制”操作,导致源数据库上的 I/O 增加。

  不能从源数据库或任何快照中删除文件。

  快照数据库的限制:

  数据库快照必须与源数据库在相同的服务器实例上创建和保留。

  始终对整个数据库制作数据库快照。

  当将源数据库中更新的页强制压入快照时,如果快照用尽磁盘空间或者遇到其他错误,则该快照将成为可疑快照并且必须将其删除。

  快照为只读。

  禁止对 model 数据库、master 数据库和 tempdb 数据库创建快照。

  不能在 FAT32 文件系统或 RAW 分区上创建数据库快照。 数据库快照所用的稀疏文件由 NTFS 文件系统提供。

  数据库快照将继承快照创建时其源数据库的安全约束。 由于快照是只读的,因此无法更改继承的权限,对源数据库的更改权限将不反映在现有快照中。

  如果源数据库的状态为 RECOVERY_PENDING,可能无法访问其数据库快照。 但是,当解决了源数据库的问题之后,快照将再次变成可用快照。

  只要理解它的原理它的限制也就自然明了。

  创建数据库快照

  在创建数据库之前,首先要知道数据库分布在几个文件上,因为快照需要对每一个文件进行copy-on-writing。

  先查看数据库有几个数据库文件:


1

2

3

--根据数据文件个数创建快照

exec sp_helpdb demo01

go

  我的数据库只有一个数据库文件,所以直接执行以下脚本创建快照:


1

2

3

4

5

--创建快照

create database snap_demo_10am

on (name=Demo01,filename=‘C:\SQLTest\SNAPSHOT\Snap_advlt.snap‘)

as SNAPSHOT of Demo01

go

  如果数据库存在于文件组,可能涉及多个数据库文件创建快照的示例:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

----多文件数据创建快照

CREATE DATABASE sales_snapshot1200 ON

NAME = SPri1_dat, FILENAME =

‘C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\data\SPri1dat_1200.ss‘),

NAME = SPri2_dat, FILENAME =

‘C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\data\SPri2dt_1200.ss‘),

NAME = SGrp1Fi1_dat, FILENAME =

‘C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\mssql\data\SG1Fi1dt_1200.ss‘),

NAME = SGrp1Fi2_dat, FILENAME =

‘C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\data\SG1Fi2dt_1200.ss‘),

NAME = SGrp2Fi1_dat, FILENAME =

‘C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\data\SG2Fi1dt_1200.ss‘),

NAME = SGrp2Fi2_dat, FILENAME =

‘C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\data\SG2Fi2dt_1200.ss‘)

AS SNAPSHOT OF Sales

GO

  

  数据库快照恢复和删除


1

2

3

4

5

6

7

--利用快着恢复数据库

use master

restore database Demo01 from database_snapshot=‘snap_demo_10am‘

go

--删除快照

drop database snap_demo_10am;

原文地址:https://www.cnblogs.com/gered/p/9519031.html

时间: 2024-10-17 16:30:49

(4.10)快照的概念与使用的相关文章

编程面试的10大算法概念汇总

以下是在编程面试中排名前10的算法相关的概念,我会通过一些简单的例子来阐述这些概念.由于完全掌握这些概念需要更多的努力,因此这份列表只是作为一个介绍.本文将从Java的角度看问题,包含下面的这些概念: 1. 字符串2. 链表3. 树4. 图5. 排序6. 递归 vs. 迭代7. 动态规划8. 位操作9. 概率问题10. 排列组合 1. 字符串 如果IDE没有代码自动补全功能,所以你应该记住下面的这些方法. toCharArray() // 获得字符串对应的char数组 Arrays.sort()

译:编程面试的10大算法概念汇总

以下是在编程面试中排名前10的算法相关的概念,我会通过一些简单的例子来阐述这些概念.由于完全掌握这些概念需要更多的努力,因此这份列表只是作为一个介绍.本文将从Java的角度看问题,包含下面的这些概念: 1. 字符串2. 链表3. 树4. 图5. 排序6. 递归 vs. 迭代7. 动态规划8. 位操作9. 概率问题10. 排列组合 1. 字符串 如果IDE没有代码自动补全功能,所以你应该记住下面的这些方法. toCharArray() // 获得字符串对应的char数组 Arrays.sort()

程序员的量化交易之路(10)--金融概念Stop-limit Order

转载需注明:http://blog.csdn.net/minimicall,http://cloudtrade.top Market Order: 市价订单.就是如果你下单后,基本上会马上执行的,该订单价格就是下单后的市场价格. Limit order:限价订单.这个也容易理解,就是限定一个价格买入和卖出.比如某股票市价可能是15,你希望大跌后买入,你想设定10刀,这时候就用limit order,买入价格就是10刀.偶尔可能有一点点的不同,比如9.99这样.如果你是买入,实际买入价格应该和你设

Hyper-V 2016 系列教程10 快照功能 检查点 和原还虚拟机

相对于XenServer和VMware Esxi来说, Hyper-V的快照功能比较简洁和简单. (1)打开 Hyper-V管理器,功能菜单,操作 | 检查点,如下图所示. (2) 执行后,会显示如下检查点的snapshot,如下图所示,此虚拟机有二个状态. (3) 还原检查点的操作也是右键虚拟机,选择菜单" 还原",如下图所示. (4)在"还原虚拟机"对话框中,点击"还原",然后继续,如下图所示. (4)另外关于检查点的高级配置地方在虚拟机的属

数据库快照

简介 数据库快照,正如其名称所示那样,是数据库在某一时间点的视图.快照设计最开始的目的是为了报表服务.比如我需要出2011的资产负债表,这需要数据保持在2011年12月31日零点时的状态,则利用快照可以实现这一点.快照还可以和镜像结合来达到读写分离的目的.下面我们来看什么是快照. 什么是快照 数据库快照是 SQL Server 数据库(源数据库)的只读静态视图.换句话说,快照可以理解为一个只读的数据库.利用快照,可以提供如下好处: 提供了一个静态的视图来为报表提供服务 可以利用数据库快照来恢复数

浅谈SQL Server中的快照

原文地址:http://www.cnblogs.com/CareySon/archive/2012/03/30/2424880.html 简介 数据库快照,正如其名称所示那样,是数据库在某一时间点的视图.是SQL Server在2005之后的版本引入的特性.快照的应用场景比较多,但快照设计最开始的目的是为了报表服务.比如我需要出2011的资产负债表,这需要数据保持在2011年12月31日零点时的状态,则利用快照可以实现这一点.快照还可以和镜像结合来达到读写分离的目的.下面我们来看什么是快照. 什

Java-Maven-Runoob:Maven 快照(SNAPSHOT)

ylbtech-Java-Maven-Runoob:Maven 快照(SNAPSHOT) 1.返回顶部 1. Maven 快照(SNAPSHOT) 一个大型的软件应用通常包含多个模块,并且通常的场景是多个团队开发同一应用的不同模块.举个例子,设想一个团队开发应用的前端,项目为 app-ui(app-ui.jar:1.0),而另一个团队开发应用的后台,使用的项目是 data-service(data-service.jar:1.0). 现在可能出现的情况是开发 data-service 的团队正在

虚拟机快照

1安装虚拟机########## 1:图形界面(电脑有些问题,后续上传) 2:命令安装 可以写在脚本里 ~~~~~~~~~~ #!/bin/bash            ##命令运行环境的指定virt-install \            ##安装虚拟机--name $1 \            ##虚拟机名称指定,$1表示脚本后的第一串字符--ram 1000 \            ##内存--file /var/lib/libvirt/images/$1.img \      

C语言(四)指针概念的理解

转载请标明出处: http://blog.csdn.net/u011974987/article/details/52270018: 前言 最近真的是忙的不可开交,公司一直给安排任务,连学习和写笔记的时间都没有了,落下好几次课的笔记都没有写,所以我抽空把目前的进度给追上来,不然会越落越多.加油吧~(感觉身体都要被掏空了) 指针 我们通过指针,可以简化一些 C 编程任务的执行,还有一些任务,如动态内存分配,没有指针是无法执行的.所以,学习指针是很有必要的. 正如您所知道的,每一个变量都有一个内存位