数据库快照:是数据库某一时间点的视图,快照涉及最初目的是为了报表服务,快照还可以和镜像结合来达到读写分离的目的

数据库快照:是sqlserver数据库的只读静态视图
快照的作用:
1 提供了一个静态的视图来为报表服务
2 可以利用数据库快照来恢复数据库,相比备份来说,这个速度大大提高
3 和数据库镜像结合,提供读写分离
4 作为测试环境或则会数据变更前的备份,比如我要大批量删除或者导入数据前,或是将数据提供给测试人员进行测试前,做有一个快照,如果出现问题,则可以利用快照恢复到快照建立时候的状态

快照原理:与备份数据库复制整个数据库不同,快照并不复制这个数据库的页,而是仅仅复制在快照建立时间点之后改变的页,因此:当利用快照进行数据库恢复时,也仅仅将那些做了改变的页恢复到源数据库,这个速度大大提高

注意:源数据库建立快照会给IO增加负担

写入时复制:
快照数据库的文件基于稀疏文件,稀疏文件:是NTFS文件系统的一项特性,指文件中出现大量0的数据,这些数据用处不大,却占用磁盘空间,因此NTFS对此进行了优化,利用算法将这个文件进行压缩,因此当稀疏文件被创建时,刚打开很小,虽然逻辑上占了二三十M空间,但文件实际就是100多kb
当快照创建后,随着对源数据库的改变逐渐增多,稀疏文件也会慢慢增长

通常:当稀疏文件增长到源数据库文件大小的 30%时,就应该考虑重建快照了
稀疏文件的写入:利用了微软的写入时复制技术:意思是在复制一个对象的时候并不是真正把对象复制到另一个位置,而是在新的对象中映射一个指针,指向原对象的位置,这样当对新对象执行读操作时,直接指向源对象,而在对新的对象执行写操作时候,将改变部分对象的指针指向到新的地址中,并修改映射表到新的位置中

使用快照的法律:

1 当使用快照进行恢复数据库时,首先要删除其他快照
2 快照在创建时的时间点上没有commit的数据不会被计入快照
3 快照是快照整个数据库,而不是数据库的某一部分
4 快照是只读的,所以不能对快照进行任何更改,即使是想加一个让报表跑的更快的索引
5在利用快照恢复数据库时,快照和源数据库都不可用
6快照和源数据必须在同一个实例上
7快照上不能存在全文索引
8当磁盘不能满足快照的增长的时,快照数据库会被设置为suspect状态

快照只能通过sql语句创建,在创建之前,首先要知道数据库分部在哪几个文件中
可以使用这个命令查看:EXEC sp_helpdb Yip_20160322
因为快照需要对每一个文件进行 copy-on-writing

--创建数据库快照
CREATE DATABASE snap_Yip_20160322
ON
(
NAME = Yip_20160322,FILENAME = 'D:\SqlTest\snap_Yip_20160322.snap'
)
AS SNAPSHOT OF Yip_20160322
go

如果源数据库分部在多个mdf文件,则将每个用括号括起来,用逗号分隔

执行完了之后会在sqlserver中看到 有一个文件夹叫:

DATABASE Snapshots

点开之后就可以看到刚才新创建的快照

快照数据库文件和源数据库文件没啥不同,仅仅快照数据库文件是稀疏文件

删除快照数据库和删除普通数据库一样 使用 drop database 快照数据库名

--利用快照恢复数据库:

USE MASTER
RESTORE DATABASE Yipong_20160322 FROM DATABASE_SNAPSHOT = 'snap_Yipong_20160322'
go

注意:

1 快照数据库的安全设置继承自源数据库的安全设置,也就是说能访问源数据库的用户或者角色也能访问快照数据库,因为快照数据库是只读的,所以无论任何角色或者人都无法修改快照数据库

2 由于快照会拖累数据库性能,所以数据库不宜存在过多快照

