Freigeben über


FILESTREAM und andere SQL Server-Features

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 Features in SQL Server beschrieben.

  • Datenbanksnapshots

  • Replikation

  • Protokollversand

  • Datenbankspiegelung

  • Volltext

  • Failoverclustering

  • SQL Server Express

Datenbanksnapshots

SQL Server unterstützt keine Datenbanksnapshots 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 Datenbanksnapshots von Standarddateigruppen (nicht-FILESTREAM) erstellen. Die FILESTREAM-Dateigruppen werden für diese Datenbanksnapshots als offline markiert.

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

Aufgrund von Datenverschiebungen konnte der Scanvorgang mit NOLOCK nicht fortgesetzt werden.

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 - <Article> oder den @schema_option-Parameter von sp_addarticle oder sp_addmergearticle, um die Methode für die Replikation der Spalte anzugeben. Weitere Informationen darüber, wie Schemaoptionen festgelegt werden, 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. Wir empfehlen, dass Sie das FILESTREAM-Attribut replizieren, außer wenn Sie Daten für SQL Server 2005 replizieren. Das Replizieren von Tabellen mit FILESTREAM-Spalten auf SQL Server 2000-Abonnenten wird unabhängig von der festgelegten 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 für 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 schließt eine Optimierung zum Replizieren von Typen großer Objekte ein. Diese Optimierung wird durch den @stream_blob_columns-Parameter von sp_addmergearticle gesteuert. Wenn Sie die Schemaoption auf die Replikation 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.

  • Die Aktivierung der Schemaoption für FILESTREAM, nachdem ein Artikel erstellt wurde, kann zum Fehlschlagen der Replikation führen, wenn die Daten in der FILESTREAM-Spalte 2 GB übersteigen 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 Bilder 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.