1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        SQL中如何使用快照,恢復(fù)被誤刪的數(shù)據(jù)?

        共 2558字,需瀏覽 6分鐘

         ·

        2020-06-18 23:22

        點(diǎn)擊關(guān)注上方“SQL數(shù)據(jù)庫開發(fā)”,

        設(shè)為“置頂或星標(biāo)”,第一時(shí)間送達(dá)干貨。

        什么是快照

        數(shù)據(jù)庫快照是sql server 2005的一個(gè)新功能。MSDN上對(duì)它的定義是:

        數(shù)據(jù)庫快照是數(shù)據(jù)庫(稱為“源數(shù)據(jù)庫”)的只讀靜態(tài)視圖。在創(chuàng)建時(shí),每個(gè)數(shù)據(jù)庫快照在事務(wù)上都與源數(shù)據(jù)庫一致。在創(chuàng)建數(shù)據(jù)庫快照時(shí),源數(shù)據(jù)庫通常會(huì)有打開的事務(wù)。在快照可以使用之前,打開的事務(wù)會(huì)回滾以使數(shù)據(jù)庫快照在事務(wù)上取得一致。?


        創(chuàng)建示例數(shù)據(jù)庫

        Use MASTER;
        GO
        CREATE DATABASE [Snapshot_Test] ON ?PRIMARY
        ( NAME = N'Snapshot_Test', --數(shù)據(jù)庫名稱
        FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\Snapshot_Test.mdf',
        --數(shù)據(jù)文件存放位置及數(shù)據(jù)文件名稱
        SIZE = 3072KB ,
        --初始容量
        MAXSIZE = UNLIMITED,
        --最大容量
        FILEGROWTH = 1024KB
        --增長(zhǎng)容量
        )
        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

        (提示:可以左右滑動(dòng)代碼)

        也可以直接在SSMS里通過圖形化界面創(chuàng)建測(cè)試數(shù)據(jù)庫,這里不作贅述。在創(chuàng)建完數(shù)據(jù)庫之后,我們又新建了一個(gè)test表,我們先往里面插入測(cè)試數(shù)據(jù)。如下:

        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;

        結(jié)果:

        ca6c58936bf38461bab1745e3056a49b.webp


        然后我們馬上創(chuàng)建一個(gè)快照,創(chuàng)建快照使用的也是CREATE DATABASE語句,如下:


        創(chuàng)建數(shù)據(jù)庫快照

        執(zhí)行下面的創(chuàng)建快照的語句

        create database Snapshot_Test_shot ON
        (
        ? ?--是源數(shù)據(jù)庫的邏輯名
        ? ?Name = Snapshot_Test,
        ? ?--快照文件地址
        ? ?FileName = 'D:\SqlData\Snapshot_Test_shot.ss'
        )
        AS SNAPSHOT OF Snapshot_Test;

        結(jié)果:

        b1e33f061b6f259daa3633b343e2e9f3.webp

        現(xiàn)在的快照應(yīng)該和我們新建的數(shù)據(jù)庫一摸一樣,可以通過sql server的對(duì)象瀏覽器查看數(shù)據(jù)庫快照,我們可以通過USE [快照庫名]來查詢數(shù)據(jù)庫快照

        use Snapshot_Test_shot;
        go
        SELECT * FROM dbo.test;

        結(jié)果:

        dec3bf0921a024de1af784c71bca04fc.webp


        刪除測(cè)試庫數(shù)據(jù)

        下面我們刪除測(cè)試數(shù)據(jù)庫中的數(shù)據(jù)

        use Snapshot_Test;
        go
        DELETE?FROM dbo.test;

        結(jié)果:

        9b3fc14bd7ac9f5eac4aa07ec5dceff4.webp


        使用快照恢復(fù)數(shù)據(jù)庫

        上面刪除是我們模擬誤刪了數(shù)據(jù)庫中的數(shù)據(jù),但是幸好我們做了數(shù)據(jù)庫的快照。可以通過快照來還原剛才被誤刪的數(shù)據(jù)。

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


        我們按照上面的語法進(jìn)行恢復(fù)

        RESTORE DATABASE Snapshot_test
        FROM DATABASE_SNAPSHOT = 'Snapshot_test_shot'


        執(zhí)行完上面的恢復(fù)語句后,我們?cè)俨樵円幌聹y(cè)試庫中的表

        use Snapshot_Test;
        go
        SELECT * FROM test


        結(jié)果:

        dec3bf0921a024de1af784c71bca04fc.webp

        數(shù)據(jù)又回來,證明可以通過創(chuàng)建快照來恢復(fù)被誤刪的數(shù)據(jù)。


        注意

        1、快照是只讀的,一旦創(chuàng)建不能修改

        2、快照只能恢復(fù)數(shù)據(jù)庫,不能恢復(fù)指定的表

        3、為防止誤刪除,必須在數(shù)據(jù)插入或更新到數(shù)據(jù)庫之后再創(chuàng)建快照,否則在插入或更新之前創(chuàng)建快照,插入或更新的數(shù)據(jù)被刪除是無法恢復(fù)的。

        4、快照一般與定時(shí)任務(wù)一起使用,可以定時(shí)創(chuàng)建不同的快照防止數(shù)據(jù)丟失。


        刪除數(shù)據(jù)庫快照

        和刪除數(shù)據(jù)庫的語法一樣

        DROP DATABASE Snapshot_Test_shot

        結(jié)果:

        f8bc3d34a91f7a8fb9921069c83ef089.webp

        數(shù)據(jù)庫快照下面沒有任何快照了,說明已經(jīng)被刪除。


        應(yīng)用場(chǎng)景

        在MSDN中數(shù)據(jù)庫快照的典型應(yīng)用是

        1)?維護(hù)歷史數(shù)據(jù)以生成報(bào)表。

        2)?使用為了實(shí)現(xiàn)可用性目標(biāo)而維護(hù)的鏡像數(shù)據(jù)庫來卸載報(bào)表。

        3)?使數(shù)據(jù)免受管理失誤所帶來的影響。

        4)?使數(shù)據(jù)免受用戶失誤所帶來的影響。


        ——End——

        后臺(tái)回復(fù)關(guān)鍵字:1024,獲取一份精心整理的技術(shù)干貨

        后臺(tái)回復(fù)關(guān)鍵字:進(jìn)群,帶你進(jìn)入高手如云的交流群。

        推薦閱讀


        這是一個(gè)能學(xué)到技術(shù)的公眾號(hào),歡迎關(guān)注點(diǎn)擊「閱讀原文」了解SQL訓(xùn)練營(yíng)
        瀏覽 41
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            久久精品在线播放 | 国产巨乳在线观看 | 四虎4hu新入口av | 中文字幕在线和永久在线的区别 | 性少妇jealousvue成熟 | 男啪女色黄无遮挡免费观看 | 成人黄网站在线观看 | 自拍肏屄视频 | 麻豆hdxxxxx仙踪林 | 黑人巨大精品欧美一区二区, |