Sdílet prostřednictvím


Správa tabulek souborů

platí pro:SQL Server

Popisuje běžné úlohy správy pro správu FileTables.

Postupy: Získání seznamu tabulek souborů a souvisejících objektů

Pokud chcete získat seznam FileTables, zadejte dotaz na jedno z následujících zobrazení katalogu:

SELECT * FROM sys.filetables;  
GO  
  
SELECT * FROM sys.tables WHERE is_filetable = 1;  
GO  

Pokud chcete získat seznam objektů definovaných systémem, které byly vytvořeny při vytváření přidružených FileTables, zadejte dotaz na zobrazení katalogu sys.filetable_system_defined_objects (Transact-SQL).

SELECT object_id, OBJECT_NAME(object_id) AS 'Object Name'  
FROM sys.filetable_system_defined_objects;  
GO  

Zakázání a opětovné povolení netransakčního přístupu na úrovni databáze

Pokud chcete získat výhradní přístup, který je nutný pro určité úlohy správy, možná budete muset dočasně zakázat neakční přístup.

Chování příkazu ALTER DATABASE při změně úrovně neakčního přístupu

  • Pokud nastavíte ne-transakční přístup na READ_ONLY nebo VYPNUTO, příkaz ALTER DATABASE nevrátí řízení uživateli, dokud existují otevřené popisovače souborů, se kterými je požadovaná operace v konfliktu. Mezi popisovače, které jsou v konfliktu s touto operací, patří následující:

    • Když nastavujete přístup na NONE, ovlivní to všechny otevřené popisovače souborů.

    • Když nastavujete přístup k READ_ONLY, všechny popisovače souborů otevřené pro přístup k zápisu.

    Informace o zabíjení otevřených popisovačů souborů naleznete v tématu Killing Open File Handles Associated with a FileTable v tomto tématu.

    Pokud je příkaz ALTER DATABASE zrušen nebo končí vypršením časového limitu, úroveň transakčního přístupu se nezmění.

  • Pokud zavoláte příkaz ALTER DATABASE s klauzulí <ukončení> (VRÁCENÍ ZPĚT PO integer [ SEKUNDÁCH ] | VRÁCENÍ ZPĚT OKAMŽITĚ | BEZ ČEKÁNÍ), všechny otevřené ne-transakční popisovače souborů se ukončí.

Varování

Zabití otevřených popisovačů souborů může uživatelům způsobit ztrátu neuložených dat. Toto chování je konzistentní s chováním samotného systému souborů.

účinky zakázání nekonakčního přístupu

Změna úrovně ne-transakčního přístupu na úrovni databáze má následující účinky na adresáře FileTable v rámci adresáře této databáze:

  • Když nastavíte přístup na NONE, nebudou už všechny adresáře FileTable a jejich obsah přístupné ani viditelné.

  • Když nastavíte přístup na READ_ONLY, pak jsou všechny adresáře FileTable a jejich obsah také jen pro čtení.

Zakázání FILESTREAM na úrovni instance má následující účinky na adresáře na úrovni databáze na dané instanci a adresáře FileTable v těchto adresářích:

  • Žádné adresáře na úrovni databáze v instanci nejsou viditelné, pokud je fileSTREAM zakázán na úrovni instance.

Jak na to: Zakázání a opětovné povolení ne-transakčního přístupu na úrovni databáze

Další informace naleznete v tématu ALTER DATABASE SET Options (Transact-SQL).

Zakázání úplného nekonakčního přístupu
Volejte příkaz ALTER DATABASE a nastavte hodnotu NON_TRANSACTED_ACCESS na READ_ONLY nebo OFF.

-- Disable write access.  
ALTER DATABASE database_name  
SET FILESTREAM ( NON_TRANSACTED_ACCESS = READ_ONLY );  
GO  
  
-- Disable non-transactional access.  
ALTER DATABASE database_name  
SET FILESTREAM ( NON_TRANSACTED_ACCESS = OFF );  
GO  

Opětovné povolení úplného nekonakčního přístupu
Zavolejte příkaz ALTER DATABASE a nastavte hodnotu NON_TRANSACTED_ACCESS na FULL.

ALTER DATABASE database_name  
SET FILESTREAM ( NON_TRANSACTED_ACCESS = FULL );  
GO  

Postupy: Zajištění viditelnosti tabulek souborů v databázi

