Accedere alle tabelle FileTable con API di I\O dei file
Viene descritto il funzionamento dell'I/O del file system in una tabella FileTable.
Contenuto dell'argomento
Per
Iniziare a utilizzare le API di I/O dei file con tabelle FileTable
Creare file e directory in una tabella FileTable
Leggere file e directory in una tabella FileTable
Aggiornare file e directory in una tabella FileTable
Eliminare file e directory in una tabella FileTable
Ulteriori informazioni
Operazioni del file system supportate
Considerazioni aggiuntive relative all'accesso di I/O dei file in tabelle FileTable
Utilizzo di nomi di rete virtuale con i gruppi di disponibilità AlwaysOn
Aggiornamenti parziali
Semantica transazionale
Controllo della concorrenza
Trigger
Funzionalità del file system supportate nelle tabelle FileTable
Iniziare a utilizzare le API di I/O dei file con tabelle FileTable
L'utilizzo principale delle tabelle FileTable avviene tramite il file system di Windows e l'API di I/O dei file. Le tabelle FileTable supportano l'accesso non transazionale tramite la vasta gamma di API di I/O dei file disponibili.
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. Le applicazioni possono utilizzare un'istruzione Transact-SQL con la funzione GetFileNamespacePath (Transact-SQL) per ottenere il percorso logico per il file o la directory. Per ulteriori informazioni, vedere Utilizzare directory e percorsi in FileTable.
Nell'applicazione viene utilizzato quindi questo percorso logico per ottenere un handle al file o alla directory ed eseguire un'operazione sull'oggetto. 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. 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.
[TORNA ALL'INIZIO]
Creazione di file e directory in una tabella FileTable
È possibile creare un file o una directory in una tabella FileTable chiamando un'API di I/O dei file quale CreateFile o CreateDirectory.
Sono supportati tutti i flag di creazione di disposizioni e tutte le modalità di condivisione e di accesso. Sono incluse la creazione, l'eliminazione e la modifica sul posto dei file. Sono inoltre supportati gli aggiornamenti dello spazio dei nomi File, ovvero la creazione, l'eliminazione, la ridenominazione di directory e operazioni di spostamento.
La creazione di un nuovo file o di una nuova directory corrisponde alla creazione di una nuova riga nella tabella FileTable sottostante.
Per i file, i dati del flusso vengono archiviati nella colonna file_stream, mentre questa colonna è Null per le directory.
Per i file la colonna is_directory contiene false. Per le directory questa colonna contiene true.
La condivisione e la concorrenza dell'accesso vengono applicate quando più operazioni di I/O di file simultanee o operazioni Transact-SQL influiscono sullo stesso file o sulla stessa directory della gerarchia.
[TORNA ALL'INIZIO]
Lettura di file e directory in una tabella FileTable
La semantica dell'isolamento Read Committed viene applicata in SQL Server per tutte le operazioni di accesso I/O dei file sui dati del flusso e degli attributi.
[TORNA ALL'INIZIO]
Scrittura e aggiornamento di file e directory in una tabella FileTable
Tutte le operazioni di scrittura o aggiornamento I/O di file su tabelle FileTable non sono transazionali. Ciò significa che a queste operazioni non è associata alcuna transazione SQL Server e che non vi sono garanzie ACID.
Tutti gli aggiornamenti sul posto o del flusso di I/O dei file sono supportati per la tabella 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.
[TORNA ALL'INIZIO]
Eliminazione di file e directory in una tabella FileTable
Tutta la semantica delle API di I/O dei file di Windows viene applicata quando si elimina un file o una directory.
L'eliminazione di una directory non riesce se la directory contiene sottodirectory di file.
L'eliminazione di un file o di una directory comporta la rimozione della riga corrispondente dalla tabella FileTable. Questa operazione equivale a eliminare la riga tramite un'operazione Transact-SQL.
[TORNA ALL'INIZIO]
Operazioni del file system supportate
Le tabelle FileTable supportano le API del file system correlate alle operazioni del file system seguenti:
Gestione delle directory
Gestione dei file
Le tabelle FileTable non supportano le operazioni seguenti:
Gestione del disco
Gestione dei volumi
NTFS transazionale
[TORNA ALL'INIZIO]
Considerazioni aggiuntive relative all'accesso di I/O dei file in tabelle FileTable
Utilizzo di nomi di rete virtuale con i gruppi di disponibilità AlwaysOn
Quando il database che contiene dati FILESTREAM o FileTable appartiene a un gruppo di disponibilità AlwaysOn, quindi ogni accesso a dati FILESTREAM o FileTable tramite le API del file system deve utilizzare VNN anziché nomi computer. Per ulteriori informazioni, vedere FILESTREAM e FileTable con i gruppi di disponibilità AlwaysOn (SQL Server).
Aggiornamenti parziali
Per eseguire aggiornamenti sul posto parziali del contenuto FILESTREAM è possibile utilizzare un handle scrivibile ottenuto per i dati FILESTREAM in una tabella FileTable tramite la funzione GetFileNamespacePath (Transact-SQL). Questo comportamento è diverso dall'accesso transazionale di FILESTREAM tramite un handle ottenuto chiamando OpenSQLFILESTREAM() e passando un contesto della transazione esplicito.
[TORNA ALL'INIZIO]
Semantica transazionale
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:
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. Tuttavia è possibile che SQL Server utilizzi transazioni interne per applicare la semantica di blocco o di concorrenza sui dati della tabella FileTable. Qualsiasi transazione interna di questo tipo viene eseguita con l'isolamento Read Committed.
Non vi sono garanzie ACID per queste operazioni non in transazioni su dati FILESTREAM. Le garanzie di coerenza sono simili a quelle per gli aggiornamenti dei file eseguiti dalle applicazioni del file system.
Il rollback di tali modifiche non è possibile.
È tuttavia possibile accedere alla colonna FILESTREAM in una tabella FileTable anche con l'accesso FILESTREAM transazionale chiamando OpenSqlFileStream(). Questo tipo di accesso può essere completamente transazionale e soddisferà tutti i livelli di coerenza delle transazioni attualmente supportati.
[TORNA ALL'INIZIO]
Controllo della concorrenza
SQL 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-SQL. Questo controllo della concorrenza viene effettuato applicando blocchi appropriati nelle righe della tabella FileTable.
[TORNA ALL'INIZIO]
Trigger
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. Tutti i trigger DML Transact-SQL associati vengono attivati come parte di tali operazioni.
[TORNA ALL'INIZIO]
Funzionalità del file system supportate nelle tabelle FileTable
Funzionalità |
Supporto |
Commenti |
---|---|---|
Blocchi opportunistici (oplock) |
Sì |
È disponibile il supporto opportunistico per livello 1, livello 2, batch e filtri. |
Attributi estesi |
No |
|
Punti di analisi |
No |
|
ACL persistenti |
No |
|
Flussi denominati |
No |
|
File sparse |
Sì |
Il tipo sparse può essere impostato solo per i file e influisce sull'archiviazione del flusso dei dati. Poiché i dati FILESTREAM vengono archiviati in volumi NTFS, la funzionalità FileTable supporta file sparse inoltrando le richieste al file system NTFS. |
Compressione |
Sì |
|
Crittografia |
Sì |
|
TxF |
No |
|
ID file |
No |
|
ID oggetto |
No |
|
Collegamenti simbolici |
No |
|
Collegamenti reali |
No |
|
Nomi brevi |
No |
|
Notifiche di modifica di directory |
No |
|
Blocco di intervalli di byte |
Sì |
Le richieste del blocco degli intervalli di byte vengono passate al file system NTFS. |
File di cui è stato eseguito il mapping in memoria |
No |
|
Annullamento I/O |
Sì |
|
Sicurezza |
No |
Vengono applicate la sicurezza a livello di condivisione di Windows e la sicurezza a livello di tabella e di colonna di SQL Server. |
Journal USN |
No |
Le modifiche ai metadati di file e directory in una tabella FileTable sono operazioni DML in un database di SQL Server. Vengono pertanto registrate nel file di log del database corrispondente. Non vengono invece registrate nel journal USN NTFS, ad eccezione delle modifiche di dimensione. È possibile utilizzare le funzionalità di rilevamento delle modifiche di SQL Server per acquisire informazioni simili. |
[TORNA ALL'INIZIO]
Vedere anche
Concetti
Caricamento di file in FileTable
Utilizzare directory e percorsi in FileTable