資料庫快照

来源:http://www.cnblogs.com/hjworld/archive/2017/12/14/8039311.html
-Advertisement-
Play Games

簡介 資料庫快照,正如其名稱所示那樣,是資料庫在某一時間點的視圖。快照設計最開始的目的是為了報表服務。比如我需要出2011的資產負債表,這需要數據保持在2011年12月31日零點時的狀態,則利用快照可以實現這一點。快照還可以和鏡像結合來達到讀寫分離的目的。下麵我們來看什麼是快照。 什麼是快照 資料庫 ...


簡介
    資料庫快照,正如其名稱所示那樣,是資料庫在某一時間點的視圖。快照設計最開始的目的是為了報表服務。比如我需要出2011的資產負債表,這需要數據保持在2011年12月31日零點時的狀態,則利用快照可以實現這一點。快照還可以和鏡像結合來達到讀寫分離的目的。下麵我們來看什麼是快照。
 
什麼是快照
    資料庫快照是 SQL Server 資料庫(源資料庫)的只讀靜態視圖。換句話說,快照可以理解為一個只讀的資料庫。利用快照,可以提供如下好處:
    提供了一個靜態的視圖來為報表提供服務
    可以利用資料庫快照來恢複數據庫,相比備份恢復來說,這個速度會大大提高(在下麵我會解釋為什麼)
    和資料庫鏡像結合使用,提供讀寫分離
    作為測試環境或數據變更前的備份,比如我要大批導入或刪除數據前,或是將數據提供給測試人員進行測試前,做一個快照,如果出現問題,則可以利用快照恢復到快照建立時的狀態
 
快照的原理
    與備份資料庫複製整個資料庫不同,快照並不複製整個資料庫的頁,而是僅僅複製在快照建立時間點之後改變的頁。因此,當利用快照進行資料庫恢復時,也僅僅將那些做出改變的頁恢復到源資料庫,這個速度無疑會大大高於備份和恢復方式。這個原理如圖1所示(圖摘自SQL Server 2008揭秘)。
    
    圖1.鏡像的原理

   

    由圖1可以看出,快照並不是複製整個整個資料庫,而僅僅利用快照存儲原始頁。因此可以看出,源資料庫上建立快照會給IO增加額外負擔.當對快照資料庫進行查詢時,快照時間點之後更改的數據會查詢數據文件,。這個概念如圖2所示(圖摘自SQL Server 2008揭秘)。
    

    圖2.查詢快照資料庫時查詢的分佈
寫入時複製(Copy On Writing)和稀疏文件(Sparse Flie)
    由上圖中可以看出,快照資料庫的文件是基於稀疏文件(Sparse File),稀疏文件是NTFS文件系統的一項特性。所謂的稀疏文件,是指文件中出現大量0的數據,這些數據對我們用處並不大,卻一樣占用著磁碟空間。因此NTFS對此進行了優化,利用演算法將這個文件進行壓縮。因此當稀疏文件被創建時,稀疏文件剛開始大小會很小(甚至是空文件),比如圖3所示的文件就是一個稀疏文件。雖然邏輯上占了21M,但文件實際上占了128KB磁碟空間。
    
    圖3.一個稀疏文件
   

    對於快照來說,除了通過快照資料庫文件的屬性來看快照的大小之外,也可以通過DMV來查看,如圖4所示.
    

    圖4.通過DMV查看快照資料庫大小
    
    而當快照創建後,隨著對源資料庫的改變逐漸增多,稀疏文件也會慢慢增長,概念如圖4所示。
    

    圖5.隨著源資料庫的更改越來越多,稀疏文件不斷增長
 
    所以,通常來說,當稀疏文件增長到源資料庫文件大小的30%時,就應該考慮重建快照了。
    而稀疏文件的寫入是利用了微軟的寫入時複製技術(Copy-On-Writing),意思是在複製一個對象時並不是真正把對象複製到另一個位置,而是在新的對象中映射一個指針,指向原對象的位置。這樣當對新對象執行讀操作時,直接指向原對象。而在對新的對象執行寫操作時,將改變部分對象的指針指向到新的地址中。並修改映射表到新的位置中。
 
