sql server 備份與恢復系列四 大容量模式下的備份與還原

来源:https://www.cnblogs.com/MrHSR/archive/2018/08/13/9458570.html
-Advertisement-
Play Games

一. 概述 在sql server 備份與恢復系列的第一篇里,有講到大容量模式下備份與還原的相關知識。這篇重點來演示在大容量模式下常用的備份與還原模式“完整備份+差異備份+日誌備份”。 在大容量恢復模式下,特別要註意的是在什麼情況下會導致數據還原丟失風險,帶著這個問題,來進行演示說明。備份策略如下圖 ...


一. 概述

  在sql server 備份與恢復系列的第一篇里,有講到大容量模式下備份與還原的相關知識。這篇重點來演示在大容量模式下常用的備份與還原模式“完整備份+差異備份+日誌備份”。 在大容量恢復模式下,特別要註意的是在什麼情況下會導致數據還原丟失風險,帶著這個問題,來進行演示說明。備份策略如下圖所示:

二.備份

    我這裡有TestBulkLogged庫,庫里新建了一個product空表。備份SQL語句如下所示:

use master
-- 設置大容量模式
ALTER DATABASE TestBulkLogged SET RECOVERY bulk_logged

-- 做一次完整備份到備份設備中(備份基準) 
backup database  TestBulkLogged to BackupTestDevice

-- 新增
insert into TestBulkLogged.dbo.product(model,upbymemberid,brand) values('第一次新增數據',9708,'IT')

-- 做一次日誌備份
backup log   TestBulkLogged to BackupTestDevice

-- 批量插入(5998 行受影響)
insert into TestBulkLogged.dbo.product(model,upbymemberid,brand)
select model,upbymemberid,brand from test.dbo.product

-- 做二次日誌備份
backup log   TestBulkLogged to BackupTestDevice

-- 第二次日誌備份後的新增
insert into TestBulkLogged.dbo.product(model,upbymemberid,brand) values('第二次新增數據',9708,'IT')

-- 做差異備份
backup database  TestBulkLogged to BackupTestDevice with differential 

-- 全部刪除(6000 行受影響)
delete from TestBulkLogged.dbo.product

  查看備份集列表如下圖所示:

三. 還原(1)批量插入的是否會丟失

  通過還原查看批量插入操作是否丟失,在備份尾日誌時如果報錯, 信息如下:"因為資料庫正在使用,所以無法獲得對資料庫的獨占訪問權" 需要將庫設置成單用戶模式

use master
-- 先還原完整備份 ,norecovery(正在還原...)不可讀寫. file指備份集位置號
restore database TestBulkLogged from BackupTestDevice with file=10, norecovery 

    

   在大容量模式下還原時,sql server會檢測你是否進行了尾日誌備份,也是確保最後一次日誌備份後,所做的數據操作在還原後不丟失。(如果尾日誌備份失敗,則丟失數據)。下麵先備份一下尾日誌, 使用norecovery 暫不提交

-- 尾日誌備份
backup log TestBulkLogged to BackupTestDevice with norecovery 

 上圖備份了尾日誌後,備份集里多出了一個文件號14, 下麵在重新還原完整備份

-- (重新)從備份恢復一個全備份 ,norecovery(正在還原...)不可讀寫. file指備份集位置號
restore database TestBulkLogged from BackupTestDevice with file=10, norecovery 

    

-- 恢復到日誌文件11  
restore database TestBulkLogged from BackupTestDevice  with file=11, norecovery

-- 恢復到日誌文件12  
restore database TestBulkLogged from BackupTestDevice  with file=12, recovery

    

 接下來我們來查詢下庫中的product表,查看數據是否全部恢復。

-- 查詢大批量操作的數據,是否已還原出來
select * from TestBulkLogged.dbo.product

  

  結論:通過上圖我們可以瞭解到,第一次和第二次做的日誌備份都完美的還原了過來。 大批量插入操作也得到了還原。證明在大容量模式下,大批量操作的數據, 還原恢復可能存在丟失的風險,但不一定會丟失掉

 四. 還原(2)打斷日誌鏈

  在前面講述事務日誌時提到了, 事務日誌鏈LSN, 在還原的時候必須要保持事務鏈的順序,依次的還原。 下麵演示跳過日誌鏈文件ID:11 ,直接還原日誌鏈文件ID:12。

-- 尾日誌備份
backup log TestBulkLogged to BackupTestDevice with norecovery 

-- 從備份恢復一個全備份 ,norecovery(正在還原...)不可讀寫. file指備份集位置號
restore database TestBulkLogged from BackupTestDevice with file=10, norecovery 

