亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

SQL Server的還原

系統 1830 0

1.差異備份的還原

不備份結尾日志的情況下還原數據

創建差異備份的放在我們已經在前面一篇博客 SQL Server的備份 中提到了,這里我們不再贅述,下面我們給出差異備份與還原的T-SQL方法,代碼如下:

      
        --
      
      
        創建備份設備
      
      
        EXEC
      
       sp_addumpdevice 
      
        '
      
      
        disk
      
      
        '
      
      , 
      
        '
      
      
        MyAdvWorks_1
      
      
        '
      
      , 
      
        '
      
      
        d:\backup\MyAdvWorks_1.bak
      
      
        '
      
      
        ;


      
      
        EXEC
      
       sp_addumpdevice 
      
        '
      
      
        disk
      
      
        '
      
      , 
      
        '
      
      
        MyAdvWorks_diff1
      
      
        '
      
      , 
      
        '
      
      
        d:\backup\MyAdvWorks_diff1.bak
      
      
        '
      
      
        ;


      
      
        EXEC
      
       sp_addumpdevice 
      
        '
      
      
        disk
      
      
        '
      
      , 
      
        '
      
      
        MyAdvWorks_log1
      
      
        '
      
      , 
      
        '
      
      
        d:\backup\MyAdvWorks_log1.bak
      
      
        '
      
      
        ;


      
      
        EXEC
      
       sp_addumpdevice 
      
        '
      
      
        disk
      
      
        '
      
      , 
      
        '
      
      
        MyAdvWorks_log2
      
      
        '
      
      , 
      
        '
      
      
        d:\backup\MyAdvWorks_log2.bak
      
      
        '
      
      
        ;




      
      
        --
      
      
        數據庫備份階段
      
      
        

--
      
      
         創建完整備份
      
      
        BACKUP
      
      
        DATABASE
      
      
         MyAdvWorks 

   
      
      
        TO
      
      
         MyAdvWorks_1 

   
      
      
        WITH
      
      
         INIT;


      
      
        GO
      
      
        --
      
      
         在完整備份之后創建差異備份
      
      
        BACKUP
      
      
        DATABASE
      
      
         MyAdvWorks

   
      
      
        TO
      
      
         MyAdvWorks_diff1

   
      
      
        WITH
      
      
         DIFFERENTIAL;


      
      
        GO
      
      
        --
      
      
        數據庫還原階段
      
      
        

--
      
      
         完整還原
      
      
        RESTORE
      
      
        DATABASE
      
      
         MyAdvWorks

   
      
      
        FROM
      
      
         MyAdvWorks_1

   
      
      
        WITH
      
      
         NORECOVERY;


      
      
        GO
      
      
        --
      
      
         在完整還原之后差異還原
      
      
        RESTORE
      
      
        DATABASE
      
      
         MyAdvWorks

   
      
      
        FROM
      
      
         MyAdvWorks_diff1

   
      
      
        WITH
      
      
         RECOVERY;


      
      
        GO
      
    

在執行上述完整還原的時候,SSMS報錯,錯誤內容如下:

      Msg 
      
        3159
      
      , 
      
        Level
      
      
        16
      
      , State 
      
        1
      
      , Line 
      
        2
      
      
        

The tail 
      
      
        of
      
       the 
      
        log
      
      
        for
      
       the 
      
        database
      
       "MyAdvWorks" has 
      
        not
      
       been backed up. 
      
        Use
      
      
        BACKUP
      
      
        LOG
      
      
        WITH
      
       NORECOVERY 
      
        to
      
      
        backup
      
       the 
      
        log
      
      
        if
      
       it 
      
        contains
      
      
        work
      
       you do 
      
        not
      
       want 
      
        to
      
       lose. 
      
        Use
      
       the 
      
        WITH
      
      
        REPLACE
      
      
        or
      
      
        WITH
      
       STOPAT clause 
      
        of
      
       the 
      
        RESTORE
      
       statement 
      
        to
      
       just overwrite the contents 
      
        of
      
       the 
      
        log
      
      
        .

Msg 
      
      
        3013
      
      , 
      
        Level
      
      
        16
      
      , State 
      
        1
      
      , Line 
      
        2
      
      
        RESTORE
      
      
        DATABASE
      
      
        is
      
       terminating abnormally.
    

這是因為, 對于使用完全恢復模式或大容量日志恢復模式的數據庫,在大多數情況下,您必須在還原數據庫前備份日志的結尾。 ? 還原數據庫而不首先備份日志的末尾將導致錯誤,除非 RESTORE DATABASE 語句包含 WITH REPLACE 或 WITH STOPAT 子句 ,此子句必須指定數據備份的結束時間或在數據備份結束之后發生的事務。 ? 有關結尾日志備份的詳細信息,請參閱 結尾日志備份 (SQL Server) 。RESTORE的語法可以 參考 RESTORE (Transact-SQL) 。為了解決上述錯誤,我們將完整還原的TSQL語句修改如下:

      
        --
      
      
         完整還原
      
      
        RESTORE
      
      
        DATABASE
      
      
         MyAdvWorks

   
      
      
        FROM
      
      
         MyAdvWorks_1

   
      
      
        WITH
      
      
        REPLACE
      
      
        ,NORECOVERY;


      
      
        GO
      
    

