SQL中如何用快照,恢复被误删的数据?

这篇具有很好参考价值的文章主要介绍了SQL中如何用快照,恢复被误删的数据?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

什么是快照

数据库快照是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]

也可以直接在SSMS里通过图形化界面创建测试数据库,这里不作赘述。在创建完数据库之后,我们又新建了一个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;

SQL中如何用快照,恢复被误删的数据?,sql,oracle,数据库
然后我们马上创建一个快照,创建快照使用的也是CREATE DATABASE语句,如下:
创建数据库快照

执行下面的创建快照的语句

create database Snapshot_Test_shot ON
(
   --是源数据库的逻辑名
   Name = Snapshot_Test,
   --快照文件地址
   FileName = 'D:\SqlData\Snapshot_Test_shot.ss'
)
AS SNAPSHOT OF Snapshot_Test;

SQL中如何用快照,恢复被误删的数据?,sql,oracle,数据库
现在的快照应该和我们新建的数据库一摸一样,可以通过sql server的对象浏览器查看数据库快照,我们可以通过USE [快照库名]来查询数据库快照

use Snapshot_Test_shot;
go
SELECT * FROM dbo.test;

SQL中如何用快照,恢复被误删的数据?,sql,oracle,数据库
删除测试库数据

下面我们删除测试数据库中的数据

use Snapshot_Test;
go
DELETE FROM dbo.test;

SQL中如何用快照,恢复被误删的数据?,sql,oracle,数据库
使用快照恢复数据库

上面删除是我们模拟误删了数据库中的数据,但是幸好我们做了数据库的快照。可以通过快照来还原刚才被误删的数据。

--语法
RESTORE DATABASE DB_NAME
FROM DATABASE_SNAPSHOT = 'DB_SNAPSHOT_NAME'

我们按照上面的语法进行恢复

RESTORE DATABASE Snapshot_test
FROM DATABASE_SNAPSHOT = 'Snapshot_test_shot'

执行完上面的恢复语句后,我们再查询一下测试库中的表

use Snapshot_Test;
go
SELECT * FROM test

SQL中如何用快照,恢复被误删的数据?,sql,oracle,数据库
数据又回来,证明可以通过创建快照来恢复被误删的数据。

注意:

1、快照是只读的,一旦创建不能修改

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

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

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

删除数据库快照

和删除数据库的语法一样

DROP DATABASE Snapshot_Test_shot
结果:

SQL中如何用快照,恢复被误删的数据?,sql,oracle,数据库

数据库快照下面没有任何快照了,说明已经被删除。

应用场景

在MSDN中数据库快照的典型应用是

1) 维护历史数据以生成报表。

2) 使用为了实现可用性目标而维护的镜像数据库来卸载报表。

3) 使数据免受管理失误所带来的影响。

4) 使数据免受用户失误所带来的影响。文章来源地址https://www.toymoban.com/news/detail-540870.html

到了这里,关于SQL中如何用快照,恢复被误删的数据?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL数据被误删怎么办?

    很多年前,被公司外派到一家单位驻场开发一个OA项目,两个开发对接各部门的需求,需求还要及时生效(一边开发一边使用)。有一次生产环境的一个bug本地没办法复现,由于没有测试人员,也就不存在测试环境,所以本地连了生产库去调试。不出意外的话要出意外了:在

    2024年02月01日
    浏览(12)
  • 电脑误删的文件怎么找回

    对于很多人来说,电脑中的文件和数据会是非常重要的,往往有一些数据是非常重要的,如果不经意地被删除了或者丢失了,那么就会对自己造成很大的损失和困扰。也许你曾经因为误操作或者电脑瘫痪等原因,不小心把重要的文件删除了。如果你不想重新花费成本和时间去

    2024年02月06日
    浏览(13)
  • Slave被误写入数据如何恢复到主库

    在GreatSQL主从复制环境中,有时候可能会出现一些误操作,将本应该写入到主库的数据写入到了从库,导致主从数据不一致,影响数据同步。是否可以将写入从库的数据同步写入主库呢? 角色 IP地址 数据库开放端口 版本 主库 192.168.137.179 3308 GreatSQL 8.0.32 从库 192.168.137.180 33

    2024年03月09日
    浏览(24)
  • MySQL中恢复被误删除表数据的方法详解

    在MySQL数据库中,有时会发生误删除表数据的情况,这可能是由于操作失误、程序错误或者恶意攻击等原因导致的。当发生这种情况时,及时采取恢复措施是非常重要的,以防止数据的永久丢失。本文将详细介绍在MySQL中恢复被误删除表数据的方法,并提供相应的源代码示例。

    2024年02月06日
    浏览(11)
  • ubuntu中如何用docker下载华为opengauss数据库(超简单)

    openGauss 是一款全面友好开放,携手伙伴共同打造的企业级开源关系型数据库。openGauss采用木兰宽松许可证v2发行,提供面向多核架构的极致性能、全链路的业务、数据安全、基于AI的调优和高效运维的能力。openGauss深度融合华为在数据库领域多年的研发经验,结合企业级场景

    2024年02月08日
    浏览(13)
  • MySQL 恢复误删数据

    MySQL 恢复误删数据,针对 window 和 Linux 均适用,只需要找到对应的 binlog 目录文件,默认就是 MySQL 安装目录下的 data 文件夹 一般误删数据,先停止所有操作,备份数据库 1、查看是否启用 binlog 日志 2、查看所有 binlog 日志 3、查看正在使用的日志 4、查找日志所在文件夹 5、

    2024年02月07日
    浏览(14)
  • 数据库误删恢复

           经常听说删库跑路这真的不只是一句玩笑话,若不小心删除了数据库,事情很严重。你一个不小心可能会给公司删没。建议研发不要直连生成环境,一般的话都会分配账号权限,生产环境的账号尽量是只读,以防你一个不经意给库或表删除。一定要备份,这很重要,

    2024年02月07日
    浏览(10)
  • MySQL数据库误删恢复

           经常听说删库跑路这真的不只是一句玩笑话,若不小心删除了数据库,事情很严重。你一个不小心可能会给公司删没。建议研发不要直连生成环境,一般的话都会分配账号权限,生产环境的账号尽量是只读,以防你一个不经意给库或表删除。一定要备份,这很重要,

    2024年02月08日
    浏览(15)
  • 【MYSQL】误删数据恢复流程说明

    误删数据恢复流程说明 项目场景:使用navicat时,不小心误删除几条数据,需要对数据进行恢复 第一步:保证mysql已经开启binlog,查看命令 : 如果没有开启binlog,也没有预先生成回滚SQL,那可能真的无法快速回滚了。对存放重要业务数据的MySQL,强烈建议开启binlog。 查看bi

    2024年02月12日
    浏览(15)
  • mysql通过binlog日志恢复误删数据

    log_bin为ON说明可以使用binlog恢复,如果为OFF说明没有开启binlog。 删除数据时间是在文件154与153之间,所以删除操作应在154文件中 mysqlbinlog命令解析日志存入新文件 mysqlbinlog 命令的参数说明 sz命令下载文件到本地 在文件中找到了detele语句 5、语句转换 把mysqllog-154.sql中的DELET

    2024年02月11日
    浏览(13)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包