Dieser Artikel wurde noch nicht bewertet - Dieses Thema bewerten.

Verbundrichtlinien und -einschränkungen

In diesem Thema werden Richtlinien und Einschränkungen für Verbunde in SQL-Datenbank beschrieben. Die Details zu den allgemeinen Richtlinien und Einschränkungen werden in den folgenden Abschnitten behandelt.

Tabellen

Verbunde können Verbundtabellen und Verweistabellen enthalten. Verbundtabellen werden mit der Klausel "FEDERATE ON" erstellt und enthalten eine Spalte, die dem Verteilungsschlüssel für den enthaltenden Verbund zugeordnet ist. Verweistabellen sind Tabellen in einem Verbund, die nicht mit der Klausel "FEDERATE ON" erstellt wurden keine besondere Verbindung zum Verbundverteilungsschlüssel aufweisen.

Verbundtabellen

Die Syntax zum Erstellen einer Verbundtabelle wird unter CREATE TABLE (Windows Azure SQL-Datenbank) beschrieben. Nachfolgend finden Sie ein Beispiel für das Erstellen eines Verbunds mit dem Namen CustomerFederation und das Erstellen einer Verbundtabelle mit dem Namen Customer. Der Verbundverteilungsschlüssel für CID ist mit der Verbundtabellenspalte für CustomerID über die Klausel "FEDERATE ON" verknüpft:

CREATE FEDERATION CustomerFederation(cid BIGINT RANGE)
GO

USE FEDERATION CustomerFederation(cid = 0) WITH RESET, FILTERING=OFF
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Customer](
[CustomerID] [bigint] NOT NULL,
[Title] [nvarchar](8) NULL,
[FirstName] [nvarchar](50) NOT NULL,
[MiddleName] [nvarchar](50) NULL,
[LastName] [nvarchar](50) NOT NULL,
[Suffix] [nvarchar](10) NULL,
[CompanyName] [nvarchar](128) NULL,
[SalesPerson] [nvarchar](256) NULL,
[EmailAddress] [nvarchar](50) NULL,
[Phone] [nvarchar](25) NULL,
 CONSTRAINT [PK_Customer] PRIMARY KEY CLUSTERED 
(
[CustomerID] ASC
) 
)FEDERATED ON (cid = CustomerID)

Die Zeilen in einer Verbundtabelle werden automatisch auf alle Elementdatenbanken in einem Verbund verteilt. Das Element, in dem sich eine bestimmte Zeile befindet, ist abhängig vom Wert der Spalte, mit der eine Verbundtabelle verbunden ist. Jedes Verbundelement deckt einen bestimmten Wertebereich für den Verbundschlüssel ab und enthält Zeilen, in denen der Wert der Verbundspalte in dem Bereich liegt, der von dem Element abgedeckt wird.

Verbundtabellen werden in Vorgänge wie SPLIT und DROP eingeschlossen. Beispielsweise wird ein Verbundelement durch einen SPLIT-Vorgang in zwei neue Datenbanken geteilt. Die Zeilen von Verbundtabellen in dem Element werden ebenfalls geteilt, und die Daten befinden sich nach Abschluss des SPLIT-Vorgangs in den neuen Elementen. Dieser Vorgang wird automatisch durchgeführt und ist für jede Anwendung mit dem Verbund sichtbar.

Verbundtabellen weisen die folgenden Einschränkungen auf:

  • Die Verbundspalte der Verbundtabelle kann nur Daten enthalten, die innerhalb der Grenzwerte range_low (einschließlich) und range_high (ausschließlich) des Verbundmitglieds liegen.

  • Der Datentyp der Verbundspalte muss exakt mit dem Datentyp übereinstimmen, der in der Verbunddefinition festgelegt ist.

  • All eindeutigen und gruppierten Indizes der Verbundtabelle müssen die Verbundspalte enthalten. Die Reihenfolge, in der die Verbundspalte im Index angezeigt wird, kann von der Ordnungszahl des Schlüssels im Verbund abweichen.

  • Verbundspaltenwerte können nicht auf Werte außerhalb des Verbundmitgliedsbereichs aktualisiert werden.

  • Die Verbundspalte kann keine persistente oder nicht persistente berechnete Spalte sein.

  • Indizierte Sichten werden in Verbundmitgliedern nicht unterstützt.

  • Verbundspalten lassen keine NULL-Werte zu.

  • Alle Fremdschlüsseleinschränkungen für Verbundtabellen müssen die Verbundspalte sowohl in der verweisenden Tabelle als auch in der Tabelle, auf die verwiesen wird, mit derselben Ordnungszahl in den Fremdschlüssel einbeziehen. Für Verweistabellen können keine Fremdschlüsselbeziehungen zu Verbundtabellen definiert werden. Für Verbundtabellen hingegen können ohne Einschränkungen Fremdschlüsselbeziehungen zu Verbundtabellen definiert werden.

  • Mit der FEDERATED ON-Klausel erstellte Tabellen können wie gewohnt gelöscht werden. Sie können auch ALTER TABLE verwenden, um alle Eigenschaften einer Verbundtabelle zu ändern. Verbundattribute wie der Verbundschlüssel sind hiervon ausgenommen. Um eine Verweistabelle in eine Verbundtabelle oder eine Verbundtabelle in eine Verweistabelle zu ändern, müssen Sie neue Tabellen mit den gewünschten Eigenschaften erstellen und die vorhandene Tabelle löschen.

  • Wenn eine Tabelle mit STATISTICS_NORECOMPUTE gekennzeichnet ist, werden Statistiken beim Durchführen von Verbundvorgängen wie SPLIT nicht für ungültig erklärt und nicht neu berechnet. Dies kann nach Neupartitionierungsvorgängen wie SPLIT zu Problemen im Ausführungsplan führen.

  • Verbundmitglieder bieten keine Unterstützung für die IDENTITY-Eigenschaft.

  • Verbundmitglieder bieten keine Unterstützung für die Datentypen timestamp und rowversion.