應盡可能避免使用 REPLACE,而且在使用該選項之前必須仔細考慮。 ? 還原一般會防止意外使用一個數據庫覆蓋另一個數據庫。 ? 如果 RESTORE 語句中指定的數據庫已存在于當前服務器上,并且指定的數據庫系列 GUID 與備份集中記錄的數據庫系列 GUID 不同,則不還原該數據庫。 ? 這是一項重要的安全保護措施。

使用 REPLACE 選項后,就會忽略還原時通常執行的幾項重要安全檢查。 ? 忽略的檢查如下:

  • 還原時使用其他數據庫的備份覆蓋現有數據庫。

    使用 REPLACE 選項后,即使指定的數據庫名稱與備份集中記錄的數據庫名稱不同,還原也允許您使用備份集中任何一個數據庫覆蓋現有數據庫。 ? 這會導致一個數據庫意外覆蓋另一個數據庫。

  • 在沒有獲取結尾日志備份并也沒有使用 STOPAT 選項的情況下,使用完整恢復模式或大容量日志恢復模式對數據庫進行還原。

    使用 REPLACE 選項后,由于沒有備份最近寫入的日志,您會丟失提交的作業。

  • 覆蓋現有文件。

    例如,可能會錯誤地覆蓋錯誤類型的文件,如 .xls 文件或非聯機狀態的其他數據庫正在使用的文件等。 ? 如果覆蓋現有文件,則即使所還原的數據庫是完整的,也有可能丟失某些數據。

RECOVERY 和 NORECOVERY 的比較

仔細觀察上述完整還原和差異還原的TSQL語句,我們可以看到在 完整還原 階段,使用了 WITH NORECOVERY ,而 差異還原 ,則是使用了 RECOVERY

  • NORECOVERY 指定 不發生回滾 ? 從而使 前滾 按順序在下一條語句中繼續進行。 在這種情況下,還原順序可還原其他備份,并執行前滾。
  • RECOVERY(默認值)表示,應在完成當前備份前滾之后執行回滾。 恢復數據庫要求要還原的整個數據集(“前滾集”)必須與數據庫 一致 ? 如果前滾集尚未前滾到與數據庫保持一致的地步,并且指定了 RECOVERY,則數據庫引擎將發出錯誤。
  • 因此RESTORE...WITH RECOVERY狀態就表明此時數據庫已經處于 一致性 狀態了。一般都是數據庫還原的最后一步才會使用RESTORE...WITH RECOVERY,其他時候都是使用RESTORE...WITH NORECOVERY。

前滾與回滾的區別 ?

前滾和回滾是 SQL Server中的兩個事務操作。

  • 前滾用于恢復之前的操作。

  比如:執行一個刪除一條記錄的命令,剛剛把該操作的日志寫完(即在日志中已經commit),并準備執行刪除操作時,但是此時停電了,因此這條記錄的刪除工作沒有完成。在下次啟動SQL Server時,數據庫會讀取日志最近的一個檢查點(checkpoint),然后重做所有已經commit的事務,這就包括之前刪除記錄的操作。

  • 回滾用于撤銷之前的操作。

  比如:我要執行一個銀行轉賬的事務,從賬戶A中轉出1000元到賬戶B中,在我執行完A-1000的時候,數據庫down掉了,此時整個事務還沒有執行完,因此事uncommitted的。所以在下次啟動SQL Server的時候,數據庫會讀取日志最近的一個檢查點(checkpoint),回滾所有那些uncommitted的事務。比如在這里會撤銷A-1000的操作,也就是會往A賬戶中加回去1000元。?

SQL Server的還原


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 色综合久久久久久 | 成人影院在线免费观看 | 日日狠狠久久偷偷四色综合免费 | 日本欧美黄色 | 精品久久久久久18免费看 | 国产视频一区二 | 日本操操操| 99久久国产免费中文无字幕 | 91伦理视频 | 天天艹| 成人a毛片免费视频观看 | 亚洲性另类 | 成熟性xxxxx| 欧美日韩成人午夜免费 | 中文字幕在线一区二区三区 | 亚洲综合国产 | 亚洲精品第一国产综合高清 | 嘿嘿嘿视频免费网站在线观看 | 亚洲精品久久99久久 | 欧洲激情乱子伦 | 狠狠久久亚洲欧美专区 | 精品成人在线视频 | 农村寡妇一级毛片免费看视频 | 日本福利片国产午夜久久 | 在线观看精品一区 | 日韩在线观看中文字幕 | 亚洲伊人国产 | 成年免费网站 | 日韩高清在线日韩大片观看网址 | 久久狠狠第一麻豆婷婷天天 | 国产玖玖玖精品视频 | 无毒不卡 | 香蕉网伊在线中文慕大全 | 青青青免费在线视频 | 国产日比视频 | 美女精品久久久久久国产潘金莲 | 特大毛片| 超级乱淫视频aⅴ播放视频 超级乱淫视频播放日韩 | 国产农村妇女毛片精品久久 | 在线日韩不卡 | 91久久九九精品国产综合 |