USE FEDERATION (base de données SQL Azure)

Permet de se connecter à une fédération.

Important

L'implémentation actuelle des fédérations sera retirée avec les couches de service Web et Business. Envisagez de déployer des solutions de partitionnement personnalisées pour maximiser l'extensibilité, la flexibilité et les performances.Pour plus d'informations sur le partitionnement personnalisé, consultez Montée en charge des bases de données Azure SQL.

S'applique à : Base de données SQL Azure.

Conventions de la syntaxe Transact-SQL (Transact-SQL)

Syntaxe

USE FEDERATION ROOT
    WITH RESET

USE FEDERATION federation_name (distribution_name = value)
    WITH [FILTERING={ON|OFF},] RESET
[;]

Arguments

  • ROOT
    Fait pointer une connexion existante vers la racine de fédération. Si la connexion est établie à un membre de la fédération, la connexion à la base de données racine de la fédération est rétablie. Aucun effet n'est à noter lorsque la connexion est établie à une autre base de données.

  • federation_name
    Nom de la fédération ciblée par la connexion.

  • distribution_name
    Nom de la clé de fédération correspondant à cette fédération.

  • value
    Valeur à utiliser pour se connecter au membre de la fédération. Le membre de fédération traitant la valeur de fédération devient le membre de fédération auquel la connexion est établie.

    La valeur doit être conforme au type spécifié par la fédération dans le nom de fédération (federation_name) défini.

    La valeur doit être différente de NULL.

  • WITH FILTERING=ON|OFF
    Lorsque l'argument n'est pas présent, le filtrage est activé.

    Lorsque FILTERING est désactivé (valeur OFF), la portée de la connexion est définie en fonction de la plage complète couverte par le membre de la fédération contenant la valeur clé spécifiée. La connexion se comporte comme si elle était établie au membre via son nom de membre de fédération physique (nom de base de données).

    Le filtrage est désactivé (valeur OFF) lorsque des applications cherchent à utiliser toutes les données du membre de la fédération (p.ex., pour analyser la plage entière) et qu'elles intègrent déjà une logique pour traiter le filtrage sur une seule instance d'unité atomique de fédération atomique.

    Lorsque FILTERING est activé (valeur ON), la portée de la connexion est définie en fonction de l'instance de clé de fédération d'un membre de la fédération et non de la plage complète de ce dernier. Dans ce mode, le processeur de requêtes ajoute à chaque requête qui fait référence à une table fédérée un prédicat (fed_column=value) de la colonne de fédération.

    Le filtrage est activé (valeur ON) lorsque des applications cherchent à limiter automatiquement leur accès à une unité atomique de fédération atomique (p.ex., uniquement tenant_id 55).

  • WITH RESET
    Il s'agit d'un mot clé requis qui rend la réinitialisation de connexion explicite.

Notes

L'instruction USE FEDERATION assure un comportement de regroupement de connexions efficace pour les bibliothèques de connectivité existantes en permettant aux applications de se connecter d'abord à la base de données qui contient l'objet de fédération et de basculer vers le membre de fédération spécifique via l'instruction USE FEDERATION. Cela est l'assurance que le pool de connexions client est plus petit que s'il devait gérer des membres de fédération individuels ou les valeurs unitaires atomiques de fédération.

USE FEDERATION peut être exécuté sur une connexion à n'importe quel moment de son existence, mais cette instruction doit être la seule du traitement et ne prend pas en charge le paramétrage.

USE FEDERATION rétablit une connexion entre le membre de fédération actuel ou la base de données racine et la racine de la fédération ou la valeur spécifiée dans un membre de la fédération. Lorsqu'une connexion est rétablie avec USE FEDERATION, la connexion est de nouveau établie. Par conséquent, tous les paramètres et le contexte existants de la connexion sont perdus. Cela revient à exécuter sp_reset_connection lorsqu'une connexion est extraite d'un pool de connexions.

Comme la base de données master ne peut pas contenir de fédération, l'exécution de USE FEDERATION ROOT dans la base de données master n'a aucun effet.

USE FEDERATION couplé à un nom de fédération qui n'existe pas retourne une erreur de type « La fédération <nom_fédération> n'existe pas ».

L'utilisation de FILTERING=ON permet de limiter la vue de la connexion à une seule instance de clé de fédération donnée. Une connexion à une instance de clé de fédération lie la requête à une unité atomique de fédération spécifique. Cela modifie la sémantique des requêtes émises au niveau de la connexion en introduisant un prédicat P. P est injecté pour toutes les tables fédérées dans une requête donnée en tant que Federation_Column =@filtering_value.

Toute requête qui tente de charger, insérer ou déplacer une ligne en dehors de la valeur de filtrage de fédération actuelle est non conforme et échouera, comme s'il existait une contrainte de validation au niveau de la table cible appliquant P.

Avertissement

L'unité atomique de fédération n'est pas une limite de sécurité.Le processeur de requêtes ne garantit pas l'isolement complet des informations entre les unités au sein du même membre de fédération.Ne vous servez pas du filtrage comme mécanisme d'isolement de sécurité.

Le processeur de requêtes ne garantit pas que filtrage de fédérations est traité avant de traiter les opérateurs de filtrage supplémentaires ou les expressions.Étant donné que l'ordre de traitement n'est pas garanti, une logique aléatoire risque de s'exécuter sur les lignes, ce qui peut entraîner des exceptions inattendues, telles qu'un dépassement de capacité ou une division par zéro.

Exemple

L'exemple suivant montre comment router la connexion à la racine de fédération.

using (SqlConnection connection = new SqlConnection(connectionString)) 
{ 
    connection.Open(); 
 
    using (SqlCommand command = connection.CreateCommand()) 
    { 
        // Route the connection to federation root 
        // Note that the CommandText should not contain any additional commends
        command.CommandText = "USE FEDERATION ROOT WITH RESET"; 
        command.ExecuteNonQuery(); 
    } 
}