Alle allgemeinen Tabellenmetadaten für Verbundtabellen werden wie Verweistabellen in bekannten Systemmetadatentabellen, z. B. sys.objects, gespeichert. Verbundspezifische Eigenschaften werden jedoch in sys.federated_table_columns (Windows Azure SQL-Datenbank) gespeichert.

Verweistabellen

Verweistabellen sind Tabellen, die ohne die Klausel "FEDERATE ON" erstellt werden, und bei denen keine automatische Verteilung auf alle Verbundmitglieder erfolgt. Verweistabellen können manuell über alle Elemente eines Verbunds repliziert werden. Ein entsprechender automatischer Vorgang ist jedoch nicht vorhanden.

Verweistabellen enthalten oftmals ergänzende Informationen für Abfragen von Verbundtabellen. Dadurch entfällt die Notwendigkeit, mehrere Datenbanken abzufragen. So kann es sinnvoll sein, Kundendaten auf mehrere Elementdatenbanken zu vereinen und zu verteilen, während dies für entsprechende Daten zu Bundesländern und Postleitzahlen nicht unbedingt hilfreich ist. Sie können jedoch eine Kopie der Angaben für das Bundesland und die Postleitzahl im jeweiligen Verbundmitglied speichern, sodass Abfragen nicht für mehrere Datenbanken ausgeführt werden müssen.

Unterstützung von räumlichen Daten

Der geography- und der geometry-Typ können nicht als Datentyp der Spalte verwendet werden, mit der eine Verbundtabelle verbunden ist. Sie können jedoch Datentypen der Verbundtabelle sein. Die Verwendung von räumlichen Daten für Verbunde unterliegt keinen weiteren Einschränkungen.

Räumliche Indizes bleiben nach einem SPLIT- oder DROP-Vorgang in den Zielverbundmitgliedern konsistent und intakt.

Hierarchie-ID

Der Hierarchie-ID-Typ kann nicht als Datentyp der Spalte verwendet werden, mit der eine Verbundtabelle verbunden ist. Er kann jedoch ein Datentyp der Verbundtabelle sein. Die Verwendung der Hierarchie-ID für Verbunde unterliegt keinen weiteren Einschränkungen.

Hierarchie-ID-Indizes bleiben nach einem SPLIT- oder DROP-Vorgang in den Zielverbundmitgliedern konsistent und intakt.

Herstellen einer Verbindung mit Verbundmitgliedern

Verbindungen mit einem Verbund werden über USE FEDERATION (Windows Azure SQL-Datenbank) hergestellt. Mit diesem Befehl wird die Verbindung automatisch an das richtige Element in einem Verbund weitergeleitet. Es ist daher nicht erforderlich, die physische Implementierung des Verbunds zu kennen, solange der Verteilungsschlüssel und der Bereich gültiger Werte für den entsprechenden Datentyp bekannt sind.

Durch Angeben eines Verbundverteilungsschlüssels und eines Werts wird eine Verbindung zur Elementdatenbank im Verbund hergestellt. Der Bereich der Verbindung wird durch Angeben des Werts WITH FILTERING angegeben. Wenn FILTERING auf ON festgelegt ist, wird der Bereich der Verbindung auf den angegebenen Wert festgelegt, und jede Abfrage, die mit dieser Verbindung ausgeführt wird, verhält sich, als würde sie auch (federated_column=value) enthalten. Dies ist hilfreich, wenn Sie nur Daten zurückgeben möchten, die mit dem angegebenen Wert verknüpft sind. Weitere Informationen finden Sie unter USE FEDERATION (Windows Azure SQL-Datenbank).

Sicherheitsprinzipale

Authentifizierung und Autorisierung gegenüber einer Datenbank mit einem Verbund werden wie gewohnt durchgeführt. Die Konnektivität wird durch Anmeldungen und Benutzer bestimmt, und die Gruppierung von Prinzipalen wird durch Rollen verwaltet. Alle Prinzipale in einer Datenbank mit einem Verbund werden jedoch auf die Verbundstammdatenbank beschränkt und nicht automatisch auf alle Elemente im Verbund angewendet.

