FileStream:文件流,為了解決大對象BLOB(Binary Large Objects)的存儲問題.對于大對象存儲,并且不受2GB的限制. 以往有兩種方式: (1)存儲在數據庫里面,這種方式一般使用image字段,或者varbinary(max)來做,好處是可以統一備份,但實際效率較低; (2)存儲在文件系
FileStream:文件流,為了解決大對象BLOB(Binary Large Objects)的存儲問題.對于大對象存儲,并且不受2GB的限制.
以往有兩種方式:
(1)存儲在數據庫里面,這種方式一般使用image字段,或者varbinary(max)來做,好處是可以統一備份,但實際效率較低;
(2)存儲在文件系統,而數據庫中存儲文件路徑,這種方式數據庫壓力減輕了,但卻不方便統一備份和管理.
SQL SERVER 2008新引入的文件流就是兩者的統一.文件還是放在文件系統,但由數據庫進行管理,可以統一備份和還原.
如何使用FileStream?
一.啟用FileStream
(1)在SQL Server配置管理器中打開SQL Server數據庫引擎的屬性窗口.
(2)切換到FILESTREAM選項卡,選中"針對Transact-SQL訪問啟用FILESTREAM",其他選項是針對windows進行讀寫的,都可以選中.
(3)打開SSMS連接到數據庫實例(是實例,不是具體的數據庫),右擊數據庫實例,選擇"屬性"選項,切換到"高級"選項頁,在文件流訪問級別下拉列表框中選擇"已啟用完全訪問"
二.初始化環境
(1)添加文件組
ALTER DATABASE [DBName] ADD FILEGROUP [FileGrp1] CONTAINS FILESTREAM
(2)添加存放文件的路徑
ALTER DATABASE [DBName] ADD FILE(Name=N'filestream',FILENAME=N'C:/FileStream') TO FILEGROUP [FileGrp1]
系統將自動創建C:/FileStream文件夾并在其中寫入filestream.hdr文件,該文件是 FILESTREAM容器的頭文件不能刪除,一定要確保在運行該語句之前C:/FileStream并不存在。
注意:文件組必須定義在NTFS格式分區下的磁盤,并且需要指向本地文件系統位置上,不允許指向網絡地址network addressable storage (NAS),除非通過 iSCSI將NAS設備設置為本地NFS卷
原文(the DBA must define a database filegroup that ties an NTFS file system location to a SQL Server database. Note that the filegroup needs to point to a local file system location; filestreams can't live on a remote server or a network addressable storage (NAS) devices unless the NAS device is presented as a local NFS volume via iSCSI)
如數據庫之前從未備份過,在執行以上語句時會提示須先備份LOG
三.模擬測試
(1)建表
CREATE TABLE FileStreamTest
(
ID uniqueidentifier ROWGUID NOT NULL UNIQUE DEFAULT NewID(),
FilesName varbinary(max) FILESTREAM NULL
)
FILESTREAM_ON [FileGrp1] --指示存儲到哪一個文件流
*如果一個表要使用文件流,則必須有一個GUID列,且作為唯一鍵列
(2)測試數據
INSERT INTO FileStreamTest(FilesName) VALUES (CAST('Edwin.Koo' AS varbinary(max)))
UPDATE FileStreamTest Set FilesName= (select txt_data From OPEMROWSET( BULK 'C:/temp/file01.txt',SINGLE_CLOB) As F(txt_data)) WHERE ID='BDBF1376-5CFA-43D7-B906-4B7C8E9A7625'
對于T-SQL訪問FileStream數據列是完全透明的,就如訪問varbinary(max)的方式一樣.
值得注意的是:無論是插入數據還是修改數據,SQL Server都將在文件系統中創建新的文件來保存最新的修改文件內容,修改或刪除數據后文件系統中的文件將保留,而不會被同時刪除。
<無> $velocityCount-->ALTER DATABASE [DBName] ADD FILEGROUP [FileGrp1] CONTAINS FILESTREAM
ALTER DATABASE [DBName] ADD FILE(Name=N'filestream',FILENAME=N'C:/FileStream') TO FILEGROUP [FileGrp1]
CREATE TABLE FileStreamTest ( ID uniqueidentifier ROWGUID NOT NULL UNIQUE DEFAULT NewID(), FilesName varbinary(max) FILESTREAM NULL ) FILESTREAM_ON [FileGrp1] --指示存儲到哪一個文件流
INSERT INTO FileStreamTest(FilesName) VALUES (CAST('Edwin.Koo' AS varbinary(max))) UPDATE FileStreamTest Set FilesName= (select txt_data From OPEMROWSET( BULK 'C:/temp/file01.txt',SINGLE_CLOB) As F(txt_data)) WHERE ID='BDBF1376-5CFA-43D7-B906-4B7C8E9A7625'
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com