-- 跳過日誌文件11,恢復到日誌文件12  
restore database TestBulkLogged from BackupTestDevice  with file=12, recovery

  

  結論:如果只有(完整備份和事務日誌備份), 在還原時,事務日誌必須保持LSN順序,依次還原,否則還原失敗就會丟失數據。

五. 還原(3) 基於差異備份下的日誌還原

  在生產環境中,由於日誌文件備份頻繁,導致日誌文件太多,如果按日誌文件一個一個來還原,需要大量時間和精力。下麵演示直接從差異備份還原開始,看後面的日誌文件是否能還原成功。

-- 尾日誌備份
backup log TestBulkLogged to BackupTestDevice with norecovery 

-- 從備份恢復一個全備份 ,norecovery(正在還原...)不可讀寫. file指備份集位置號
restore database TestBulkLogged from BackupTestDevice with file=10, norecovery 

-- 恢復到差異備份文件13. 跳過日誌文件11,12 
restore database TestBulkLogged from BackupTestDevice  with file=13, recovery

   上面還原是跳過了日誌文件,直接使用差異備份文件還原。我們來查看下表中的數據,會發現差異備份完全可以還原正確成功。

  

下麵是差異備份與日誌備份組合來還原,結論是日誌文件不需要一個一個來還原,可以直接定位到,一個差異備份來還原,再還原,之後的日誌文件。

-- 尾日誌備份
backup log TestBulkLogged to BackupTestDevice with norecovery 

-- 從備份恢復一個全備份 ,norecovery(正在還原...)不可讀寫. file指備份集位置號
restore database TestBulkLogged from BackupTestDevice with file=10, norecovery 

-- 恢復到差異備份文件13. 跳過日誌文件11,12 
restore database TestBulkLogged from BackupTestDevice  with file=13, norecovery

-- 恢復到日誌文件14 
restore database TestBulkLogged from BackupTestDevice  with file=14, recovery

   結論:有了差異備份,在還原時就節省了很多還原時間和精力。可以在完整備份的基準內,直接選擇最後一次的差異備份加上之後的日誌備份來還原。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Flume – 初識flume、source和sink 目錄基本概念常用源 Source常用sink 基本概念  什麼叫flume? 分散式,可靠的大量日誌收集、聚合和移動工具。  events 事件,是一行數據的位元組數據,是flume發送文件的基本單位。  flume配置文件 重命名flum ...
  • 1. innodb_lock_wait_timeout mysql 可以自動監測行鎖導致的死鎖併進行相應的處理,但是對於表鎖導致的死鎖不能自動監測,所以該參數主要用於,出現類似情況的時候等待指定的時間後回滾。系統預設值是50秒。用戶可以根據業務自行設置。生產環境不推薦使用過大的 innodb_loc ...
  • 1、若你用的Linux系統是CentOS的話,這是一個坑: 它會提示你JAVA_HOME找不到,現在去修改文件: 這是CentOS的一個大坑,手動配置JAVA_HOME環境變數。 2、啟動後無NameNode進程 如果在啟動Hadoop,start-all.sh之後一切正常。但是Jps查看進程時發現 ...
  • 本節介紹Oracle子查詢的相關內容: 實例用到的數據為oracle中scott用戶下的emp員工表,dept部門表,數據如下: 一、子查詢 1、概念:嵌入在一個查詢中的另一個查詢語句,也就是說一個查詢作為另一個查詢的條件,這個查詢稱為子查詢。 那麼可以使用子查詢的位置有select後面、from後 ...
  • 在MongoDB3.6引入的新feature中,change stream無疑是非常吸引人的。 Change streams allow applications to access real-time data changes without the complexity and risk of ...
  • 之前只用phpmyadmin登錄本地的mysql,管理另一個遠程資料庫的時候發現,單純用命令行處理字元串、換行符實在是不好使,所以配置了遠程登錄mysql,很簡單的問題結果沒有搜到合適的方法,所以記錄下我的配置方式。 phpmyadmin/libraries/config.default.php $ ...
  • 今天來介紹新手學習hadoop的入門註意事項。這篇文章一來談談hadoop核心知識學習。 首先hadoop分為hadoop1.X和hadoop2.X,並且還有hadoop生態系統,那麼下麵我們以hadoop2.x為例進行詳細介紹: Hadoop的核心是mapreduce和hdfs。 Mapreduc ...
  • 一、sql server日期時間函數Sql Server中的日期與時間函數 1. 當前系統日期、時間 select getdate() 2. dateadd 在向指定日期加上一段時間的基礎上,返回新的 datetime 值 例如:嚮日期加上2天 select dateadd(day,2,'2004- ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...