溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

sql server 2005數(shù)據(jù)庫(kù)怎么創(chuàng)建快照

發(fā)布時(shí)間:2021-11-09 14:11:20 來(lái)源:億速云 閱讀:104 作者:iii 欄目:關(guān)系型數(shù)據(jù)庫(kù)

本篇內(nèi)容介紹了“sql server 2005數(shù)據(jù)庫(kù)怎么創(chuàng)建快照”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

使用create database命令來(lái)為數(shù)據(jù)庫(kù)創(chuàng)建快照,當(dāng)創(chuàng)建一個(gè)快照時(shí)必須在create database命令中包含源數(shù)據(jù)庫(kù)中的每一個(gè)數(shù)據(jù)文件。包括原來(lái)的邏輯名稱和一個(gè)新的物理名稱。不能夠指定其它的文件屬性,也沒有使用日志文件。

這是為Archive數(shù)據(jù)庫(kù)創(chuàng)建一個(gè)快照的操作如下:
1.首先查看Archive數(shù)據(jù)庫(kù)中的數(shù)據(jù)文件的邏輯名稱

C:\Users\Administrator>sqlcmd  -S WINS7-2014DITHH\JY
1> use Archive
2> GO
已將數(shù)據(jù)庫(kù)上下文更改為 'Archive'。
1> select name,physical_name from sys.database_files;
2> GO
name                                                 physical_name
------------------------------------------------ -------------------------------------------------------------------------
Arch2                                                 C:\Program Files\Microsoft SQLServer\MSSQL.1\MSSQL\Data\archdat1.mdf
Archlog1                                              C:\Program Files\Microsoft SQLServer\MSSQL.1\MSSQL\Data\archlog1.ldf
Arch3                                                 C:\Program Files\Microsoft SQLServer\MSSQL.1\MSSQL\Data\archdat2.ndf
(3 行受影響)

2.創(chuàng)建數(shù)據(jù)庫(kù)快照Archive_snapshot

1> create database Archive_snapshot on
2> (
3> name='Arch2',--數(shù)據(jù)文件的邏輯名稱
4> filename='C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\Archive_snapshot_1.mdf' --快照文件
5> ),
6> (
7> name='Arch3',
8> filename='C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\Archive_snapshot_2.mdf'
9> )
10> as snapshot of Archive;
11> GO

下面在源數(shù)據(jù)庫(kù)中向表t1插入一行記錄
1.先查看表t1中的記錄

1>use Archive;
2>GO
已將數(shù)據(jù)庫(kù)上下文更改為 'Archive'。
1>select * from t1;
2>GO
t_id        t_date
----------- --------------------
1           2019-04-25
(1 行受影響)

2.向表t1中插入一行記錄

1>insert into t1 values(2,'2019-04-26');
2>GO;
(1 行受影響)

3.再次查詢表t1中的記錄

1>select * from t1;
2>GO
t_id        t_date
----------- --------------------
1           2019-04-25
2           2019-04-26
(2 行受影響)

在快照數(shù)據(jù)庫(kù)中查詢表t1的記錄

1>use Archive_snapshot;
2>GO
已將數(shù)據(jù)庫(kù)上下文更改為 'Archive_snapshot'。
1>select * from t1;
2>GO
t_id        t_date
----------- --------------------
1           2019-04-25
(1 行受影響)

可以看到快照數(shù)據(jù)庫(kù)中的t1的記錄仍然只有一條,快照數(shù)據(jù)庫(kù)只包含快照創(chuàng)建時(shí)源數(shù)據(jù)庫(kù)中已有的數(shù)據(jù)。

快照中的每一個(gè)文件都被創(chuàng)建為稀疏文件,這是NTFS文件系統(tǒng)的一個(gè)特性。開始時(shí),一個(gè)稀疏文件不包含用戶數(shù)據(jù),也沒有分配到用來(lái)存儲(chǔ)用戶數(shù)據(jù)的磁盤空間。當(dāng)數(shù)據(jù)被寫入稀疏文件時(shí),NTFS逐漸地為其分配磁盤空間。一個(gè)稀疏文件有可能增長(zhǎng)得很大。稀疏文件以64KB為單位增量增長(zhǎng),因此磁盤上的稀疏文件的大小總是64KB的倍數(shù)。

