Freigeben über


FILESTREAM-Kompatibilität mit anderen SQL Server-Features

Da SICH FILESTREAM-Daten im Dateisystem befinden, enthält dieses Thema einige Überlegungen, Richtlinien und Einschränkungen für die Verwendung von FILESTREAM mit den folgenden Features in SQL Server:

SQL Server Integration Services (SSIS)

SQL Server Integration Services (SSIS) verarbeitet FILESTREAM-Daten im Datenfluss wie alle anderen BLOB-Daten mithilfe des DT_IMAGE SSIS-Datentyps.

Sie können die Transformation der Importspalte verwenden, um Dateien aus dem Dateisystem in eine FILESTREAM-Spalte zu laden. Sie können auch die Exportspaltentransformation verwenden, um Dateien aus einer FILESTREAM-Spalte an einen anderen Speicherort im Dateisystem zu extrahieren.

Verteilte Abfragen und verknüpfte Server

Sie können mit FILESTREAM-Daten über verteilte Abfragen und verknüpfte Server arbeiten, indem Sie sie als varbinary(max) Daten behandeln. Sie können die FILESTREAM PathName() -Funktion nicht in verteilten Abfragen verwenden, die einen vierteiligen Namen verwenden, auch wenn sich der Name auf den lokalen Server bezieht. Sie können PathName() jedoch in der inneren Abfrage einer Pass-Through-Abfrage verwenden, die OPENQUERY()verwendet.

Verschlüsselung

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

Datenbank-Momentaufnahmen

SQL Server unterstützt keine Datenbankmomentaufnahmen für FILESTREAM-Dateigruppen. Wenn eine FILESTREAM-Dateigruppe in einer CREATE DATABASE ON-Klausel enthalten ist, 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 in einer FILESTREAM-Tabelle in einer Datenbankmomentaufnahme ausgeführt wird, darf keine FILESTREAM-Spalte enthalten; andernfalls wird die folgende Fehlermeldung zurückgegeben:

Could not continue scan with NOLOCK due to data movement.

Replikation

Eine varbinary(max) Spalte mit aktiviertem FILESTREAM-Attribut beim Publisher kann mit oder ohne das FILESTREAM-Attribut an einen Subscriber repliziert werden. Wenn Sie angeben möchten, wie die Spalte repliziert wird, verwenden Sie das Dialogfeld "Artikeleigenschaften - <Artikel> " oder den @schema_option Parameter sp_addarticle oder sp_addmergearticle. Daten, die in einer varbinary(max) Spalte repliziert werden, die nicht über das FILESTREAM-Attribut verfügt, dürfen den Grenzwert von 2 GB für diesen Datentyp nicht überschreiten. Andernfalls wird ein Laufzeitfehler generiert. Es wird empfohlen, das FILESTREAM-Attribut zu replizieren, es sei denn, Sie replizieren Daten zu SQL Server 2000-Abonnenten, was unabhängig von der angegebenen Schemaoption nicht unterstützt wird.

Hinweis

Das Replizieren großer Datenwerte von SQL Server 2014 auf SQL Server 2005 (9.x) Abonnenten ist auf maximal 256 MB Datenwerte beschränkt. Weitere Informationen finden Sie unter "Maximale Kapazitätsspezifikationen".

Überlegungen zur Transaktionsreplikation

Wenn Sie FILESTREAM-Spalten in Tabellen verwenden, die für die Transaktionsreplikation veröffentlicht werden, beachten Sie die folgenden Überlegungen:

  • Wenn Tabellen Spalten enthalten, die das FILESTREAM-Attribut aufweisen, können Sie keine Werte von Datenbankmomentaufnahme oder Datenbankmomentaufnahmezeichen für die @sync_method Eigenschaft von sp_addpublication verwenden.

  • Die Option für die maximale Größe der Texteinfügung gibt die maximale Datenmenge an, die in eine für die Replikation veröffentlichte Spalte eingefügt werden kann. Diese Option kann verwendet werden, um die Größe von FILESTREAM-Daten zu steuern, die repliziert werden.

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

Überlegungen zur Zusammenführungsreplikation

