久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

sql server 2005數據庫怎么創建快照

152次閱讀
沒有評論

共計 7127 個字符,預計需要花費 18 分鐘才能閱讀完成。

本篇內容介紹了“sql server 2005 數據庫怎么創建快照”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓丸趣 TV 小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

使用 create database 命令來為數據庫創建快照,當創建一個快照時必須在 create database 命令中包含源數據庫中的每一個數據文件。包括原來的邏輯名稱和一個新的物理名稱。不能夠指定其它的文件屬性,也沒有使用日志文件。

這是為 Archive 數據庫創建一個快照的操作如下:
1. 首先查看 Archive 數據庫中的數據文件的邏輯名稱

C:\Users\Administrator sqlcmd -S WINS7-2014DITHH\JY
1  use Archive
2  GO
已將數據庫上下文更改為   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. 創建數據庫快照 Archive_snapshot

1  create database Archive_snapshot on
2  (
3  name= Arch2 ,-- 數據文件的邏輯名稱
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

下面在源數據庫中向表 t1 插入一行記錄
1. 先查看表 t1 中的記錄

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

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

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

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

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

在快照數據庫中查詢表 t1 的記錄

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

可以看到快照數據庫中的 t1 的記錄仍然只有一條,快照數據庫只包含快照創建時源數據庫中已有的數據。

快照中的每一個文件都被創建為稀疏文件,這是 NTFS 文件系統的一個特性。開始時,一個稀疏文件不包含用戶數據,也沒有分配到用來存儲用戶數據的磁盤空間。當數據被寫入稀疏文件時,NTFS 逐漸地為其分配磁盤空間。一個稀疏文件有可能增長得很大。稀疏文件以 64KB 為單位增量增長,因此磁盤上的稀疏文件的大小總是 64KB 的倍數。

快照文件只包含源數據庫中發生了變化的數據。對每一個文件,SQL Server 創建了一個保存在高速緩存中的比特圖,文件的每一個頁面對應一個比特位,表示那個頁面是否已經被復制到快照中。每次當源數據庫中有一個頁面被更新時,SQL Server 會查看比特圖來檢查該頁面是否已經被復制了,如果還沒有被復制,那么馬上將其復制到快照中。這種操作被稱為寫入時復制操作。

前面提到,比特圖保存在調整緩存里,而不是文件自身,所以它總是可供隨時使用。當 SQL Server 關閉或數據庫關閉時,比特圖會丟失并且需要在數據庫啟動時進行重建軍。當 SQL Server 被訪問時它會判斷讀每一個頁面是否存在稀疏文件中,然后將這些信息保存在比物圖中供將業使用。

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

快照只能在 NTFS 格式的卷上創建,因為該格式是唯一支持稀疏文件技術的文件格式。如果我們嘗試在 FAT 或 FAT32 卷上創建一個快照,那么會收到如下類似的錯誤:

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.

第一個錯誤基本上是一個普通的錯誤信息,第二個錯誤信提供了關于該操作為什么失敗的更詳細信息。

可以通過查看動態管理函數 sys.dm_io_virtual_file_stats 來發現數據庫快照的每個稀疏文件中正在使用的磁盤上的字節數據是多少,該函數通過 size_on_disk_bytes 列來返回一個文件中的當前字節數據。該函數將 database_id 和 file_id 作為參數。快照數據庫的數據庫 id 和每一個稀疏文件的文件 ID 被顯示在目錄視圖 sys.master_files 中。還可以通過 Windows 資源管理器來查看其大小。

1 select name,database_id from sys.databases;
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;
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;
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  行受影響)

因為同一個數據庫有可能擁有多個快照,所以我們必須確保有足夠的可用磁盤空間。快照開始時會相對較小,當隨著源數據庫的更新,每個快照都會增長。稀疏文件的空間按照稱為區域的片斷進行分配,單位為 64KB。當一個區域被分配時,除了已經更改過的一個頁面,所有的頁面都會被清零。這時該區域中還供 7 個更改過的頁面使用的空間,并且在這 7 個頁面空間被使用完之前,不會分配新的區域。

有可能會過度申請存儲空間。這意味著在通常情況下,我們能夠擁有的是實際物理存儲空間很多倍的多個快照,但一旦快照增長,物理卷就會被耗盡 (當運行在線 dbcc checkdb 命令或相關命令時有可能會發生這種情況,因為我們無法控制這些命令所使用的內部快照存放的物理位置 — 它會被存放在父數據庫文件所在的同一個鄭上。dbcc 在這種情況下檢查將會失敗)。一旦物理卷空間耗盡,對源數據庫的寫操作就無法將寫之前的頁面圖像復制到稀疏文件。無法寫入頁面的快照會被記為置疑(suspect) 并且無法使用,但是源數據庫仍然可以繼續運行。不可能修復一個被置疑的快照,必須將這種快照數據庫刪除。

管理快照
如果一個源數據庫中存在快照,那么就無法刪除,分離或還原該源數據庫。如果把握一個數據庫切換到離線 (offline) 狀態,那么快照將會被自動刪除。另外,我們基本上可以通過將源數據回復 (Revert) 到快照創建時的狀態,并把源數據庫替換為它的一個快照。命令如下:

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

在將源數據庫 Archive 回復到快照創建時的狀態后,表 t1 中只有一條記錄。

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

需要注意下面的這些與數據庫快照有關的附加注意事項:
. 不能在 model,master 和 tempdb 數據庫上創建快照(SQL Server 內部可以為了對 master 數據庫運行在線 DBCC 檢查而為其創建一些快照,但是這些快照是不能顯式創建的)。

1  drop database Archive_snapshot;
2  GO

. 一個快照會從它的源數據庫中繼承安全約束,且由于快照是只讀的,所以我們無法改變其權限。

. 如果從源數據庫中刪除一個用戶,該用戶會繼續留在快照中。

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

. 不能附加或分離快照。

. 數據庫快照并不支持全文索引,全文目錄不會從源數據庫傳播到快照中。

“sql server 2005 數據庫怎么創建快照”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注丸趣 TV 網站,丸趣 TV 小編將為大家輸出更多高質量的實用文章!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-24發表,共計7127字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 衡山县| 蛟河市| 谷城县| 浠水县| 平远县| 泌阳县| 丰原市| 凯里市| 玉田县| 石城县| 武宁县| 镇原县| 靖宇县| 大田县| 抚顺县| 庆城县| 普宁市| 德令哈市| 彭山县| 吉安县| 冀州市| 嫩江县| 曲阳县| 灵台县| 丹阳市| 政和县| 富阳市| 达尔| 宁蒗| 政和县| 图木舒克市| 曲松县| 浠水县| 巴彦县| 荣昌县| 莱阳市| 烟台市| 萨迦县| 桂平市| 什邡市| 盐津县|