Compatibilità di FileTable con altre funzionalità di SQL ServerFileTable Compatibility with Other SQL Server Features

Viene descritto il funzionamento delle tabelle FileTable con altre funzionalità di SQL ServerSQL Server.Describes how FileTables work with other features of SQL ServerSQL Server.

Gruppi di disponibilità AlwaysOn e tabelle FileTable AlwaysOn Availability Groups and FileTables

Quando il database che contiene dati FILESTREAM o FileTable appartiene a un gruppo di disponibilità AlwaysOn:When the database that contains FILESTREAM or FileTable data belongs to an AlwaysOn availability group:

  • La funzionalità FileTable è supportata parzialmente dai Gruppi di disponibilità Always OnAlways On availability groups.FileTable functionality is partially supported by Gruppi di disponibilità Always OnAlways On availability groups. Dopo un failover, i dati FileTable sono accessibili nella replica primaria, ma non nelle repliche secondarie leggibili.After a failover, FileTable data is accessible on the primary replica, but FileTable data is not accessible on readable secondary replicas.

    NOTA: si noti che dopo un failover, tutte le funzionalità FILESTREAM sono supportate.NOTE: Notice that after a failover all FILESTREAM functionality is supported. I dati FILESTREAM sono accessibili sia nelle repliche secondarie leggibili sia nella nuova primaria.FILESTREAM data is accessible on both readable secondary replicas and on the new primary.

  • Le funzioni FILESTREAM e FileTable accettano o restituiscono nomi di rete virtuale anziché nomi computer.The FILESTREAM and FileTable functions accept or return virtual network names (VNNs) instead of computer names. Per altre informazioni su queste funzioni, vedere Funzioni FileStream e FileTable (Transact-SQL).For more information about these functions, see Filestream and FileTable Functions (Transact-SQL).

  • Ogni accesso a dati FILESTREAM o FileTable tramite le API del file system deve utilizzare VNN anziché nomi computer.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).

Partizionamento e tabelle FileTable Partitioning and FileTables

Il partizionamento non è supportato nelle tabelle FileTable.Partitioning is not supported on FileTables. Con il supporto per più filegroup FILESTREAM, è possibile gestire i problemi di scalabilità verticale puri senza dovere ricorrere al partizionamento nella maggior parte degli scenari (a differenza di FILESTREAM SQL 2008).With the support for multiple FILESTREAM file groups, pure scale-up issues can be handled without having to resort to partitioning in most scenarios (unlike SQL 2008 FILESTREAMs).

Replica e tabelle FileTable Replication and FileTables

La replica e le funzionalità correlate, quali replica transazionale, replica di tipo merge, Change Data Capture e rilevamento delle modifiche, non sono supportate con le tabelle FileTable.Replication and related features (including transactional replication, merge replication, change data capture, and change tracking) are not supported with FileTables.

Semantica delle transazioni e tabelle FileTable Transaction Semantics and FileTables

applicazioni WindowsWindows applications
Poiché le applicazioni di Windows non riconoscono le transazioni di database, le operazioni di scrittura di Windows non forniscono le proprietà ACID di una transazione di database.Windows applications do not understand database transactions, so Windows write operations do not provide the ACID properties of a database transaction. I rollback transazionali e il recupero, pertanto, non sono possibili con operazioni di aggiornamento di Windows.Therefore transactional rollbacks and recovery are not possible with Windows update operations.

Applicazioni Transact-SQLTransact-SQL applications
Per le applicazioni TSQL eseguite nella colonna FILESTREAM (file_stream) in una tabella FileTable, la semantica dell'isolamento è la stessa utilizzata con il tipo di dati FILESTREAM in una normale tabella utente.For TSQL applications working on the FILESTREAM (file_stream) column in a FileTable, the isolation semantics are the same as with FILESTREAM datatype in a regular user table.

Notifica delle query e tabelle FileTable Query Notifications and FileTables

La query non può contenere un riferimento alla colonna FILESTREAM nella tabella FileTable, nella clausola WHERE o in qualunque altra parte della query.The query cannot contain reference to the FILESTREAM column in the FileTable, in the WHERE clause or any other part of the query.