Wenn Sie FILESTREAM-Spalten in Tabellen verwenden, die für die Zusammenführungsreplikation veröffentlicht werden, berücksichtigen Sie die folgenden Aspekte:

  • Sowohl die Zusammenführungsreplikation als auch FILESTREAM erfordern eine Spalte mit dem Datentyp uniqueidentifier, um jede Zeile in einer Tabelle identifizieren zu können. Die Mergereplikation fügt automatisch eine Spalte hinzu, wenn die Tabelle keine hat. Für die Zusammenführungsreplikation muss für die Spalte die ROWGUIDCOL-Eigenschaft festgelegt und ein Standardwert von NEWID() oder NEWSEQUENTIALID() festgelegt sein. Zusätzlich zu diesen Anforderungen erfordert FILESTREAM, dass eine UNIQUE-Einschränkung für die Spalte definiert wird. Diese Anforderungen haben die folgenden Folgen:

    • Wenn Sie einer Tabelle, die bereits für die Zusammenführungsreplikation veröffentlicht wurde, eine FILESTREAM-Spalte hinzufügen, stellen Sie sicher, dass die uniqueidentifier Spalte eine UNIQUE-Einschränkung besitzt. Wenn keine UNIQUE-Einschränkung vorhanden ist, fügen Sie der Tabelle in der Publikationsdatenbank eine benannte Einschränkung hinzu. Standardmäßig veröffentlicht die Zusammenführungsreplikation diese Schemaänderung, und sie wird auf jede Abonnementdatenbank angewendet.

      Wenn Sie eine UNIQUE-Einschränkung manuell wie beschrieben hinzufügen und die Zusammenführungsreplikation entfernen möchten, müssen Sie zuerst die UNIQUE-Einschränkung entfernen. Andernfalls schlägt die Entfernung der Replikation fehl.

    • Standardmäßig verwendet die Zusammenführungsreplikation NEWSEQUENTIALID(), da diese eine bessere Leistung als NEWID() bieten kann. Wenn Sie einer Tabelle eine uniqueidentifier Spalte hinzufügen, die für die Merge-Replikation veröffentlicht wird, geben Sie NEWSEQUENTIALID() als Standard an.

  • Die Zusammenführungsreplikation umfasst eine Optimierung für die Replikation großer Objekttypen. Diese Optimierung wird durch den @stream_blob_columns Parameter sp_addmergearticle gesteuert. Wenn Sie die Schemaoption zum Replizieren des FILESTREAM-Attributs festlegen, wird der @stream_blob_columns-Parameterwert auf true gesetzt. Diese Optimierung kann mithilfe von sp_changemergearticle außer Kraft gesetzt werden. Diese gespeicherte Prozedur ermöglicht es Ihnen, @stream_blob_columns auf false zu setzen. Wenn Sie eine FILESTREAM-Spalte zu einer Tabelle hinzufügen, die bereits für die Zusammenführungsreplikation veröffentlicht wurde, empfehlen wir, die Option mithilfe von sp_changemergearticle auf true festzulegen.

  • Wenn die Schemaoption für FILESTREAM aktiviert wird, nachdem ein Artikel erstellt wurde, kann die Replikation fehlschlagen, wenn die Daten in einer FILESTREAM-Spalte 2 GB überschreiten und während der Replikation ein Konflikt auftritt. Wenn Sie erwarten, dass diese Situation auftritt, empfiehlt es sich, den Tabellenartikel abzulegen und neu zu erstellen, wobei die entsprechende FILESTREAM-Schemaoption zur Erstellungszeit aktiviert ist.

  • Die Zusammenführungsreplikation kann FILESTREAM-Daten über eine HTTPS-Verbindung mithilfe der Websynchronisierung synchronisieren. Diese Daten dürfen den Grenzwert von 50 MB für die Websynchronisierung nicht überschreiten. andernfalls wird ein Laufzeitfehler generiert.

Log-Versand

Der Protokollversand unterstützt FILESTREAM. Sowohl die primären als auch die sekundären Server müssen SQL Server 2008 oder eine höhere Version ausführen und FILESTREAM aktiviert haben.

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.

Full-Text Indizierung

Die Volltextindizierung funktioniert mit einer FILESTREAM-Spalte auf die gleiche Weise wie bei einer varbinary(max) Spalte. Die FILESTREAM-Tabelle muss eine Spalte aufweisen, die die Dateinamenerweiterung für jedes FILESTREAM-BLOB enthält. Weitere Informationen finden Sie unter Abfrage mit Full-Text Suchen, Konfigurieren und Verwalten von Filtern für die Suche und sys.fulltext_document_types (Transact-SQL).

Das Volltextmodul indiziert den Inhalt der FILESTREAM BLOBs. Indizierungsdateien wie Bilder sind möglicherweise nicht hilfreich. Wenn ein FILESTREAM-BLOB aktualisiert wird, wird es neu indiziert.

Failover-Clusterbildung

Für das Failover-Clustering müssen FILESTREAM-Dateigruppen auf einem freigegebenen Datenträger gespeichert werden. FILESTREAM muss auf jedem Knoten im Cluster aktiviert sein, der die FILESTREAM-Instanz hosten soll. Weitere Informationen finden Sie unter Einrichten von FILESTREAM für einen Failovercluster.

SQL Server Express

SQL Server Express unterstützt FILESTREAM. Die Größenbeschränkung von 10 GB umfasst nicht den FILESTREAM-Datencontainer.

Eigenständige Datenbanken

Das FILESTREAM-Feature erfordert eine Konfiguration außerhalb der Datenbank. Daher ist eine Datenbank, die FILESTREAM oder FileTable verwendet, nicht vollständig enthalten.

Sie können die Datenbankeindämmung auf PARTIAL festlegen, wenn Sie bestimmte Features von enthaltenen Datenbanken verwenden möchten, z. B. enthaltene Benutzer. In diesem Fall müssen Sie jedoch beachten, dass einige der Datenbankeinstellungen nicht in der Datenbank enthalten sind und nicht automatisch verschoben werden, wenn die Datenbank verschoben wird.

Siehe auch

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