sqlserver 關於快照


數據庫快照:是數據庫某一時間點的視圖,快照涉及最初目的是為了報表服務,快照還可以和鏡像結合來達到讀寫分離的目的

數據庫快照:是sqlserver數據庫的只讀靜態視圖
快照的作用:
1 提供了一個靜態的視圖來為報表服務
2 可以利用數據庫快照來恢復數據庫,相比備份來說,這個速度大大提高
3 和數據庫鏡像結合,提供讀寫分離
4 作為測試環境或則會數據變更前的備份,比如我要大批量刪除或者導入數據前,或是將數據提供給測試人員進行測試前,做有一個快照,如果出現問題,則可以利用快照恢復到快照建立時候的狀態

快照原理:與備份數據庫復制整個數據庫不同,快照並不復制這個數據庫的頁,而是僅僅復制在快照建立時間點之后改變的頁,因此:當利用快照進行數據庫恢復時,也僅僅將那些做了改變的頁恢復到源數據庫,這個速度大大提高

注意:源數據庫建立快照會給IO增加負擔

 

寫入時復制:
快照數據庫的文件基於稀疏文件,稀疏文件:是NTFS文件系統的一項特性,指文件中出現大量0的數據,這些數據用處不大,卻占用磁盤空間,因此NTFS對此進行了優化,利用算法將這個文件進行壓縮,因此當稀疏文件被創建時,剛打開很小,雖然邏輯上占了二三十M空間,但文件實際就是100多kb
當快照創建后,隨着對源數據庫的改變逐漸增多,稀疏文件也會慢慢增長

通常:當稀疏文件增長到源數據庫文件大小的 30%時,就應該考慮重建快照了
稀疏文件的寫入:利用了微軟的寫入時復制技術:意思是在復制一個對象的時候並不是真正把對象復制到另一個位置,而是在新的對象中映射一個指針,指向原對象的位置,這樣當對新對象執行讀操作時,直接指向源對象,而在對新的對象執行寫操作時候,將改變部分對象的指針指向到新的地址中,並修改映射表到新的位置中

使用快照的法律:

1 當使用快照進行恢復數據庫時,首先要刪除其他快照
2 快照在創建時的時間點上沒有commit的數據不會被計入快照
3 快照是快照整個數據庫,而不是數據庫的某一部分
4 快照是只讀的,所以不能對快照進行任何更改,即使是想加一個讓報表跑的更快的索引
5在利用快照恢復數據庫時,快照和源數據庫都不可用
6快照和源數據必須在同一個實例上
7快照上不能存在全文索引
8當磁盤不能滿足快照的增長的時,快照數據庫會被設置為suspect狀態

快照只能通過sql語句創建,在創建之前,首先要知道數據庫分部在哪幾個文件中
可以使用這個命令查看:EXEC sp_helpdb Yip_20160322
因為快照需要對每一個文件進行 copy-on-writing

 

--創建數據庫快照
CREATE DATABASE snap_Yip_20160322
ON
(
    NAME = Yip_20160322,FILENAME = 'D:\SqlTest\snap_Yip_20160322.snap'
)
AS SNAPSHOT OF  Yip_20160322
go

如果源數據庫分部在多個mdf文件,則將每個用括號括起來,用逗號分隔

執行完了之后會在sqlserver中看到 有一個文件夾叫: 

DATABASE Snapshots

點開之后就可以看到剛才新創建的快照

 

快照數據庫文件和源數據庫文件沒啥不同,僅僅快照數據庫文件是稀疏文件

刪除快照數據庫和刪除普通數據庫一樣 使用 drop database 快照數據庫名

--利用快照恢復數據庫:

USE MASTER
RESTORE DATABASE Yipong_20160322 FROM DATABASE_SNAPSHOT = 'snap_Yipong_20160322'
go

 

注意:

1 快照數據庫的安全設置繼承自源數據庫的安全設置,也就是說能訪問源數據庫的用戶或者角色也能訪問快照數據庫,因為快照數據庫是只讀的,所以無論任何角色或者人都無法修改快照數據庫

2 由於快照會拖累數據庫性能,所以數據庫不宜存在過多快照

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM