FILESTREAM (SQL Server)FILESTREAM (SQL Server)

FILESTREAM ermöglicht es SQL ServerSQL Server-basierten Anwendungen, nicht strukturierte Daten wie beispielsweise Dokumente und Bilder im Dateisystem zu speichern.FILESTREAM enables SQL ServerSQL Server-based applications to store unstructured data, such as documents and images, on the file system. Anwendungen können die umfassenden Streaming-APIs und die Leistung des Dateisystems nutzen und dabei die Transaktionskonsistenz zwischen den nicht strukturierten Daten und den entsprechenden strukturierten Daten erhalten.Applications can leverage the rich streaming APIs and performance of the file system and at the same time maintain transactional consistency between the unstructured data and corresponding structured data.

FILESTREAM integriert SQL Server-DatenbankmodulSQL Server Database Engine in ein NTFS- oder ReFS-Dateisystem, indem Blobdaten (Binary Large Object) vom Typ varbinary(max) als Dateien im Dateisystem gespeichert werden.FILESTREAM integrates the SQL Server-DatenbankmodulSQL Server Database Engine with an NTFS or ReFS file systems by storing varbinary(max) binary large object (BLOB) data as files on the file system. Transact-SQLTransact-SQL -Anweisungen können FILESTREAM-Daten eingefügt, aktualisiert, abgefragt, gesucht und gesichert werden. statements can insert, update, query, search, and back up FILESTREAM data. Die Win32-Dateisystemschnittstellen stellen Streamingzugriff auf die Daten bereit.Win32 file system interfaces provide streaming access to the data.

FILESTREAM verwendet den NT-Systemcache zum Zwischenspeichern von Dateidaten.FILESTREAM uses the NT system cache for caching file data. Dies wirkt allen negativen Auswirkungen entgegen, die FILESTREAM-Daten auf die DatenbankmodulDatabase Engine -Leistung haben könnten.This helps reduce any effect that FILESTREAM data might have on DatenbankmodulDatabase Engine performance. Der SQL ServerSQL Server -Pufferpool wird nicht verwendet, deshalb steht dieser Arbeitsspeicher für die Abfragebearbeitung zur Verfügung.The SQL ServerSQL Server buffer pool is not used; therefore, this memory is available for query processing.

FILESTREAM wird bei der Installation oder beim Upgrade von SQL ServerSQL Servernicht automatisch aktiviert.FILESTREAM is not automatically enabled when you install or upgrade SQL ServerSQL Server. Sie müssen FILESTREAM mit dem SQL Server-Konfigurations-Manager und SQL Server Management StudioSQL Server Management Studioaktivieren.You must enable FILESTREAM by using SQL Server Configuration Manager and SQL Server Management StudioSQL Server Management Studio. Um FILESTREAM zu verwenden, müssen Sie eine Datenbank mit einer bestimmten Dateigruppe erstellen bzw. ändern, sodass sie diese Dateigruppe enthält.To use FILESTREAM, you must create or modify a database to contain a special type of filegroup. Erstellen bzw. ändern Sie dann eine Tabelle, sodass diese eine varbinary(max) -Spalte mit dem FILESTREAM-Attribut enthält.Then, create or modify a table so that it contains a varbinary(max) column with the FILESTREAM attribute. Anschließend können Sie Transact-SQLTransact-SQL und Win32 zur Verwaltung der FILESTREAM-Daten verwenden.After you complete these tasks, you can use Transact-SQLTransact-SQL and Win32 to manage the FILESTREAM data.

Verwendungsbereiche von FILESTREAMWhen to Use FILESTREAM

