Sqlserver 快照

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介: 原文:Sqlserver 快照  最近,开发系统使用SqlServer2008 R2,但是由于系统数据压力的增加,准备增加一个和正式数据库同步的库,用来供接口和报表使用,所以开始对SqlServer里面的一些技术开始研究,第一篇先来研究一下最基本的数据库快照。
原文: Sqlserver 快照

  最近,开发系统使用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。

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

--根据数据文件个数创建快照
exec sp_helpdb demo01
go

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

--创建快照
create database snap_demo_10am
on (name=Demo01,filename='C:\SQLTest\SNAPSHOT\Snap_advlt.snap')
as SNAPSHOT of Demo01
go

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

----多文件数据创建快照
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

  

  数据库快照恢复和删除

--利用快着恢复数据库
use master
restore database Demo01 from database_snapshot='snap_demo_10am'
go

--删除快照
drop database snap_demo_10am; 

  

  

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
5月前
|
SQL IDE Java
Java连接SQL Server数据库的详细操作流程
Java连接SQL Server数据库的详细操作流程
|
2月前
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
|
4月前
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
115 13
|
4月前
|
SQL
解锁 SQL Server 2022的时间序列数据功能
【7月更文挑战第14天】要解锁SQL Server 2022的时间序列数据功能,可使用`generate_series`函数生成整数序列,例如:`SELECT value FROM generate_series(1, 10)。此外,`date_bucket`函数能按指定间隔(如周)对日期时间值分组,这些工具结合窗口函数和其他时间日期函数,能高效处理和分析时间序列数据。更多信息请参考官方文档和技术资料。
|
4月前
|
SQL 存储 网络安全
关系数据库SQLserver 安装 SQL Server
【7月更文挑战第26天】
62 6
|
4月前
|
存储 SQL C++
对比 SQL Server中的VARCHAR(max) 与VARCHAR(n) 数据类型
【7月更文挑战7天】SQL Server 中的 VARCHAR(max) vs VARCHAR(n): - VARCHAR(n) 存储最多 n 个字符(1-8000),适合短文本。 - VARCHAR(max) 可存储约 21 亿个字符,适合大量文本。 - VARCHAR(n) 在处理小数据时性能更好,空间固定。 - VARCHAR(max) 对于大文本更合适,但可能影响性能。 - 选择取决于数据长度预期和业务需求。
390 1
|
3月前
|
SQL 安全 Java
驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“The server selected protocol version TLS10 is not accepted by client
驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“The server selected protocol version TLS10 is not accepted by client
501 0
|
4月前
|
SQL Oracle 关系型数据库
MySQL、SQL Server和Oracle数据库安装部署教程
数据库的安装部署教程因不同的数据库管理系统(DBMS)而异,以下将以MySQL、SQL Server和Oracle为例,分别概述其安装部署的基本步骤。请注意,由于软件版本和操作系统的不同,具体步骤可能会有所变化。
320 3
|
4月前
|
SQL 存储 安全
数据库数据恢复—SQL Server数据库出现逻辑错误的数据恢复案例
SQL Server数据库数据恢复环境: 某品牌服务器存储中有两组raid5磁盘阵列。操作系统层面跑着SQL Server数据库,SQL Server数据库存放在D盘分区中。 SQL Server数据库故障: 存放SQL Server数据库的D盘分区容量不足,管理员在E盘中生成了一个.ndf的文件并且将数据库路径指向E盘继续使用。数据库继续运行一段时间后出现故障并报错,连接失效,SqlServer数据库无法附加查询。管理员多次尝试恢复数据库数据但是没有成功。
|
4月前
|
SQL 存储 关系型数据库
关系型数据库SQL Server学习
【7月更文挑战第4天】
81 2
下一篇
无影云桌面