快照文件只包含源數(shù)據(jù)庫(kù)中發(fā)生了變化的數(shù)據(jù)。對(duì)每一個(gè)文件,SQL Server創(chuàng)建了一個(gè)保存在高速緩存中的比特圖,文件的每一個(gè)頁(yè)面對(duì)應(yīng)一個(gè)比特位,表示那個(gè)頁(yè)面是否已經(jīng)被復(fù)制到快照中。每次當(dāng)源數(shù)據(jù)庫(kù)中有一個(gè)頁(yè)面被更新時(shí),SQL Server會(huì)查看比特圖來(lái)檢查該頁(yè)面是否已經(jīng)被復(fù)制了,如果還沒有被復(fù)制,那么馬上將其復(fù)制到快照中。這種操作被稱為寫入時(shí)復(fù)制操作。

前面提到,比特圖保存在調(diào)整緩存里,而不是文件自身,所以它總是可供隨時(shí)使用。當(dāng)SQL Server關(guān)閉或數(shù)據(jù)庫(kù)關(guān)閉時(shí),比特圖會(huì)丟失并且需要在數(shù)據(jù)庫(kù)啟動(dòng)時(shí)進(jìn)行重建軍。當(dāng)SQL Server被訪問(wèn)時(shí)它會(huì)判斷讀每一個(gè)頁(yè)面是否存在稀疏文件中,然后將這些信息保存在比物圖中供將業(yè)使用。

快照反映了發(fā)出create database命令的時(shí)間點(diǎn)---也就是在創(chuàng)建操作開始的那一刻。SQL Server對(duì)源數(shù)據(jù)庫(kù)進(jìn)行檢查點(diǎn)操作并將一個(gè)同步日志序列號(hào)(Log Sequence Number,LSN)記錄在源數(shù)據(jù)庫(kù)的日志文件里。LSN是一種確定數(shù)據(jù)庫(kù)中某一特定時(shí)間點(diǎn)的方式。SQL Server然后在源數(shù)據(jù)庫(kù)上運(yùn)行恢復(fù),以便任何未提交事務(wù)能夠在快照中被回滾。所以雖然快照的稀疏文件開始時(shí)是空白的,但是那并不能維護(hù)很久。如果當(dāng)快照被創(chuàng)建時(shí)有事務(wù)正在進(jìn)行,恢復(fù)進(jìn)程將會(huì)在數(shù)據(jù)庫(kù)快照可用前撤消未提交的事務(wù),所以該快照將會(huì)包含修改后數(shù)據(jù)的源數(shù)據(jù)庫(kù)所有頁(yè)面的原始版本。

快照只能在NTFS格式的卷上創(chuàng)建,因?yàn)樵摳袷绞俏ㄒ恢С窒∈栉募夹g(shù)的文件格式。如果我們嘗試在FAT或FAT32卷上創(chuàng)建一個(gè)快照,那么會(huì)收到如下類似的錯(cuò)誤:

Msg 1823, Level 16, State 2, Line 1
A database snapshot cannot be created because it failed to start.
Msg 5119, Level 16, State 1, Line 1
Cannot make the file "E:\AW_snapshot.MDF" a sparse file. Make sure the file system supports
sparse files.

第一個(gè)錯(cuò)誤基本上是一個(gè)普通的錯(cuò)誤信息,第二個(gè)錯(cuò)誤信提供了關(guān)于該操作為什么失敗的更詳細(xì)信息。

可以通過(guò)查看動(dòng)態(tài)管理函數(shù)sys.dm_io_virtual_file_stats來(lái)發(fā)現(xiàn)數(shù)據(jù)庫(kù)快照的每個(gè)稀疏文件中正在使用的磁盤上的字節(jié)數(shù)據(jù)是多少,該函數(shù)通過(guò)size_on_disk_bytes列來(lái)返回一個(gè)文件中的當(dāng)前字節(jié)數(shù)據(jù)。該函數(shù)將database_id和file_id作為參數(shù)??煺諗?shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)id和每一個(gè)稀疏文件的文件ID被顯示在目錄視圖sys.master_files中。還可以通過(guò)Windows資源管理器來(lái)查看其大小。

