FILESTREAM und andere SQL Server-Funktionen

Da sich die FILESTREAM-Daten im Dateisystem befinden, werden in diesem Thema Informationen, Richtlinien und Einschränkungen in Bezug auf die Verwendung von FILESTREAM mit den folgenden Funktionen in SQL Server beschrieben.

  • SQL Server Integration Services (SSIS)

  • Verteilte Abfragen und Verbindungsserver

  • Datenbank-Momentaufnahmen

  • Replikation

  • Protokollversand

  • Datenbankspiegelung

  • Volltext

  • Failoverclustering

  • SQL Server Express

SQL Server Integration Services (SSIS)

SQL Server Integration Services (SSIS) behandelt FILESTREAM-Daten im Datenfluss wie andere BLOB-Daten mit dem DT_IMAGE SSIS-Datentyp.

Sie können die Transformation für das Importieren von Spalten verwenden, um Dateien aus dem Dateisystem in eine FILESTREAM-Spalte zu laden. Sie können auch die Transformation für das Exportieren von Spalten verwenden, um Dateien aus einer FILESTREAM-Spalte in einen anderen Speicherplatz im Dateisystem zu extrahieren.

Verteilte Abfragen und Verbindungsserver

Mit FILESTREAM-Daten können Sie über verteilte Abfragen und Verbindungsserver arbeiten, indem Sie sie als varbinary(max)-Daten behandeln. Die PathName()-Funktion für FILESTREAM kann nicht in verteilten Abfragen verwendet werden, auch nicht, wenn der Name auf den lokalen Server verweist. Sie können PathName() jedoch in der inneren Abfrage einer Pass-Through-Abfrage verwenden, für die OPENQUERY() verwendet wird.

Datenbank-Momentaufnahmen

SQL Server unterstützt keine Datenbankmomentaufnahmen für FILESTREAM-Dateigruppen. Wenn eine FILESTREAM-Dateigruppe in eine CREATE DATABASE ON-Klausel eingeschlossen wird, schlägt die Anweisung fehl, und ein Fehler wird ausgelöst.

Wenn Sie FILESTREAM verwenden, können Sie Datenbankmomentaufnahmen von Standarddateigruppen (nicht-FILESTREAM) erstellen. Die FILESTREAM-Dateigruppen werden für diese Datenbankmomentaufnahmen als offline markiert.

Eine SELECT-Anweisung, die für eine FILESTREAM-Tabelle in einer Datenbankmomentaufnahme ausgeführt wird, darf keine FILESTREAM-Spalte enthalten, da andernfalls die folgende Fehlermeldung zurückgegeben wird:

Could not continue scan with NOLOCK due to data movement.

Replikation

Eine varbinary(max)-Spalte, für die das FILESTREAM-Attribut auf dem Verleger aktiviert ist, kann für einen Abonnenten mit oder ohne FILESTREAM-Attribut repliziert werden. Verwenden Sie das Dialogfeld Artikeleigenschaften - <Artikel> oder den @schema_option-Parameter von sp_addarticle oder sp_addmergearticle, um die Methode für die Replikation der Spalte anzugeben. Weitere Informationen zum Festlegen von Schemaoptionen finden Sie unter Vorgehensweise: Angeben von Schemaoptionen (SQL Server Management Studio) und Vorgehensweise: Angeben von Schemaoptionen (Replikationsprogrammierung mit Transact-SQL). Daten, die in einer varbinary(max)-Spalte ohne FILESTREAM-Attribute repliziert werden, dürfen den 2 GB-Grenzwert für diesen Datentyp nicht überschreiten, da anderenfalls ein Laufzeitfehler ausgelöst wird. Es wird empfohlen, das FILESTREAM-Attribut zu replizieren, sofern Sie keine Daten an SQL Server 2005 replizieren. Das Replizieren von Tabellen mit FILESTREAM-Spalten an SQL Server 2000-Abonnenten wird unabhängig von der Festlegung dieser Schemaoption nicht unterstützt. Weitere Informationen über das Replizieren von Daten in Vorgängerversionen von SQL Server finden Sie unter Verwenden mehrerer Versionen von SQL Server in einer Replikationstopologie.

HinweisHinweis

Das Replizieren von großen Datenwerten von SQL Server 2008 nach SQL Server 2005-Abonnenten ist auf maximal 256 MB beschränkt. Weitere Informationen finden Sie unter Maximum Capacity Specifications.

Überlegungen zur Transaktionsreplikation

Wenn Sie FILESTREAM-Spalten in Tabellen verwenden, die zur Transaktionsreplikation veröffentlicht werden, beachten Sie Folgendes:

  • Wenn einige Tabellen Spalten mit dem FILESTREAM-Attribut enthalten, können Sie keine Werte von database snapshot oder database snapshot character für die @sync_method-Eigenschaft von sp_addpublication verwenden.

  • Die max text repl size-Option gibt die maximale Datenmenge an, die in eine Spalte eingefügt werden kann, die zur Replikation veröffentlicht wird. Diese Option kann verwendet werden, um die Größe von FILESTREAM-Daten zu kontrollieren, die repliziert werden. Weitere Informationen finden Sie unter max text repl size (Option).

  • Wenn Sie die Schemaoption für die Replikation des FILESTREAM-Attributs angeben, aber die von FILESTREAM benötigte uniqueidentifier-Spalte herausfiltern oder angeben, dass die UNIQUE-Einschränkung für die Spalte nicht repliziert werden soll, wird das FILESTREAM-Attribut bei der Replikation nicht repliziert. Die Spalte wird nur als varbinary(max)-Spalte repliziert.

Überlegungen hinsichtlich der Mergereplikation