In SQL ServerSQL Serverkann es sich bei Blobs um Standarddaten des Typs varbinary(max) handeln, die in Tabellen gespeichert werden, oder um FILESTREAM-Objekte des Typs varbinary(max) , deren Daten im Dateisystem gespeichert werden.In SQL ServerSQL Server, BLOBs can be standard varbinary(max) data that stores the data in tables, or FILESTREAM varbinary(max) objects that store the data in the file system. Größe und Verwendung der Daten bestimmen, ob Sie sie in einer Datenbank oder im Dateisystem speichern sollten.The size and use of the data determines whether you should use database storage or file system storage. Wenn die folgenden Bedingungen zutreffen, sollten Sie die Verwendung von FILESTREAM in Betracht ziehen:If the following conditions are true, you should consider using FILESTREAM:

  • Die Objekte, die gespeichert werden, sind im Durchschnitt größer als 1 MB.Objects that are being stored are, on average, larger than 1 MB.

  • Schneller Lesezugriff ist wichtig.Fast read access is important.

  • Sie entwickeln Anwendungen, die eine mittlere Ebene für die Anwendungslogik nutzen.You are developing applications that use a middle tier for application logic.

    Bei kleineren Objekte ist die Streamingleistung oft besser, wenn varbinary(max) -Blobs in der Datenbank gespeichert werden.For smaller objects, storing varbinary(max) BLOBs in the database often provides better streaming performance.

FILESTREAM-SpeicherungFILESTREAM Storage

Die FILESTREAM-Speicherung wird als varbinary(max) -Spalte implementiert, deren Daten als Blobs im Dateisystem gespeichert werden.FILESTREAM storage is implemented as a varbinary(max) column in which the data is stored as BLOBs in the file system. Die Größe der BLOBs wird nur durch die Volumegröße des Dateisystems beschränkt.The sizes of the BLOBs are limited only by the volume size of the file system. Die für varbinary(max) definierte standardmäßige Dateigrößenbeschränkung von 2 GB gilt nicht für Blobs, die im Dateisystem gespeichert werden.The standard varbinary(max) limitation of 2-GB file sizes does not apply to BLOBs that are stored in the file system.

Um anzugeben, dass die Daten einer Spalte im Dateisystem gespeichert werden sollten, geben Sie das FILESTREAM-Attribut für eine varbinary(max) -Spalte an.To specify that a column should store data on the file system, specify the FILESTREAM attribute on a varbinary(max) column. Dies bewirkt, dass DatenbankmodulDatabase Engine alle Daten der betreffenden Spalte im Dateisystem, aber nicht in der Datenbankdatei speichert.This causes the DatenbankmodulDatabase Engine to store all data for that column on the file system, but not in the database file.

FILESTREAM-Daten müssen in FILESTREAM-Dateigruppen gespeichert werden.FILESTREAM data must be stored in FILESTREAM filegroups. Eine FILESTREAM-Dateigruppe ist eine besondere Dateigruppe, die Dateisystemverzeichnisse statt der Dateien selbst enthält.A FILESTREAM filegroup is a special filegroup that contains file system directories instead of the files themselves. Diese Dateisystemverzeichnisse werden als Datencontainerbezeichnet.These file system directories are called data containers. Datencontainer bilden die Schnittstelle zwischen der DatenbankmodulDatabase Engine -Speicherung und der Dateisystemspeicherung.Data containers are the interface between DatenbankmodulDatabase Engine storage and file system storage.

Bei Verwendung von FILESTREAM sind die folgenden Punkte zu beachten:When you use FILESTREAM storage, consider the following:

  • Wenn eine Tabelle eine FILESTREAM-Spalte enthält, muss jede Zeile über eine eindeutige Zeilen-ID, die nicht NULL ist, verfügen.When a table contains a FILESTREAM column, each row must have a nonnull unique row ID.

  • Einer FILESTREAM-Dateigruppe können mehrere Datencontainer hinzugefügt werden.Multiple data containers can be added to a FILESTREAM filegroup.

  • FILESTREAM-Datencontainer können nicht geschachtelt werden.FILESTREAM data containers cannot be nested.

  • Wenn Sie Failoverclustering verwenden, müssen sich die FILESTREAM-Dateigruppen auf freigegebenen Datenträgerressourcen befinden.When you are using failover clustering, the FILESTREAM filegroups must be on shared disk resources.

  • FILESTREAM-Dateigruppen können auf komprimierten Volumes erstellt werden.FILESTREAM filegroups can be on compressed volumes.