1>select name,database_id from sys.databases;
2>GO
name                   database_id 
---------------------- ----------- 
master                 1           
tempdb                 2           
model                  3           
msdb                   4           
AdventureWorksDW       5           
AdventureWorks         6           
resource_COPY          7           
Archive                8           
Archive_snapshot       9           
                                   
(9 行受影響)                       
1>select  database_id,file_id,name,physical_name from sys.master_files;
2>GO
database_id file_id     name                      physical_name                                                                                                                                         
----------- ----------- ------------------------- -----------------------------------------------------------------------------------------                                                                                                                                                                            
1           1           master                    C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\master.mdf                                                                                   
1           2           mastlog                   C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\mastlog.ldf                     
2           1           tempdev                   C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\tempdb.mdf                      
2           2           templog                   C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\templog.ldf                     
3           1           modeldev                  C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\model.mdf                       
3           2           modellog                  C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\modellog.ldf                    
4           1           MSDBData                  C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\MSDBData.mdf                    
4           2           MSDBLog                   C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\MSDBLog.ldf                     
5           1           AdventureWorksDW_Data     C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\AdventureWorksDW_Data.mdf       
5           2           AdventureWorksDW_Log      C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\AdventureWorksDW_Log.ldf        
6           1           AdventureWorks_Data       C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\AdventureWorks_Data.mdf         
6           2           AdventureWorks_Log        C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\AdventureWorks_Log.ldf          
7           1           data                      C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\mssqlsystemresource_copy.mdf    
7           2           log                       C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\mssqlsystemresource_copy.ldf    
8           1           Arch2                     C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\archdat1.mdf                    
8           2           Archlog1                  C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\archlog1.ldf                    
8           3           Arch3                     C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\archdat2.ndf                    
9           1           Arch2                     C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\Archive_snapshot_1.mdf          
9           3           Arch3                     C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\Archive_snapshot_2.mdf          
                                                                                                                                           
(19 行受影響)         
1>select * from  sys.dm_io_virtual_file_stats (9,NULL) AS vfs;
2>GO
database_id file_id sample_ms   num_of_reads         num_of_bytes_read    io_stall_read_ms     num_of_writes        num_of_bytes_written io_stall_write_ms    io_stall             size_on_disk_bytes   file_handle
----------- ------- ----------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- ------------------
9           1       1902593092  60                   491520               133                  5                    40960                4                    137                  262144               0x000000000000080C
9           3       1902593092  4                    32768                11                   1                    8192                 0                    11                   65536                0x0000000000000840
(2 行受影響)

因?yàn)橥粋€(gè)數(shù)據(jù)庫(kù)有可能擁有多個(gè)快照,所以我們必須確保有足夠的可用磁盤空間。快照開始時(shí)會(huì)相對(duì)較小,當(dāng)隨著源數(shù)據(jù)庫(kù)的更新,每個(gè)快照都會(huì)增長(zhǎng)。稀疏文件的空間按照稱為區(qū)域的片斷進(jìn)行分配,單位為64KB。當(dāng)一個(gè)區(qū)域被分配時(shí),除了已經(jīng)更改過(guò)的一個(gè)頁(yè)面,所有的頁(yè)面都會(huì)被清零。這時(shí)該區(qū)域中還供7個(gè)更改過(guò)的頁(yè)面使用的空間,并且在這7個(gè)頁(yè)面空間被使用完之前,不會(huì)分配新的區(qū)域。

