FILESTREAM-Kompatibilität mit anderen 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

  • Verschlüsselung

  • Datenbank-Momentaufnahmen

  • Replikation

  • Protokollversand

  • Datenbankspiegelung

  • Volltextindizierung

  • Failoverclustering

  • SQL Server Express

  • Eigenständige Datenbanken

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

Sie können mithilfe von verteilten Abfragen und Verbindungsservern mit FILESTREAM-Daten arbeiten, indem Sie diese als Daten vom Typ varbinary(max) behandeln. Sie können die FILESTREAM-Funktion PathName() nicht in verteilten Abfragen nutzen, bei denen ein vierteiliger Name verwendet wird. Dies gilt auch, wenn der Name auf einen lokalen Server verweist. Sie können PathName() jedoch in der inneren Abfrage einer Pass-Through-Abfrage nutzen, bei der OPENQUERY() verwendet wird.

Verschlüsselung

FILESTREAM-Daten werden nicht verschlüsselt, auch dann nicht, wenn die transparente Datenverschlüsselung aktiviert ist.

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 Momentaufnahme-Datenbank ausgeführt wird, darf keine FILESTREAM-Spalte enthalten, da sonst 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. 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 für SQL Server 2000 Subscriber wird nicht unterstützt, unabhängig von der Schemaoption, die angegeben wird.

HinweisHinweis

Das Replizieren von großen Datenwerten von SQL Server 2012 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.

  • 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.

      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. Mit dieser gespeicherten Prozedur können Sie @stream\_blob\_columns auf false festlegen. 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 mit Volltextsuche, Konfigurieren und Verwalten von Filtern für die Suche 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 Einrichten von FILESTREAM auf einem Failovercluster.

SQL Server Express

SQL Server Express unterstützt FILESTREAM. Im Grenzwert für die Datenbankgröße von 10 GB ist der FILESTREAM-Datencontainer nicht inbegriffen.

Eigenständige Datenbanken

Die FILESTREAM-Funktion erfordert etwas Konfiguration außerhalb der Datenbank. Daher sind Datenbanken, die FILESTREAM oder FileTable verwenden, nicht vollständig eigenständig.

Sie können die Datenbankkapselung auf PARTIAL festlegen, wenn Sie bestimmte Funktionen eigenständiger Datenbanken verwenden möchten, z. B. eigenständige Benutzer. In diesem Fall müssen Sie jedoch beachten, dass einige Datenbankeinstellungen nicht in der Datenbank enthalten sind und nicht automatisch mit der Datenbank verschoben werden.

Siehe auch

Konzepte

Binary Large Object (BLOB)-Daten (SQL Server)