Executando operações em lote (XMLA)
Você pode usar o comando Batch no XMLA (XML for Analysis) para executar vários comandos XMLA que usam um único método Execute XMLA. Você pode executar vários comandos contidos no comando Batch como uma única transação ou em transações individuais para cada comando, em série ou em paralelo. Você também pode especificar ligações fora de linha e outras propriedades no comando Batch para processar vários objetos do Microsoft SQL Server Analysis Services.
Executando comandos em lote transacionais e não-transacionais
O comando Batch executa comandos de uma destas maneiras:
Transacional
Se o atributo Transaction do comando Batch for definido como verdadeiro, Batch executará todos os comandos contidos pelo comando Batch em uma única transação – um lote transacional.Se qualquer um dos comandos falhar em um lote transacional, o Analysis Services reverterá qualquer comando de Batch executado antes do comando que falhou e o comando Batch será imediatamente interrompido. Qualquer comando de Batch que ainda não tiver sido executado não o será. Após o término do comando Batch, Batch informará qualquer erro ocorrido no comando que falhou.
Não-transacional
Se o atributo Transaction for definido como falso, Batch executará todos os comandos contidos pelo comando Batch em uma transação separada – um lote não-transacional. Se qualquer comando falhar em um lote não-transacional, Batch comando continuará a executar comandos após o que falhou. Depois que o comando Batch tenta executar todos os comandos que contidos por Batch, o comando Batch informará qualquer erro ocorrido.
Todos os resultados retornados por comandos contidos em um comando Batch são retornados na mesma ordem em que os comandos estão contidos em Batch. Os resultados retornados por um comando Batch variam caso Batch seja transacional ou não-transacional.
Observação |
---|
Se um comando Batch contiver um comando que não retorna saída, como Lock, e se esse comando for executado com êxito, Batch retornará um elemento root no elemento de resultados. O elemento root vazio garante que cada comando contido em um Batch possa ser correspondido ao elemento root apropriado para os resultados desse comando. |
Retornando resultados a partir de resultados em lote transacionais
Os resultados de comandos executados em um lote transacional não são retornados até que todo o comando Batch é concluído. Os resultados não são retornados após a execução de cada comando porque qualquer comando que falhar em um lote transacional poderia fazer com que todo o comando Batch e os comandos nele contidos fossem revertidos. Se todos os comandos forem iniciados e executados com êxito, o elemento return do elemento ExecuteResponse retornado pelo método Execute para o comando Batch contém um elemento results que, por sua vez, contém um elemento root para cada comando de execução bem-sucedida contido no comando Batch. Se qualquer comando de Batch não puder ser iniciado ou se a sua conclusão falhar, o método Execute retornará uma falha SOAP para comando Batch que contém o erro do comando que falhou.
Retornando resultados a partir de resultados em lote não-transacionais
Os resultados de comandos executados em um lote não-transacional são retornados na ordem em que estão contidos em Batch e como são retornados por cada comando. Se nenhum comando contido em Batch puder ser iniciado com êxito, o método Execute retornará uma falha SOAP com um erro para o comando Batch. Se pelo menos um comando for iniciado com êxito, o elemento return do elemento ExecuteResponse retornado pelo método Execute para o comando Batch conterá um elemento results que, por sua vez, conterá um elemento root para cada comando contido em Batch. Se um ou mais comandos de um lote não-transacional não puder ser iniciado ou se a sua conclusão falhar, o elemento root desse comando com falha conterá um elemento error com a descrição do erro.
Observação |
---|
Desde que pelo menos um comando de um lote não-transacional possa ser iniciado, o lote não-transacional terá sua execução considerada como bem-sucedida, mesmo que todos os comandos contidos no lote não-transacional retornem um erro nos resultados do comando Batch. |
Usando a execução em série ou em paralelo
Você pode usar o comando Batch 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 em Batch não poderá ser iniciado até que o comando em execução em Batch seja concluído. Quando os comandos são executados em paralelo, vários deles poderão ser executados simultaneamente por Batch.
Para executar comandos em paralelo, adicione os comandos a serem executados em paralelo à propriedade Parallel do comando Batch. Atualmente, o Analysis Services só pode executar comandos Process seqüenciais e contíguos em paralelo. Qualquer outro comando XMLA, como Create ou Alter, incluídos na propriedade Parallel serão executados em série.
O Analysis Services tenta executar comandos Process incluídos na propriedade Parallel em paralelo, mas não pode garantir que todos os comandos Process incluídos serão 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 verdadeiro porque o Analysis Services só dá suporte a 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 do Analysis Services tenta executar quantos comandos Process em paralelo como for possível, até os limites do computador em que ela está sendo executada. Você pode limitar o número de comandos Process executados simultaneamente por meio da configuração do atributo maxParallel da propriedade Parallel como um valor indicando o número máximo de comandos Process que podem ser executados em paralelo.
Por exemplo, uma propriedade Parallel contém os comandos a seguir na seqüência listada:
Create
Process
Alter
Process
Process
Process
Delete
Process
Process
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 em série porque é um comando Create e somente os comandos Process podem ser executados em paralelo.
O comando 2 é executado em série após a conclusão do comando 1.
O comando 3 é executado em série 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, não poderá ser executado em paralelo com os comandos 4 e 5 porque a propriedade maxParallel foi 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 Batch contém várias propriedades e atributos opcionais especificamente incluídos para dar suporte ao processamento de vários projetos do Analysis Services:
O atributo ProcessAffectedObjects do comando Batch indica se a instância também deverá processar qualquer objeto que exija o reprocessamento de um resultado de um comando Process incluído no comando Batch que está processando um objeto especificado.
A propriedade Bindings contém uma coleção de ligações fora de linha usada por todos os comandos Process de Batch.
A propriedade DataSource contém uma ligação fora de linha para uma fonte de dados usada por todos os comandos Process de Batch.
A propriedade DataSourceView contém uma ligação fora de linha para uma exibição de fonte de dados usada por todos os comandos Process de Batch.
A propriedade ErrorConfiguration especifica o modo no qual o comando Batch manipula os erros encontrado por todos os comandos Process contidos no comando Batch.
Importante Um comando Process não poderá incluir as propriedades Bindings, DataSource, DataSourceView ou ErrorConfiguration, se o comando Process estiver contido em um comando Batch. Se você precisar especificar essas propriedades para um comando Process, forneça as informações necessárias das propriedades correspondentes do comando Batch que contém Process.
Consulte também