有可能會(huì)過(guò)度申請(qǐng)存儲(chǔ)空間。這意味著在通常情況下,我們能夠擁有的是實(shí)際物理存儲(chǔ)空間很多倍的多個(gè)快照,但一旦快照增長(zhǎng),物理卷就會(huì)被耗盡(當(dāng)運(yùn)行在線dbcc checkdb命令或相關(guān)命令時(shí)有可能會(huì)發(fā)生這種情況,因?yàn)槲覀儫o(wú)法控制這些命令所使用的內(nèi)部快照存放的物理位置---它會(huì)被存放在父數(shù)據(jù)庫(kù)文件所在的同一個(gè)鄭上。dbcc在這種情況下檢查將會(huì)失敗)。一旦物理卷空間耗盡,對(duì)源數(shù)據(jù)庫(kù)的寫操作就無(wú)法將寫之前的頁(yè)面圖像復(fù)制到稀疏文件。無(wú)法寫入頁(yè)面的快照會(huì)被記為置疑(suspect)并且無(wú)法使用,但是源數(shù)據(jù)庫(kù)仍然可以繼續(xù)運(yùn)行。不可能修復(fù)一個(gè)被置疑的快照,必須將這種快照數(shù)據(jù)庫(kù)刪除。

管理快照
如果一個(gè)源數(shù)據(jù)庫(kù)中存在快照,那么就無(wú)法刪除,分離或還原該源數(shù)據(jù)庫(kù)。如果把握一個(gè)數(shù)據(jù)庫(kù)切換到離線(offline)狀態(tài),那么快照將會(huì)被自動(dòng)刪除。另外,我們基本上可以通過(guò)將源數(shù)據(jù)回復(fù)(Revert)到快照創(chuàng)建時(shí)的狀態(tài),并把源數(shù)據(jù)庫(kù)替換為它的一個(gè)快照。命令如下:

1> use master;
2> GO
已將數(shù)據(jù)庫(kù)上下文更改為 'master'。
1> restore database Archive from database_snapshot='Archive_snapshot';
2> GO
1> use Archive;
2> GO
已將數(shù)據(jù)庫(kù)上下文更改為 'Archive'。
1> select * from t1;
2> GO
t_id        t_date
----------- --------------------
          1 2019-04-25
(1 行受影響)

在將源數(shù)據(jù)庫(kù)Archive回復(fù)到快照創(chuàng)建時(shí)的狀態(tài)后,表t1中只有一條記錄。

在回復(fù)(Revert)操作期間,快照和源數(shù)據(jù)庫(kù)是可用的并會(huì)被標(biāo)記為“還原中”。如果在回復(fù)操作期間出現(xiàn)錯(cuò)誤,該操作將會(huì)在數(shù)據(jù)庫(kù)重新啟動(dòng)時(shí)嘗試完成回復(fù)操作。當(dāng)存在多個(gè)快照時(shí)是不能回復(fù)到其中任何一個(gè)快照的,所以首先我們應(yīng)該把除了希望回復(fù)的快照以外的所有快照刪除。刪除一個(gè)快照的操作與drop database操作非常相似。在刪除快照的同時(shí),所有的NTFS稀疏文件也都被刪除了。

需要注意下面的這些與數(shù)據(jù)庫(kù)快照有關(guān)的附加注意事項(xiàng):
.不能在model,master和tempdb數(shù)據(jù)庫(kù)上創(chuàng)建快照(SQL Server內(nèi)部可以為了對(duì)master數(shù)據(jù)庫(kù)運(yùn)行在線DBCC檢查而為其創(chuàng)建一些快照,但是這些快照是不能顯式創(chuàng)建的)。

1> drop database Archive_snapshot;
2> GO

.一個(gè)快照會(huì)從它的源數(shù)據(jù)庫(kù)中繼承安全約束,且由于快照是只讀的,所以我們無(wú)法改變其權(quán)限。

.如果從源數(shù)據(jù)庫(kù)中刪除一個(gè)用戶,該用戶會(huì)繼續(xù)留在快照中。

.不能備份或還原快照,但是能夠正常備份源數(shù)據(jù)庫(kù);它并不受數(shù)據(jù)庫(kù)快照的影響。

.不能附加或分離快照。

.數(shù)據(jù)庫(kù)快照并不支持全文索引,全文目錄不會(huì)從源數(shù)據(jù)庫(kù)傳播到快照中。

“sql server 2005數(shù)據(jù)庫(kù)怎么創(chuàng)建快照”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI