詳解SQL Server中數(shù)據(jù)庫快照的工作原理_Mssql數(shù)據(jù)庫教程
推薦:SQL Server記錄輪班的技巧例:公司員工采取三個(gè)輪班制度:凌晨0:00到早上8:00為第一班,早上8:00到下午4:00為第二班,下午4:00到晚上12:00為第三班。 員工使用電子時(shí)鐘進(jìn)行簽名,這種電子簽名可以自動(dòng)將記錄添加到SQL Server數(shù)據(jù)庫中。但是,有時(shí)候,需要增加一個(gè)夜班;即使這
詳解SQL Server中數(shù)據(jù)庫快照的工作原理,數(shù)據(jù)庫快照是怎樣工作的
可以使用典型的數(shù)據(jù)庫命令CREATE DATABASE語句來生成一個(gè)數(shù)據(jù)庫快照,在聲明中有一個(gè)源數(shù)據(jù)庫快照的附加說明。當(dāng)快照被建立時(shí),同時(shí)生成一個(gè)稀疏文件。這個(gè)文件(只能使用在NTFS卷中)在初始化的時(shí)候并沒有磁盤空間分配給它——盡管你可能在WINDOWS資源管理器中看到了文件的大小,它會(huì)看上去與原始的源數(shù)據(jù)庫文件的大小相同。對(duì)磁盤來說其實(shí)這個(gè)文件的大小接近于零。
數(shù)據(jù)庫快照在初始化時(shí)讀的數(shù)據(jù)文件是來自于源數(shù)據(jù)庫的。當(dāng)源數(shù)據(jù)庫的數(shù)據(jù)發(fā)生變化時(shí),數(shù)據(jù)引擎就會(huì)將原始數(shù)據(jù)從源數(shù)據(jù)庫拷貝到快照數(shù)據(jù)庫中。這個(gè)技術(shù)確�?煺諗�(shù)據(jù)庫只反映快照被執(zhí)行時(shí)數(shù)據(jù)的狀態(tài)。當(dāng)SELECT命令被用來發(fā)布反對(duì)數(shù)據(jù)庫快照時(shí),不管數(shù)據(jù)頁的讀取是否被定位在源數(shù)據(jù)庫數(shù)據(jù)文件中還是在快照數(shù)據(jù)庫數(shù)據(jù)文件中都是沒有鎖被發(fā)布的。因?yàn)樵谥蛔x數(shù)據(jù)庫快照中是沒有鎖被發(fā)布,數(shù)據(jù)庫快照對(duì)于報(bào)表解決方案是一個(gè)重要的解決方案。
一個(gè)快照的實(shí)例
現(xiàn)在,讓我們來看看數(shù)據(jù)庫快照在SQL Server 2005中是如何工作的。為此,首先我需要一個(gè)源數(shù)據(jù)庫作為快照的來源。下面的腳本將創(chuàng)建一個(gè)源數(shù)據(jù)庫:
USE master
GO
IF EXISTS(SELECT name from
sysdatabases where [name] = 'SourceDatabase')
DROP DATABASE SourceDatabase
GO
CREATE DATABASE SourceDatabaseON PRIMARY
(
NAME = SourceDatabase_Data,
FILENAME = 'C:SQLServerSourceDatabase_Data.mdf'
) LOG ON
(
NAME = SourceDatabase_Log,
FILENAME = 'C:SQLServerSourceDatabase_Log.ldf'
)
GO
注意這里產(chǎn)品區(qū)域的大小。我定義它的大小為CHAR(150)來強(qiáng)調(diào)數(shù)據(jù)文件的增長級(jí)數(shù),這樣在我接下來的實(shí)例中將更容易解釋清楚快照是如何工作的。
現(xiàn)在既然我已經(jīng)有了一個(gè)源數(shù)據(jù)庫,現(xiàn)在我裝載一些數(shù)據(jù)來擴(kuò)展數(shù)據(jù)文件的大小位。如此,使用上面的腳本來創(chuàng)建銷售歷史表。
USE SourceDatabase
GO
IF OBJECT_ID('SalesHistory')>0 DROP
TABLE SalesHistory
GO
CREATE TABLE SalesHistory
(SaleID INT IDENTITY(1,1),
Product CHAR(150), SaleDate DATETIME,
SalePrice MONEY)
DECLARE @i INT
SET @i = 1
WHILE (@i <=10000)
BEGIN INSERT INTO SalesHistory
(Product, SaleDate, SalePrice)
VALUES ('Computer', DATEADD(mm, @i, '3/11/1919'),
DATEPART(ms, GETDATE()) (@i 57) )
INSERT INTO SalesHistory
(Product, SaleDate, SalePrice)
VALUES ('BigScreen', DATEADD(mm, @i, '3/11/1927'),
DATEPART(ms, GETDATE()) (@i 13) )
INSERT INTO SalesHistory
(Product, SaleDate, SalePrice)
VALUES ('PoolTable', DATEADD(mm, @i, '3/11/1908'),
DATEPART(ms, GETDATE()) (@i 29) )
SET @i = @i 1
END
GO
分享:SQL Server的EXISTS結(jié)構(gòu)學(xué)習(xí)有件東西我觀察了很多年,那就是很少有開發(fā)者會(huì)去使用SQL Server中的一個(gè)非常有用的東西EXISTS結(jié)構(gòu)。你可以在各種情況中用到EXISTS結(jié)構(gòu),在這篇文章中我會(huì)向大家介紹其中的一些。 EXISTS結(jié)構(gòu) EXISTS結(jié)構(gòu)是一個(gè)TSQL函數(shù),這個(gè)函數(shù)會(huì)就圓括號(hào)中的子查詢返回一
- sql 語句練習(xí)與答案
- 深入C++ string.find()函數(shù)的用法總結(jié)
- SQL Server中刪除重復(fù)數(shù)據(jù)的幾個(gè)方法
- sql刪除重復(fù)數(shù)據(jù)的詳細(xì)方法
- SQL SERVER 2000安裝教程圖文詳解
- 使用sql server management studio 2008 無法查看數(shù)據(jù)庫,提示 無法為該請(qǐng)求檢索數(shù)據(jù) 錯(cuò)誤916解決方法
- SQLServer日志清空語句(sql2000,sql2005,sql2008)
- Sql Server 2008完全卸載方法(其他版本類似)
- sql server 2008 不允許保存更改,您所做的更改要求刪除并重新創(chuàng)建以下表
- SQL Server 2008 清空刪除日志文件(瞬間日志變幾M)
- Win7系統(tǒng)安裝MySQL5.5.21圖解教程
- 將DataTable作為存儲(chǔ)過程參數(shù)的用法實(shí)例詳解
Mssql數(shù)據(jù)庫教程Rss訂閱編程教程搜索
Mssql數(shù)據(jù)庫教程推薦
- 談SQL Server 2005最后升級(jí):SP3年底發(fā)布
- MSSQL 2005/2008 日志壓縮清理方法小結(jié)
- SQL Server 2005中五個(gè)動(dòng)態(tài)管理對(duì)象
- order by newid() 各種數(shù)據(jù)庫隨機(jī)查詢的方法
- mdf文件和ldf文件導(dǎo)入到sql server 2005實(shí)現(xiàn)語句
- 使用SQL Server 2008進(jìn)行服務(wù)器合并
- 微軟SQL Server 2008之行值構(gòu)造器
- 解決SQL Server數(shù)據(jù)庫被掛馬的方法
- 通過名詞解釋:輕松接觸13個(gè)數(shù)據(jù)庫術(shù)語
- 安裝sqlserver2000時(shí)出現(xiàn)wowexec.exe無反應(yīng)的解決方法
猜你也喜歡看這些
- 相關(guān)鏈接:
- 教程說明:
Mssql數(shù)據(jù)庫教程-詳解SQL Server中數(shù)據(jù)庫快照的工作原理
。