標籤:style http io ar 使用 sp 檔案 資料 on
一 、FileStream和FileTable介紹
我們經常需要把結構化資料(int、Char等)和非結構化資料(如Varbinary(max))一起儲存,那我們在怎麼儲存的呢?
1、 在SQL Server 2008之前,我們通常在資料庫中儲存結構化的資料,並且將非結構化資料(例如文檔、音頻、視頻等)儲存在NTFS檔案系統中,然後在資料庫中存放這些檔案的路徑。但是顯而意見,很難保證檔案系統和資料庫的一致性。
2、 在SQL Server 2008,新增了FileStream,它允許我們將Varbinary(max)類型的檔案存放在NTFS檔案系統,但是能夠直接通過SQL Server管理檔案系統中的檔案,有效地保證了事務的一致性。但是檔案系統只是用來隱藏檔而已,並不能用來組織和管理檔案。
3、 在SQL Server2012,在FileStream的基礎之上新增了FileTable,它擁有FileStream的一切功能。並且通過Windows的檔案系統能夠組織和管理檔案,對於檔案的一切操作都會反映在SQL Server的檔案表中,例如在檔案系統中建立檔案、建立檔案夾、變更檔類型、檔案大小等 ,都會相應地在SQL Server的檔案表上做相應的操作。
二 、如何配置和使用FileTable
1、 在SQL Server組態管理員中開啟檔案流訪問
a) 勾上“針對Transact-SQL訪問啟用FileStream”
b) 勾上“啟用FileStream進行檔案I/O訪問”。“Windows共用名稱(W)”處填入“CanwaySQLFile”
c) 勾上“允許遠程用戶端訪問FileStream資料(R)”
2、 在資料庫的執行個體屬性上允許訪問檔案流
開啟“SQL Server Management Studio”,修改該執行個體的配置。預設配置如下:
將“FileStream存取層級”從“已禁用”改成“已啟用完全訪問”
其中“FileStream存取層級”有三種可選項:
a) 已禁用
無法將二進位大型物件 (BLOB) 資料存放區在檔案系統中。此為預設值。即filestream access level=0
b) 已啟用 Transact-SQL 訪問
可使用 Transact-SQL 訪問 FILESTREAM 資料,但不能通過檔案系統進行訪問。即filestream access level=1
c) 已啟用完全訪問
FILESTREAM 資料可使用 Transact-SQL 以及通過檔案系統進行訪問。即filestream access level=0
點擊“確定”之後提示必須重啟SQL Server服務才會生效:
3、 資料庫中添加檔案流組和檔案
a) 添加檔案流組
右鍵資料庫FileTableDB->屬性->檔案組,在下方的“FileStream”點擊“添加”來添加一個檔案流組FileStreamGroup。
b) 添加檔案
添加了檔案流組之後就可以在檔案流組中添加資料檔案
右鍵資料庫FileTableDB->屬性->檔案,添加一個名為“FileTable”、檔案類型為“FileStream資料”、檔案組為“FileStreamGroup”、路徑為“E:\FB”的資料庫檔案。
開啟目錄“E:\FB”,可以看到自動建立了一個檔案夾“FileTable”,在FileTable檔案夾下面有一個filestream.hdr檔案,它是是FILESTREAM 容器的標頭檔
4、 資料庫啟用“非事務訪問”和填寫“FileStream目錄名稱”
右鍵資料庫FileTableDB->屬性->選項
a) 在“FileStream非事務訪問”處選項“Full”
b) 在“FileStream目錄名稱”處填寫“ImageFile”
點擊“確定”後提示:
直接點擊是就可以了。
5、 建立檔案表FileTable
開啟SSMS,開啟新的查詢時段,輸入以下命令並運行
展開資料庫FileTableDB,在資料庫下有一個名為FileTable的檔案夾,展開此檔案夾,可以看到一個名為ImageTable2並且擁有很多列的表。
6、 擷取共用路徑
在資料庫FileTableDB下建立檔案表ImageTable2之後,就能夠通過Windows的資源管理員來看到檔案表ImageTable2中存放的檔案。
先擷取檔案表ImageTable2的共用路徑,在SSMS下運行以下命令可以得到:
7、 通過共用路徑訪問資料庫FileTableDB下檔案表ImageTable2中存放的檔案
a) 通過共用路徑訪問
目前共用檔案中沒有檔案。
b) 查詢ImageTable2
目錄表ImageTable2也是空的
c) 在Windows資源管理員上開啟上面的共用目錄
i. 建立一個名為“Test.txt”的檔案
然後再查詢表ImageTable2
(後面還有其它欄位,沒截到)
可以發現,在共用目錄下建立一個檔案,那麼在表ImageTable2下也會自動添加一條記錄。
ii. 同樣地,在資料庫中刪除表ImageTable2下的記錄也會相應地自動刪除共用目錄下的檔案。
iii. 在共用目錄下建立檔案夾也會自動地在檔案表中建立一個檔案夾
iv. 共用目錄下修改檔案的名字、增加檔案的內容、變更檔的類型等都會自動地在資料庫的ImageTable2下做相應的更改。
三 、總結
通過SQL Server 2012的FileTable,我們可以很方便地組織和管理存放在資料庫中的檔案。可以通過檔案系統直接為檔案建立多級目錄進行分類管理,可以修改檔案類型,修改檔案名稱等,這些都不會影響到資料庫和檔案系統的一致性。
【轉】使用SQL Server 2012的FileTable輕鬆管理檔案