SELECT INTO e tabelle FileTable SELECT INTO and FileTables

le istruzioni SELECT INTO da una tabella FileTable non propagheranno la semantica della tabella FileTable nella tabella di destinazione creata (come le colonne FILESTREAM in una normale tabella).SELECT INTO statements from a FileTable will not propagate the FileTable semantics on the created destination table (just like FILESTREAM columns in a regular table). Tutte le colonne della tabella di destinazione si comporteranno proprio come normali colonne.All the destination table columns will behave just like normal columns. A tali colonne non sarà associata alcuna semantica della tabella FileTable.They will not have any FileTable semantics associated with them.

Trigger e tabelle FileTable Triggers and FileTables

Trigger DDL (Data Definition Language)DDL (Data Definition Language) Triggers
Non vi sono considerazioni speciali relative ai trigger DDL con tabelle FileTable.There are no special considerations for DDL triggers with FileTables. Verranno attivati normali trigger DDL per operazioni di creazione/modifica del database, nonché per operazioni CREATE/ALTER TABLE per le tabelle FileTable.Normal DDL triggers will fire for Create/Alter database operations as well as CREATE/ALTER TABLE operations for FileTables. I trigger possono recuperare i dati evento effettivi, che includono il testo del comando DDL e altre informazioni, chiamando la funzione EVENTDATA().Triggers can retrieve the actual event data that includes the DDL command text and other information by calling the EVENTDATA() function. Non vi sono nuovi eventi o modifiche per lo schema Eventdata esistente.There are no new events or changes to the existing Eventdata schema.

Trigger DML (Data Manipulation Language)DML (Data Manipulation Language) Triggers
Queste restrizioni verranno applicate durante l'operazione DDL per creare trigger.These restrictions will be enforced during the DDL operation to create triggers.

  • Le tabelle FileTable NON supporteranno trigger INSTEAD OF per operazioni DML.FileTables will NOT support INSTEAD OF triggers for DML operations. Si tratta di una restrizione esistente per tutte le tabelle che contengono colonne FILESTREAM.This is an existing restriction on all tables that contain FILESTREAM columns.

  • Le tabelle FileTable NON supporteranno trigger AFTER per operazioni DML.FileTables will support AFTER triggers for DML operations.

  • I trigger definiti in una tabella FileTable non sono in grado di aggiornare alcuna tabella FileTable (inclusa la tabella FileTable padre).Triggers defined on a FileTable cannot update any FileTables (including the parent FileTable). Questa restrizione ha come principale obiettivo di impedire che un trigger crei un conflitto di blocco con i blocchi controllati dall'accesso al file system nella stessa transazione.This restriction exists mainly to prevent a trigger from getting into locking conflicts with the locks held by the file system access in the same transaction.

    Accesso non transazionale e relativi effetti sui triggerNon-transactional access and its effects on triggers

    • Quando in un database è consentito l'accesso non transazionale per l'aggiornamento, è possibile eseguire un aggiornamento sul posto dei dati FILESTREAM in qualsiasi tabella, inclusa la tabella FileTable del database.When non-transactional update access is allowed in a database, it is possible to do in-place update of the FILESTREAM data in any table, including FileTable in that database. Grazie a questa possibilità, l'immagine precedente del contenuto di FILESTREAM potrebbe non essere disponibile per l'utilizzo da parte del trigger.Due to this possibility, the before image of the FILESTREAM contents may not be available for use by the trigger.
  • Per operazioni di aggiornamento non transazionali tramite file system, in SQL Server verrà creata una transazione interna per acquisire l'operazione CloseHandle e sarà possibile attivare qualsiasi trigger DML definito come parte di tale transazione.For non-transactional update operations through File system, SQL Server will create an internal transaction to capture the CloseHandle operation and the any defined DML triggers may be fired as part of that transaction. Benché non impedito, un rollback, ad esempio una transazione all'interno del corpo del trigger, non consente di eseguire il rollback delle modifiche apportate a FILESTREAM.A rollback such a transaction inside the trigger body, while not prevented, does not roll back the changes done to the FILESTREAM. Tale operazione di rollback può inoltre impedire l'attivazione dei trigger UPDATE, anche qualora il contenuto di FILESTREAM sia stato modificato.Such a rollback may also prevent the Update triggers from being fired, even though the FILESTREAM contents may have been changed.

  • Oltre a questi effetti, per i trigger nelle tabelle FileTable è necessario gestire altri due comportamenti:In addition to these impacts, triggers on FileTables need to deal with couple of additional behaviors

    • In caso di operazioni di aggiornamento non transazionali nella tabella FileTable tramite il file system, è possibile che il contenuto di FILESTREAM venga bloccato in modo esclusivo da altre operazioni Win32 e non sia accessibile per operazioni di lettura/scrittura tramite il corpo del trigger.In case of non-transactional update operations on FileTable through the File system, it is possible that the FILESTREAM contents may be exclusively locked by other Win32 operations and may not be accessible for read/write through the trigger body. In tali casi, qualsiasi tentativo di accedere al contenuto di FILESTREAM all'interno del corpo del trigger può generare un errore di violazione della condivisione.In such cases, any attempt to access the FILESTREAM contents within the trigger body may give a “Sharing Violation” error. È opportuno progettare i trigger in modo che siano in grado di gestire tali errori in modo appropriato.Triggers should be designed to handle such errors appropriately.

    • L'immagine AFTER di FILESTREAM può non essere stabile, perché in alcuni casi può essere contemporaneamente soggetta a scrittura da parte di altri aggiornamenti non transazionali, a causa delle modalità di condivisione consentite nell'accesso al file system.AFTER image of the FILESTREAM may not be stable since in some cases it may be actively being written by other non-transactional updates at the same time (due to the sharing modes permitted in the File system access).

  • L'arresto anomalo di handle Win32, ad esempio la terminazione esplicita di handle Win32 effettuata da un amministratore OPPURE a causa di un arresto del database, provocherà la mancata esecuzione dei trigger utente durante le operazioni di recupero, anche qualora il contenuto di FILESTREAM sia stato modificato dall'applicazione Win32 arrestata in modo anomalo.Abnormal termination of Win32 handles, like explicit killing of Win32 handles by an admin OR a database crash, will not execute user triggers during the recovery operations, even though the FILESTREAM content may have been changed by the abnormally terminated Win32 application.