Wenn Sie FILESTREAM-Spalten in Tabellen verwenden, die zur Mergereplikation veröffentlicht werden, beachten Sie Folgendes:

  • Sowohl die Mergereplikation als auch FILESTREAM erfordern eine Spalte des Datentyps uniqueidentifier, um die einzelnen Zeilen in einer Tabelle zu identifizieren. Die Mergereplikation fügt automatisch eine Spalte hinzu, wenn die Tabelle sie nicht besitzt. Die Mergereplikation erfordert es, dass die ROWGUIDCOL-Eigenschaft für die Spalte festgelegt ist und der Standardwert NEWID() oder NEWSEQUENTIALID() lautet. Zusätzlich zu diesen Anforderungen erfordert es FILESTREAM, dass eine UNIQUE-Einschränkung für die Spalte definiert wird. Diese Anforderungen bringen Folgendes mit sich:

    • Wenn Sie eine FILESTREAM-Spalte einer Tabelle hinzufügen, die bereits zur Mergereplikation veröffentlicht wurde, vergewissern Sie sich, dass die uniqueidentifier-Spalte über eine UNIQUE-Einschränkung verfügt. Wenn sie über keine UNIQUE-Einschränkung verfügt, fügen Sie der Tabelle in der Veröffentlichungsdatenbank eine benannte Einschränkung hinzu. Standardmäßig veröffentlicht die Mergreplikation diese Schemaänderung, die dann auf jede Abonnentendatenbank angewendet wird. Weitere Informationen zu Berechtigungen finden Sie unter Vornehmen von Schemaänderungen in Veröffentlichungsdatenbanken.

      Wenn Sie eine UNIQUE-Einschränkung manuell wie beschrieben hinzufügen und die Mergereplikation entfernen möchten, müssen Sie zuerst die UNIQUE-Einschränkung entfernen, da die Replikation ansonsten nicht entfernt wird.

    • Standardmäßig verwendet die Mergereplikation NEWSEQUENTIALID(), da ihre Leistungsfähigkeit gegenüber NEWID() höher ist. Wenn Sie eine uniqueidentifier-Spalte einer Tabelle hinzufügen, die für die Mergereplikation veröffentlicht wird, geben Sie NEWSEQUENTIALID() als Standardwert an.

  • Die Mergereplikation beinhaltet eine Optimierung für das Replizieren großer Objekttypen. Diese Optimierung wird durch den @stream_blob_columns-Parameter von sp_addmergearticle gesteuert. Wenn Sie die Schemaoption zum Replizieren des FILESTREAM-Attributs festlegen, wird der Wert des @stream_blob_columns-Parameters auf true festgelegt. Diese Optimierung kann mit sp_changemergearticle überschrieben werden. Diese gespeicherte Prozedur ermöglicht es Ihnen, @stream_blob_columns auf false festzulegen. Wenn Sie eine FILESTREAM-Spalte einer Tabelle hinzufügen, die bereits für die Mergereplikation veröffentlicht wurde, sollten Sie die Option mit sp_changemergearticle auf true festlegen.

  • Wird die Schemaoption für FILESTREAM nach dem Erstellen eines Artikels aktiviert, kann die Replikation fehlschlagen, wenn die Daten in der FILESTREAM-Spalte größer als 2 GB sind und während der Replikation ein Konflikt auftritt. Wenn Sie Grund zur Annahme haben, dass diese Situation eintritt, sollten Sie den Tabellenartikel löschen und mit der entsprechenden FILESTREAM-Schemaoption, die bei Erstellung aktiviert war, neu erstellen.

  • Die Mergereplikation kann FILESTREAM-Daten über eine HTTPS-Verbindung durch Websynchronisierung synchronisieren. Diese Daten dürfen die 50 MB-Grenze für die Websynchronisierung nicht übersteigen, andernfalls wird ein Laufzeitfehler generiert.

Protokollversand

Der Protokollversand unterstützt FILESTREAM. Sowohl auf dem primären als auch auf dem sekundären Server muss SQL Server 2008 oder eine spätere Version ausgeführt werden und FILESTREAM aktiviert sein.

Datenbankspiegelung

Die Datenbankspiegelung unterstützt FILESTREAM nicht. Eine FILESTREAM-Dateigruppe kann nicht auf dem Prinzipalserver erstellt werden. Die Datenbankspiegelung kann nicht für eine Datenbank konfiguriert werden, die FILESTREAM-Dateigruppen enthält.

Volltextindizierung

Die Volltextindizierung funktioniert mit einer FILESTREAM-Spalte genauso wie mit einer varbinary(max)-Spalte. Die FILESTREAM-Tabelle muss eine Spalte aufweisen, die die Dateinamenerweiterung für jeden FILESTREAM BLOB enthält. Weitere Informationen finden Sie unter Abfragen von varbinary(max) und xml-Spalten (Volltextsuche), Filter für die Volltextsuche, Der Vorgang der Volltextindizierung und -abfrage und sys.fulltext_document_types (Transact-SQL).

Das Volltextmodul indiziert den Inhalt der FILESTREAM-BLOBs. Dateien wie beispielsweise Images zu indizieren, ist möglicherweise nicht nützlich. Wenn ein FILESTREAM BLOB aktualisiert wird, wird er neu indiziert.

Failoverclustering

Für das Failoverclustering müssen FILESTREAM-Dateigruppen auf einem freigegebenen Datenträger abgelegt werden. FILESTREAM muss auf jedem Knoten im Cluster aktiviert werden, das die FILESTREAM-Instanz hostet. Weitere Informationen finden Sie unter Vorgehensweise: Einrichten von FILESTREAM auf einem Failovercluster.

SQL Server Express

SQL Server Express unterstützt FILESTREAM. Der Grenzwert für die Datenbankgröße von 4 GB schließt den FILESTREAM-Datencontainer nicht ein.