Kompatibilita fileTable s jinými funkcemi SQL Serveru

platí pro:SQL Server

Popisuje, jak FileTables fungují s dalšími funkcemi SQL Serveru.

Skupiny dostupnosti AlwaysOn a FileTables

Pokud databáze obsahující data FILESTREAM nebo FileTable patří do skupiny dostupnosti AlwaysOn:

  • Funkce FileTable je částečně podporována skupinami dostupnosti AlwaysOn. Po převzetí služeb při selhání jsou data FileTable přístupná na primární replice, ale data FileTable nejsou přístupná pro čitelné sekundární repliky.

    Poznámka:

    Po přepnutí při selhání jsou všechny funkce FILESTREAM podporovány. Data FILESTREAM jsou přístupná jak na čitelných sekundárních replikách, tak na nové primární replice.

  • Funkce FILESTREAM a FileTable přijímají nebo vracejí názvy virtuálních sítí (VNN) místo názvů počítačů. Další informace o těchto funkcích naleznete v tématu FILESTREAM a FileTable Functions (Transact-SQL).

  • Veškerý přístup k datům FILESTREAM nebo FileTable prostřednictvím rozhraní API systému souborů by měl místo názvů počítačů používat sítě VN. Další informace najdete v tématu Použití FILESTREAM a FileTable se skupinami dostupnosti AlwaysOn.

Tabulky oddílů a souborů

V Tabulkách FileTable se nepodporuje dělení. Díky podpoře více souborů FILESTREAM lze čistě škálovací problémy řešit bez nutnosti dělení particí ve většině případů (na rozdíl od SQL Server 2008 FILESTREAM).

Replikace a souborové tabulky

Funkce replikace a související funkce (včetně transakční replikace, slučovací replikace, zachytávání změn a sledování změn) nejsou u FileTables podporované.

Sémantika transakcí a FileTables

Aplikace pro Windows

Aplikace systému Windows nerozumí databázovým transakcím, takže operace zápisu systému Windows neposkytují vlastnosti ACID databázové transakce. Proto transakční vrácení zpět a obnova není možná s operacemi aktualizace systému Windows.

Transact-SQL aplikace

U Transact-SQL aplikací pracujících na sloupci FILESTREAM (file_stream) v FileTable jsou sémantika izolace stejná jako u datového typu FILESTREAM v běžné uživatelské tabulce.

Oznámení dotazů a FileTables

Dotaz nemůže obsahovat odkaz na sloupec FILESTREAM v FileTable, v klauzuli WHERE nebo jakékoli jiné části dotazu.

SELECT INTO a FileTables

Příkazy SELECT INTO z Tabulky FileTable nešířují sémantiku FileTable do vytvořené cílové tabulky (stejně jako sloupce FILESTREAM v běžné tabulce). Všechny cílové sloupce tabulky se chovají stejně jako normální sloupce. Nemají přidruženou žádnou sémantiku FileTable.

Triggery a souborové tabulky

DDL (Data Definition Language) triggery

U triggerů DDL s FileTables se nedají brát v úvahu žádné zvláštní aspekty. Běžné triggery DDL se spouštějí při operacích CREATE/ALTER DATABASE a také při operacích CREATE/ALTER TABLE pro FileTables. Triggery mohou načíst skutečná data událostí, která obsahují text příkazu DDL a další informace voláním funkce EVENTDATA(). Neexistují žádné nové události ani změny existujícího schématu Eventdata.

DML triggery (Jazyk pro manipulaci s daty)

Tato omezení se vynucují během operace DDL za účelem vytvoření triggerů.

  • FileTables nepodporují INSTEAD OF triggerů pro DML operace. Toto je stávající omezení pro všechny tabulky, které obsahují sloupce FILESTREAM.

  • FileTables podporuje triggery AFTER pro operace DML.

  • Triggery definované v FileTable nemůžou aktualizovat žádné FileTable (včetně nadřazené FileTable). Toto omezení existuje hlavně proto, aby se spouštěč nedostal do konfliktu se zámky uchovávanými přístupem k systému souborů ve stejné transakci.