Adresář na úrovni databáze a adresáře FileTable v ní jsou viditelné, pokud jsou splněny všechny tyto podmínky:

  1. FILESTREAM je povolen na úrovni instance.

  2. Na úrovni databáze je povolený netransakční přístup.

  3. Platný adresář byl zadán na úrovni databáze.

Zakázání a opětovné povolení oboru názvů FileTable na úrovni tabulky

Zakázání oboru názvů FileTable zakáže všechna systémově definovaná omezení a triggery vytvořené pomocí FileTable. To je užitečné v případech, kdy musí být tabulka FileTable reorganizována ve velkém měřítku pomocí Transact-SQL operací bez nutnosti vynucování sémantiky FileTable. Tyto operace však mohou ponechat FileTable v nekonzistentním stavu a mohou zabránit opětovnému povolení oboru názvů FileTable.

Zakázání oboru názvů FileTable má následující výsledky:

  • Sloupce a data FileTable nejsou fyzicky vyřazeny z tabulky.

  • Adresář FileTable a soubory a adresáře, které obsahuje, zmizí ze systému souborů a nejsou k dispozici pro vstupně-výstupní přístup k souborům.

  • Sloupce filetable definované systémem nelze vynechat a znovu vytvořit; jinak se ale chovají jako běžné sloupce pro operace DML.

  • Otevřené popisovače souborů brání zakázání omezení FileTable, protože tato operace vyžaduje zámek schématu na tabulce.

  • Vynucení všech sémantiek FileTable, včetně systémově definovaných omezení a triggerů, se zastaví po zakázání oboru názvů FileTable.

Opětovné povolení oboru názvů FileTable má následující výsledky:

  • Tabulka FileTable je kontrolována pro konzistenci. Pokud jsou nalezeny nekonzistence, dojde k chybě a FileTable zůstane zakázaná; v opačném případě je souborová tabulka znovu povolena.

  • Obnovení vynucení sémantiky FileTable, včetně systémově definovaných omezení a triggerů, je obnoveno.

  • Adresář FileTable a soubory a adresáře, které obsahuje, se stanou viditelnými v systému souborů a budou k dispozici pro vstupně-výstupní přístup k souborům.

Jak na to: Zakázání a opětovné povolení oboru názvů FileTable na úrovni tabulky

Použijte příkaz ALTER TABLE s volbou { ENABLE | DISABLE } FILETABLE_NAMESPACE.

K zakázání oboru názvů FileTable

ALTER TABLE filetable_name  
DISABLE FILETABLE_NAMESPACE;  
GO  

Jak opětovně povolit obor názvů FileTable

ALTER TABLE filetable_name  
ENABLE FILETABLE_NAMESPACE;  
GO  

Odstranění otevřených popisovačů souborů spojených s FileTable

Otevření popisovačů souborů uložených v tabulce FileTable může zabránit výhradnímu přístupu, který je nutný pro určité úlohy správy. Pro umožnění urgentních úloh možná budete muset zrušit otevřené popisovače souborů přidružené k jedné nebo více tabulkám FileTables.

Varování

Uzavření otevřených popisovačů souborů může způsobit, že uživatelé přijdou o neuložená data. Toto chování je konzistentní s chováním samotného systému souborů.

Jak získat seznam otevřených popisovačů souborů přidružených k FileTable

Dotazování na zobrazení katalogu sys.dm_filestream_non_transacted_handles (Transact-SQL).

SELECT * FROM sys.dm_filestream_non_transacted_handles;  
GO  

Jak na to: Ukončení otevřených popisovačů souborů přidružených k FileTable

Zavolejte uloženou proceduru sp_kill_filestream_non_transacted_handles (Transact-SQL) s příslušnými argumenty, abyste ukončili všechny otevřené popisovače souborů v databázi nebo v FileTable, nebo ke ukončení konkrétního popisovače.

USE database_name;  
  
-- Kill all open handles in all the filetables in the database.  
EXEC sp_kill_filestream_non_transacted_handles;  
GO  
  
-- Kill all open handles in a single filetable.  
EXEC sp_kill_filestream_non_transacted_handles @table_name = 'filetable_name';  
GO  
  
-- Kill a single handle.  
EXEC sp_kill_filestream_non_transacted_handles @handle_id = integer_handle_id;  
GO  

Postupy: Jak identifikovat zámky držené souborovými tabulkami

