恢复 mysql 快照_SQL如何使用快照恢复之前的数据

本文介绍了SQL数据库快照的概念及其在MySQL中的应用。通过创建数据库快照,可以在数据删除或更改后恢复到之前的某个状态。示例展示了如何创建快照,以及在删除数据后如何利用快照进行恢复,强调快照的只读性和应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是快照

数据库快照是SQL server 2005的一个新功能。给出的定义如下

数据库快照是数据库的只读静态视图。在创建时每个数据库快照在事务上都与源数据库一致。在创建数据库快照时,源数据库通常会有打开的事务。在快照可以使用之前,打开的事务会回滚以使数据库快照在事务上取得一致。

reg:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

UseMASTER;GO

CREATE DATABASE [Snapshot_Test] ON PRIMARY( NAME= N 'Snapshot_Test', --数据库名称

FILENAME = N 'C:\Program Files \Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\Snapshot_Test.mdf',--数据文件存放位置及数据文件名称

SIZE =3072KB ,--初始容量

MAXSIZE =UNLIMITED,--最大容量

FILEGROWTH =1024KB--增长容量

)LOG ON( NAME= N'Snaphot_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_ASGO

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

View Code

也可以直接在SSMS里通过图形化界面创建测试数据库,在创建完数据库后,又新建了一个test表

reg:

usesnapshot_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;

结果:

id

name

1

1

hello 1

2

2

hello 2

3

3

hello 3

4

4

hello 4

现在做测试。先做个快照,语法也是CREATE DATABASEY。

reg:

create database Snapshot_Test_shot ON(--是源数据库的逻辑名

NAME=Snapshot_Test,--快照文件地址

FileName= ‘D:\SqlDate\Snapshot_Test_shot.ss')

AS SNAPSHOT OF Snapshot_Test;

结果:数据库快照是只读的的。可以通过sql server的对象浏览器查看可以通过USE(快照库名)来查询数据库快照。

代码如下

useSnapshot_Test_shot;go

SELECT * FROM dbo.test;

结果:

id

name

1

hello 1

2

hello 2

3

hello 3

4

hello 4

下边做测试。先删除后利用快照恢复

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

useSnapshot_Test;go

DELETE FROM dbo.test;

View Code

结果:

id

name

恢复

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

RESTORE DATABASE DB_NAMEFORM DATABASE_SNAPSHOT= 'DB_SNAPSHOT_NAME'

---

RESTORE DATABASESnapshot_testFROM DATABASE_SNAPSHOT = 'Snapshot_test_shot'

--查询

useSnapshot_Test;go

SELECT * FROM test

View Code

结果:

id

name

1

hello 1

2

hello 2

3

hello 3

4

hello 4

小提示:快照是只读的,一旦创建不能修改

快照只能恢复数据库,不能恢复指定的表

为防止误删,必须在数据插入或更新到数据库之后再创建快照,否则在插入或更新之前创建快照,插入或更新的数据被删除也无法恢复

一般与定时一起使用,可以定时创建不同的快照防止数据丢失

删除快照

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

DROP DATABASE Snapshot_Test_shot

View Code

结果:没有文件,证明被删除

应用场景:在MSDN中如下

维护历史数据已生成报表

使用了可以实现可用性目标而维护的镜像数据库

使数据免收管理失误所带来的影响

使数据免受用户失误带来的影响

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值