Netransakční přístup a jeho účinky na triggery

  • Pokud je v databázi povolený přístup k neakční aktualizaci, je možné provést místní aktualizaci dat FILESTREAM v libovolné tabulce, včetně FileTable v této databázi. Kvůli této možnosti nemusí být předchozí stav obsahu FILESTREAM k dispozici pro trigger.

  • Pro neakční aktualizační operace prostřednictvím systému souborů SQL Server vytvoří interní transakci pro zachycení operace CloseHandle a všechny definované triggery DML mohou být aktivovány jako součást této transakce. Vrácení zpět takovéto transakce uvnitř těla triggeru, i když tomu není zabráněno, nevrátí zpět změny provedené ve FILESTREAM. Takové vrácení zpět může také zabránit aktivaci triggerů aktualizace, i když byl obsah FILESTREAM změněn.

  • Kromě těchto dopadů musí triggery v FileTables řešit několik dalších chování.

    • Při operacích s neakční aktualizací v FileTable prostřednictvím systému souborů je možné, že obsah FILESTREAM může být výhradně uzamčen jinými operacemi Win32 a nemusí být přístupný pro čtení a zápis prostřednictvím těla triggeru. V takových případech může při každém pokusu o přístup k obsahu FILESTREAM v těle spouštěče dojít k chybě "Chyba sdílení". Triggery by měly být navrženy tak, aby tyto chyby správně zpracovávaly.

    • Výsledný obraz FILESTREAM může být nestabilní, protože v některých případech může být aktivně upravován nepotvrzenými aktualizacemi současně, vzhledem k režimům sdílení povoleným v přístupu k souborovému systému.

  • Neobvyklé ukončení popisovačů Win32, například explicitní ukončení popisovačů Win32 správcem nebo chybovým ukončením databáze, nespustí triggery uživatele během operací obnovení, i když mohl být obsah FILESTREAM změněn aplikací Win32 ukončenou neobvykle.

Zobrazení a tabulky souborů

Views

Zobrazení lze vytvořit v tabulce FileTable jako v jakékoli jiné tabulce. Následující aspekty však platí pro zobrazení vytvořené v tabulce FileTable:

  • Zobrazení nemohou mít žádnou sémantiku FileTable. To znamená, že sloupce v zobrazení (včetně sloupců atributů souborů) se chovají stejně jako normální sloupce zobrazení bez jakékoli speciální sémantiky a totéž platí pro řádky představující soubory/adresáře.

  • Zobrazení můžou být aktualizovatelná na základě sémantiky aktualizovatelného zobrazení, ale omezení podkladové tabulky můžou aktualizace odmítnout stejně jako v tabulce.

  • Cestu k souboru lze v zobrazení vizualizovat tak, že ji přidáte jako explicitní sloupec v zobrazení. Například:

    CREATE VIEW MP3FILES AS SELECT column1, column2, ..., GetFileNamespacePath() AS PATH, column3,... FROM Documents

Indexovaná zobrazení

V současné době indexovaná zobrazení nemohou obsahovat sloupce FILESTREAM ani počítané nebo trvalé počítané sloupce, které závisí na sloupcích FILESTREAM. Toto chování zůstává beze změny u zobrazení definovaných také v tabulce FileTable.

Izolace snímků a FileTables

Čtení potvrzené izolace snímků (RCSI) a izolace snímků (SI) závisí na schopnosti mít k dispozici snímek dat dostupných pro čtenáře, i když se s daty provádějí operace aktualizace. FileTables však umožňuje neakční přístup k zápisu do filestreamových dat. V důsledku toho platí následující omezení pro tyto funkce v databázích, které obsahují FileTables:

  • Databázi obsahující FileTables je možné změnit tak, aby povolovala RCSI/SI.

  • Pokud je non-transactional access nastaven na FULL pro databázi, pak transakce spuštěná v rámci RCSI nebo SI má následující chování:

    • Čtení sloupce file_stream v tabulce FileTable pomocí Transact-SQL selže. INSERT a UPDATE do sloupce stále proběhnou úspěšně, pokud nečtou ze sloupce file_stream.

    • Pokud příkaz Transact-SQL určuje nápovědy tabulky READCOMMITTEDLOCK, čtení proběhne úspěšně a vezme zámky na řádcích, místo aby se používalo verzování řádků.

    • Požadavky na otevření Win32 FileStreamu v transakci také selžou.

    • Přístup Win32 k netransakční tabulce FileTable je úspěšný. Na všechny interní dotazy provedené FileTable to nemá vliv.

    • Fulltextové indexování vždy proběhne úspěšně bez ohledu na to, jaké jsou možnosti databáze (READ_COMMITTED_SNAPSHOT nebo ALLOW_SNAPSHOT_ISOLATION).

Sekundární databáze s možností čtení

Stejné aspekty platí pro čitelné sekundární databáze jako u snímků, jak je popsáno v předchozí části, izolace snímků a souborových tabulek.

Samostatné databáze a FileTables

Funkce FILESTREAM, na které funkce FileTable závisí, vyžaduje určitou konfiguraci mimo databázi. Proto databáze, která používá FILESTREAM nebo FileTable, není plně obsažena.

Pokud chcete používat určité funkce obsažených databází, jako jsou například uživatelé s omezením, můžete nastavit zahrnutí databáze na hodnotu PARTIAL. V takovém případě ale některá nastavení databáze nejsou obsažena v databázi a při přesunu databáze se automaticky nepřesouvají.