Integrierte VerwaltungIntegrated Management

Weil FILESTREAM als varbinary(max)-Spalte implementiert und direkt in DatenbankmodulDatabase Engineintegriert ist, können die meisten SQL ServerSQL Server -Verwaltungstools und -Funktionen ohne Änderung für FILESTREAM-Daten eingesetzt werden.Because FILESTREAM is implemented as a varbinary(max) column and integrated directly into the DatenbankmodulDatabase Engine, most SQL ServerSQL Server management tools and functions work without modification for FILESTREAM data. Beispielsweise können Sie alle Sicherungs- und Wiederherstellungsmodelle mit FILESTREAM-Daten verwenden, und die FILESTREAM-Daten werden zusammen mit den strukturierten Daten in der Datenbank gesichert.For example, you can use all backup and recovery models with FILESTREAM data, and the FILESTREAM data is backed up with the structured data in the database. Wenn Sie die FILESTREAM-Daten nicht zusammen mit relationalen Daten sichern möchten, können Sie eine Teilsicherung durchführen, um die FILESTREAM-Dateigruppen auszuschließen.If you do not want to back up FILESTREAM data with relational data, you can use a partial backup to exclude FILESTREAM filegroups.

Integrierte SicherheitIntegrated Security

In SQL ServerSQL Serverwerden FILESTREAM-Daten wie alle anderen Daten geschützt: indem Berechtigungen auf der Tabellen- oder Spaltenebene gewährt werden.In SQL ServerSQL Server, FILESTREAM data is secured just like other data is secured: by granting permissions at the table or column levels. Wenn ein Benutzer über Berechtigungen zum Öffnen der FILESTREAM-Spalte einer Tabelle verfügt, dann er die zugehörigen Dateien öffnen.If a user has permission to the FILESTREAM column in a table, the user can open the associated files.

Hinweis

FILESTREAM-Daten können nicht verschlüsselt werden.Encryption is not supported on FILESTREAM data.

Nur das Konto, unter dem das SQL ServerSQL Server -Dienstkonto ausgeführt wird, erhält Berechtigungen für den FILESTREAM-Container.Only the account under which the SQL ServerSQL Server service account runs is granted permissions to the FILESTREAM container. Wir empfehlen, dass keinem anderen Konto Berechtigungen für den Datencontainer gewährt werden.We recommend that no other account be granted permissions on the data container.

Hinweis

SQL-Anmeldungen funktionieren nicht mit FILESTREAM-Containern.SQL logins will not work with FILESTREAM containers. Nur NTFS- oder ReFS-Authentifizierung funktioniert mit FILESTREAM-Containern.Only NTFS or ReFS authentication will work with FILESTREAM containers.

Zugreifen auf BLOB-Daten mit Transact-SQL und Dateisystem-Streamingzugriff Accessing BLOB Data with Transact-SQL and File System Streaming Access

Nachdem Daten in einer FILESTREAM-Spalte gespeichert wurden, können Sie über Transact-SQLTransact-SQL -Transaktionen oder mithilfe von Win32-APIs auf die Dateien zugreifen.After you store data in a FILESTREAM column, you can access the files by using Transact-SQLTransact-SQL transactions or by using Win32 APIs.

Zugriff über Transact-SQLTransact-SQL Access

