SQL的这个数据恢复功能你用过吗?

发表于:2021-2-22 09:38

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:丶平凡世界    来源:51CTO

  今天我们要介绍的这个数据恢复功能叫快照。
  什么是快照?
  数据库快照是sql server 2005的一个功能。MSDN上对它的定义是:
  数据库快照是数据库(称为“源数据库”)的只读静态视图。在创建时,每个数据库快照在事务上都与源数据库一致。在创建数据库快照时,源数据库通常会有打开的事务。在快照可以使用之前,打开的事务会回滚以使数据库快照在事务上取得一致。
  客户端可以查询数据库快照,这对于基于创建快照时的数据编写报表是很有用的。而且,如果以后源数据库损坏了,便可以将源数据库恢复到它在创建快照时的状态。
  下面我们实践一下数据库快照的创建和使用。
  创建示例数据库
  Use MASTER; 
  GO 
  CREATE DATABASE [Snapshot_Test] ON  PRIMARY 
  ( NAME = N'Snapshot_Test', --数据库名称 
  FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\Snapshot_Test.mdf', 
  --数据文件存放位置及数据文件名称 
  SIZE = 3072KB , 
  --初始容量 
  MAXSIZE = UNLIMITED, 
  --最大容量 
  FILEGROWTH = 1024KB 
  --增长容量 
  ) 
  LOG ON 
  ( NAME = N'Snapshot_Test_log', 
  FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\Snapshot_Test_log.ldf' , 
  SIZE = 504KB , 
  MAXSIZE = UNLIMITED, 
  FILEGROWTH = 10%) 
  COLLATE Chinese_PRC_CI_AS 
  GO 
  EXEC dbo.sp_dbcmptlevel @dbname=N'Snapshot_Test', @new_cmptlevel=130 
  GO 
  USE [Snapshot_Test] 
  GO 
  SET ANSI_NULLS ON 
  GO 
  SET QUOTED_IDENTIFIER ON 
  GO 
  CREATE TABLE [dbo].[test]( 
   [id] [int] NOT NULL, 
   [name] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NOT NULL 
  ) ON [PRIMARY] 
  GO 
  在创建完数据库之后,我们马上创建一个快照,创建快照使用的也是CREATE DATABASE语句,如下:
  创建数据库快照
  create database Snapshot_Test_shot ON 
  ( 
     --是源数据库的逻辑名 
     Name = Snapshot_Test, 
     --快照文件地址 
     FileName = 'D:\SqlData\Snapshot_Test_shot.ss' 
  ) 
  AS SNAPSHOT OF Snapshot_Test; 
  结果:
  现在的快照应该和我们新建的数据库一摸一样,可以通过sql server的对象浏览器查看数据库快照,我们可以通过USE [快照库名]来查询数据库快照。
  use Snapshot_Test_shot; 
  go 
  SELECT * FROM dbo.test; 
  结果:
  以上语句执行后dbo.test中没有任何数据,下一步我们往源数据库表中插入几条数据。
  use snapshot_Test; 
  go 
  INSERT INTO TEST (id,name)values(1,'hello 1'); 
  INSERT INTO TEST (id,name)values(2,'hello 2'); 
  INSERT INTO TEST (id,name)values(3,'hello 3'); 
  INSERT INTO TEST (id,name)values(4,'hello 4'); 
  GO 
  SELECT * FROM dbo.test; 
  结果:
  我们再次查询快照数据库中的数据。
  use Snapshot_Test_shot; 
  go 
  SELECT * FROM dbo.test; 
  结果:
  依旧没有数据,那是因为快照一旦创建就不能往里面写数据了,是只读文件。
  使用快照恢复数据库
  从数据库快照恢复数据库。
  use master; 
  GO 
  RESTORE DATABASE Snapshot_Test from 
  DATABASE_SNAPSHOT = 'Snapshot_Test_shot'; 
  恢复后,刚插入的数据就没有了,我们可以查询一下。
  use Snapshot_Test; 
  SELECT * FROM dbo.test 
  结果:
  由此可以证明,快照将数据库恢复到创建快照的那一刻了。
  删除数据库快照
  和删除数据库的语法一样
  DROP DATABASE Snapshot_Test_shot
  结果:
  数据库快照下面没有任何快照了,说明已经被删除。
  应用场景
  在MSDN中数据库快照的典型应用是
  1) 维护历史数据以生成报表。
  2) 使用为了实现可用性目标而维护的镜像数据库来卸载报表。
  3) 使数据免受管理失误所带来的影响。
  4) 使数据免受用户失误所带来的影响。

  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号