Viste e tabelle FileTable Views and FileTables

VisteViews
È possibile creare una vista in una tabella FileTable come in qualsiasi altra tabella.A view can be created on a FileTable as on any other table. A una vista creata in una tabella FileTable, tuttavia, si applicano le considerazioni seguenti:However the following considerations apply to a view created on a FileTable:

  • Nella vista non sarà disponibile alcuna semantica FileTable,View will not have any FileTable semantics. ad esempio il comportamento delle colonne nella vista, incluse le colonne degli attributi dei file, sarà quello di normali colonne della vista senza alcuna semantica speciale. Lo stesso vale per le righe che rappresentano file/directory.i.e. the columns in the view (including File Attribute columns) behave just like normal view columns without any special semantics and same is true for rows representing Files/directories.

  • È possibile che la vista sia aggiornabile in base alla semantica relativa alle viste aggiornabili, ma i vincoli di tabella sottostanti possono rifiutare gli aggiornamenti come nella tabella.View may be updateable based on the “updateable view” semantics, but the underlying table constraints can reject the updates just like in the table.

  • È possibile visualizzare il percorso per un file nella vista aggiungendolo come colonna esplicita nella vista.File path for a file can be visualized in the view by adding it as an explicit column in the view. Esempio:For example:

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

    Viste indicizzateIndexed Views
    Attualmente le viste indicizzate non possono includere colonne FILESTREAM o colonne calcolate/calcolate persistenti che dipendono dalle colonne FILESTREAM.Currently Indexed views cannot include FILESTREAM columns or computed/persisted computed columns that depend on the FILESTREAM columns. Questo comportamento è lo stesso anche per le viste definite nella tabella FileTable.This behavior remains unchanged with views defined on the FileTable also.

Isolamento dello snapshot e tabelle FileTable Snapshot Isolation and FileTables