Mit Transact-SQLTransact-SQLkönnen Sie FILESTREAM-Daten einfügen, aktualisieren und löschen:By using Transact-SQLTransact-SQL, you can insert, update, and delete FILESTREAM data:

  • Mit einem Einfügevorgang können Sie ein FILESTREAM-Feld vorab mit einem Nullwert, einem leeren Wert oder relativ kurzen Inlinedaten füllen.You can use an insert operation to prepopulate a FILESTREAM field with a null value, empty value, or relatively short inline data. Große Datenmengen lassen sich jedoch effizienter in eine Datei streamen, wenn Win32-Schnittstellen verwendet werden.However, a large amount of data is more efficiently streamed into a file that uses Win32 interfaces.

  • Wenn Sie ein FILESTREAM-Feld aktualisieren, ändern Sie die zugrunde liegenden BLOB-Daten im Dateisystem.When you update a FILESTREAM field, you modify the underlying BLOB data in the file system. Wenn ein FILESTREAM-Feld auf NULL festgelegt wird, werden die dem Feld zugeordneten BLOB-Daten gelöscht.When a FILESTREAM field is set to NULL, the BLOB data associated with the field is deleted. Ein segmentiertes Update in Transact-SQLTransact-SQL , das als UPDATE.Write() implementiert wird, kann nicht zur Ausführung von partiellen Updates der Daten eingesetzt werden.You cannot use a Transact-SQLTransact-SQL chunked update, implemented as UPDATE.Write(), to perform partial updates to the data.

  • Wenn Sie eine Zeile löschen oder eine Tabelle, die FILESTREAM-Daten enthält, löschen oder abschneiden, löschen Sie auch die zugrunde liegenden BLOB-Daten im Dateisystem.When you delete a row or delete or truncate a table that contains FILESTREAM data, you delete the underlying BLOB data in the file system.

Dateisystem-StreamingzugriffFile System Streaming Access

Die Win32-Streamingunterstützung funktioniert im Kontext von SQL ServerSQL Server -Transaktionen.The Win32 streaming support works in the context of a SQL ServerSQL Server transaction. Im Rahmen einer Transaktion können Sie mithilfe von FILESTREAM-Funktionen, einen logischen UNC-Pfad für eine Datei ermitteln.Within a transaction, you can use FILESTREAM functions to obtain a logical UNC file system path of a file. Sie verwenden dann die OpenSqlFilestream-API, um ein Dateihandle abzurufen.You then use the OpenSqlFilestream API to obtain a file handle. Dieses Handle kann dann von Win32-Dateistreamingschnittstellen, wie ReadFile() und WriteFile(), verwendet werden, um über das Dateisystem auf die Datei zuzugreifen und diese zu aktualisieren.This handle can then be used by Win32 file streaming interfaces, such as ReadFile() and WriteFile(), to access and update the file by way of the file system.

Weil Dateivorgänge transaktionsgebunden sind, können Sie FILESTREAM-Dateien nicht über das Dateisystem löschen oder umbenennen.Because file operations are transactional, you cannot delete or rename FILESTREAM files through the file system.

AnweisungsmodellStatement Model

Der FILESTREAM Dateisystemzugriff modelliert eine Transact-SQLTransact-SQL -Anweisung, indem die Datei geöffnet und geschlossen wird.The FILESTREAM file system access models a Transact-SQLTransact-SQL statement by using file open and close. Die Anweisung beginnt, wenn ein Dateihandle geöffnet wird, und endet, wenn das Handle geschlossen wird.The statement starts when a file handle is opened and ends when the handle is closed. Wenn beispielsweise ein Handle zum Schreiben geschlossen wird, dann wird ein möglicherweise für die Tabelle registrierter AFTER-Trigger so ausgelöst, als wäre eine UPDATE-Anweisung abgeschlossen worden.For example, when a write handle is closed, any possible AFTER trigger that is registered on the table fires as if an UPDATE statement is completed.

Storage NamespaceStorage Namespace

Bei FILESTREAM wird der BLOB-physische Dateisystemnamespace für BLOB von DatenbankmodulDatabase Engine gesteuert.In FILESTREAM, the DatenbankmodulDatabase Engine controls the BLOB physical file system namespace. Eine neue intrinsische Funktion namens PathNameliefert den logischen UNC-Pfads des BLOBs, das mit jeder einzelnen FILESTREAM-Zelle der Tabelle verknüpft ist.A new intrinsic function, PathName, provides the logical UNC path of the BLOB that corresponds to each FILESTREAM cell in the table. Die Anwendung verwendet diesen logischen Pfad, um das Win32-Handle zu erhalten und die BLOB-Daten mithilfe der gewöhnlichen Win32-Dateisystemschnittstellen zu bearbeiten.The application uses this logical path to obtain the Win32 handle and operate on the BLOB data by using regular Win32 file system interfaces. Die Funktion gibt NULL zurück, wenn der Wert der FILESTREAM-Spalte gleich NULL ist.The function returns NULL if the value of the FILESTREAM column is NULL.

