SQL Server 2008 FILESTREAM特性管理文件
在SQL Server 2008中,新的FILESTREAM(文件流)特性和varbinary列配合,你可以在服務器的文件系統上存儲真實的數據,但可以在數據庫上下文內管理和訪問,這個特性讓SQL Server不僅可以維護好數據庫內記錄的完整性,也能夠維護好數據庫記錄和外部文件之間的完整性。因為這個特性是在現有的varbinary(max)數據類型之上實現的,開發人員可以輕易地用上這個特性,不用對應用程序的架構進行改動。
FILESTREAM使SQL Server數據庫引擎和NTFS文件系統成為了一個整體。Transact-SQL語句可以插入、更新、查詢、搜索和備份FILESTREAM數據。FILESTREAM使用NT系統緩存來緩存文件數據。這有助于減少FILESTREAM數據可能對數據庫引擎性能產生的任何影響。由于沒有使用SQL Server緩沖池,因此該內存可用于查詢處理。
在SQL Server中,BLOB可以是將數據存儲在表中的標準varbinary(max)數據,也可以是將數據存儲在文件系統中的FILESTREAM varbinary(max)對象。數據的大小和應用情況決定您應該使用數據庫存儲還是文件系統存儲。如果滿足以下條件,則應考慮使用FILESTREAM:
- 所存儲的對象平均大于1MB。
- 快速讀取訪問很重要。
- 您開發的是使用中間層作為應用程序邏輯的應用程序。
對于較小的對象,將varbinary(max)BLOB存儲在數據庫中通常會提供更為優異的流性能。
FILESTREAM存儲以varbinary(max)列的形式實現,在該列中數據以BLOB的形式存儲在文件系統中。BLOB的大小僅受文件系統容量大小的限制。文件大小為2GB的varbinary(max)標準限制不適用于存儲在文件系統中的BLOB。
若要將指定列使用FILESTREAM存儲在文件系統中,對varbinary(max)列指定FILESTREAM屬性。這樣數據庫引擎會將該列的所有數據存儲在文件系統,而不是數據庫文件中。
FILESTREAM數據必須存儲在FILESTREAM文件組中。FILESTREAM文件組是包含文件系統目錄而非文件本身的專用文件組。這些文件系統目錄稱為“數據容器”。數據容器是數據庫引擎存儲與文件系統存儲之間的接口。
使用FILESTREAM存儲時,需要注意以下內容:
- 如果表包含FILESTREAM列,則每一行都必須具有唯一的行ID。
- 不能嵌套FILESTREAM數據容器。
- 使用故障轉移群集時,FILESTREAM文件組必須位于共享磁盤資源上。
- FILESTREAM文件組可位于壓縮卷上。
啟用FILESTREAM(文件流)
默認情況下,FILESTREAM(文件流)特性是被禁用了的,因此在使用之前,你必須按照下面的步驟配置服務器和數據庫實例:
1、要啟用服務器實例上的FILESTREAM(文件流),打開SQL Server配置管理器,在SQL Server服務上點擊右鍵,然后點擊打開,你會看到一串服務器,在你想要啟用FILESTREAM(文件流)的SQL Server實例上點擊右鍵,從右鍵菜單中選擇“屬性”,切換到FILESTREAM(文件流)標簽,檢查“為Transact-SQL訪問啟用FILESTREAM(文件流)”選項,你也可以在這個標簽頁為文件I/O流訪問啟用FILESTREAM(文件流)。
2、要為數據庫實例啟用FILESTREAM(文件流),執行系統存儲過程sp_configure,并設置filestream_access_level參數的值為2,如下:
EXEC sp_configure filestream_access_level, 2
GO
RECONFIGURE
GO
filestream_access_level參數有效的值包括:
◆ 0 在該實例上禁用FILESTREAM(文件流),這是默認值。
◆ 1 為Transact-SQL訪問啟用FILESTREAM(文件流)
◆ 2 為Transact-SQL和Win32流訪問啟用FILESTREAM(文件流)
完成服務器和數據庫實例配置后,接下來是創建存儲數據的真實數據庫,因為FILESTREAM(文件流)是專門為存儲在文件系統上的二進制數據創建的
3、打開SSMS連接到數據庫實例,右擊數據庫實例,選擇“屬性”選項,系統將打開SQL Server實例的屬性窗口。
4、切換的“高級”選項頁,在文件流訪問級別下拉列表框中選擇“已啟用完全訪問”選項,如圖所示。
5、單擊“確定”按鈕,然后重啟數據庫實例,FILESTREAM在數據庫實例中設置完成。
在啟用了數據庫實例的FILESTREAM后,接下來就需要設置數據庫的FILESTREAM和創建具有FILESTREAM數據列的表:
6、對應新建的數據庫,則在創建數據庫時創建FILESTREAM文件組,如果是現有數據庫,則使用ALTER DATABASE添加FILESTREAM的文件組,例如對TestDB1數據庫添加FILESTREAM的文件組,具體SQL腳本如代碼:
ALTER DATABASE [sq_shuntcn]
ADD FILEGROUP [FileStreamGroup] CONTAINS FILESTREAM --添加FILESTREAM文件組
GO
ALTER DATABASE [sq_shuntcn]
ADD FILE ( NAME = N'FileStream', FILENAME = N'C:\FileStream') --添加FILESTREAM文件
TO FILEGROUP [FileStreamGroup]
GO
系統將自動創建C:\FileStream文件夾并在其中寫入filestream.hdr文件,該文件是 FILESTREAM容器的頭文件不能刪除,一定要確保在運行該語句之前C:\FileStream并不存在。
7、創建了FILESTREAM文件組后便可創建和修改表,指定某varbinary(max)類型的列包含FILESTREAM數據。例如創建Files表,該表包含FileID和FIleContent列,具體腳本如代碼:
CREATE TABLE PhotoAlbum(
PhotoId int PRIMARY KEY,
RowId uniqueidentifier ROWGUIDCOL NOT NULL UNIQUE DEFAULT NEWID(),
Description varchar(max),
Photo varbinary(max) FILESTREAM DEFAULT(0x)
)
按照msdn說明,RowId 列是一個ROWGUIDCOL列,Photo 作為文件存儲的列不僅是VARBINARY(MAX)類型 ,同時還需要賦予一個fileStream特性
在創建好FILESTREAM表后即可向其中添加、修改和讀取數據。SQL Server支持使用T-SQL和WIN32 API兩種方式訪問FILESTREAM。
對于T-SQL訪問FILESTREAM數據列來說,FILESTREAM是完全透明的,也就是說,T-SQL仍然使用一般的訪問varbinary(max)數據列的方式訪問,并不會因為是FILESTREAM列而有所不同。
代碼訪問FILESTREAM數據列參考文章 Using SqlFileStream with C# to Access SQL Server FILESTREAM Data
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的SQL Server 2008 FILESTREAM特性管理文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【学习生活杂谈】学习记录
- 下一篇: linux cmake编译源码,linu