Exécution d'opérations de traitement par lot (XMLA)

Vous pouvez utiliser la commande Batch XMLA (XML for Analysis) pour exécuter plusieurs commandes XMLA en utilisant une seule méthode Execute XMLA. Vous pouvez exécuter plusieurs commandes contenues dans la commande Batch sous la forme d'une transaction unique ou de plusieurs transactions individuelles pour chaque commande, en série ou en parallèle. Vous pouvez également spécifier des liaisons hors ligne et d'autres propriétés dans la commande Batch pour traiter plusieurs objets Microsoft SQL Server Analysis Services.

Exécution de commandes Batch transactionnelles et non transactionnelles

La commande Batch peut exécuter les commandes selon deux modes :

  • Transactionnel
    Si l'attribut Transaction de la commande Batch est défini à true, la commande Batch exécute toutes les commandes contenues dans la commande Batch dans une même transaction—lot transactionnel.

    En cas d'échec d'une commande dans un lot transactionnel, Analysis Services annule les commandes de la commande Batch qui se sont exécutées avant la commande qui a échoué, et la commande Batch s'achève immédiatement. Les commandes contenues dans la commande Batch dont l'exécution n'a pas encore eu lieu ne sont pas exécutées. Une fois la commande Batch terminée, la commande Batch fait état des erreurs qui se sont produites pour la commande ayant échoué.

  • Non transactionnel
    Si l'attribut Transaction est défini à false, la commande Batch exécute chaque commande contenue dans la commande Batch dans une transaction distincte—lot non transactionnel. En cas d'échec d'une commande dans un lot non transactionnel, la commande Batch continue d'exécuter les commandes venant après la commande qui a échoué. Après avoir tenté d'exécuter toutes les Batch commandes contenues dans la commande Batch, la commande Batch fait état des erreurs qui se sont éventuellement produites.

Tous les résultats retournés par les commandes contenues dans une commande Batch sont retournés dans l'ordre qui est le leur dans la commande Batch. Les résultats retournés par une commande Batch varient selon que la commande Batch est transactionnelle ou non transactionnelle.

Notes

Si une commande Batch contient une commande qui ne retourne aucun résultat, telle que la commande Lock, et que cette commande s'exécute correctement, la commande Batch retourne un élément root vide dans l'élément results. L'élément root vide garantit que chaque commande contenue dans une commande Batch peut être mise en correspondance avec l'élément root approprié pour les résultats de cette commande.

Retour des résultats d'un lot transactionnel

Les résultats des commandes exécutées dans un lot transactionnel ne sont pas retournés tant que la commande Batch n'a pas abouti complètement. Les résultats ne sont pas retournés après l'exécution de chaque commande, car toute commande qui échoue dans un lot transactionnel entraîne l'annulation de la commande Batch entière et de toutes les commandes qu'elle contient. Si toutes les commandes démarrent et s'exécutent correctement, l'élément return de l'élément ExecuteResponse retourné par la méthode Execute pour la commande Batch contient un élément results qui, pour sa part, contient un élément root pour chaque commande correctement exécutée contenue dans la commande Batch. Si la commande Batch contient une commande qui ne peut pas démarrer ou aboutir, la méthode Execute retourne une erreur SOAP pour la commande Batch qui contient l'erreur de la commande qui a échoué.

Retour des résultats d'un lot non transactionnel

Les résultats des commandes exécutées dans un lot non transactionnel sont retournés dans l'ordre qui est le leur dans la commande Batch et tels qu'ils sont retournés par chaque commande. Si, à l'intérieure de la commande Batch, aucune commande ne peut démarrer correctement, la méthode Execute retourne une erreur SOAP qui contient une erreur pour la commande Batch. Si au moins une commande a démarré correctement, l'élément return de l'élément ExecuteResponse retourné par la méthode Execute pour la commande Batch contient un élément results qui, pour sa part, contient un élément root pour chaque commande contenue dans la commande Batch. Si une ou plusieurs commandes ne peut pas démarrer ou aboutir dans un lot non transactionnel, l'élément root de la ou des commandes en question contient un élément error décrivant l'erreur.

Notes

Du moment où au moins une commande parvient à démarrer dans un lot non transactionnel, celui-ci est considéré comme s'étant exécuté correctement, même si chaque commande contenue dans le lot non transactionnel retourne une erreur dans les résultats de la commande Batch.

Utilisation d'une exécution en série et parallèle