Transaktiver DateisystemzugriffTransacted File System Access

Die neue systeminterne Funktion GET_FILESTREAM_TRANSACTION_CONTEXT ()gibt das Token zurück, das die aktuelle Transaktion darstellt, mit der die Sitzung verknüpft ist.A new intrinsic function, GET_FILESTREAM_TRANSACTION_CONTEXT(), provides the token that represents the current transaction that the session is associated with. Die Transaktion muss bereits gestartet, aber noch nicht abgebrochen oder eingetragen worden sein.The transaction must have been started and not yet aborted or committed. Durch den Bezug eines Tokens bindet die Anwendung die FILESTREAM-Dateisystem-Streamingvorgänge an eine gestartete Transaktion.By obtaining a token, the application binds the FILESTREAM file system streaming operations with a started transaction. Die Funktion gibt NULL zurück, wenn keine explizit gestartete Transaktion vorliegt.The function returns NULL in case of no explicitly started transaction.

Alle Dateihandles müssen geschlossen werden, bevor die Transaktion abgebrochen oder eingetragen wird.All file handles must be closed before the transaction commits or aborts. Wenn ein Handle nach Abschluss einer Transaktion geöffnet bleibt, verursachen weitere Lesevorgänge unter Verwendung des Handles einen Fehler. Weitere Schreibvorgänge unter Verwendung des Handles werden zwar ausgeführt, aber die Daten werden nicht auf den Datenträger geschrieben.If a handle is left open beyond the transaction scope, additional reads against the handle will cause a failure; additional writes against the handle will succeed, but the actual data will not be written to disk. Wenn die Datenbank oder die DatenbankmodulDatabase Engine -Instanz geschlossen wird, werden alle geöffneten Handles ungültig.Similarly, if the database or instance of the DatenbankmodulDatabase Engine shuts down, all open handles are invalidated.

Dauerhaftigkeit von TransaktionenTransactional Durability

Bei Verwendung von FILESTREAM wird beim Eintragen einer Transaktion von DatenbankmodulDatabase Engine die Dauerhaftigkeit von Transaktionen für FILESTREAM-BLOB-Daten sichergestellt, die über einen Streamingzugriff auf das Dateisystem geändert werden.With FILESTREAM, upon transaction commit, the DatenbankmodulDatabase Engine ensures transaction durability for FILESTREAM BLOB data that is modified from the file system streaming access.

IsolationssemantikIsolation Semantics

Die Isolationssemantik wird durch die DatenbankmodulDatabase Engine Transaktionsisolationsstufen bestimmt.The isolation semantics are governed by DatenbankmodulDatabase Engine transaction isolation levels. Für den Transact-SQLTransact-SQL - und den Dateisystemzugriff wird nur die Read Committed-Isolationsstufe unterstützt.Read-committed isolation level is supported for Transact-SQLTransact-SQL and file system access. Wiederholbare Lesevorgänge und auch serialisierbare sowie Momentaufnahmeisolationen werden unterstützt.Repeatable read operations, and also serializable and snapshot isolations, are supported. Das Lesen von geänderten Daten, für die kein Commit ausgeführt wurde, wird nicht unterstützt.Dirty read is not supported.

Bei Dateisystemzugriffvorgängen zum Öffnen von Dateien wird auf keine Sperren gewartet.The file system access open operations do not wait for any locks. Stattdessen schlagen die Öffnungsvorgänge sofort fehl, wenn wegen der Transaktionsisolation nicht auf die Daten zugegriffen werden kann.Instead, the open operations fail immediately if they cannot access the data because of transaction isolation. Die Streaming-API-Aufrufe schlagen mit dem Ergebnis ERROR_SHARING_VIOLATION fehl, wenn der Öffnungsvorgang wegen einer Isolationsverletzung nicht fortgesetzt werden kann.The streaming API calls fail with ERROR_SHARING_VIOLATION if the open operation cannot continue because of isolation violation.

