【轉】使用SQL Server 2012的FileTable輕鬆管理檔案

來源:互聯網
上載者:User

標籤: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輕鬆管理檔案

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.