L'isolamento dello snapshot e l'isolamento dello snapshot Read Committed si basano sulla possibilità di disporre di uno snapshot dei dati per i lettori, anche quando vengono eseguite operazioni di aggiornamento sui dati.Read Committed Snapshot Isolation (RCSI) and Snapshot Isolation (SI) rely on the ability to have a snapshot of the data available for readers even when update operations are happening on the data. Le tabelle FileTable, tuttavia, consentono l'accesso in scrittura non transazionale ai dati FILESTREAM.However FileTables allow non-transactional write access to Filestream data. Di conseguenza, sussistono le restrizioni seguenti per l'utilizzo di queste funzionalità in database che contengono tabelle FileTable:As a result, the following restrictions apply to the use of these features in databases that contain FileTables:

  • Un database che contiene tabelle FileTable può essere modificato per abilitare l'isolamento dello snapshot e/o l'isolamento dello snapshot Read Committed.A database that contains FileTables can be altered to enable RCSI/SI.

  • Quando l'accesso non transazionale è impostato su FULL per il database, una transazione eseguita in isolamento dello snapshot o isolamento dello snapshot Read Committed ha il comportamento seguente:When non_transactional access is set to FULL for the database, then a transaction running under RCSI or SI has the following behavior:

    • Non viene completata alcuna lettura Transact-SQLTransact-SQL della colonna file_stream della tabella FileTable.Any Transact-SQLTransact-SQL reads of the FileTable file_stream column fail. È comunque possibile eseguire operazioni INSERT e UPDATE nella colonna, ma solo se la lettura non viene effettuata dalla colonna file_stream.INSERT and UPDATE to the column still succeed, as long as they do not read from the file_stream column.

    • Se l'istruzione Transact-SQLTransact-SQL specifica hint di tabella READCOMMITTEDLOCK, le letture vengono completate e consentiranno l'utilizzo di blocchi sulle righe anziché l'utilizzo del controllo delle versioni delle righe.If the Transact-SQLTransact-SQL statement specifies READCOMMITTEDLOCK table hints, the reads succeed, and take locks on the rows, rather than use row versioning.

    • Anche l'apertura transazionale della tabella FileTable Win32 non verrà completata.Transacted Win32 FileStream open requests also fail.

    • L'accesso Win32 non in transazioni alla tabella FileTable viene effettuato correttamente.Non-transacted FileTable Win32 access succeeds. Tutte le query interne eseguite dalla tabella FileTable non saranno interessate.All internal queries done by FileTable are not affected.

    • L'indicizzazione full-text viene sempre completata, indipendentemente dalle opzioni di database (READ_COMMITTED_SNAPSHOT o ALLOW_SNAPSHOT_ISOLATION).Fulltext indexing always succeeds, no matter what the database options are (READ_COMMITTED_SNAPSHOT or ALLOW_SNAPSHOT_ISOLATION).

Database secondari leggibili Readable Secondary Databases

Ai database secondari leggibili si applicano le stesse considerazioni degli snapshot, come descritto nella sezione precedente, Isolamento dello snapshot e tabelle FileTable.The same considerations apply to readable secondary databases as to snapshots, as described in the preceding section, Snapshot Isolation and FileTables.

Database indipendenti e tabelle FileTable Contained Databases and FileTables

La funzionalità FILESTREAM da cui dipende la funzionalità FileTable richiede alcuni interventi di configurazione all'esterno del database.The FILESTREAM feature on which the FileTable feature depends requires some configuration outside of the database. Pertanto un database in cui si utilizza FILESTREAM o FileTable non è completamente indipendente.Therefore a database that uses FILESTREAM or FileTable is not fully contained.

È possibile impostare l'indipendenza del database su PARTIAL se si desidera utilizzare alcune funzionalità dei database indipendenti, ad esempio gli utenti indipendenti.You can set database containment to PARTIAL if you want to use certain features of contained databases, such as contained users. In tal caso, tuttavia, è necessario tenere presente che alcune impostazioni del database non sono contenute nel database e non vengono spostate automaticamente quando viene spostato il database.In this case, however, you must be aware that some of the database settings are not contained in the database and are not automatically moved when the database moves.

Vedere ancheSee Also

Gestione di tabelle FileTableManage FileTables