首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 2005 資料庫快照應用於報表系統(一):原理、建立與稀疏檔案機制

     編輯:關於SqlServer

SQL Server 2005 引入資料庫快照,提供唯讀、交易一致性的資料庫靜態檢視,極適合報表查詢與災難復原。本文深入解析快照運作原理、建立語法與稀疏檔案特性。

什麼是資料庫快照?

  • 來源資料庫的唯讀靜態複本,反映建立快照那一刻的資料狀態。
  • 報表查詢於快照執行完全無鎖定,不影響來源資料庫 OLTP 效能。
  • 可作為災難復原點:將來源資料庫還原至快照狀態,或提取特定資料表/資料。

快照運作機制:稀疏檔案

  • 建立快照時,同步建立 稀疏檔案(僅支援 NTFS)。
  • 初始大小接近 0,Windows 檔案總管顯示大小等同來源資料檔(邏輯大小),但實體磁碟佔用極小。
  • 來源資料庫資料頁首次被修改前,原始頁面複製至稀疏檔案(Copy-on-Write)。
  • 查詢快照時,若資料頁未被修改 → 讀取來源資料檔;已修改 → 讀取稀疏檔案。整過程無鎖定。

建立快照語法

-- 建立來源資料庫
USE master;
IF EXISTS (SELECT name FROM sysdatabases WHERE name = 'SourceDatabase')
    DROP DATABASE SourceDatabase;
GO

CREATE DATABASE SourceDatabase
ON PRIMARY (
    NAME = SourceDatabase_Data,
    FILENAME = 'C:\SQLServer\SourceDatabase_Data.mdf'
) LOG ON (
    NAME = SourceDatabase_Log,
    FILENAME = 'C:\SQLServer\SourceDatabase_Log.ldf'
);
GO

-- 載入測試資料
USE SourceDatabase;
CREATE TABLE SalesHistory (
    SaleID INT IDENTITY(1,1),
    Product CHAR(150),
    SaleDate DATETIME,
    SalePrice MONEY
);
-- 插入 30,000 筆測試資料...

建立快照資料庫

CREATE DATABASE SnapshotDatabase
ON (
    NAME = 'SourceDatabase_Data',
    FILENAME = 'C:\SQLServer\SnapshotDatabase.mdf'
) AS SNAPSHOT OF SourceDatabase;

關鍵差異:

  1. AS SNAPSHOT OF SourceDatabase 指定來源資料庫。
  2. 快照不建立記錄檔(唯讀無交易)。
  3. 檔案副檔名不限定為 .mdf,但建議保持一致性。

快照建立後的狀態

  • 稀疏檔案邏輯大小 = 來源資料檔大小(如 7,360 KB),實體大小 ≈ 0。
  • 來源資料庫持續寫入 → 變更頁複製至稀疏檔案 → 稀疏檔案實體大小成長。
  • 來源資料庫再插入 10,000 筆 → 來源檔案 12,480 KB,稀疏檔案實體 448 KB。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved