最近开始学的数据库,使用的是SQL server 2008,以下是我学习数据库快照的笔记,如有错误还请指正。
什么是数据库快照:
数据库快照,顾名思义就是给数据库某个时刻拍的照片,是数据库(源数据库)的只读、静态视图。多个快照可以位于一个源数据库中,并且可以作为数据库始终驻留在同一服务器实例上。创建快照时,每个数据库快照在事务上与源数据库一致。在被数据库所有者显式删除之前,快照始终存在。
如何创建数据库快照:
下面是进行如下操作的一些最佳方法:命名数据库快照、创建它们时进行计时、限制它们的数量以及将客户端连接重新定向到快照。
数据库快照的命名: 为了便于管理,数据库快照的名称可以包含标识数据库的信息,且每个数据库快照的名称具有唯一性。
例如:
.源数据库的名称
.该新名称用于数据库快照的信息
.快照的创建日期和时间、序列号或一些其他的信息(例如一天中的某个时间)以区分给定的数据库上的连续快照
基于每天24小时制,这里的数据名称为TEST,那么就可以这样命名:
TEST_snapshot_0600 --上午六时的数据库快照
TEST_snapshot_1203 --中午12时3分的数据库快照
TEST_snapshot_1820 --18时20分的数据库快照
数据库快照的创建可以根据具体需要在不同的时刻进行创建。
创建数据库快照的语句基本与数据库的创建相同,只不过在末尾加了AS SNAPSHOT OF DB_NAME(作为xx数据库的快照)
下面是创建数据库快照的T-SQL语句:
CREATE DATABASE db_name ON
(
NAME = db_name_data,
FILENAME = ‘path\db_name_data.ss’
)
AS SNAPSHOT OF db_name;
例:
GO --执行批处理
CREATE DATABASE TEST
ON
(
NAME = TEST_data_1800, --设置快照文件名称
FILENAME = 'D:\SQL\TEST_data_1800.ss' --指定快照文件位置
)
AS SNAPSHOT OF TEST; --指定为数据库快照
GO
注意:创建数据库快照时,CREATE DATABASE 语句中不允许有日志文件、脱机文件、还原文件和不起作用的文件
建好数据库快照后,点击对象资源管理器-数据库-数据库快照,就可以查看已建好的数据快照。
如果要删除数据快照,可以使用以下语句:
USE TEST --指定当前操作的数据库
DROP DATABASE SalesSnapshot0600 --删除名为 SalesSnapshot0600 的数据库快照,而不影响源数据库
删除后SalesSnapshot0600 的所有用户连接都被终止,并删除快照使用的所有 NTFS 文件系统稀疏文件
将数据库恢复到数据库快照步骤
1、标识要将数据库恢复到的数据库快照
2、删除其他任何数据库快照。
3、执行恢复操作
如果数据库使用完整恢复模式,则在执行恢复之前,应先备份日志,恢复数据库快照要求源数据库具有RESTORE DATABASE 权限。
TSQL语句如下:
RESTORE DATABASE <数据库名称> FROM DATABASE_SNAPSHOT = <数据库快照名称>
例:
--Test to see if sales_snapshot0600 exists and if it
-- does, delete it.
IF EXISTS (SELECT dbid FROM sys.databases
WHERE NAME='sales_snapshot0600')
DROP DATABASE SalesSnapshot0600;
GO
-- Reverting Sales to sales_snapshot1200
USE master;
RESTORE DATABASE Sales FROM DATABASE_SNAPSHOT = 'sales_snapshot1200';
GO
已恢复的数据库将保留数据库快照的权限和配置(例如,数据库所有者和恢复模式)。