Damit Teilaktualisierungen durchgeführt werden können, kann die Anwendung einen Dateisystembefehl (FSCTL_SQL_FILESTREAM_FETCH_OLD_CONTENT) ausgeben, um den alten Inhalt in die Datei zu laden, auf die das geöffnete Handle verweist.To allow for partial updates to be made, the application can issue a device FS control (FSCTL_SQL_FILESTREAM_FETCH_OLD_CONTENT) to fetch the old content into the file that the opened handle references. Daraufhin kopiert der Server den alten Inhalt.This will trigger a server-side old content copy. Um das Leistungsverhalten der Anwendung zu verbessern und zu vermeiden, dass bei der Arbeit mit sehr großen Dateien Wartezeitüberschreitungen auftreten, wird die Verwendung asynchroner E/A empfohlen.For better application performance and to avoid running into potential time-outs when you are working with very large files, we recommend that you use asynchronous I/O.

Wenn der FSCTL-Befehl ausgegeben wird, nachdem in die durch das Handle bezeichnete Datei geschrieben wurde, dann werden die Daten des letzten Schreibvorgangs persistent gespeichert, alle zuvor geschriebenen Daten gehen verloren.If the FSCTL is issued after the handle has been written to, the last write operation will persist, and prior writes that were made to the handle are lost.

Dateisystem-APIs und unterstützte IsolationsstufenFile System APIs and Supported Isolation Levels

Wenn eine Dateisystem-API aufgrund einer Isolationsverletzung eine Datei nicht öffnen kann, wird eine ERROR_SHARING_VIOLATION-Ausnahme zurückgegeben.When a file system API cannot open a file because of an isolation violation, an ERROR_SHARING_VIOLATION exception is returned. Diese Isolationsverletzung tritt auf, wenn zwei Transaktionen versuchen, auf dieselbe Datei zuzugreifen.This isolation violation occurs when two transactions try to access the same file. Das Ergebnis des Zugriffsvorgangs ist von dem Modus abhängig, in dem die Datei geöffnet wurde, und von der Version SQL ServerSQL Server , in der die Transaktion ausgeführt wird.The outcome of the access operation depends on the mode the file was opened in and the version of SQL ServerSQL Server that the transaction is running on. In der folgenden sind die möglichen Ergebnisse für zwei Transaktionen aufgeführt, die auf dieselbe Datei zugreifen.The following table outlines the possibly outcomes for two transactions that are accessing the same file.

