Delen via


Toegang tot FileTables met File Input-Output-API's

van toepassing op:SQL Server-

Hierin wordt beschreven hoe I/O van het bestandssysteem werkt op een FileTable.

Aan de slag met bestands-I/O-API's met FileTables

Het primaire gebruik van FileTables wordt verwacht via het Windows-bestandssysteem en de I/O-API's van het Windows-bestandssysteem. FileTables biedt ondersteuning voor niet-transactionele toegang via de uitgebreide set beschikbare I/O-API's voor bestanden.

  1. Toegang tot bestands-I/O-API begint meestal met het verkrijgen van een logisch UNC-pad voor het bestand of de map. Toepassingen kunnen een Transact-SQL instructie gebruiken met de GetFileNamespacePath (Transact-SQL) functie om het logische pad voor het bestand of de map te verkrijgen. Zie Werken met mappen en paden in FileTablesvoor meer informatie.

  2. Vervolgens gebruikt de toepassing dit logische pad om een ingang voor het bestand of de map te verkrijgen en iets met het object te doen. Het pad kan worden doorgegeven aan elke ondersteunde API-functie van het bestandssysteem, zoals CreateFile() of CreateDirectory(), om een bestand te maken of te openen en een ingang te verkrijgen. De ingang kan vervolgens worden gebruikt om gegevens te streamen, mappen te inventariseren of te organiseren, bestandskenmerken op te halen of in te stellen, bestanden of mappen te verwijderen, enzovoort.

Bestanden en mappen maken in een FileTable

Een bestand of map kan worden gemaakt in een FileTable door I/O-API's voor bestanden aan te roepen, zoals CreateFile of CreateDirectory.

  • Alle aanmaaksoptievlaggen, deelmodi en toegangsmodes worden ondersteund. Dit omvat het maken, verwijderen en in-place wijzigen van bestanden. Ook ondersteund zijn bestandsnaamruimte-updates, zoals het maken/verwijderen van mappen, het wijzigen en verplaatsen van bewerkingen.

  • Het maken van een nieuw bestand of een nieuwe map komt overeen met het maken van een nieuwe rij in de onderliggende FileTable.

  • Voor bestanden worden de streamgegevens opgeslagen in de kolom file_stream; voor mappen is deze kolom null.

  • Voor bestanden bevat de kolom is_directoryonwaar. Voor mappen bevat deze kolom waar.

  • Delen en gelijktijdigheid van toegang worden afgedwongen wanneer meerdere gelijktijdige I/O-bewerkingen van bestanden of Transact-SQL bewerkingen van invloed zijn op hetzelfde bestand of dezelfde map in de hiĆ«rarchie.

Bestanden en mappen lezen in een FileTable

Semantiek voor Read Committed-isolatie wordt afgedwongen in SQL Server voor alle bestandstoegangsbewerkingen voor I/O op stream- en attribuutgegevens.

Bestanden en mappen schrijven en bijwerken in een FileTable

  • Alle schrijf- of updatebewerkingen voor bestanden in een FileTable zijn niet-transactioneel. Dat wil gezegd, er is geen SQL Server-transactie gebonden aan deze bewerkingen en er worden geen ACID-garanties geboden.

  • Ondersteuning wordt geboden voor alle streaming en in-place updates van bestands-I/O in de FileTable.

  • Updates van de FILESTREAM-gegevens of -kenmerken via I/O-API's van bestanden resulteren in updates van de bijbehorende kolommen file_stream en bestandskenmerken in de FileTable.

Bestanden en mappen verwijderen in een FileTable

Alle I/O API-semantiek van Windows-bestanden worden afgedwongen wanneer u een bestand of map verwijdert.

  • Het verwijderen van een map mislukt als de map bestanden of submappen bevat.

  • Als u een bestand of map verwijdert, wordt de bijbehorende rij uit de FileTable verwijderd. Dit komt overeen met het verwijderen van de rij via een Transact-SQL bewerking.

Ondersteunde bestandssysteembewerkingen

FileTables ondersteunt de bestandssysteem-API's met betrekking tot de volgende bestandssysteembewerkingen:

  • Directorybeheer

  • Bestandsbeheer

FileTables bieden geen ondersteuning voor de volgende bewerkingen:

  • Schijfbeheer

  • Volumebeheer

  • Transactionele NTFS

Aanvullende overwegingen voor bestands-I/O-toegang tot FileTables

VN's (Virtual Network Names) gebruiken met AlwaysOn-beschikbaarheidsgroepen

Wanneer de database met FILESTREAM- of FileTable-gegevens deel uitmaakt van een Always On-beschikbaarheidsgroep, moeten alle toegangsmethoden tot FILESTREAM- of FileTable-gegevens via de bestandsysteem-API's VNN's gebruiken in plaats van computernamen. Zie FILESTREAM en FileTable met AlwaysOn-beschikbaarheidsgroepen (SQL Server)voor meer informatie.

