Partilhar via


Executando operações em lote (XMLA)

Você pode usar o comando Lote no XML for Analysis (XMLA) para executar vários comandos XMLA usando um único método XMLA Execute . Você pode executar vários comandos contidos no comando Lote como uma única transação ou em transações individuais para cada comando, em série ou em paralelo. Você também pode especificar associações fora de linha e outras propriedades no comando Lote para processar vários objetos do Microsoft SQL Server SQL Server Analysis Services.

Executando comandos em lote transacionais e não transacionais

O comando Lote executa comandos de uma das duas maneiras:

Transacional.
Se o atributo Transaction do comando Batch for definido como true, o comando Do Lote executará comandos todos os comandos contidos pelo comando Lote em uma única transação- um lote transacional .

Se algum comando falhar em um lote transacional, SQL Server Analysis Services reverterá qualquer comando no comando Lote executado antes do comando que falhou e o comando do Lote terminará imediatamente. Os comandos no comando Lote que ainda não foram executados não são executados. Após o término do comando Lote , o comando Lote relata os erros que ocorreram para o comando com falha.

Não transacional
Se o atributo Transaction for definido como false, o comando Lote executará cada comando contido pelo comando Lote em uma transação separada- um lote não transacional . Se algum comando falhar em um lote não transacional, o comando do Lote continuará a executar comandos após o comando que falhou. Depois que o comando Lote tentar executar todos os comandos que o comando do Lote contém, o comando Lote relatará todos os erros ocorridos.

Todos os resultados retornados por comandos contidos em um comando do Lote são retornados na mesma ordem em que os comandos estão contidos no comando Lote . Os resultados retornados por um comando do Lote variam de acordo com se o comando do Lote é transacional ou não transacional.

Observação

Se um comando do Lote contiver um comando que não retorna a saída, como o comando Lock , e esse comando for executado com êxito, o comando Lote retornará um elemento raiz vazio dentro do elemento de resultados. O elemento raiz vazio garante que cada comando contido em um comando do Lote possa ser correspondido com o elemento raiz apropriado para os resultados desse comando.

Retornando resultados a partir de resultados em lote transacionais

Os resultados dos comandos executados em um lote transacional não são retornados até que todo o comando do Lote seja concluído. Os resultados não são retornados depois que cada comando é executado porque qualquer comando que falha em um lote transacional faria com que todo o comando do Lote e todos os comandos contendo fossem revertidos. Se todos os comandos forem iniciados e executados com êxito, o elemento de retorno do elemento ExecuteResponse retornado pelo método Execute para o comando Lote conterá um elemento de resultados , que, por sua vez, contém um elemento raiz para cada comando de execução com êxito contido no comando Lote . Se qualquer comando no comando Lote não puder ser iniciado ou não for concluído, o método Execute retornará uma falha SOAP para o comando Lote que contém o erro do comando que falhou.

Retornando resultados a partir de resultados em lote não transacionais

Os resultados dos comandos executados em um lote não transacional são retornados na ordem em que os comandos estão contidos no comando lote e como eles são retornados por cada comando. Se nenhum comando contido no comando Lote puder ser iniciado com êxito, o método Execute retornará uma falha SOAP que contém um erro para o comando Lote . Se pelo menos um comando for iniciado com êxito, o elemento de retorno do elemento ExecuteResponse retornado pelo método Execute para o comando Lote conterá um elemento de resultados , que por sua vez contém um elemento raiz para cada comando contido no comando Lote . Se um ou mais comandos em um lote não transacional não puderem ser iniciados ou não forem concluídos, o elemento raiz desse comando com falha conterá um elemento de erro que descreve o erro.

Observação

Desde que pelo menos um comando em um lote não transacional possa ser iniciado, o lote não transacional é considerado como sendo executado com êxito, mesmo que todos os comandos contidos no lote não transacional retornem um erro nos resultados do comando Lote .

Usando a execução em série ou em paralelo

Você pode usar o comando Lote para executar comandos incluídos em série ou em paralelo. Quando os comandos são executados em série, o próximo comando incluído no comando Lote não pode ser iniciado até que o comando em execução no comando Lote seja concluído. Quando os comandos são executados em paralelo, vários comandos podem ser executados simultaneamente pelo comando Lote .

