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

SQL Server FILESTREAM 啟用與數據庫創建完整步驟指南

     編輯:關於SqlServer

FILESTREAM 將 VARBINARY(MAX) 二進制大對象(BLOB)存儲在文件系統中,兼顧資料庫事務一致性與文件流式訪問性能,適用於文檔、圖片、視頻等非結構化數據。

前置條件

  1. SQL Server 實例層級啟用 FILESTREAM(SQL Server Configuration Manager → 服務屬性 → FILESTREAM 標籤)。
  2. Windows 服務帳戶具備目標文件夾 NTFS 讀寫權限。
  3. 目標文件夾父目錄必須存在,末級目錄必須不存在(由引擎自動創建)。

創建啟用 FILESTREAM 的數據庫

CREATE DATABASE Archive
ON
PRIMARY (
    NAME = Arch1,
    FILENAME = 'C:\Data\ArchDat1.mdf'
),
FILEGROUP FileStreamGroup1 CONTAINS FILESTREAM (
    NAME = Arch3,
    FILENAME = 'C:\Data\FileStream1'  -- 這是一個「目錄」,非文件
)
LOG ON (
    NAME = ArchLog1,
    FILENAME = 'C:\Data\ArchLog1.ldf'
);
GO

關鍵語法解析

子句說明
FILEGROUP ... CONTAINS FILESTREAM聲明此文件組存儲 FILESTREAM 數據,必須至少一個。
FILENAME = 'C:\Data\FileStream1'指向目錄路徑。C:\Data 必須存在,FileStream1 目錄不能預先存在。

創建後驗證

執行成功後,C:\Data\FileStream1 目錄下將自動生成:

  • filestream.hdr:容器頭文件,嚴禁刪除/修改。
  • $FSLOG:FILESTREAM 日志子目錄。

建立 FILESTREAM 表

USE Archive;
GO

CREATE TABLE dbo.Documents (
    DocId UNIQUEIDENTIFIER ROWGUIDCOL NOT NULL UNIQUE DEFAULT NEWID(), -- 必須有 ROWGUIDCOL
    FileName NVARCHAR(255) NOT NULL,
    FileData VARBINARY(MAX) FILESTREAM NULL,  -- 關鍵:FILESTREAM 屬性
    UploadTime DATETIME2 DEFAULT SYSUTCDATETIME()
)
FILESTREAM_ON FileStreamGroup1;  -- 指定 FILESTREAM 文件組
GO

插入/讀取 FILESTREAM 數據

T-SQL 插入(小文件 < 2MB)

INSERT INTO dbo.Documents (FileName, FileData)
SELECT N'Report.pdf', CAST(BulkColumn AS VARBINARY(MAX))
FROM OPENROWSET(BULK 'C:\Temp\Report.pdf', SINGLE_BLOB) AS F;

Win32 流式讀寫(大文件、高性能)

-- 1. 獲取事務上下文路徑
DECLARE @Path NVARCHAR(MAX);
SELECT @Path = FileData.PathName() FROM dbo.Documents WHERE DocId = '...';
DECLARE @Token VARBINARY(MAX);
SELECT @Token = GET_FILESTREAM_TRANSACTION_CONTEXT();

-- 2. 應用層 (C#/PowerShell) 使用 @Path + @Token 打開文件流讀寫
-- SqlFileStream fs = new SqlFileStream(path, token, FileAccess.ReadWrite);

既有數據庫添加 FILESTREAM 文件組

ALTER DATABASE Archive
ADD FILEGROUP FSGroup2 CONTAINS FILESTREAM;

ALTER DATABASE Archive
ADD FILE (
    NAME = Arch4,
    FILENAME = 'C:\Data\FileStream2'
)
TO FILEGROUP FSGroup2;
GO

最佳實踐與限制

  • 備份/還原:原生備份包含 FILESTREAM 數據;FILESTREAM_ON 文件組可單獨備份。
  • AlwaysOn 可用性組:支援,需所有副本啟用 FILESTREAM 且路徑一致。
  • 限制:不支援記憶體優化表、FILESTREAM 列不能加密(TDE 加密整個數據庫除外)、不支援 FILESTREAM 列上的 FILESTREAM 索引(僅支援全文索引)。
  • 垃圾回收:刪除行後,文件由背景執行緒異步清理,非即時釋放磁盤空間。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved