Accedere alle tabelle FileTable con API di Input-Output dei fileAccess FileTables with File Input-Output APIs

Viene descritto il funzionamento dell'I/O del file system in una tabella FileTable.Describes how file system I/O works on a FileTable.

Iniziare a utilizzare le API di I/O dei file con tabelle FileTable Get Started Using File I/O APIs with FileTables

L'utilizzo principale delle tabelle FileTable avviene tramite il file system di Windows e l'API di I/O dei file.The primary usage of FileTables is expected to be through the Windows file system and file I/O APIs. Le tabelle FileTable supportano l'accesso non transazionale tramite la vasta gamma di API di I/O dei file disponibili.FileTables support non-transactional access through the rich set of available file I/O APIs.

  1. L'accesso dell'API di l'I/O dei file inizia in genere con l'acquisizione di un percorso UNC logico per il file o la directory.File I/O API access typically begins by acquiring a logical UNC path for the file or directory. Le applicazioni possono usare un'istruzione Transact-SQLTransact-SQL con la funzione GetFileNamespacePath (Transact-SQL) per ottenere il percorso logico per il file o la directory.Applications can use a Transact-SQLTransact-SQL statement with the GetFileNamespacePath (Transact-SQL) function to obtain the logical path for the file or directory. Per altre informazioni, vedere Work with Directories and Paths in FileTables.For more information, see Work with Directories and Paths in FileTables.

  2. Nell'applicazione viene utilizzato quindi questo percorso logico per ottenere un handle al file o alla directory ed eseguire un'operazione sull'oggetto.Then the application uses this logical path to obtain a handle to the file or directory and do something with the object. Il percorso può essere passato a qualsiasi funzione dell'API del file system supportata, ad esempio CreateFile() o CreateDirectory() per creare o aprire un file e ottenere un handle.The path can be passed to any supported file system API function, such as CreateFile() or CreateDirectory(), to create or open a file and obtain a handle. L'handle può essere quindi utilizzato per trasmettere dati, enumerare o organizzare directory, ottenere o impostare attributi di file, eliminare file o directory e così via.The handle can then be used to stream data, to enumerate or organize directories, to get or set file attributes, to delete files or directories, and so forth.

Creazione di file e directory in una tabella FileTable Creating Files and Directories in a FileTable

È possibile creare un file o una directory in una tabella FileTable chiamando un'API di I/O dei file quale CreateFile o CreateDirectory.A file or directory can be created in a FileTable by calling file I/O APIs such as CreateFile or CreateDirectory.

  • Sono supportati tutti i flag di creazione di disposizioni e tutte le modalità di condivisione e di accesso.All creation disposition flags, share modes, and access modes are supported. Sono incluse la creazione, l'eliminazione e la modifica sul posto dei file.This includes file creation, deletion and in-place modification. Sono supportati anche gli aggiornamenti dello spazio dei nomi dei file, ad esempio le operazioni di creazione o eliminazione, ridenominazione e spostamento di directory.Also supported are File Namespace updates i.e. directory creation/deletion, rename and move operations.

  • La creazione di un nuovo file o di una nuova directory corrisponde alla creazione di una nuova riga nella tabella FileTable sottostante.The creation of a new file or directory corresponds to the creation of a new row in the underlying FileTable.

  • Per i file, i dati del flusso vengono archiviati nella colonna file_stream , mentre questa colonna è Null per le directory.For files, the stream data is stored in the file_stream column; for directories, this column is null.

  • Per i file la colonna is_directory contiene false.For files, the is_directory column contains false. Per le directory questa colonna contiene true.For directories, this column contains true.

  • La condivisione e la concorrenza dell'accesso vengono applicate quando più operazioni di I/O di file simultanee o operazioni Transact-SQLTransact-SQL influiscono sullo stesso file o sulla stessa directory della gerarchia.Sharing and concurrency of access are enforced when multiple concurrent file I/O operations or Transact-SQLTransact-SQL operations affect the same file or directory in the hierarchy.

Lettura di file e directory in una tabella FileTable Reading Files and Directories in a FileTable

La semantica dell'isolamento Read Committed viene applicata in SQL ServerSQL Server per tutte le operazioni di accesso I/O dei file sui dati del flusso e degli attributi.Read Committed isolation semantics are enforced in SQL ServerSQL Server for all file I/O access operations on stream and attribute data.

Scrittura e aggiornamento di file e directory in una tabella FileTable Writing and Updating Files and Directories in a FileTable

  • Tutte le operazioni di scrittura o aggiornamento I/O di file su tabelle FileTable non sono transazionali.All file I/O write or update operations on a FileTable are non-transactional. Ciò significa che a queste operazioni non è associata alcuna transazione SQL ServerSQL Server e che non vi sono garanzie ACID.That is, no SQL ServerSQL Server transaction is bound to these operations, and no ACID guarantees are provided.

  • Tutti gli aggiornamenti sul posto o del flusso di I/O dei file sono supportati per la tabella FileTable.All file I/O streaming/in-place updates are supported for the FileTable.

  • Gli aggiornamenti di dati o di attributi FILESTREAM tramite API di I/O dei file comportano l'aggiornamento delle colonne file_stream e degli attributi dei file corrispondenti nella tabella FileTable.Updates to the FILESTREAM data or attributes through file I/O APIs result in updates of the corresponding file_stream and file attribute columns in the FileTable.

Eliminazione di file e directory in una tabella FileTable Deleting Files and Directories in a FileTable

Tutta la semantica delle API di I/O dei file di Windows viene applicata quando si elimina un file o una directory.All Windows file I/O API semantics are enforced when you delete a file or directory.

  • L'eliminazione di una directory non riesce se la directory contiene sottodirectory di file.Deleting a directory fails if the directory contains any files subdirectories.

  • L'eliminazione di un file o di una directory comporta la rimozione della riga corrispondente dalla tabella FileTable.Deleting a file or directory removes the corresponding row from the FileTable. Questa operazione equivale a eliminare la riga tramite un'operazione Transact-SQLTransact-SQL .This is equivalent to deleting the row through a Transact-SQLTransact-SQL operation.

Operazioni del file system supportate Supported File System Operations

Le tabelle FileTable supportano le API del file system correlate alle operazioni del file system seguenti:FileTables support the file system APIs related to the following file system operations:

  • Gestione delle directoryDirectory Management

  • Gestione dei fileFile Management

    Le tabelle FileTable non supportano le operazioni seguenti:FileTables do not support the following operations:

  • Gestione del discoDisk Management

  • Gestione dei volumiVolume Management

  • NTFS transazionaleTransactional NTFS

Considerazioni aggiuntive relative all'accesso di I/O dei file in tabelle FileTable Additional Considerations for File I/O Access to FileTables

Utilizzo di nomi di rete virtuale con gruppi di disponibilità AlwaysOn Using Virtual Network Names (VNNs) with Always On Availability Groups

Quando il database che contiene dati FILESTREAM o FileTable appartiene a un gruppo di disponibilità AlwaysOn, ogni accesso a dati FILESTREAM o FileTable tramite le API del file system deve usare VNN anziché nomi di computer.When the database that contains FILESTREAM or FileTable data belongs to an Always On availability group, then all access to FILESTREAM or FileTable data through the file system APIs should use VNNs instead of computer names. Per altre informazioni, vedere FILESTREAM e FileTable con i gruppi di disponibilità AlwaysOn (SQL Server).For more information, see FILESTREAM and FileTable with Always On Availability Groups (SQL Server).

Aggiornamenti parziali Partial Updates

Per eseguire aggiornamenti sul posto parziali del contenuto FILESTREAM è possibile usare un handle scrivibile ottenuto per i dati FILESTREAM in una tabella FileTable tramite la funzione GetFileNamespacePath (Transact-SQL).A writable handle obtained for FILESTREAM data in a FileTable by using the GetFileNamespacePath (Transact-SQL) function can be used to make in-place, partial updates to the FILESTREAM content. Questo comportamento è diverso dall'accesso transazionale di FILESTREAM tramite un handle ottenuto chiamando OpenSQLFILESTREAM() e passando un contesto della transazione esplicito.This behavior is different from the transacted FILESTREAM access through a handle obtained by calling OpenSQLFILESTREAM() and passing an explicit transaction context.

Semantica transazionale Transactional Semantics

Quando si accede ai file di una tabella FileTable tramite le API di I/O dei file, queste operazioni non sono associate ad alcuna transazione utente e dispongono delle funzionalità aggiuntive seguenti:When you access the files in a FileTable by using file I/O APIs, these operations are not associated with any user transactions, and have the following additional characteristics:

  • Poiché l'accesso non in transazioni a dati FILESTREAM in una tabella FileTable non è associato ad alcuna transazione, non dispone di alcuna semantica di isolamento specifica.Since non-transacted access to FILESTREAM data in a FileTable is not associated with any transaction, it does not have any specific isolation semantics. Tuttavia è possibile che SQL ServerSQL Server utilizzi transazioni interne per applicare la semantica di blocco o di concorrenza sui dati della tabella FileTable.However SQL ServerSQL Server may use internal transactions to enforce locking or concurrency semantics on the FileTable data. Qualsiasi transazione interna di questo tipo viene eseguita con l'isolamento Read Committed.Any internal transactions of this type are done with read-committed isolation.

  • Non vi sono garanzie ACID per queste operazioni non in transazioni su dati FILESTREAM.There are no ACID guarantees for these non-transacted operations on FILESTREAM data. Le garanzie di coerenza sono simili a quelle per gli aggiornamenti dei file eseguiti dalle applicazioni del file system.The consistency guarantees are similar to those for file updates made by applications in the file system.

  • Il rollback di tali modifiche non è possibile.These changes cannot be rolled back.

    È tuttavia possibile accedere alla colonna FILESTREAM in una tabella FileTable anche con l'accesso FILESTREAM transazionale chiamando OpenSqlFileStream().However, the FILESTREAM column in a FileTable can also be accessed with transactional FILESTREAM access by calling OpenSqlFileStream(). Questo tipo di accesso può essere completamente transazionale e soddisferà tutti i livelli di coerenza delle transazioni attualmente supportati.This kind of access can be fully transactional and will honor all the levels of transactional consistently that are currently supported.

Controllo della concorrenza Concurrency Control

SQL ServerSQL Server applica il controllo della concorrenza per l'accesso alla tabella FileTable tra applicazioni del file system, nonché tra applicazioni del file system e applicazioni Transact-SQLTransact-SQL . applications. Questo controllo della concorrenza viene effettuato applicando blocchi appropriati nelle righe della tabella FileTable.This concurrency control is achieved by taking appropriate locks on the FileTable rows.

Trigger Triggers

La creazione, la modifica o l'eliminazione di file o directory o dei relativi attributi tramite il file system produce operazioni di inserimento, aggiornamento o eliminazione corrispondenti nella tabella FileTable.Creating, modifying, or deleting files or directories or their attributes through the file system results in corresponding insert, update, or delete operations in the FileTable. Tutti i trigger DML Transact-SQLTransact-SQL associati vengono attivati come parte di tali operazioni.Any associated Transact-SQLTransact-SQL DML triggers are fired as part of these operations.

Funzionalità del file system supportate nelle tabelle FileTable File System Functionality Supported in FileTables

FunzionalitàCapability SupportedSupported CommentiComments
Blocchi opportunistici (oplock)Oplocks Yes È disponibile il supporto opportunistico per livello 1, livello 2, batch e filtri.There is support for Level 2, Level 1, Batch and Filter oplocks.
Attributi estesiExtended Attributes NoNo
Punti di analisiReparse Points NoNo
ACL persistentiPersistent ACLs NoNo
Flussi denominatiNamed Streams NoNo
File sparseSparse Files Yes Il tipo sparse può essere impostato solo per i file e influisce sull'archiviazione del flusso dei dati.Sparseness can be set only on files, and affects the storage of the data stream. Poiché i dati FILESTREAM vengono archiviati in volumi NTFS, la funzionalità FileTable supporta file sparse inoltrando le richieste al file system NTFS.Since FILESTREAM data is stored on NTFS volumes, the FileTable feature supports sparse files by forwarding the requests to the NTFS file system.
CompressioneCompression Yes
CrittografiaEncryptiion Yes
TxFTxF NoNo
ID fileFile Ids NoNo
ID oggettoObject Ids NoNo
Collegamenti simboliciSymbolic links NoNo
Collegamenti realiHard links NoNo
Nomi breviShort names NoNo
Notifiche di modifica di directoryDirectory change notifications NoNo
Blocco di intervalli di byteByte range locking Yes Le richieste del blocco degli intervalli di byte vengono passate al file system NTFS.Requests for byte range locking are passed to the NTFS file system.
File di cui è stato eseguito il mapping in memoriaMemory mapped files NoNo
Annullamento I/OCancel I/O Yes
SicurezzaSecurity NoNo Vengono applicate la sicurezza a livello di condivisione di Windows e la sicurezza a livello di tabella e di colonna di SQL ServerSQL Server .Windows share level security and SQL ServerSQL Server table and column level security are enforced.
Journal USNUSN journal NoNo Le modifiche ai metadati di file e directory in una tabella FileTable sono operazioni DML in un database di SQL ServerSQL Server .Metadata changes to files and directories in a FileTable are DML operations on a SQL ServerSQL Server database. Vengono pertanto registrate nel file di log del database corrispondente.Therefore they are logged in the corresponding database log file. Non vengono invece registrate nel journal USN NTFS, ad eccezione delle modifiche di dimensione.However they are not logged in the NTFS USN journal (except for changes in size).

SQL ServerSQL Server per acquisire informazioni simili. change tracking capabilities can be used to capture similar information.

Vedere ancheSee Also

Caricamento di file in FileTable Load Files into FileTables
Work with Directories and Paths in FileTables Work with Directories and Paths in FileTables
Accesso a tabelle FileTable tramite Transact-SQL Access FileTables with Transact-SQL
DDL FileTable, funzioni, stored Procedure e viste FileTable DDL, Functions, Stored Procedures, and Views