Transaktion 1Transaction 1 Transaktion 2Transaction 2 Ergebnis unter SQL Server 2008Outcome on SQL Server 2008 Ergebnis unter SQL Server 2008 R2 und höheren VersionenOutcome on SQL Server 2008 R2 and later versions
Geöffnet zum Lesen.Open for read. Geöffnet zum Lesen.Open for read. Beide erfolgreich.Both succeed. Beide erfolgreich.Both succeed.
Geöffnet zum Lesen.Open for read. Geöffnet zum Schreiben.Open for write. Beide erfolgreich.Both succeed. Schreibvorgänge unter Transaktion 2 haben keine Auswirkungen auf in Transaktion 1 ausgeführte Lesevorgänge.Write operations under transaction 2 do not affect read operations performed in transaction 1. Beide erfolgreich.Both succeed. Schreibvorgänge unter Transaktion 2 haben keine Auswirkungen auf in Transaktion 1 ausgeführte Lesevorgänge.Write operations under transaction 2 do not affect read operations performed in transaction 1.
Geöffnet zum Schreiben.Open for write. Geöffnet zum Lesen.Open for read. Das Öffnen für Transaktion 2 schlägt mit einer ERROR_SHARING_VIOLATION-Ausnahme fehl.Open for transaction 2 fails with an ERROR_SHARING_VIOLATION exception. Beide erfolgreich.Both succeed.
Geöffnet zum Schreiben.Open for write. Geöffnet zum Schreiben.Open for write. Das Öffnen für Transaktion 2 schlägt mit einer ERROR_SHARING_VIOLATION-Ausnahme fehl.Open for transaction 2 fails with an ERROR_SHARING_VIOLATION exception. Das Öffnen für Transaktion 2 schlägt mit einer ERROR_SHARING_VIOLATION-Ausnahme fehl.Open for transaction 2 fails with an ERROR_SHARING_VIOLATION exception.
Geöffnet zum Lesen.Open for read. Geöffnet für SELECT.Open for SELECT. Beide erfolgreich.Both succeed. Beide erfolgreich.Both succeed.
Geöffnet zum Lesen.Open for read. Geöffnet für UPDATE oder DELETE.Open for UPDATE or DELETE. Beide erfolgreich.Both succeed. Schreibvorgänge unter Transaktion 2 haben keine Auswirkungen auf in Transaktion 1 ausgeführte Lesevorgänge.Write operations under transaction 2 do not affect read operations performed in transaction 1. Beide erfolgreich.Both succeed. Schreibvorgänge unter Transaktion 2 haben keine Auswirkungen auf in Transaktion 1 ausgeführte Lesevorgänge.Write operations under transaction 2 do not affect read operations performed in transaction 1.
Geöffnet zum Schreiben.Open for write. Geöffnet für SELECT.open for SELECT. Transaktion 2 ist blockiert, bis Transaktion 1 einen Commit für die Transaktion ausführt, die Transaktion beendet oder bei der Transaktionssperre ein Timeout auftritt.Transaction 2 blocks until transaction 1 commits or ends the transaction, or the transaction lock times out. Beide erfolgreich.Both succeed.
Geöffnet zum Schreiben.Open for write. Geöffnet für UPDATE oder DELETE.Open for UPDATE or DELETE. Transaktion 2 ist blockiert, bis Transaktion 1 einen Commit für die Transaktion ausführt, die Transaktion beendet oder bei der Transaktionssperre ein Timeout auftritt.Transaction 2 blocks until transaction 1 commits or ends the transaction, or the transaction lock times out. Transaktion 2 ist blockiert, bis Transaktion 1 einen Commit für die Transaktion ausführt, die Transaktion beendet oder bei der Transaktionssperre ein Timeout auftritt.Transaction 2 blocks until transaction 1 commits or ends the transaction, or the transaction lock times out.
Geöffnet für SELECT.Open for SELECT. Geöffnet zum Lesen.Open for read. Beide erfolgreich.Both succeed. Beide erfolgreich.Both succeed.
Geöffnet für SELECT.Open for SELECT. Geöffnet zum Schreiben.Open for write. Beide erfolgreich.Both succeed. Schreibvorgänge unter Transaktion 2 haben keine Auswirkungen auf Transaktion 1.Write operations under transaction 2 do not affect transaction 1. Beide erfolgreich.Both succeed. Schreibvorgänge unter Transaktion 2 haben keine Auswirkungen auf Transaktion 1.Write operations under transaction 2 do not affect transaction 1.
Geöffnet für UPDATE oder DELETE.Open for UPDATE or DELETE. Geöffnet zum Lesen.Open for read. Der Öffnungsvorgang unter Transaktion 2 schlägt mit einer ERROR_SHARING_VIOLATION-Ausnahme fehl.The open operation on transaction 2 fails with an ERROR_SHARING_VIOLATION exception. Beide erfolgreich.Both succeed.
Geöffnet für UPDATE oder DELETE.Open for UPDATE or DELETE. Geöffnet zum Schreiben.Open for write. Der Öffnungsvorgang unter Transaktion 2 schlägt mit einer ERROR_SHARING_VIOLATION-Ausnahme fehl.The open operation on transaction 2 fails with an ERROR_SHARING_VIOLATION exception. Der Öffnungsvorgang unter Transaktion 2 schlägt mit einer ERROR_SHARING_VIOLATION-Ausnahme fehl.The open operation on transaction 2 fails with an ERROR_SHARING_VIOLATION exception.
Geöffnet für SELECT mit wiederholbarem Lesen.Open for SELECT with repeatable read. Geöffnet zum Lesen.Open for read. Beide erfolgreich.Both succeed. Beide erfolgreich.Both succeed.
Geöffnet für SELECT mit wiederholbarem Lesen.Open for SELECT with repeatable read. Geöffnet zum Schreiben.Open for write. Der Öffnungsvorgang unter Transaktion 2 schlägt mit einer ERROR_SHARING_VIOLATION-Ausnahme fehl.The open operation on transaction 2 fails with an ERROR_SHARING_VIOLATION exception. Der Öffnungsvorgang unter Transaktion 2 schlägt mit einer ERROR_SHARING_VIOLATION-Ausnahme fehl.The open operation on transaction 2 fails with an ERROR_SHARING_VIOLATION exception.