Většina zámků, které FileTables přebírá, odpovídá souborům otevřených aplikacemi.

Identifikace otevřených souborů a přidružených zámků
Připojte pole request_owner_id v zobrazení dynamické správy sys.dm_tran_locks (Transact-SQL) k poli fcb_id ve sys.dm_filestream_non_transacted_handles (Transact-SQL). V některých případech zámek nemusí odpovídat jen jednomu otevřenému popisovači souboru.

SELECT opened_file_name  
FROM sys.dm_filestream_non_transacted_handles  
WHERE fcb_id IN  
    ( SELECT request_owner_id FROM sys.dm_tran_locks );  
GO  

Zabezpečení FileTable

Soubory a adresáře uložené v FileTables jsou zabezpečené pouze zabezpečením SQL Serveru. Zabezpečení na úrovni tabulek a sloupců se vynucuje pro přístup k systému souborů a také přístup k Transact-SQL. Rozhraní API pro zabezpečení souborového systému Windows a nastavení seznamů ACL nejsou podporovány.

Oprávnění zabezpečení a přístupu, která se vztahují na filegroups a kontejnery FILESTREAM, platí také pro FileTables, protože data souboru jsou uložena jako sloupec FILESTREAM v FileTable.

zabezpečení FileTable a Transact-SQL Access
Transact-SQL přístup k datům v FileTables je zabezpečený stejným způsobem jako jakákoli jiná tabulka. Pro každou operaci, která přistupuje k datům nebo mění data, se provádějí příslušné kontroly zabezpečení na úrovni tabulek a sloupců.

zabezpečení FileTable a přístup k systému souborů
Rozhraní API systému souborů vyžadují pro otevření popisovače souboru nebo adresáře uloženého v tabulce FileTable odpovídající oprávnění SQL Serveru na celý řádek v tabulce FileTable (tj. oprávnění na úrovni tabulky). Pokud uživatel nemá odpovídající oprávnění SQL Serveru pro žádný sloupec v FileTable, přístup k systému souborů je odepřen.

Zálohování a Souborové tabulky

Když k zálohování FileTable použijete SQL Server, zálohuje se data FILESTREAM se strukturovanými daty v databázi. Pokud nechcete zálohovat data FILESTREAM s relačními daty, můžete k vyloučení skupin souborů FILESTREAM použít částečnou zálohu.

Transakční konzistence zálohování FileTable

Mnoho nástrojů a operací pro správu (včetně zálohování, zálohování protokolů a transakční replikace) čte transakční data konzistentně čtením transakčních protokolů. V tuto chvíli čtou všechna data FILESTREAM aktualizovaná jako součást transakce. Pokud není na úrovni databáze povolen netransakční přístup, tyto nástroje a operace pracují s plnou konzistencí transakcí.

Pokud je však povolený úplný ne-transakční přístup, může souborová tabulka obsahovat data, která byla aktualizována nedávno (prostřednictvím ne-transakční aktualizace), než je transakce, kterou nástroj nebo proces čte z transakčního protokolu. To znamená, že operace obnovení k určitému bodu v čase může obsahovat data FILESTREAM, která jsou novější než tato transakce. Toto je očekávané chování, když jsou na tabulkách FileTables povoleny netransakční aktualizace.

SQL Server Profiler a FileTables

SQL Server Profiler může zachytit operace Otevření a zavření souborů systému Windows ve výstupu trasování pro soubory uložené v FileTable.

Auditování a souborové tabulky

FileTable je možné auditovat stejně jako jakoukoli jinou tabulku. Přístupové vzory Win32 ale nejsou založeny na pevných operacích. Jedna akce v systému souborů se přeloží na více operací Transact-SQL DML. Například otevření souboru v aplikaci Microsoft Word se promění do několika operací otevření/zavření/vytvoření/přejmenování/smazání a odpovídajících DML aktivit Transact-SQL. Výsledkem jsou podrobné záznamy auditu, kde je obtížné korelovat záznamy mezi akcemi systému souborů a odpovídajícími záznamy auditu DML Transact-SQL.

DBCC a FileTables

Pomocí DBCC CHECKCONSTRAINTS můžete ověřit omezení souborové tabulky, včetně systémově definovaných omezení.

Viz také

Kompatibilita FileTable s jinými funkcemi SQL Serveru
DDL, funkce, uložené procedury a zobrazení FileTable