Delen via


FileTable-compatibiliteit met andere SQL Server-functies

Van toepassing op:SQL Server

Hierin wordt beschreven hoe FileTables werkt met andere functies van SQL Server.

AlwaysOn-beschikbaarheidsgroepen en FileTables

Wanneer de database met FILESTREAM- of FileTable-gegevens deel uitmaakt van een AlwaysOn-beschikbaarheidsgroep:

  • FileTable-functionaliteit wordt gedeeltelijk ondersteund door AlwaysOn-beschikbaarheidsgroepen. Na een failover zijn FileTable-gegevens toegankelijk op de primaire replica, maar FileTable-gegevens zijn niet toegankelijk op leesbare secundaire replica's.

    Opmerking

    Na een failover wordt alle FILESTREAM-functionaliteit ondersteund. FILESTREAM-gegevens zijn toegankelijk op zowel leesbare secundaire replica's als op de nieuwe primaire replica.

  • De functies FILESTREAM en FileTable accepteren of retourneren namen van virtuele netwerken (VNN's) in plaats van computernamen. Zie FILESTREAM- en FileTable-functies (Transact-SQL)voor meer informatie over deze functies.

  • Alle toegang tot FILESTREAM- of FileTable-gegevens via de bestandssysteem-API's moet VNN's gebruiken in plaats van computernamen. Zie FILESTREAM en FileTable gebruiken met AlwaysOn-beschikbaarheidsgroepen voor meer informatie.

Partities en FileTables

Partitionering wordt niet ondersteund in FileTables. Met de ondersteuning voor meerdere FILESTREAM-bestandsgroepen kunnen pure problemen met opschalen worden afgehandeld zonder dat u in de meeste scenario's gebruik hoeft te maken van partitionering (in tegenstelling tot SQL 2008 FILESTREAMs).

Replicatie en FileTables

Replicatie en gerelateerde functies (waaronder transactionele replicatie, samenvoeging van replicatie, vastleggen van wijzigingsgegevens en het bijhouden van wijzigingen) worden niet ondersteund met FileTables.

Semantiek en FileTables voor transacties

Windows-toepassingen

Windows-toepassingen begrijpen geen databasetransacties, dus Windows-schrijfbewerkingen bieden geen ACID-eigenschappen van een databasetransactie. Daarom zijn transactionele terugdraaiacties en herstel niet mogelijk met Windows-updatebewerkingen.

Transact-SQL toepassingen

Voor Transact-SQL toepassingen die werken met de kolom FILESTREAM (file_stream) in een FileTable, zijn de isolatiesemantieken hetzelfde als met het gegevenstype FILESTREAM in een gewone gebruikerstabel.

Querymeldingen en FileTables

De query kan geen verwijzing bevatten naar de kolom FILESTREAM in de FileTable, in de WHERE-component of een ander deel van de query.

SELECT INTO en FileTables

SELECT INTO-instructies uit een FileTable geven de semantiek van filetable niet door aan de gemaakte doeltabel (net als FILESTREAM-kolommen in een gewone tabel). Alle kolommen van de doeltabel gedragen zich net als normale kolommen. Er is geen FileTable-semantiek aan hen verbonden.

Triggers en FileTables

DDL-triggers (Data Definition Language)

Er zijn geen speciale overwegingen voor DDL-triggers met FileTables. Normale DDL-triggers worden geactiveerd voor databasebewerkingen maken/wijzigen, evenals CREATE/ALTER TABLE-bewerkingen voor FileTables. Triggers kunnen de werkelijke gebeurtenisgegevens ophalen die de DDL-opdrachttekst en andere informatie bevatten door de functie EVENTDATA() aan te roepen. Er zijn geen nieuwe gebeurtenissen of wijzigingen in het bestaande Eventdata-schema.

DML-triggers: Data Manipulation Language (Data manipulatie taal)

Deze beperkingen worden afgedwongen tijdens de DDL-bewerking om triggers te maken.

  • FileTables bieden geen ondersteuning voor INSTEAD OF-triggers voor DML-bewerkingen. Dit is een bestaande beperking voor alle tabellen die FILESTREAM-kolommen bevatten.

  • FileTables ondersteunt AFTER-triggers voor DML-bewerkingen.

  • Triggers die zijn gedefinieerd in een FileTable, kunnen geen FileTables bijwerken (inclusief de bovenliggende FileTable). Deze beperking bestaat voornamelijk om te voorkomen dat een trigger in vergrendelingsconflicten raakt met de vergrendelingen die worden vastgehouden door de toegang tot het bestandssysteem in dezelfde transactie.

Niet-transactionele toegang en de effecten ervan op triggers

  • Wanneer niet-transactionele updatetoegang is toegestaan in een database, is het mogelijk om in-place updates van de FILESTREAM-gegevens in elke tabel uit te voeren, inclusief FileTable in die database. Vanwege deze mogelijkheid kan de voorafbeelding van de FILESTREAM-inhoud mogelijk niet beschikbaar zijn voor gebruik door de trigger.

  • Voor niet-transactionele updatebewerkingen via het bestandssysteem maakt SQL Server een interne transactie om de CloseHandle-bewerking vast te leggen en kunnen gedefinieerde DML-triggers worden geactiveerd als onderdeel van die transactie. Een terugdraaiactie van een dergelijke transactie in de hoofdtekst van de trigger, hoewel het niet wordt voorkomen, draait de wijzigingen die zijn aangebracht in FILESTREAM niet terug. Een dergelijke terugdraaiactie kan ook voorkomen dat de Update-triggers worden geactiveerd, ook al is de FILESTREAM-inhoud mogelijk gewijzigd.

  • Naast deze gevolgen moeten triggers voor FileTables een aantal extra gedragingen verwerken

    • Met niet-transactionele updatebewerkingen op FileTable via het bestandssysteem is het mogelijk dat de INHOUD van FILESTREAM exclusief wordt vergrendeld door andere Win32-bewerkingen en mogelijk niet toegankelijk is voor lezen/schrijven via de hoofdtekst van de trigger. In dergelijke gevallen kan elke poging om toegang te krijgen tot de FILESTREAM-inhoud binnen de trigger body een fout 'Delen schending' geven. Triggers moeten zo worden ontworpen dat dergelijke fouten op de juiste wijze worden verwerkt.

    • De afbeelding NA van de FILESTREAM is mogelijk niet stabiel, omdat deze in sommige gevallen tegelijkertijd actief wordt beschreven door andere niet-transactionele updates (vanwege de modus voor delen die is toegestaan in het bestandssysteem).

  • Abnormale beëindiging van Win32-ingangen, zoals expliciet doden van Win32-ingangen door een beheerder OF een databasecrash, voeren geen gebruikerstriggers uit tijdens de herstelbewerkingen, zelfs als de FILESTREAM-inhoud mogelijk is gewijzigd door de abnormaal beëindigde Win32-toepassing.

Weergaven en FileTables

Views

Een weergave kan op een FileTable worden gemaakt zoals in elke andere tabel. De volgende overwegingen zijn echter van toepassing op een weergave die is gemaakt in een FileTable:

  • Weergaven kunnen geen bestandstabelsemantiek hebben. Dat wil gezegd: de kolommen in de weergave (inclusief kolommen met bestandskenmerken) gedragen zich net als normale weergavekolommen zonder speciale semantiek en hetzelfde geldt voor rijen die Bestanden/mappen vertegenwoordigen.

  • Weergaven kunnen worden bijgewerkt op basis van de semantiek 'bijwerkbare weergave', maar de onderliggende tabelbeperkingen kunnen de updates net als in de tabel afwijzen.

  • Het bestandspad voor een bestand kan worden gevisualiseerd in de weergave door het toe te voegen als een expliciete kolom in de weergave. Voorbeeld:

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

Geïndexeerde weergaven

Momenteel kunnen geïndexeerde weergaven geen FILESTREAM-kolommen of berekende/persistente berekende kolommen bevatten die afhankelijk zijn van de FILESTREAM-kolommen. Dit gedrag blijft ongewijzigd, ook voor weergaven die in de FileTable zijn gedefinieerd.

Isolatie van momentopnamen en FileTables

Read Committed Snapshot Isolation (RCSI) en Snapshot Isolation (SI) zijn afhankelijk van de mogelijkheid om een momentopname te maken van de gegevens die beschikbaar zijn voor lezers, zelfs wanneer er updatebewerkingen worden uitgevoerd op de gegevens. FileTables staan echter niet-transactionele schrijftoegang toe tot Filestream-gegevens. Als gevolg hiervan zijn de volgende beperkingen van toepassing op deze functies in databases die FileTables bevatten:

  • Een database die FileTables bevat, kan worden gewijzigd om RCSI/SI in te schakelen.

  • Wanneer `non_transactional access` is ingesteld op volledig voor de database, heeft een transactie die draait onder RCSI of SI het volgende gedrag:

    • Alle Transact-SQL leesbewerkingen van de kolom FileTable file_stream mislukken. INVOEGEN en BIJWERKEN van de kolom slagen nog steeds, zolang ze niet lezen uit de file_stream kolom.

    • Als de Transact-SQL-instructie hints voor de READCOMMITTEDLOCK-tabel aangeeft, worden de leesbewerkingen voltooid en worden de rijen vergrendeld, in plaats van rijversiebeheer te gebruiken.

    • Transacted Win32 FileStream-open aanvragen mislukken ook.

    • Niet-transactiegerelateerde FileTable Win32-toegang is geslaagd. Alle interne query's die door FileTable worden uitgevoerd, worden niet beïnvloed.

    • Het indexeren van volledige tekst slaagt altijd, ongeacht de databaseopties (READ_COMMITTED_SNAPSHOT of ALLOW_SNAPSHOT_ISOLATION).

Leesbare secundaire databases

Dezelfde overwegingen zijn van toepassing op leesbare secundaire databases als op momentopnamen, zoals beschreven in de vorige sectie , Snapshot Isolation en FileTables.

Ingesloten databases en FileTables

De filestream-functie waarvoor de functie FileTable afhankelijk is, vereist enige configuratie buiten de database. Daarom is een database die gebruikmaakt van FILESTREAM of FileTable niet volledig ingesloten.

U kunt database-insluiting instellen op PARTIAL als u bepaalde functies van ingesloten databases, zoals ingesloten gebruikers, wilt gebruiken. In dit geval bevinden sommige database-instellingen zich echter niet in de database en worden ze niet automatisch verplaatst wanneer de database wordt verplaatst.