sqlserver 关于快照的更多相关文章

  1. SqlServer代理执行[分发清除: distribution] 无法删除快照文件

    每天偶尔检查数据库作业是否失败,发现有错误 select top 10 job_id,run_date,run_time,run_duration,step_name,message from  ms ...

  2. sqlserver快照,启用基于行版本控制的隔离级别

    在sqlserver标准的已提交读(read committed)隔离级别下,读写操作相互阻塞.未提交读(read uncommitted)虽然不会有这种阻塞,但是读操作可能会读到脏数据,这是大部分用 ...

  3. Sqlserver 快照

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

  4. sqlserver数据库创建快照发布遇到的错误:对路径“XXXX”访问被拒绝

    在创建了一个sqlserver数据库的发布后,显示创建成功,但当查看快照代理状态时,显示“对路径‘XXXX’访问被拒绝”,这一错误导致订阅无法实现.然后网上有一方案帮忙解决了,主要有以下操作: 1)在 ...

  5. sqlserver同步后在不重新初始化快照的情况下新增表

           在已有事务复制中,时长需要新增表.索引,这些变更时不会同步到从库中.如果采用默认的设置,每次都需要重新初始化快照,从库重新应用快照和未执行的同步命令,这显然是无法在线上实践的方法.另一种 ...

  6. SQLServer Agent执行[分发清除: distribution] 无法删除快照文件

    由于之前创建的发布订阅造成严重的性能压力,症状表现为发布订阅表查询产生CMEMTHREAD  suspend等待,由于开发配置每隔十分钟会产生大量的SQLCOMMAND(create table,cr ...

  7. SQLServer之创建数据库快照

    创建数据库快照注意事项 语法:set transaction isolation level snapshot; 指定事务中任何语句读取的数据都将是在事务开始时便存在的数据的事务上一致的版本. 事务只 ...

  8. sqlserver配置允许快照隔离

    ALTER DATABASE TustenaOS SET ALLOW_SNAPSHOT_ISOLATION ON

  9. SQLServer 数据库镜像+复制方案

    目标: 主机做了Mirror和Replication,当主机出现问题时,Replication和Mirror实现自动的故障转移(Mirror 和Replication都切换到备机,而当主机 重新启动后 ...

随机推荐

  1. 让sublime text 3默认新建GBK文件

    想让sublime text支持显示或者保存中文,需要安装插件convertToUTF8,具体安装可以问度娘. 安装插件以后,想让保存的html文件支持中文,可以通过ctrl+shift+C来完成.但 ...

  2. java对cookie的操作_01

    /** * 读取所有cookie * 注意二.从客户端读取Cookie时,包括maxAge在内的其他属性都是不可读的,也不会被提交.浏览器提交Cookie时只会提交name与value属性.maxAg ...

  3. JQuery要点(一)

    简介: jQuery Mobile 是用于创建移动 Web 应用的前端开发框架. jQuery Mobile 可以应用于智能手机与平板电脑. jQuery Mobile 使用 HTML5 & ...

  4. delphi 16 网页缩放

    网页放大 网页缩小         WebBrowser1.OleObject.Document.Body.Style.Zoom := 0.50; 缩放网页 Ctrl+中键↑ 放大 Ctrl+中键↓ ...

  5. 用adb pull命令从android系统中读取文件失败的原因及解决办法

    问题:使用adb pull命令从android系统中读取文件失败.显示:Permission denied   原因:是由于文件权限原因引起.       使用ls -l命令查看android系统中的 ...

  6. asp.net mvc控制器动作体返回ImageResult,可作验证码

    public ActionResult Img() { // 获取博客园空间顶部的banner图片 WebRequest req = WebRequest.Create("http://sp ...

  7. debian7 oracle11g 解决 link binaries 错误方案

    ln -s /etc /etc/rc.d ln -s /usr/bin/awk /bin/awk ln -s /usr/bin/basename /bin/basename ln -s /usr/bi ...

  8. yar

    <?php class Operator { /** * 两数相加 */ public function add($a, $b) { return $this->_add($a, $b); ...

  9. JavaFX(二)自定义窗口标题栏

    1.问题场景 PC客户端登录界面仿QQ,上边显示图片,下边显示输入框和登录按钮.而JavaFX默认的窗口,不满足需求. 2.解决思路 隐藏窗口默认的标题栏,使用创建label对象,使用css将按钮图片 ...

  10. Objective-C ,ios,iphone开发基础:几个常用类-NSString

    第一个字符串: //必须在字符串的前面加上@符号, NSString* str=@"shouqiang_Wei";//输出以%@输出. NSLog(@"%@", ...