詳解SQL Server中數(shù)據(jù)庫快照的工作原理_Mssql數(shù)據(jù)庫教程
推薦:SQL Server記錄輪班的技巧例:公司員工采取三個輪班制度:凌晨0:00到早上8:00為第一班,早上8:00到下午4:00為第二班,下午4:00到晚上12:00為第三班。 員工使用電子時鐘進行簽名,這種電子簽名可以自動將記錄添加到SQL Server數(shù)據(jù)庫中。但是,有時候,需要增加一個夜班;即使這
詳解SQL Server中數(shù)據(jù)庫快照的工作原理,數(shù)據(jù)庫快照是怎樣工作的
可以使用典型的數(shù)據(jù)庫命令CREATE DATABASE語句來生成一個數(shù)據(jù)庫快照,在聲明中有一個源數(shù)據(jù)庫快照的附加說明。當快照被建立時,同時生成一個稀疏文件。這個文件(只能使用在NTFS卷中)在初始化的時候并沒有磁盤空間分配給它——盡管你可能在WINDOWS資源管理器中看到了文件的大小,它會看上去與原始的源數(shù)據(jù)庫文件的大小相同。對磁盤來說其實這個文件的大小接近于零。
數(shù)據(jù)庫快照在初始化時讀的數(shù)據(jù)文件是來自于源數(shù)據(jù)庫的。當源數(shù)據(jù)庫的數(shù)據(jù)發(fā)生變化時,數(shù)據(jù)引擎就會將原始數(shù)據(jù)從源數(shù)據(jù)庫拷貝到快照數(shù)據(jù)庫中。這個技術(shù)確�?煺諗�(shù)據(jù)庫只反映快照被執(zhí)行時數(shù)據(jù)的狀態(tài)。當SELECT命令被用來發(fā)布反對數(shù)據(jù)庫快照時,不管數(shù)據(jù)頁的讀取是否被定位在源數(shù)據(jù)庫數(shù)據(jù)文件中還是在快照數(shù)據(jù)庫數(shù)據(jù)文件中都是沒有鎖被發(fā)布的。因為在只讀數(shù)據(jù)庫快照中是沒有鎖被發(fā)布,數(shù)據(jù)庫快照對于報表解決方案是一個重要的解決方案。
一個快照的實例
現(xiàn)在,讓我們來看看數(shù)據(jù)庫快照在SQL Server 2005中是如何工作的。為此,首先我需要一個源數(shù)據(jù)庫作為快照的來源。下面的腳本將創(chuàng)建一個源數(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)來強調(diào)數(shù)據(jù)文件的增長級數(shù),這樣在我接下來的實例中將更容易解釋清楚快照是如何工作的。
現(xiàn)在既然我已經(jīng)有了一個源數(shù)據(jù)庫,現(xiàn)在我裝載一些數(shù)據(jù)來擴展數(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)學習有件東西我觀察了很多年,那就是很少有開發(fā)者會去使用SQL Server中的一個非常有用的東西EXISTS結(jié)構(gòu)。你可以在各種情況中用到EXISTS結(jié)構(gòu),在這篇文章中我會向大家介紹其中的一些。 EXISTS結(jié)構(gòu) EXISTS結(jié)構(gòu)是一個TSQL函數(shù),這個函數(shù)會就圓括號中的子查詢返回一
- sql 語句練習與答案
- 深入C++ string.find()函數(shù)的用法總結(jié)
- SQL Server中刪除重復數(shù)據(jù)的幾個方法
- sql刪除重復數(shù)據(jù)的詳細方法
- SQL SERVER 2000安裝教程圖文詳解
- 使用sql server management studio 2008 無法查看數(shù)據(jù)庫,提示 無法為該請求檢索數(shù)據(jù) 錯誤916解決方法
- SQLServer日志清空語句(sql2000,sql2005,sql2008)
- Sql Server 2008完全卸載方法(其他版本類似)
- sql server 2008 不允許保存更改,您所做的更改要求刪除并重新創(chuàng)建以下表
- SQL Server 2008 清空刪除日志文件(瞬間日志變幾M)
- Win7系統(tǒng)安裝MySQL5.5.21圖解教程
- 將DataTable作為存儲過程參數(shù)的用法實例詳解
Mssql數(shù)據(jù)庫教程Rss訂閱編程教程搜索
Mssql數(shù)據(jù)庫教程推薦
- 談SQL Server 2005最后升級:SP3年底發(fā)布
- MSSQL 2005/2008 日志壓縮清理方法小結(jié)
- SQL Server 2005中五個動態(tài)管理對象
- order by newid() 各種數(shù)據(jù)庫隨機查詢的方法
- mdf文件和ldf文件導入到sql server 2005實現(xiàn)語句
- 使用SQL Server 2008進行服務器合并
- 微軟SQL Server 2008之行值構(gòu)造器
- 解決SQL Server數(shù)據(jù)庫被掛馬的方法
- 通過名詞解釋:輕松接觸13個數(shù)據(jù)庫術(shù)語
- 安裝sqlserver2000時出現(xiàn)wowexec.exe無反應的解決方法
- 相關(guān)鏈接:
- 教程說明:
Mssql數(shù)據(jù)庫教程-詳解SQL Server中數(shù)據(jù)庫快照的工作原理
。