Vous pouvez utiliser la commande Batch pour exécuter les commandes qu'elle contient en série ou en parallèle. Lorsque les commandes sont exécutées en série, la commande suivante incluse dans la commande Batch ne peut pas démarrer tant que la commande en cours d'exécution dans la commande Batch n'a pas abouti. Lorsque les commandes sont exécutées en parallèle, plusieurs commandes peuvent être exécutées simultanément par la commande Batch.

Pour exécuter des commandes en parallèle, vous devez ajouter les commandes à exécuter de cette façon à la propriété Parallel de la commande Batch. Pour l'heure, Analysis Services ne peut exécuter en parallèle que les commandes contiguës et séquentielles Process. Les autres commandes XMLA incluses dans la propriété Parallel, telles que Create ou Alter, sont exécuté en série.

Analysis Services essaie d'exécuter en parallèle toutes les commandes Process incluses dans la propriété Parallel sans pour autant garantir qu'elle le Parallel puisse. L'instance analyse chaque commande Process. Si elle détermine qu'une commande Process ne peut pas être exécutée en parallèle, elle est exécutée en série.

Notes

Pour exécuter des commandes en parallèle, l'attribut Transaction de la commande Batch doit être défini à true, car Analysis Services ne prend en charge qu'une seule transaction active par connexion et les lots non transactionnels exécutent chaque commande dans une transaction distincte. Si vous incluez la propriété Parallel dans un lot non transactionnel, une erreur se produit.

Limitation de l'exécution parallèle

Une instance Analysis Services essaie d'exécuter autant de commandes Process en parallèle que possible, dans les limites de l'ordinateur sur lequel s'exécute l'instance. Vous pouvez limiter le nombre de commandes Process pouvant s'exécuter simultanément en définissant l'attribut maxParallel de la propriété Parallel avec une valeur indiquant le nombre maximal de commandes Process qui peuvent être exécutées en parallèle.

Par exemple, une propriété Parallel contient les commandes suivantes dans l'ordre indiqué :

  1. Create

  2. Process

  3. Alter

  4. Process

  5. Process

  6. Process

  7. Delete

  8. Process

  9. Process

L'attribut maxParallel de cette propriété Parallel est défini à 2. Par conséquent, l'instance exécute les listes précédentes de commandes comme décrit dans la liste suivante :

  • La commande 1 s'exécute en série, car la commande 1 est une commande Create et seules les commandes Process peuvent être exécutées en parallèle.

  • La commande 2 s'exécute en série une fois que la commande 1 a abouti.

  • La commande 3 s'exécute en série une fois que la commande 2 a abouti.

  • Les commandes 4 et 5 s'exécutent en parallèle une fois que la commande 3 a abouti. Bien que la commande 6 soit également une commande Process, elle ne peut pas s'exécuter en parallèle avec les commandes 4 et 5, car la propriété maxParallel est définie à 2.

  • La commande 6 s'exécute en série une fois que les commandes 4 et 5 ont abouti.

  • La commande 7 s'exécute en série une fois que la commande 6 a abouti.

  • Les commandes 8 et 9 s'exécutent en parallèle une fois que la commande 7 a abouti.

Utilisation de la commande Batch pour traiter les objets

La commande Batch contient plusieurs propriétés et attributs facultatifs qui ont été spécifiquement inclus pour prendre en charge le traitement de plusieurs projets Analysis Services :

  • L'attribut ProcessAffectedObjects de la commande Batch indique si l'instance doit également traiter les objets qui nécessitent un retraitement du fait de l'inclusion d'une commande Process dans la commande Batch traitant un objet spécifié.

  • La propriété Bindings contient une collection de liaisons hors ligne utilisée par toutes les commandes Process contenues dans la commande Batch.

  • La propriété DataSource contient une liaison hors ligne pour une source de données utilisée par toutes les commandes Process contenues dans la commande Batch.

  • La propriété DataSourceView contient une liaison hors ligne pour une vue de source de données utilisée par toutes les commandes Process contenues dans la commande Batch.

  • La propriété ErrorConfiguration spécifie la façon dont la commande Batch gère les erreurs rencontrée par toutes les commandes Process contenues dans la commande Batch.

    Important

    Une commande Process ne peut pas comporter les propriétés Bindings, DataSource, DataSourceView ou ErrorConfiguration si la commande Process est contenue dans une commande Batch. Si vous devez spécifier ces propriétés pour une commande Process, fournissez les informations nécessaires dans les propriétés correspondantes de la commande Batch qui contient la commande Process.