Gedeeltelijke updates

Een beschrijfbare ingang die is verkregen voor FILESTREAM-gegevens in een FileTable met behulp van de GetFileNamespacePath (Transact-SQL) functie kan worden gebruikt om in-place, gedeeltelijke updates voor de FILESTREAM-inhoud te maken. Dit gedrag verschilt van de transacted FILESTREAM-toegang via een ingang die is verkregen door OpenSQLFILESTREAM() aan te roepen en een expliciete transactiecontext door te geven.

Transactionele semantiek

Wanneer u de bestanden in een FileTable opent met behulp van I/O-API's voor bestanden, zijn deze bewerkingen niet gekoppeld aan gebruikerstransacties en hebben de volgende aanvullende kenmerken:

  • Omdat niet-transactede toegang tot FILESTREAM-gegevens in een FileTable niet is gekoppeld aan een transactie, heeft deze geen specifieke isolatiesemantiek. SQL Server kan echter gebruikmaken van interne transacties om semantiek voor vergrendeling of gelijktijdigheid af te dwingen op de FileTable-gegevens. Interne transacties van dit type worden uitgevoerd met gelezen-gecommitteerde isolatie.

  • Er zijn geen ACID-garanties voor deze niet-transactie bewerkingen op FILESTREAM-gegevens. De consistentiegaranties zijn vergelijkbaar met die voor bestandsupdates die worden uitgevoerd door toepassingen in het bestandssysteem.

  • Deze wijzigingen kunnen niet worden teruggedraaid.

De kolom FILESTREAM in een FileTable kan echter ook worden geopend met transactionele FILESTREAM-toegang door OpenSqlFileStream()aan te roepen. Dit soort toegang kan volledig transactioneel zijn en zal consistent alle transactionele niveaus respecteren die momenteel worden ondersteund.

Gelijktijdigheidsbeheer

SQL Server dwingt gelijktijdigheidsbeheer af voor FileTable-toegang tussen bestandssysteemtoepassingen en tussen bestandssysteemtoepassingen en Transact-SQL toepassingen. Dit gelijktijdigheidsbeheer wordt bereikt door de juiste vergrendelingen op de rijen van de FileTable toe te passen.

Triggers

Het maken, wijzigen of verwijderen van bestanden of mappen of hun kenmerken via het bestandssysteem resulteert in bijbehorende invoeg-, update- of verwijderbewerkingen in de FileTable. Alle gekoppelde Transact-SQL DML-triggers worden geactiveerd als onderdeel van deze bewerkingen.

Bestandssysteemfunctionaliteit ondersteund in FileTables

Vermogen Ondersteund Opmerkingen
Oplocks Ja Er is ondersteuning voor oplocks op niveau 2, niveau 1, batch en filter.
uitgebreide kenmerken Nee
reparsepunten Nee
permanente ACL's Nee
Benoemde Streams Nee
Sparse bestanden Ja Sparseness kan alleen worden ingesteld op bestanden en is van invloed op de opslag van de gegevensstroom. Omdat FILESTREAM-gegevens worden opgeslagen op NTFS-volumes, ondersteunt de functie FileTable sparse-bestanden door de aanvragen door te sturen naar het NTFS-bestandssysteem.
Compressie Ja
versleuteling Ja
TxF Nee
bestands-ids Nee
Object-ID's Nee
Symbolische koppelingen Nee
vaste koppelingen Nee
korte namen Nee
meldingen voor adreslijstwijziging Nee
bytebereikvergrendeling Ja Aanvragen voor bytebereikvergrendeling worden doorgegeven aan het NTFS-bestandssysteem.
geheugengekoppelde bestanden Nee
Annuleer I/O Ja
Beveiliging Nee Beveiliging op Windows-shareniveau en SQL Server-tabel en beveiliging op kolomniveau worden afgedwongen.
USN-logboek Nee Metagegevenswijzigingen in bestanden en mappen in een FileTable zijn DML-bewerkingen in een SQL Server-database. Daarom worden ze geregistreerd in het bijbehorende databaselogboekbestand. Ze worden echter niet geregistreerd in het NTFS USN-logboek (met uitzondering van wijzigingen in grootte).

Sql Server-mogelijkheden voor het bijhouden van wijzigingen kunnen worden gebruikt om vergelijkbare informatie vast te leggen.

Zie ook

Bestanden laden in FileTables
werken met mappen en paden in FileTables
Access FileTables met Transact-SQL-
FileTable DDL, Functies, Opgeslagen procedures en weergaven