• SQL如何使用快照恢复之前的数据


    什么是快照

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

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

    reg:

    Use MASTER;
    GO
    CREATE DATABASE [ Snapshot_Test ] ON PRIMARY
    ( NAME = N 'Snapshot_Test ', --数据库名称
    FILENAME = N 'C:Program Files Microsoft SQL ServerMSSQL12.MSSQLSERVERMSSQLDATASnapshot_Test.mdf',
    --数据文件存放位置及数据文件名称
    SIZE = 3072KB ,
    --初始容量
    MAXSIZE = UNLIMITED,
    --最大容量
    FILEGROWTH = 1024KB
    --增长容量
    )
    LOG ON
    ( NAME = N'Snaphot_Test_log',
    FILENAME = N 'C:Program FilesMicrosoft SQL ServerMSSQL13.MSSQLSERVERMSSQLDATASnapshot_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
    View Code

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

    reg:

    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;

    结果:

      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:SqlDateSnapshot_Test_shot.ss'
    
    )
    
    AS SNAPSHOT OF Snapshot_Test;

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

    代码如下

    use Snapshot_Test_shot;
    
    go
    
    SELECT * FROM dbo.test;

    结果:

    id name
    1 hello 1
    2 hello 2
    3 hello 3
    4 hello 4

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

    use Snapshot_Test;
    go
    DELETE FROM dbo.test;
    View Code

    结果:

    id name
       

    恢复

    RESTORE DATABASE DB_NAME
    FORM DATABASE_SNAPSHOT = 'DB_SNAPSHOT_NAME'
    
    
    
    ---
    RESTORE DATABASE Snapshot_test
    FROM DATABASE_SNAPSHOT = 'Snapshot_test_shot'
    
    
    --查询
    use Snapshot_Test;
    go
    SELECT * FROM test
    View Code

    结果:

    id name
    1 hello 1
    2 hello 2
    3 hello 3
    4 hello 4

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

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

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

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

    删除快照

    DROP  DATABASE Snapshot_Test_shot
    View Code

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

    应用场景:在MSDN中如下

          维护历史数据已生成报表

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

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

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

  • 相关阅读:
    Ubuntu+XAMPP+Wordpress的安装与配置问题
    Html5最简单的游戏Demo——Canvas绘图的骰子
    Html5最简单的游戏Demo——Canvas绘图的弹弹球
    LinqToExcel: LINQ查询Excel电子表格
    Asp.Net Web API开发微信后台
    Json.Net使用JSON Schema验证JSON格式【实例】
    Json.Net使用JSON Schema验证JSON格式
    LeetCode-C#实现-哈希表(#349)
    大话设计模式-解释器模式
    大话设计模式-享元模式
  • 原文地址:https://www.cnblogs.com/john4415/p/11376729.html
Copyright © 2020-2023  润新知