掌握SQL Server數(shù)據(jù)庫(kù)快照的工作原理第1/2頁(yè)
更新時(shí)間:2008年01月02日 19:21:37 作者:
掌握SQL Server數(shù)據(jù)庫(kù)快照的工作原理
數(shù)據(jù)庫(kù)快照是怎樣工作的?
可以使用典型的數(shù)據(jù)庫(kù)命令CREATE DATABASE語(yǔ)句來生成一個(gè)數(shù)據(jù)庫(kù)快照,在聲明中有一個(gè)源數(shù)據(jù)庫(kù)快照的附加說明。當(dāng)快照被建立時(shí),同時(shí)生成一個(gè)稀疏文件。這個(gè)文件(只能使用在NTFS卷中)在初始化的時(shí)候并沒有磁盤空間分配給它——盡管你可能在WINDOWS資源管理器中看到了文件的大小,它會(huì)看上去與原始的源數(shù)據(jù)庫(kù)文件的大小相同。對(duì)磁盤來說其實(shí)這個(gè)文件的大小接近于零。
數(shù)據(jù)庫(kù)快照在初始化時(shí)讀的數(shù)據(jù)文件是來自于源數(shù)據(jù)庫(kù)的。當(dāng)源數(shù)據(jù)庫(kù)的數(shù)據(jù)發(fā)生變化時(shí),數(shù)據(jù)引擎就會(huì)將原始數(shù)據(jù)從源數(shù)據(jù)庫(kù)拷貝到快照數(shù)據(jù)庫(kù)中。這個(gè)技術(shù)確??煺諗?shù)據(jù)庫(kù)只反映快照被執(zhí)行時(shí)數(shù)據(jù)的狀態(tài)。當(dāng)SELECT命令被用來發(fā)布反對(duì)數(shù)據(jù)庫(kù)快照時(shí),不管數(shù)據(jù)頁(yè)的讀取是否被定位在源數(shù)據(jù)庫(kù)數(shù)據(jù)文件中還是在快照數(shù)據(jù)庫(kù)數(shù)據(jù)文件中都是沒有鎖被發(fā)布的。因?yàn)樵谥蛔x數(shù)據(jù)庫(kù)快照中是沒有鎖被發(fā)布,數(shù)據(jù)庫(kù)快照對(duì)于報(bào)表解決方案是一個(gè)重要的解決方案。
一個(gè)快照的實(shí)例
現(xiàn)在,讓我們來看看數(shù)據(jù)庫(kù)快照在SQL Server 2005中是如何工作的。為此,首先我需要一個(gè)源數(shù)據(jù)庫(kù)作為快照的來源。下面的腳本將創(chuàng)建一個(gè)源數(shù)據(jù)庫(kù):
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ù)文件的增長(zhǎng)級(jí)數(shù),這樣在我接下來的實(shí)例中將更容易解釋清楚快照是如何工作的。
現(xiàn)在既然我已經(jīng)有了一個(gè)源數(shù)據(jù)庫(kù),現(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
相關(guān)文章
SQL注入報(bào)錯(cuò)注入函數(shù)圖文詳解
報(bào)錯(cuò)注入是SQL注入的一種,下面這篇文章主要給大家介紹了關(guān)于SQL注入報(bào)錯(cuò)注入函數(shù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07掌握SQL Server數(shù)據(jù)庫(kù)快照的工作原理
2008-01-01Clickhouse數(shù)據(jù)表、數(shù)據(jù)分區(qū)partition的基本操作代碼
clickhouse的分區(qū)是指將數(shù)據(jù)按照分區(qū)鍵進(jìn)行劃分,每個(gè)分區(qū)可以包含多個(gè)數(shù)據(jù)塊,這篇文章主要介紹了Clickhouse數(shù)據(jù)表、數(shù)據(jù)分區(qū)partition的基本操作代碼,需要的朋友可以參考下2023-11-11Navicat Premium 15無(wú)限試用注冊(cè)表修改的方法詳解
這篇文章主要介紹了Navicat Premium 15無(wú)限試用注冊(cè)表修改的方法詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11openGauss數(shù)據(jù)庫(kù)在CentOS上的安裝實(shí)踐記錄
這篇文章主要介紹了openGauss數(shù)據(jù)庫(kù)在CentOS上的安裝實(shí)踐,本文是基于華為云ECS+CentOS 7的openGauss數(shù)據(jù)庫(kù)安裝實(shí)踐,需要的朋友可以參考下2022-07-07存儲(chǔ)過程返回?cái)?shù)組對(duì)象示例代碼
存儲(chǔ)過程返回?cái)?shù)組對(duì)象其實(shí)就相當(dāng)于返回List里面放的對(duì)象數(shù)據(jù),下面與大家分享是例子,感興趣的朋友可以學(xué)習(xí)下2013-07-07