Stattdessen verwenden die Verbundmitglieder verknüpfte Benutzer. Beim Erstellen eines Benutzers in einem Verbundmitglied mit dem Befehl CREATE USER (Windows Azure SQL-Datenbank) wird ein Link zum Benutzer in der Verbundstammdatenbank erstellt, wenn der angegebene Name mit einem Benutzer im Verbundstamm übereinstimmt. Sie können nur Benutzer in einer Elementdatenbank erstellen, die mit einem Benutzer im Verbundstamm verknüpft sind.

CREATE USER (Windows Azure SQL-Datenbank) und ALTER USER (Windows Azure SQL-Datenbank) unterstützen eine vereinfachte Syntax zur Verwendung in einem Verbundelement, um die Verwaltung von Benutzern in einem Verbundelement zu unterstützen. Die Syntax lautet wie folgt:

CREATE USER userName
[;]

ALTER USER userName
    WITH <set_item> [ ,…n]
[;]
<set_item> ::=
     NAME = newUserName

Kopiervorgänge

Für eine Datenbank, die Verbunde enthält, kann kein Datenbankkopiervorgang ausgeführt werden. Wenn in einer Datenbank ein Datenbankkopiervorgang aktiv ist, schlägt das Erstellen eines Verbunds fehl. Für Verbundmitglieder kann ebenfalls keine Datenbankkopie ausgeführt werden.

Datenbankkontingent

Verbundvorgänge werden nicht auf das Verbundstammkontingent angewendet. Wenn das Kontingent für die Stammdatenbank überschritten wird, können Sie weiterhin SPLIT- und DROP-Vorgänge ausführen. Wenn das Kontingent eines Verbundmitglieds überschritten wird, kann dieses weiterhin an SPLIT- oder DROP-Vorgängen teilnehmen, solange das Kontingent der Zieldatenbank nicht durch den Vorgang überschritten wird.

Verbindungseigenschaften und Transact-SQL-Eigenschaften

Nach Abschluss von Neupartitionierungsvorgängen wie SPLIT und DROP werden die Verbindungen gelöscht. Das bedeutet, dass Verbindungseigenschaften, z. B. SET-Optionen, Einstellungen der Transaktionsisolationsstufe oder Variablen, ebenfalls zurückgesetzt werden. Durch einen SPLIT-Vorgang wird eine neue physische Datenbank erstellt. Daher können die folgenden Transact-SQL-Eigenschaften nicht über mehrere SPLIT-Vorgänge beibehalten werden.

 

Transact-SQL Einschränkungen der SQL-Datenbank-Unterstützung Unterstützung in Datenbanken mit Verbunden

timestamp-Datentyp und rowversion-Datentyp

Nicht per Commit bestätigte timestamp-Werte und rowversion-Werte der aktuellen Datenbank (DBTS) werden von der SQL-Datenbank möglicherweise nicht failoverübergreifend beibehalten.

Der timestamp-Datentyp und der rowversion-Datentyp werden in Verbundmitgliedern nicht unterstützt.

Funktionen mit timestamp und rowversion, z. B. @@dbts, geben Werte zurück, wenn in einer angegebenen Datenbank kein timestamp-Wert und kein rowversion-Wert vorhanden ist.

SYSUTCDATETIME(),SYSDATETIMEOFFSET(),SYSDATETIME(),getdate(), getutcdate()current_timestamp

Die SQL-Datenbank meldet möglicherweise timestamp-Werte und rowversion-Werte vom lokalen Computer sowie failoverübergreifende Zeitangaben, die weiter in der Zukunft oder weiter in der Vergangenheit liegen.

Mit den gleichen Einschränkungen über mehrere Neupartitionierungsvorgänge unterstützt.

DATABASE_PRINCIPAL_ID()

Prinzipal-SIDs bleiben für einen angegebenen Prinzipalnamen zwischen Verbundmitgliedern und Verbundstämmen unverändert erhalten. Nach einem Neupartitionierungsvorgang, z. B. DROP, können sich Prinzipal-IDs jedoch ändern.

IDENTITY-Eigenschaft von Spalten

Die IDENTITY-Eigenschaft wird in Verbundmitgliedern nicht unterstützt. Identitätsfunktionen, z. B. IDENT_CURRENT, IDENT_SEED, IDENT_INCR und SCOPE_IDENTITY, geben immer NULL zurück, da in Verbundmitgliedern keine Identitätsspalten vorhanden sein können.

OBJECT_ID und entsprechende Funktionen, die für benutzerdefinierte Objekte ausgeführt werden; object_id(…), object_name(object_id), type_id(…), type_name(type_id)

Nach einem Neupartitionierungsvorgang, z. B. DROP, kann sich die Object_id von benutzerdefinierten Objekten ändern.

Ändern von Datenbanken mit Verbunden

Sämtliche SQL-Datenbankoptionen werden unterstützt. Jedoch wird durch Änderungen des Werts einer Option für die Verbundstammdatenbank nicht die Option für die Verbundmitglieder geändert.

Siehe auch

Fanden Sie dies hilfreich?
(1500 verbleibende Zeichen)

Community-Beiträge

HINZUFÜGEN
© 2013 Microsoft. Alle Rechte vorbehalten.
facebook page visit twitter rss feed newsletter