[鐵人賽][Denali 新特性探險15]FileTables(3)

[鐵人賽][Denali 新特性探險15]FileTables(3)

前兩篇我大概說明 FileTable 功能和特性,同時也示範該如何建立FileTable,

並且也驗證 FileTable和Windows 檔案管理兩者的同步,

接下來,我將介紹 FileTable 管理及相關函數。

 

管理相關

開啟或關閉 File namespace

--開啟
alter table dbo.ftsmp3 enable filetable_namespace 
--關閉
alter table dbo.ftsmp3 disable filetable_namespace

 

 

 

如果沒開啟Filetable_Namespace,

當要透過Windows檔案系統存取FileTable就會發生無法開啟檔案位置錯誤(如下圖)。

image

 

取得開啟操作中的檔案清單

透過新增的 sys.dm_filestream_non_transacted_handles(DMV)來取得開啟中的檔案清單。

select t1.handle_id,t1.file_object_type_desc,t1.state ,t1.state_desc,t1.open_time,t1.opened_file_name    
from sys.dm_filestream_non_transacted_handles t1

image

 

確認FileTables Locks

透過dm_filestream_non_transacted_handles join sys.dm_tran_locks來確認Locks。

select opened_file_name
from sys.dm_filestream_non_transacted_handles
where fcb_id IN
( select request_owner_id from sys.dm_tran_locks );

image

 

開啟中的檔案可能會產生資源獨佔,這將會導致其他人無法修改該檔案,

所以必要時,你可能會刪除開啟中的檔案,好釋放相關獨佔資源。

 

刪除操作

-- 刪除所有 Filetables 已開啟操作 
exec sp_kill_filestream_non_transacted_handles;
--刪除單一FileTable中所有開啟中的操作  
exec sp_kill_filestream_non_transacted_handles @table_name = 'filetabletest';
-- 刪除單一開啟操作.
exec sp_kill_filestream_non_transacted_handles @handle_id = 1167;
 

image

刪除開啟中的檔案。

 

相關系統函數介紹

FileTableRootPath:返回目前資料庫或特定 FileTable root-level UNC路徑。

--返回目前資料庫 root-level UNC 路徑
select FileTableRootPath();
--返回目前資料庫某個 FileTable root-level UNC 路徑|
select FileTableRootPath(N'dbo.ftsmp3');

image

 

GetFileNamespacePath:返回 FileTable中特定檔案或目錄 UNC 路徑。

--default
select file_stream.GetFileNamespacePath() as FilePath 
FROM ftsmp3
where Name = '123.txt';
--完整 UNC 路徑
select file_stream.GetFileNamespacePath(1) as FullFilePath 
FROM ftsmp3
where Name = '123.txt';

image

 

GetPathLocator:返回FileTable中特定檔案或目錄 path_locator_id 。

下面兩個方法均可取得特定目錄或檔案的 path_locator_id。

方法1

select file_stream,name,path_locator 
from ftsmp3     

image

 

方法2

select GetPathLocator(file_stream.GetFileNamespacePath(1)) as '123.txt  path_locator_id'
FROM ftsmp3
where Name = '123.txt';

image

 

參考 Manage FileTables