詳解SQL Server中數據庫快照的工作原理_Mssql數據庫教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:SQL Server記錄輪班的技巧
      例:公司員工采取三個輪班制度:凌晨0:00到早上8:00為第一班,早上8:00到下午4:00為第二班,下午4:00到晚上12:00為第三班。 員工使用電子時鐘進行簽名,這種電子簽名可以自動將記錄添加到SQL Server數據庫中。但是,有時候,需要增加一個夜班;即使這

      詳解SQL Server中數據庫快照的工作原理,數據庫快照是怎樣工作的

      可以使用典型的數據庫命令CREATE DATABASE語句來生成一個數據庫快照,在聲明中有一個源數據庫快照的附加說明。當快照被建立時,同時生成一個稀疏文件。這個文件(只能使用在NTFS卷中)在初始化的時候并沒有磁盤空間分配給它——盡管你可能在WINDOWS資源管理器中看到了文件的大小,它會看上去與原始的源數據庫文件的大小相同。對磁盤來說其實這個文件的大小接近于零。

      數據庫快照在初始化時讀的數據文件是來自于源數據庫的。當源數據庫的數據發生變化時,數據引擎就會將原始數據從源數據庫拷貝到快照數據庫中。這個技術確保快照數據庫只反映快照被執行時數據的狀態。當SELECT命令被用來發布反對數據庫快照時,不管數據頁的讀取是否被定位在源數據庫數據文件中還是在快照數據庫數據文件中都是沒有鎖被發布的。因為在只讀數據庫快照中是沒有鎖被發布,數據庫快照對于報表解決方案是一個重要的解決方案。

      一個快照的實例

      現在,讓我們來看看數據庫快照在SQL Server 2005中是如何工作的。為此,首先我需要一個源數據庫作為快照的來源。下面的腳本將創建一個源數據庫:

      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

      注意這里產品區域的大小。我定義它的大小為CHAR(150)來強調數據文件的增長級數,這樣在我接下來的實例中將更容易解釋清楚快照是如何工作的。

      現在既然我已經有了一個源數據庫,現在我裝載一些數據來擴展數據文件的大小位。如此,使用上面的腳本來創建銷售歷史表。

      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結構學習
      有件東西我觀察了很多年,那就是很少有開發者會去使用SQL Server中的一個非常有用的東西EXISTS結構。你可以在各種情況中用到EXISTS結構,在這篇文章中我會向大家介紹其中的一些。 EXISTS結構 EXISTS結構是一個TSQL函數,這個函數會就圓括號中的子查詢返回一

      共2頁上一頁12下一頁
      來源:模板無憂//所屬分類:Mssql數據庫教程/更新時間:2009-03-03
      相關Mssql數據庫教程