Direktes Schreiben von RemoteclientsWrite-Through from Remote Clients

Der Remotedateisystemzugriff auf FILESTREAM-Daten wird über das SMB (Server Message-Block)-Protokoll ermöglicht.Remote file system access to FILESTREAM data is enabled over the Server Message Block (SMB) protocol. Wenn der Client remote ist, werden Schreibvorgänge nicht auf der Clientseite zwischengespeichert.If the client is remote, no write operations are cached by the client side. Die Schreibvorgänge werden immer an den Server gesendet.The write operations will always be sent to the server. Die Daten können auf der Serverseite zwischengespeichert werden.The data can be cached on the server side. Es wird empfohlen, dass Anwendungen, die auf Remoteclients ausgeführt werden, kleine Schreibvorgänge konsolidieren, sodass weniger Schreibvorgänge mit größeren Datenmengen durchgeführt werden.We recommend that applications that are running on remote clients consolidate small write operations to make fewer write operations using larger data size.

Die Erstellung von Speicherabbildern (E/A mit Speicherabbildern) mit einem FILESTREAM-Handle wird nicht unterstützt.Creating memory mapped views (memory mapped I/O) by using a FILESTREAM handle is not supported. Wenn Speicherabbilder für FILESTREAM-Daten verwendet werden, kann DatenbankmodulDatabase Engine weder die Konsistenz und Dauerhaftigkeit der Daten noch die Datenbankintegrität garantieren.If memory mapping is used for FILESTREAM data, the DatenbankmodulDatabase Engine cannot guarantee consistency and durability of the data or the integrity of the database.

Aktivieren und Konfigurieren von FILESTREAMEnable and Configure FILESTREAM
Erstellen einer FILESTREAM-aktivierten Datenbank Create a FILESTREAM-Enabled Database
Erstellen einer Tabelle zum Speichern von FILESTREAM-Daten Create a Table for Storing FILESTREAM Data
ZUgreifen auf FILESTREAM-Daten mit Transact-SQL Access FILESTREAM Data with Transact-SQL
Erstellen von Clientanwendungen für FILESTREAM-Daten Create Client Applications for FILESTREAM Data
ZUgreifen auf FILESTREAM-Daten mit OpenSqlFilestream Access FILESTREAM Data with OpenSqlFilestream
Vornehmen von Teilupdates an FILESTREAM-Daten Make Partial Updates to FILESTREAM Data
Vermeiden von Konflikten mit Datenbankvorgängen in FILESTREAM-Anwendungen Avoid Conflicts with Database Operations in FILESTREAM Applications
Verschieben einer FILESTREAM-aktivierten Datenbank Move a FILESTREAM-Enabled Database
Einrichten von FILESTREAM auf einem Failovercluster Set Up FILESTREAM on a Failover Cluster
Konfigurieren einer Firewall für FILESTREAM-Zugriff Configure a Firewall for FILESTREAM Access

FILESTREAM-Kompatibilität mit anderen SQL Server-FunktionenFILESTREAM Compatibility with Other SQL Server Features