使用快照的限制
    使用快照存在諸多限制,由於列表太長(詳細請參考MSDN:http://msdn.microsoft.com/zh-cn/library/ms175158.aspx#LimitationsRequirements),我只概括的說一下主要限制。
    當使用快照恢複數據庫時,首先要刪除其他快照
    快照在創建時的時間點上沒有commit的數據不會被記入快照
    快照是快照整個資料庫,而不是資料庫的某一部分
    快照是只讀的,意思是不能在快照上加任何更改,即使是你想加一個讓報表跑得更快的索引
    在利用快照恢複數據庫時,快照和源資料庫都不可用
    快照和源數據必須在同一個實例上
    快照資料庫的文件必須在NTFS格式的盤上
    當磁碟不能滿足快照的增長時,快照資料庫會被置為suspect狀態
    快照上不能存在全文索引
    其實,雖然限制看上去很多,但只要明白快照的原理,自然能推測出快照應該有的限制。
 
快照的創建和使用
    無論是使用SSMS或是命令行,快照只能通過T-SQL語句創建。在創建資料庫之前,首先要知道資料庫分佈在幾個文件上,因為快照需要對每一個文件進行copy-on-writing。如圖6所示。
    

    圖6.首先查出資料庫的文件分佈
  
    根據圖6的資料庫分佈,我們通過T-SQL創建快照,如圖7所示。
    

    圖7,根據圖6的資料庫信息創建一個資料庫快照
 
     當快照資料庫創建成功後,就可以像使用普通資料庫一樣使用快照資料庫了,如圖8所示。
    

    圖8.快照資料庫和普通資料庫一樣使用
 
    通過如下語句可以看到,快照資料庫文件和源資料庫的文件貌似並無區別,僅僅是快照資料庫文件是稀疏文件,如圖9所示。
    

    圖9.源資料庫和快照資料庫
 
    而刪除快照資料庫和刪除普通資料庫並無二至,也僅僅是使用DROP語句,如圖10所示。
    

    圖10.刪除快照資料庫
 
    我們也可以利用快照恢複數據庫,這個恢復速度要比普通的備份-恢復來的快得多,這也可以將資料庫呈現給測試人員,當測試結束後,恢複數據庫到測試之前的狀態。如圖11所示。
    

    圖11.利用快照恢複數據庫
 
使用快照其他一些需要考慮的因素
    1.快照資料庫的安全設置繼承源資料庫的安全設置。也就是說能訪問源資料庫的用戶或角色也能訪問快照資料庫,當然,因為快照資料庫是只讀的,所以無論任何角色或人都無法修改快照資料庫。
    2.我們由文章前面圖5看出,隨著快照存在的時間越來越長,快照會不斷增長。所以推薦在快照達到源資料庫大小30%之前,重新創建快照。
    3.由於快照會拖累資料庫性能,所以資料庫不宜存在過多快照。
總結
    本文簡單講述了資料庫快照的概念,原理以及使用。資料庫快照可以在很多場景下使用,無論是用於報表,還是和鏡像配合提供負載,以及利用快照恢複數據庫,使用得當的話,快照將會是一把利器。
轉載於http://www.cnblogs.com/CareySon/archive/2012/03/30/2424880.html


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

-Advertisement-
Play Games
更多相關文章
  • PHPWord是用純PHP提供了一組類寫入和從不同的文檔格式的文件閱讀庫。PHPWord的當前版本支持微軟的Office Open XML(OOXML或處理OpenXML),用於Office應用程式OASIS開放文檔格式(OpenDocument格式或ODF)和富文本格式(RTF)。 ...
  • 1 .首先登錄搜狗輸入法Linux官網https://pinyin.sogou.com/linux/?r=pinyin,下載64bit輸入法安裝包。2.打開終端,輸入命令先安裝一個叫Gdebi輔助工具,命令如下:正常情況下終端會提醒你按(Y/N)來決定是否真的安裝,我們輸入“Y”,然後按回車鍵繼續。 ...
  • //先要理解這四個概念,這是一個提交代碼的流動軌跡:1.工作區(編輯器)-經過add到2- 2.暫存區 (緩存)- 經過commit3-3.本地倉庫 (本地項目)-經過 push4-4.遠程倉庫 (線上項目 ) //拉取遠程(這裡預設擁有項目許可權)$ git clone <項目地址> //拉取遠程分 ...
  • 一、解壓文件到當前目錄 命令:tar -zxvf mysql....tar.gz 二、移動解壓完成的文件夾到目標目錄並更名mysql 命令:mv mysql-版本號 /usr/local/mysql 添加系統mysql組和mysql用戶 添加系統mysql組 sudo groupadd mysql ...
  • 花了3個晚上,把這個章節看完,受益匪淺。 1. 最有用的應該是與中斷相關的錯誤,優先排查中斷優先順序設置。 2. 堆棧溢出檢查,可能用到,一般先把堆棧設置的足夠大,只要沒有溢出就是好事,溢出了,掌握了棧溢出鉤子函數排錯很方便。 3. 相關的問題應該儘量不會出現,畢竟只要需要列印調試信息的情況下才使用, ...
  • 1.mongodb下載地址https://www.mongodb.com/download-center#community 2.安裝 3.在D:\MongoDB目錄下創建db和log兩個文件夾,並創建環境變數,如下圖所 4.以超級管理員的身份打開cmd,以auth的方式註冊服務sc create ...
  • 我們知道Redis支持五種數據類型, 分別是字元串、哈希表(map)、列表(list)、集合(set)和有序集合,和Java的集合框架類似,不同數據類型的數據結構實也是不一樣的。 1.Redis中的redisObject對象 Redis是使用C編寫的,內部實現了一個struct結構體redisObj ...
  • 由於資料庫伺服器崩潰,造成了無法進入系統進行資料庫備份,只能把oracle相關文件拷貝出來。對於拷貝出來的文件在測試機上進行一次不完全恢復,具體流程如下所示: 1、安裝oracle 10g服務端並創建一個與要進行恢復的資料庫相同名稱的實例(db_name,sid,字元集一樣,因為在創建控制文件時,會 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...