Para executar comandos em paralelo, adicione os comandos a serem executados em paralelo à propriedade Parallel do comando Lote . Atualmente, SQL Server Analysis Services pode executar apenas comandos contíguos e sequenciais do Processo em paralelo. Qualquer outro comando XMLA, como Criar ou Alterar, incluído na propriedade Parallel , é executado serialmente.

SQL Server Analysis Services tenta executar todos os comandos process incluídos na propriedade Parallel em paralelo, mas não pode garantir que todos os comandos de processo incluídos possam ser executados em paralelo. A instância analisa cada comando Process e, se a instância determinar que o comando não pode ser executado em paralelo, o comando Process será executado em série.

Observação

Para executar comandos em paralelo, o atributo Transaction do comando Batch deve ser definido como true porque SQL Server Analysis Services dá suporte a apenas uma transação ativa por conexão e lotes não transacionais executam cada comando em uma transação separada. Se você incluir a propriedade Parallel em um lote não transacional, ocorrerá um erro.

Limitando a execução em paralelo

Uma instância de SQL Server Analysis Services tenta executar o maior número possível de comandos de processo em paralelo, até os limites do computador no qual a instância é executada. Você pode limitar o número de comandos process executando simultaneamente definindo o atributo maxParallel da propriedade Parallel para um valor que indica o número máximo de comandos process que podem ser executados em paralelo.

Por exemplo, uma propriedade Parallel contém os seguintes comandos na sequência listada:

  1. Criar

  2. Processo

  3. Alterar

  4. Processo

  5. Processo

  6. Processo

  7. Delete (excluir)

  8. Processo

  9. Processo

O atributo maxParallel dessa propriedade Parallel é definido como 2. Dessa forma, a instância executa as listas de comandos anteriores como descrito na lista seguinte:

  • O Comando 1 é executado serialmente porque o comando 1 é um comando Create e somente os comandos Process podem ser executados em paralelo.

  • O comando 2 é executado serialmente após a conclusão do comando 1.

  • O comando 3 é executado serialmente após a conclusão do comando 2.

  • Os comandos 4 e 5 são executados em paralelo após a conclusão do comando 3. Embora o comando 6 também seja um comando Process , o comando 6 não pode ser executado em paralelo com os comandos 4 e 5 porque a propriedade maxParallel está definida como 2.

  • O comando 6 é executado em série após a conclusão dos comandos 4 e 5.

  • O comando 7 é executado em série após a conclusão do comando 6.

  • Os comandos 8 e 9 são executados em paralelo após a conclusão do comando 7.

Usando o comando em lotes para processar objetos

O comando Lote contém várias propriedades e atributos opcionais incluídos especificamente para dar suporte ao processamento de vários projetos SQL Server Analysis Services:

  • O atributo ProcessAffectedObjects do comando Lote indica se a instância também deve processar qualquer objeto que exija reprocessamento como resultado de um comando Process incluído no comando Lote que processa um objeto especificado.

  • A propriedade Bindings contém uma coleção de associações fora de linha usadas por todos os comandos process no comando Lote .

  • A propriedade DataSource contém uma associação fora de linha para uma fonte de dados usada por todos os comandos process no comando Lote .

  • A propriedade DataSourceView contém uma associação fora de linha para uma exibição de fonte de dados usada por todos os comandos process no comando Lote .

  • A propriedade ErrorConfiguration especifica a maneira como o comando Lote lida com erros encontrados por todos os comandos de processo contidos no comando Lote .

    Importante

    Um comando Process não poderá incluir as propriedades Bindings, DataSource, DataSourceView ou ErrorConfiguration , se o comando Process estiver contido em um comando do Lote . Se você precisar especificar essas propriedades para um comando Process , forneça as informações necessárias nas propriedades correspondentes do comando Lote que contém o comando Process .

Consulte Também

Elemento Batch (XMLA)
Elemento Process (XMLA)
Processando um modelo multidimensional (Analysis Services)
Desenvolvendo com XMLA no Analysis Services