SQL Server White Paper Templatedownload.microsoft.com/download/6/1/D/61D13F7E-76D9-4D0F... · Web...

74
Guia Operacional e de Ajuste do SSIS Artigo técnico do SQL Server Autores: Alexei Khalyako, Carla Sabotta, Silvano Coriani, Sreedhar Pelluru, Steve Howard Revisores técnicos: Cindy Gross, David Pless, Mark Simms, Daniel Sol Publicado em: dezembro de 2012 Aplica-se a: SQL Server 2012; Banco de dados SQL do Windows Azure Resumo: o SSIS (SQL Server Integration Services) pode ser usado de forma eficiente como uma ferramenta para mover dados para dentro e fora do Banco de dados SQL do Windows Azure (WA), como parte da solução de ETL (extração, transformação e carregamento) total e como parte da solução de movimentação de dados. Pode ser usado também para mover dados entre origens e destinos na nuvem, bem como em um cenário híbrido entre os ambientes em nuvem e local. Este documento descreve as práticas recomendadas do SSIS para origens e destinos na nuvem,

Transcript of SQL Server White Paper Templatedownload.microsoft.com/download/6/1/D/61D13F7E-76D9-4D0F... · Web...

SQL Server White Paper Template

Guia Operacional e de Ajuste do SSIS

Artigo tcnico do SQL Server

Autores: Alexei Khalyako, Carla Sabotta, Silvano Coriani, Sreedhar Pelluru, Steve Howard

Revisores tcnicos: Cindy Gross, David Pless, Mark Simms, Daniel Sol

Publicado em: dezembro de 2012

Aplica-se a: SQL Server 2012; Banco de dados SQL do Windows Azure

Resumo: o SSIS (SQL Server Integration Services) pode ser usado de forma eficiente como uma ferramenta para mover dados para dentro e fora do Banco de dados SQL do Windows Azure (WA), como parte da soluo de ETL (extrao, transformao e carregamento) total e como parte da soluo de movimentao de dados. Pode ser usado tambm para mover dados entre origens e destinos na nuvem, bem como em um cenrio hbrido entre os ambientes em nuvem e local. Este documento descreve as prticas recomendadas do SSIS para origens e destinos na nuvem, discute o planejamento para projetos SSIS, quer o projeto esteja inteiramente na nuvem ou envolva movimentaes de dados hbridas, e usa um exemplo para explicar como maximizar o desempenho em uma movimentao hbrida com a expanso da movimentao de dados.

Direitos autorais

Este documento fornecido "no estado em que se encontra". As informaes e opinies expressas nele, inclusive URLs e outras referncias a sites da Internet, podero ser alteradas sem aviso prvio. Voc assume integralmente o risco de us-lo.

Alguns exemplos descritos aqui so fictcios e fornecidos apenas como ilustrao. Nenhuma associao ou ligao real intencional ou deve ser inferida.

Este documento no d nenhum direito legal a nenhuma propriedade intelectual em qualquer produto Microsoft. Voc pode copiar e usar este documento para sua referncia interna.

2011 Microsoft. Todos os direitos reservados.

SumrioIntroduo5Design do projeto5Escopo e descrio do problema5Por que a movimentao de dados to importante no Azure6Principais cenrios de movimentao de dados7Carregamento inicial de dados e migrao de locais para a nuvem7Movimentao de dados gerados na nuvem para sistemas locais8Movimentao de dados entre servios em nuvem9Ferramentas, servios e solues existentes9SSIS (SQL Server Integration Services)10Classe SqlBulkCopy no ADO.NET11Programa de cpia em massa (BCP.EXE)12Filas e Blobs de Armazenamento do Azure12Opes de design e implementao13Criar e implementar uma arquitetura equilibrada13Consideraes sobre tipos de dados14Empacotamento e implantao da soluo15Criar solues portteis15Distribuio de pacotes e componentes de cdigo16Banco de dados SQL do Azure como um destino da movimentao de dados16Consideraes sobre arquitetura17Projetando para reiniciar sem perder o progresso do pipeline18O princpio bsico18Exemplo com um nico destino19Exemplo com vrios destinos25Outras dicas de reinicializao27Criando a repetio sem interveno manual28Incorporando a repetio29Opes de ajuste de desempenho do SSIS33Ajustando as configuraes de rede33Configuraes de rede34Observao: ao alterar as configuraes da placa de interface de rede para usar quadros jumbo, verifique se a infraestrutura de rede pode oferecer suporte a esse tipo de quadro.34Configuraes do pacote SSIS35Consideraes especiais sobre dados BLOB37Usando novos recursos no SSIS 2012 para monitorar o desempenho por um sistema distribudo39Registrar estatsticas de desempenho40Exibir estatsticas da execuo41Monitorar fluxo de dados47Concluso52

Introduo

O SSIS (SQL Server Integration Services) uma ferramenta eficiente para mover dados para dentro e fora do Banco de dados SQL do Windows Azure, como parte da soluo de ETL (extrao, transformao e carregamento) total ou como parte da soluo de movimentao de dados, onde nenhuma transformao necessria. O SSIS eficiente para uma variedade de origens e destinos, estejam eles na nuvem, em ambientes locais ou combinados em uma soluo hbrida. Este documento descreve as prticas recomendadas do SSIS para origens e destinos na nuvem, discute o planejamento para projetos SSIS, quer o projeto esteja inteiramente na nuvem ou envolva movimentaes de dados hbridas, e usa um exemplo para explicar como maximizar o desempenho em uma movimentao hbrida com a expanso da movimentao de dados.

Design do projeto

Os projetos que movem dados entre repositrios de dados na nuvem e locais podem envolver diversos processos em vrias solues. Normalmente, h muitas partes que comeam na populao inicial do destino, que pode obter dados de outro sistema ou plataforma por meio de manuteno, como o rebalanceamento de conjuntos de dados entre vrias parties ou fragmentos, e possivelmente continuam com atualizaes ou operaes peridicas de dados em massa. O design do projeto e as suposies subjacentes so geralmente diferentes para uma soluo que envolve dados na nuvem, em comparao com um ambiente tradicional de movimentao de dados totalmente local. Porm, muitas aprendizagens, experincias e prticas ainda sero vlidas, mas necessrio fazer alteraes para acomodar as diferenas, como o fato de que seu ambiente no esteja mais autossuficiente e sob seu total controle enquanto voc muda para um pool compartilhado de recursos de consumo. Essas diferenas exigem uma abordagem mais equilibrada e escalonvel para que obtenham xito.

Escopo e descrio do problema

Em solues nativas compiladas desde o incio para a nuvem e em solues migradas, os dados precisam ser movidos para a frente e para trs. Isso provavelmente acontece em vrias fases do ciclo de vida do aplicativo. As fases incluem testes de pr-produo, carregamento inicial de dados, sincronizao subsequente entre dados gerados na nuvem e bancos de dados locais originais, e instantneos de dados recorrentes tirados desde a nuvem at outros sistemas locais (por exemplo, data warehouses).

Figura 1 Cenrios de movimentao de dados

O foco principal desta seo a fase de carregamento inicial de dados: considerando a experincia completa de extrair dados do banco de dados de origem, passar do ambiente local para a nuvem e carregar os dados em um destino final. importante enfatizar que a maioria das prticas recomendadas e otimizaes (se no todas) descrita neste documento ser igualmente aplicada a muitos dos cenrios descritos com alteraes mnimas. Falaremos sobre esses cenrios e seus principais problemas nas prximas sees.

Por que a movimentao de dados to importante no Azure

Em comparao com uma experincia de data center tradicional, em que os desafios de mover dados entre aplicativos e sistemas geralmente esto relacionados a problemas como compatibilidade de aplicativos, orquestrao e sincronizao de processos, alm de recursos de hardware fsico e de rede, em ambientes de nuvem como o WA, h vrias camadas extras de complexidade. A complexidade pode estar em reas como a conectividade entre o local e a nuvem (ou entre diferentes servios em nuvem) e estar relacionada a confiabilidade, largura de banda e latncia da conexo. Considerar essa complexidade essencial no desenvolvimento de uma boa soluo de movimentao de dados. Quando voc tem um nmero alto de partes mveis envolvidas na soluo, ainda mais importante concentrar seus esforos em encontrar um design equilibrado entre todos os componentes e tecnologias envolvidos. Voc tenta evitar a "saturao" do vnculo mais fraco da cadeia, uma vez que isso afetar negativamente todos os outros.

Com base em nossos testes, uma das reas crticas a capacidade do destino de dados de ingerir, na velocidade apropriada, a quantidade de dados despejados nele. A abordagem mais comum expandir o banco de dados de destino para vrios ns de back-end usando a fragmentao personalizada (http://social.technet.microsoft.com/wiki/contents/articles/1926.how-to-shard-with-windows-azure-sql-database.aspx). Essa tcnica ser obrigatria se a quantidade de dados a ser carregada for significativa (mais de 20 GB/hora era considerada significativa na data em que este documento foi escrito) e pode ser aplicada s instncias do Banco de dados SQL do Azure e ao SQL Server em execuo nas VMs (mquinas virtuais) do WA. Uma vez que isso no introduzir automaticamente escalabilidade linear na soluo de carregamento de dados, h um aumento na necessidade de balancear as outras partes mveis da soluo. As sees a seguir descrevero bem as reas mais crticas e as opes de design que podem ser adotadas para maximizar os resultados finais.

Principais cenrios de movimentao de dados

Veja a seguir os trs cenrios principais que consideraremos como parte da experincia completa de movimentao de dados. Eles contero a maioria dos temas e desafios recorrentes que encontramos ao longo do caminho.

Carregamento inicial de dados e migrao de locais para a nuvem

Movimentao de dados gerados na nuvem para sistemas locais

Movimentao de dados entre servios em nuvem

Carregamento inicial de dados e migrao de locais para a nuvem

(Figura 2 Cenrio de carregamento inicial de dados)

Cada aplicativo que precise ser movido de uma implantao local para um ambiente de nuvem tambm exigir que um determinado volume de dados seja movido. Quando o volume de dados se torna significativo, essa operao pode apresentar alguns desafios crticos que exigiro uma abordagem um pouco diferente em comparao com a que costumamos usar localmente. Isso se deve principalmente a duas reas: a latncia e a largura de banda da rede pblica, e a quantidade de recursos (compartilhados) para executar a fase de carregamento de dados, que esto disponveis nos ns de hardware fsico que hospedam um banco de dados (Banco de dados SQL do Azure ou VMs do WA) no ambiente de nuvem. H abordagens especficas (veja a Figura 2), como o particionamento dos dados originais em vrios arquivos de compartimento de memria e a compactao desses arquivos antes da transferncia pela rede, o que pode ajudar a minimizar o impacto do componente com desempenho mais baixo na soluo geral. Os dados de particionamento tambm ajudaro na nuvem para facilitar a insero desses dados em um destino que muito provavelmente estar fragmentado em vrias instncias do Banco de dados SQL do Azure ou hospedado por vrias VMs do WA.

O SSIS ter um papel importante no local e na nuvem para executar fisicamente as operaes de importao e exportao. A soluo total exigir tecnologias adicionais, como Filas e Armazenamento de Blob do Azure, para armazenar formatos de arquivos intermedirios e para orquestrar a cpia e recuperar a operao em vrias instncias de processos de importao do SSIS.

Para obter mais informaes relacionadas especificamente migrao de objetos e de um esquema de banco de dados para o Banco de dados SQL Azure, consulte as orientaes em Migrando aplicativos centrados em dados para o Windows Azure (http://msdn.microsoft.com/pt-br/library/windowsazure/jj156154.aspx).

Movimentao de dados gerados na nuvem para sistemas locais

Esse cenrio uma variao prxima do anterior, uma vez que de uma perspectiva tcnica trata-se de reverter o processo de carregamento e fluxo de dados, embora possa haver algumas diferenas em termos de objetivos gerais. Esse cenrio normalmente associado a dados gerados a frio que precisam ser recuperados e carregados periodicamente em sistemas locais, como data warehouses, ou a dados que alimentaro solues transacionais locais. Isso significa que a maioria das tcnicas e tecnologias mencionadas na seo anterior ser relevante para esse cenrio tambm. O SSIS vai extrair dados na nuvem e, em seguida, compactar e enviar os dados de volta a um sistema local onde, novamente, todas as orientaes tradicionais sero aplicadas. Consulte Guia de Desempenho do Carregamento de Dados (http://msdn.microsoft.com/pt-br/library/dd425070(v=SQL.100).aspx) para obter mais informaes.

Movimentao de dados entre servios em nuvem

H vrios cenrios em que obrigatria a movimentao de dados entre diferentes servios em nuvem e bancos de dados. Isso inclui a troca de dados entre diferentes solues que precisam interagir entre si e redistribuir dados particionados entre tabelas hospedadas em diferentes fragmentos, conforme (Banco de dados SQL ou SQL Server em uma VM Banco de dados SQL ou SQL Server em uma VM) (Figura 3 Movendo dados entre fragmentos de banco de dados)ilustrado na Figura 3 abaixo.

Esses fragmentos podem ser igualmente hospedados pelas instncias do Banco de dados SQL do Azure ou pelo SQL Server em uma VM do WA sem alterar a arquitetura e a abordagem subjacente. Como uma diferena em relao aos cenrios anteriores, o processo inteiro de movimentao de dados geralmente ocorre dentro dos limites de uma nica regio do WA, reduzindo significativamente o impacto da latncia de rede e eliminando a necessidade de exportar e importar dados por meio de um local de armazenamento intermedirio (discos locais ou Armazenamento do Azure). Embora alguns cenrios possam exigir a movimentao de dados entre regies, essa discusso est fora do escopo deste documento. Ao mesmo tempo, como a origem e o destino dos dados sero ambos hospedados em um ambiente em nuvem compartilhado, isso aumentar consideravelmente a necessidade de um ajuste cuidadoso da fase de carregamento, em particular.

Ferramentas, servios e solues existentes

Para implementar solues adequadas aos cenrios descritos anteriormente, voc pode usar uma combinao de ferramentas novas e existentes, alm de componentes e abordagens que podem ajudar tanto no ambiente local quanto na nuvem. Em um ambiente hbrido, alguns desses componentes precisaro estar localizados com sistemas e fontes de dados existentes no local, enquanto outros componentes se beneficiaro da localizao com destinos de dados na nuvem.

SSIS (SQL Server Integration Services)

Como uma soluo bsica de movimentao e integrao de dados, o SSIS oferece uma ampla variedade de recursos que atendem maioria das reas exigidas nessa gama de cenrios. Embora no tenham sido especificamente desenvolvidos para o ambiente hbrido, com o aparecimento de VMs do WA, os pacotes SSIS podem ser executados no local e na nuvem e podem, potencialmente, conectar os dois mundos diretamente. Isso est abrindo portas para uma grande reutilizao de conhecimentos e habilidades na comunidade de desenvolvedores de DBA/ETL, pois muitos profissionais antigos foram treinados e expostos a essa tecnologia. No entanto, importante entender que nem todos os processos ETL existentes implementados com o SSIS podem ser diretamente reutilizados ao mover dados do ambiente local para a nuvem.

Dependendo da complexidade do processo, do volume de dados e da velocidade, bem como das diferenas intrnsecas entre destinos de dados baseados em nuvem, como o SQL Server em execuo em uma VM do WA e o Banco de dados SQL do Azure, certo grau de rearquitetura ser necessrio.

Alguns desses desafios podem estar relacionados falta atual de recursos para lidar com realidades de conexo na nuvem, ao conectar ao Banco de dados SQL do Windows Azure, ou com o volume de trabalho necessrio para criar os pacotes SSIS que precisam lidar com as falhas e as repeties durante processos de carregamento de dados.

Outro desafio pode ser desenvolver pacotes que precisam se conectar a destinos de dados particionados (fragmentados), onde as entidades de banco de dados possam ser distribudas a um nmero de ns fsicos que, s vezes, mudam. A lgica de particionamento e os metadados precisam ser gerenciados e recuperados de arquivos de configurao de aplicativos ou de estruturas de dados.

A plataforma SSIS j possui a maioria dos recursos para lidar com esses desafios. Por exemplo, voc pode usar componentes de Fluxo de Dados, como transformaes Multicast e Diviso Condicional, para implementar a lgica de particionamento.

Para enfrentar alguns dos desafios de arquitetura, ser necessrio algum esforo para praticamente implementar o novo design, seja usando a abordagem de ferramenta visual tradicional ou usando um meio automatizado e programtico de arquitetar uma soluo mais complexa. Para a abordagem programtica, o SSIS oferece um ambiente com suporte total a script que abrange desde a criao de tarefas personalizadas no pipeline de transformao at a instrumentao do mecanismo que ajuda a solucionar problemas e depurar a execuo de pacotes.

Como parte da verso do SQL Server 2012 do Integration Services, uma soluo completa de monitoramento e gerenciamento, baseada em um catlogo comum, pode ajudar a criar uma soluo de movimentao de dados distribuda e a coletar informaes relacionadas s estatsticas e aos resultados da execuo de pacotes.

Classe SqlBulkCopy no ADO.NET

Se o desenvolvimento de uma soluo personalizada de movimentao de dados for o mtodo preferencial para resolver um problema especfico de movimentao de dados, a classe SqlBulkCopy (http://msdn.microsoft.com/pt-br/library/system.data.sqlclient.sqlbulkcopy.aspx) dentro da biblioteca de acesso a dados ADO.NET provavelmente ser uma das ferramentas mais comuns para a realizao do trabalho. Criada como um wrapper fino em torno de APIs de cpia em massa ODBC, essa classe aceitar uma tabela de dados como entrada e uma conexo de banco de dados existente; alm disso, oferecer um modo rpido e totalmente configurvel de carregar dados em um Banco de dados SQL do Azure ou no SQL Server.

Um aspecto importante de usar a classe SqlBulkCopy para interagir com um destino de dados baseado em nuvem a capacidade de substituir com facilidade a classe tradicional SqlConnection (http://msdn.microsoft.com/pt-br/library/system.data.sqlclient.sqlconnection.aspx), usada para interagir com o servidor, por uma classe ReliableSqlConnection (http://msdn.microsoft.com/pt-br/library/microsoft.practices.enterpriselibrary.windowsazure.transientfaulthandling.sqlazure.reliablesqlconnection(v=pandp.50).aspx) mais apropriada que faa parte da biblioteca Bloco de aplicativo para tratamento de falhas transitrias (http://msdn.microsoft.com/pt-br/library/hh680934(v=PandP.50).aspx). Isso simplifica muito a tarefa de implementar um mecanismo de lgica de repetio em um processo de carregamento de dados novo ou existente. Outra faceta interessante da biblioteca a capacidade de fornecer as polticas de repetio criadas, padro e personalizadas, para facilitar a adaptao a diferentes condies de conectividade.

A classe SqlBulkCopy expe todos os atributos e propriedades necessrios para que seja possvel adaptar o processo de carregamento a quase todas as condies. Este artigo explicar como ajustar e otimizar os tamanhos de lote de acordo com o local de execuo do processo de carregamento de dados, a quantidade de dados que o processo precisar importar e o tipo de conectividade que estar disponvel entre o processo e o destino de dados.

Uma situao em que a classe SqlBulkCopy no seria a opo mais eficiente para carregar dados em um destino quando a quantidade de dados dentro de um nico lote muito baixa, por exemplo, entre 10 e 1.000 linhas por lote. Nesse caso, a sobrecarga exigida pela classe SqlBulkCopy para estabelecer a verificao inicial de metadados antes do incio do carregamento de dados pode afetar o desempenho geral. Um boa abordagem alternativa para lotes pequenos seria definir um TVP (parmetro com valor de tabela) que implemente o esquema desejado e usar "INSERT INTO Destination SELECT * FROM @TVP" para carregar os dados.

Para obter um exemplo completo do uso da API de cpia em massa, consulte Classe SqlBulkCopy (http://msdn.microsoft.com/pt-br/library/system.data.sqlclient.sqlbulkcopy.aspx).

Programa de cpia em massa (BCP.EXE)

O programa de cpia em massa (um utilitrio de linha de comando criado nas mesmas APIs de cpia em massa descritas para a classe SqlBulkCopy) foi usado por algum tempo para carregar dados em massa para dentro e fora de uma instncia do SQL Server. O programa uma ferramenta simples, porm potente, para automatizar as solues simples de movimentao de dados com eficincia. Uma das principais vantagens da ferramenta a simplicidade de automatizar a instalao da ferramenta em ns de computao ou em VMs do Azure e usar com facilidade os scripts existentes que podem ser adaptados para execuo em um ambiente de nuvem.

Por outro lado, o BCP.EXE no fornece nenhum recurso avanado de gerenciamento de conexo. O BCP.EXE tambm exige o mesmo esforo que o SSIS faz na implementao de tarefas confiveis de movimentao de dados baseadas em operaes de repetio que podem causar instabilidade e perda de conexo. Alm disso, diferentemente das outras ferramentas que mencionamos, o BCP.EXE precisa importar ou exportar dados de arquivos fsicos hospedados em uma unidade local, mapeada ou conectada. Isso torna impossvel a transmisso direta de dados da origem ao destino, ou a leitura programtica de dados de diferentes origens, como o SSIS ou um aplicativo baseado em SqlBulkCopy podem fazer.

Filas e Blobs de Armazenamento do Azure

Embora no sejam ferramentas estritamente relacionadas movimentao de dados, os recursos de Armazenamento do Azure so definitivamente perfeitos para a implementao de solues complexas que exigem armazenamento intermedirio entre processos locais e em nuvem, alm de serem perfeitos para orquestrar fases e operaes entre os dois ambientes. Os Blobs de Armazenamento do Azure representam um mecanismo avanado de armazenamento para carregar arquivos intermedirios, e para trocar esses arquivos entre VMs ou ns de computao do Azure e aplicativos em execuo local. As filas de Armazenamento do Azure representam uma ferramenta simples de mensagem que pode ser usada para sinalizar e coordenar o acesso a arquivos e contedo armazenados como Blobs do Azure, desde os processos de carregamento de dados.

Os Blobs de Armazenamento e as Filas de Armazenamento do Azure so fceis de integrar em aplicativos existentes graas biblioteca .NET do Cliente de Armazenamento do Azure, que oferece um conjunto simples de classes para a interao com contas, contineres, blobs e operaes relacionadas ao Armazenamento. Essa biblioteca oculta os detalhes da interface subjacente baseada em REST e oferece uma ponte entre dados no local e na nuvem. Para obter mais informaes sobre como usar as Filas de Armazenamento do Azure, e os Blobs, consulte Como usar o Servio de Armazenamento de Fila (http://www.windowsazure.com/en-us/develop/net/how-to-guides/queue-service/) e Como usar o Servio de Armazenamento de Blob do Windows Azure no .NET (http://www.windowsazure.com/pt-br/develop/net/how-to-guides/blob-storage/).

Opes de design e implementao

Vrios fatores podem afetar as opes de design e implementao em relao s solues hbridas de movimentao de dados. A necessidade de reutilizar artefatos e processos existentes em oposio a iniciar usando uma folha em branco provavelmente a mais impactante para as decises de arquitetura, seguida pelo conjunto de habilidades e pelos perfis de membros da equipe (voc tem mais desenvolvedores vs. mais DBAs disponveis, por exemplo). A equipe tem o conjunto de habilidades para criar uma soluo totalmente personalizada de forma programtica ou o conjunto de habilidades para adaptar processos ETL existentes? Em qualquer um dos casos, h consideraes a serem levadas em conta ao introduzir a nuvem no design, pois algumas das suposies bvias que voc possa ter feito sobre os ambientes locais tradicionais talvez no sejam vlidas em um ambiente de nuvem.

Outro aspecto de design importante onde colocar e executar tarefas e servios especficos de movimentao de dados, como a lgica de diviso condicional que executa atividades de fragmentao ou compactao de dados. Dependendo de como essas tarefas so implementadas no nvel de componente (tarefas personalizadas ou pipeline do SSIS), esses componentes podem consumir muitos recursos de CPU. Para balancear o consumo de recursos, pode fazer sentido mover as tarefas para as VMs do Azure e aproveitar a elasticidade natural desse ambiente de nuvem. Ao mesmo tempo, a proximidade s fontes de dados nas quais elas funcionaro pode oferecer ainda mais benefcios devido reduo da latncia de rede, que pode ser realmente essencial nesse tipo de soluo. O planejamento e os testes ajudaro a determinar os afunilamentos de recursos especficos, e ajudaro a guiar suas decises sobre como implementar vrias tarefas.

Os esforos necessrios para implementar ou adaptar uma soluo existente a um cenrio hbrido precisam ser justificados pelos benefcios que o cenrio hbrido pode fornecer. preciso esclarecer as vantagens tcnicas que sero obtidas com a migrao de algumas partes de sua soluo para a nuvem, em oposio ao conjunto de itens que podem ser parcialmente perdidos, para adotar uma perspectiva correta e obter xito em uma implementao hbrida. Essas trocas esto relacionadas a aspectos muito tangveis de um design de soluo. Como posso aproveitar os muitos recursos de expanso fornecidos pelas plataformas de nuvem sem perder muito controle sobre os componentes de minha soluo? Como posso executar meus processos de carregamento de dados em uma plataforma que foi criada para expanso horizontal, e no vertical, e ainda oferecer um desempenho aceitavelmente previsvel? Resolver essas questes exige o abandono de algumas suposies sobre o desempenho e a confiabilidade da conectividade de rede, os componentes do aplicativo e os servios que esto sempre ativos e, em vez disso, planejar recursos que possam ser adicionados para resolver problemas de desempenho. Isso exige entrar em um mundo onde o design para falhas obrigatrio, a latncia geralmente mais alta do que na experincia passada e o particionamento de uma carga de trabalho entre vrios servios ou mquinas virtuais pequenas altamente desejado.

Criar e implementar uma arquitetura equilibrada

Todas essas consideraes devem nos guiar no sentido correto ao criar uma soluo complexa de movimentao de dados com vrias partes mveis, onde nenhuma delas est necessariamente representando um equivalente "melhor da categoria" de componentes locais tradicionais.

Este deve ser o princpio da direo: dividir o processo de movimentao de dados em vrias partes menores, desde a extrao de fonte de dados at o carregamento do destino de dados, que precisam ser assncronas e orquestradas para que se ajustem ao ambiente de latncia mais alta introduzido pela soluo hbrida. Encontrar o equilbrio certo entre todos os componentes em um ambiente ser muito mais importante do que obter o mximo (os limites) de um nico componente. Mesmo as etapas individuais desse processo, como o carregamento de dados, por exemplo, podem precisar ser particionadas em fluxos de carregamento menores atingindo diferentes fragmentos ou bancos de dados fsicos para superar as limitaes de um nico n de back-end em nossa arquitetura de Banco de dados SQL do Azure.

Devido natureza altamente disponvel, compartilhada e multilocatria de alguns componentes em nosso sistema (ns do Banco de dados SQL do Azure e o repositrio Blob de Armazenamento do Azure para uma VM do WA que hospeda o SQL Server), o envio de muitos dados por push para um nico n pode criar problemas adicionais de desempenho. Um exemplo de problema de desempenho inundar o mecanismo de replicao, o que resulta na reduo de todo o processo de carregamento de dados.

Figura 4 Representao esquemtica de uma arquitetura de carregamento de dados equilibrada

Consideraes sobre tipos de dados

Os tipos de dados, o design da entidade e o esquema de banco de dados usados podem afetar o processo de movimentao de dados de vrias maneiras. Como regra geral, os tipos de dados que podem atingir um grau maior de compactao podem fornecer vrios benefcios quando os dados so carregados em massa de suas fontes para o armazenamento local ou Blobs do Azure para operaes temporrias. A compactao dos dados antes de sua transferncia por meio eletrnico, obviamente, melhora o desempenho.

Empacotamento e implantao da soluo

Em geral, implementar e implantar uma soluo que abrange data centers locais e ambientes baseados em nuvem significa que voc precisa lidar com vrios componentes e servios. Proporcionar um alto grau de automao na implantao e na configurao de todas essas partes ainda mais importante se voc planeja implantar vrias instncias da soluo de movimentao de dados. As tecnologias de virtualizao podem ajudar a criar uma imagem mestra, a qual pode ser usada potencialmente em ambientes locais e na infraestrutura de VM do Azure para simplificar a implantao dos servios comuns que precisam estar presentes em ambos os ambientes.

Ao mesmo tempo, trabalhar com as VMs do WA apresenta algumas limitaes em comparao com o que podem fornecer outros ns da computao do Azure, como funes Web e funes de trabalho, em termos de pacotes e servios de aplicativo e correlacionados (pense nas tarefas de inicializao, por exemplo).

Se voc j estiver usando recursos de distribuio de software, como os disponveis por meio das famlias de produtos do Windows Server e System Center, outra possibilidade seria distribuir pacotes e componentes da soluo com alguns componentes que so executados na nuvem e outros que so executados em ambientes locais.

Outra possibilidade instalar e configurar manualmente os vrios componentes da soluo, como o SSIS e o SDK do Azure (para acessar recursos de Armazenamento do Azure), alm de todos os pacotes de instalao do aplicativo (.msi) necessrios em cada VM que ser executada como parte do ambiente distribudo.

Criar solues portteis

Um aspecto que se tornar ainda mais importante quando voc estiver executando uma soluo em uma arquitetura com capacidade de expanso, a possibilidade de reconfigurar opes rapidamente, como cadeias de conexo, credenciais e todas as outras opes de configurao que a soluo incluir. Geralmente, isso requer alguma forma de mecanismo de configurao centralizada, onde as informaes sero acessadas e propagadas em todos os diversos componentes e servios envolvidos no processo de movimentao de dados para garantir que cada alterao exija o mnimo de esforo. Ambas as ferramentas padro, como o SSIS e componentes e aplicativos desenvolvidos de modo personalizado, podem ser implementadas facilmente com essa abordagem em mente. O armazenamento do Azure pode ser uma boa opo para salvar e manter as informaes de configurao, supondo-se que elas possam ser acessadas facilmente e estejam disponveis para os componentes locais e em nuvem.

Vale observar que a plataforma SSIS j inclui vrios recursos que simplificam a portabilidade e o dimensionamento de uma soluo, como arquivos e parmetros de configurao. Os processos e servios adicionais que compem a soluo completa de movimentao de dados podem implementar os mesmos tipos de abordagens configurveis, tornando fcil mover a soluo entre diferentes ambientes.

Distribuio de pacotes e componentes de cdigo

Depois que todos os elementos da soluo tiverem sido implementados, o processo escolhido para distribuir fisicamente os vrios Pacotes SSIS e componentes de cdigo por vrias mquinas se torna essencial. Outro aspecto, e ainda mais importante, ser como esses pacotes e elementos de cdigo sero hospedados e executados nos vrios servidores e VMs. Embora o ambiente nativo do SSIS no SQL Server 2012 oferea diferentes tipos de armazenamento e modelos de implantao de pacotes, desenvolver uma soluo completa de movimentao de dados pode exigir opes diferentes. Se voc precisar executar alguns servios/aplicativos de orquestrao para supervisionar e controlar o processo de movimentao de dados, como esses servios/aplicativos podero ser implementados? E quanto da infraestrutura SSIS subjacente voc pode usar? Um exemplo especfico de distribuio e coordenao de componentes fornecido no white paper "SQL Server 2012 SSIS para Azure e movimentao de dados hbridos". O white paper est localizado na biblioteca MSDN no n White papers da Microsoft para SQL Server 2012.

As VMs do WA e os servidores fsicos baseados no Windows Server no implementam alguns dos recursos que a plataforma Azure fornece para funes Web e funes de trabalho. Consequentemente, a melhor opo implementar esses componentes como servios do Windows, para garantir que os processos sero iniciados quando os vrios hosts forem inicializados e que continuaro sendo executados independentemente de uma sesso de usurio interativa nesse computador especfico. A plataforma .NET facilita bastante a criao e o empacotamento desse tipo de pacote de software que, em seguida, pode ser distribudo e implantado nos vrios hosts que usam as opes que foram descritas anteriormente.

Os servios/aplicativos de orquestrao interagem com os vrios componentes externos (Filas, Armazenamento de BLOB do Windows Azure etc.), invocam o mecanismo de execuo do SSIS (DtExec.exe) e orquestram as tarefas de transformao e carregamento de dados em vrios hosts ou VMs.

Os componentes personalizados que a execuo do pacote exige tambm precisaro ser distribudos pelos vrios ns.

Com essa abordagem distribuda, um ambiente robusto, porttil e flexvel de implantao e execuo pode ser criado para hospedar nossa soluo completa de movimentao de dados em uma infraestrutura completamente hbrida.

Banco de dados SQL do Azure como um destino da movimentao de dados

Embora os Bancos de dados SQL do Windows Azure e do SQL Server tenham semelhanas, um erro consider-los idnticos. H vrias diferenas que podem afetar a forma como os aplicativos so executados no Banco de dados SQL do Windows Azure em comparao com o banco de dados do SQL Server.

O Banco de dados SQL do Windows Azure um servio hospedado que implementa uma arquitetura de multilocao completa. Diferentemente das implementaes tradicionais do SQL Server, o Banco de dados SQL do Windows Azure contm recursos como alta disponibilidade interna e backups automatizados, alm de ser executado em hardware de consumo, e no em grandes servidores. O banco de dados executa um subconjunto dos recursos frequentemente usados em ambientes locais, incluindo compactao do banco de dados, consultas paralelas, ndices ColumnStore, particionamento de tabela etc. Para obter mais informaes sobre limitaes de recursos para o Banco de dados SQL do Windows Azure, consulte Limitaes de recursos do SQL Server (Banco de dados SQL do Windows Azure) (http://msdn.microsoft.com/pt-br/library/windowsazure/ff394115.aspx).

Uma das maiores diferenas entre o Banco de dados SQL do Windows Azure e o SQL Server que o primeiro expe um servio de multilocao e expanso, em que diferentes assinaturas compartilham os recursos de uma ou mais mquinas em um data center da Microsoft. A meta balancear a carga geral no data center movendo ocasionalmente clientes para mquinas diferentes. Essas mquinas so servidores padro baseados em rack, que maximizam o preo/desempenho em vez do desempenho geral. Nem todos os ns do Banco de dados SQL do Windows Azure usaro hardware extremamente avanado em sua oferta hospedada.

Quando um aplicativo cliente precisa exceder os limites de uma nica mquina, o aplicativo dever ser modificado para distribuir a carga de trabalho do cliente pelos vrios bancos de dados (provavelmente significando vrias mquinas) no lugar de um nico servidor. Uma das compensaes da elasticidade e da capacidade de gerenciamento desse ambiente que, s vezes, seu aplicativo pode ser movido para outra mquina inesperadamente. Uma vez que as sesses no tm monitorao de estado, o design do aplicativo deve usar tcnicas que evitam pontos nicos de falha. Isso inclui o cache em outras camadas quando apropriado e uso da lgica de repetio na conexo e nos comandos a serem resilientes a falhas.

Alm disso, as vrias camadas em uma infraestrutura do WA no estaro na mesma sub-rede da rede, de modo que haver algumas diferenas de latncia entre os aplicativos cliente e o Banco de dados SQL do Windows Azure. Isso acontece quando os aplicativos e o banco de dados so hospedados no mesmo data center fsico. As solues tradicionais de carregamento de dados do SQL Server que so muito "tagarelas" podem ser executadas mais lentamente no Windows Azure devido a essas diferenas de rede fsica. Para aqueles j familiarizados com a computao cliente/servidor, as mesmas solues se aplicam aqui: reflita sobre viagens de ida e volta entre camadas em uma soluo para tratar quaisquer diferenas visveis de latncia.

Consideraes sobre arquitetura

Alguns dos desafios mais comuns com pacotes SSIS se referem a como manipular falhas inesperadas durante a execuo e como minimizar a quantidade de tempo necessria para concluir a execuo de um processo ETL quando voc precisar retomar o processamento depois de uma falha. Para tarefas de fluxo de controle, como tarefas do sistema de arquivos, possvel usar pontos de verificao para retomar a execuo sem processar novamente o trabalho que j tiver sido concludo. Para obter todas as instrues sobre como usar pontos de verificao, consulte Reiniciar pacotes usando pontos de verificao (http://msdn.microsoft.com/pt-br/library/ms140226.aspx).

Muitas vezes, o fluxo de dados a maior parte do pacote SSIS. Nesta seo, voc ver estratgias de design de pacotes para permitir uma repetio automtica de reparo em caso falha, alm do design do pipeline de fluxo de dados para permitir a recuperao a partir do ponto de falha, em vez de precisar repetir o fluxo de dados inteiro.

Consideraes adicionais sobre manipulao de falhas transitrias na plataforma WA so abordadas no white paper SQL Server 2012 SSIS para Azure e movimentao de dados hbridos". O white paper est localizado na biblioteca MSDN no n White papers da Microsoft para SQL Server 2012.

Projetando para reiniciar sem perder o progresso do pipeline

Durante o design de pacotes, uma das maiores preocupaes projetar de modo que, em caso de falha, voc no perca todo o progresso que o pacote fez at o momento. Para itens no fluxo de controle de um pacote, isso realizado pelo uso de pontos de verificao. No entanto, poder reiniciar um fluxo de dados sem perder o progresso algo que s pode ser obtido pelo design do pacote. Nesta seo, voc ver uma estratgia de design de pacotes que permite ao fluxo de dados reiniciar a partir do ponto de falha, e tambm que o pacote seja repetido automaticamente para que no haja falha no caso de queda de conexo. O planejamento para essas quedas de conexo ou breves interrupes torna-se especialmente importante na movimentao de dados para dentro e fora do Banco de dados SQL do WA.

O princpio bsico

Embora o desempenho seja importante em qualquer movimentao de dados, voc dever equilibrar os requisitos de desempenho com o progresso que voc poder perder se algo acontecer durante a movimentao dos dados.

Em cada movimentao de dados, voc deve ter alguma maneira de saber quais dados j foram descarregados no destino e quais no foram. No caso de dados que so apenas inseridos, isso pode, muitas vezes, ser determinado apenas pela chave primria. Para outros dados, pode ser pela data da ltima modificao. Seja qual for a natureza dos dados, a primeira parte do projeto de reincio entender como identificar dados que j existem no destino, quais dados devem ser atualizados no destino e quais dados ainda precisam ser entregues ao destino. Aps estabelecer essa parte, voc poder ordenar e segmentar os dados de modo que possa processar somente os dados que no chegaram ao destino ou minimizar a quantidade de retrabalho que dever efetuar em qualquer fase.

A fragmentao e a ordenao permitem rastrear com facilidade quais partes foram processadas e, com a ordenao, possvel rastrear quais registros dentro de qualquer parte j foram processados. Seguindo essa abordagem, voc no precisa comparar cada linha da origem com o destino para saber se o registro foi processado.

Processos ETL mais complexos podem ter vrios ambientes de preparo. Cada ambiente de preparo um destino para uma fase de ETL. Nesses tipos de ambiente, considere cada um de seus ambientes de preparo como um destino distinto e crie cada segmento de seu ETL para reinicializao.

Exemplo com um nico destino

O fluxo de dados reinicivel mais simples um pequeno, com um nico valor inteiro como uma chave primria. Quando o SQL Server for a origem, voc poder fazer consultas nessa origem usando a prtica recomendada de limitao de dados que voc extrai da sua origem. Considere a tabela de exemplo clssica da AdventureWorks: "Production.TransactionHistory". A tabela apresenta a seguinte estrutura:

CREATE TABLE [Production].[TransactionHistory]

(

[TransactionID]INTNOT NULLPRIMARY KEY,

[ProductID]INTNOT NULL,

[ReferenceOrderID]INTNOT NULL,

[ReferenceOrderLineID]INTNOT NULL,

[TransactionDate]INTNOT NULL,

[TransactionType]NCHAR(1)NOT NULL,

[Quantity]INTNOT NULL,

[ActualCost]MONEYNOT NULL,

[ModifiedDate]DATETIMENOT NULL,

)

Nesse exemplo, a tabela tem um nico inteiro como sua chave primria. Se os dados forem estticos no momento da movimentao, ou se os dados forem apenas inseridos nessa tabela (sem atualizaes), tudo o que voc precisa para saber se uma linha foi recebida ou no no destino da chave primria. Comparar cada valor de chave primria com o destino ser relativamente caro. Em vez disso, use uma estratgia de classificao dos dados no arquivo de origem pela coluna TransactionID.

Com essa estratgia, voc s precisa saber que os dados so processados na ordem e qual a TransactionID mais alta confirmada no destino.

Em um pacote SSIS, possvel fazer isso executando-se o procedimento a seguir.

1. Verifique a maior chave em seu destino.

2. Crie a consulta na origem para efetuar pull somente de registros com uma TransactionID maior que a TransactionID mais alta no destino.

3. Use uma TransactionID ORDER BY em sua consulta de origem para assegurar que a comparao da TransactionID mais alta permanea vlida na prxima vez que voc iniciar o pacote.

No SSIS, usando uma fonte de dados relacional como sua origem, voc pode usar uma Tarefa Executar SQL para efetuar pull do valor mais alto em uma varivel no seu pacote. Entretanto, considere a possibilidade de no existir nenhuma linha no destino.

SELECT MAX(TransactionID) FROM Production.TransactionHistory

Para recuperar a TransactionID mxima, considere que o resultado de uma tabela vazia ser nulo. Isso pode causar alguns problemas na lgica que voc usa em seu pacote. Uma abordagem melhor primeiramente usar uma Tarefa Executar SQL na origem e encontrar a TransactionID mnima no processada em sua origem. Em seguida, consulte a TransactionID mxima do seu destino ou, se no existir nenhuma, use um valor mais baixo do que a TransactionID mnima da origem. Crie a consulta de origem para efetuar pull somente de registros maiores que esse valor, e no se esquea de usar uma TransactionID ORDER BY na consulta.

OBSERVAO: ainda que de forma lgica, voc obtm os mesmos resultados apenas recuperando um valor do seu destino e usando uma funo ISNULL, ou instruo CASE, na clusula WHERE de sua consulta de origem. Fazer isso pode gerar problemas de desempenho, especialmente quando as consultas de origem ganham complexidade. Resista ao impulso de usar esse atalho. Em vez disso, localize um valor que voc possa usar seguramente como limite inferior e crie a consulta de origem usando o valor.

OBSERVAO: quando a origem for o SQL Server, usar uma clusula ORDER BY em um ndice clusterizado no faz com que o SQL Server realize um trabalho extra para classificar. Os dados j foram ordenados de forma que possam ser recuperados sem executar uma classificao (SORT). Se os dados no destino tambm tiverem um ndice clusterizado na mesma coluna, a ordenao na origem que otimiza sua consulta de origem tambm otimizar as inseres em seu destino. O outro efeito a garantia da ordem no pipeline do SSIS, permitindo, assim, que voc possa reiniciar o fluxo de dados no ponto de falha.

Para criar esse pacote de exemplo, execute o procedimento que se segue.

1. Crie um novo pacote em um projeto novo ou existente. Renomeie o pacote "SimpleRestart".

2. Crie gerenciadores de conexo para se conectar origem e ao destino. Para esse exemplo, um gerenciador de conexes OLE DB criado para os servidores de origem e de destino.

3. Arraste uma nova Tarefa Executar SQL para a superfcie de fluxo de controle e renomeie-a para "Efetuar pull de TransactionID mnima da origem".

4. Crie uma varivel do SSIS no nvel de pacote e nomeie-a como minTransactionIDAtSource. Usaremos essa varivel para armazenar o valor que voc extrai da Tarefa Executar SQL que acabou de adicionar. Verifique se o tipo de dados Int32, para que corresponda ao valor de TransactionID na tabela, e defina um valor inicial apropriado.

5. Configure a tarefa Efetuar pull de TransactionID mnima da origem como se segue.

a. Edite-a e defina a Conexo para ser o gerenciador de conexes do servidor de origem.

b. Embora voc possa armazenar SQLStatement em uma varivel, para este exemplo deixe SQLSourceType como Entrada direta. Abra a janela de entrada para SQLStatement e digite a seguinte consulta:

SELECT ISNULL(MIN(TransactionID), 0) FROM Production.TransactionHistory

OBSERVAO: teste suas consultas SQL antes de inseri-las nos editores do SSIS. Isso simplifica a depurao, uma vez que no h ajuda real de depurao nas janelas do editor de consulta do SSIS.

Figura 5: Configurando a Tarefa Executar SQL para localizar a transactionID mnima na origem.

c. Feche a janela Digitar Consulta SQL clicando em OK.

d. Defina a propriedade ResultSet para Linha Simples.

e. No painel esquerdo do Editor da Tarefa Executar SQL, clique em Conjunto de Resultados para configurar como voc capturar o valor dessa consulta.

f. Clique no boto Adicionar para adicionar um conjunto de resultados.

g. No novo conjunto de resultados, altere o Nome do Resultado para 0. Verifique se User::minTransactionIDAtSource (varivel que voc criou na etapa 4) aparece em Nome da Varivel. Essa varivel armazenar o resultado da consulta SQL.

h. Feche o Editor da Tarefa Executar SQL. No dever aparecer nenhum erro na tarefa aps o fechamento.

6. Arraste outra Tarefa Executar SQL para a superfcie de controle. Nomeie-a como Efetuar pull de TransactionID mxima do destino. Conecte a restrio de precedncia de xito de Efetuar pull de TransactionID mnima da origem a essa nova tarefa.

7. Crie uma nova varivel com escopo no pacote. Nomeie essa nova varivel como maxTransactionIDAtDestination. Atribua a ela um tipo de dados de Int32, para que corresponda ao tipo de dados de TransactionID, e fornea um valor inicial apropriado.

8. Abra o Editor da Tarefa Executar SQL para a nova tarefa e faa o seguinte:

a. Defina ResultSet como Linha Simples.

b. Defina seu gerenciador de conexes do Servidor de Destino

c. SQLSourceType: Entrada direta

d. Para SQLStatement, use SELECT ISNULL(MAX(TransactionID), ?) FROM Production.TransactionHistory

OBSERVAO: o ? um parmetro de consulta. Definiremos esse valor momentaneamente.

e. Feche o Editor de Consultas clicando em OK e clique em Mapeamento de Parmetros no painel esquerdo do Editor da Tarefa Executar SQL.

f. Clique em Adicionar para adicionar um nico parmetro.

i. Para Nome da Varivel, escolha User::minTransactionIDAtSource.

ii. Para Direo, voc deve escolher Entrada.

iii. O Tipo de Dados deve ser LONG, que um nmero inteiro de 32 bits nesse contexto.

iv. Altere o Nome do Parmetro para 0. Observe que isso deve ser alterado para 0. O nome do caractere resultar em um erro.

g. Clique no Conjunto de Resultados no painel esquerdo. Clique no boto Adicionar para adicionar um novo conjunto de resultados.

i. Altere o Nome do Resultado para 0.

ii. Em Nome da Varivel, escolha User::maxTransactionIDAtDestination, que a varivel que voc criou na etapa 7. Essa varivel conter o resultado da consulta que voc insere depois que essa tarefa executada.

OBSERVAO: a prxima etapa varia de acordo com o tipo de origem que voc usar no fluxo de dados. Uma origem OLE DB pode usar uma varivel SSIS contendo uma Instruo SQL como sua consulta. Uma conexo ADO.NET no pode fazer isso, mas pode ser parametrizada para usar um parmetro de projeto ou pacote como sua consulta de origem. Neste primeiro exemplo, voc usar uma origem OLE DB com uma varivel que contm a consulta de origem.

9. Arraste uma tarefa de Fluxo de Dados para a superfcie de controle. Renomeie-a para Movimentao de dados principal e conecte a restrio de precedncia de xito de Efetuar pull de TransactionID mxima do destino para essa tarefa de Fluxo de Dados.

Quando o pacote executado neste ponto, voc ter armazenado os valores que precisa conhecer para estabelecer o ponto de partida para sua execuo atual. Em seguida, preciso configurar uma varivel para manter a consulta Origem SQL.

10. Crie uma varivel com escopo no nvel de pacote. Nomeie essa varivel como sourceQuery e defina o tipo de dados como cadeia de caracteres (string). Voc usar uma expresso para derivar dinamicamente esse valor em tempo de execuo com base no valor determinado como o ponto de partida para a consulta seguindo o processo a seguir.

a. Clique no boto de reticncias direita da coluna Expresso para exibir o Construtor de Expresses.

b. Expanda o n Variveis e Parmetros na janela superior esquerda do Construtor de Expresses. Voc usar a varivel User::MaxTransactionIDAtDestination que criou na etapa 7. Voc deve ver essa varivel nas variveis listadas. Essa varivel um Int32. No entanto, voc a usar como parte de uma varivel String. Para fazer isso, ser preciso convert-la em um tipo de dados DT_WSTR. No painel superior direito, expanda o n Converses de Tipos para localizar a converso de tipos (DT_WSTR, ).

c. Na Expresso, digite sua consulta. Em locais onde voc precisa do nome da varivel, ou em sua converso de tipos, possvel arrast-lo da janela apropriada para a caixa Expresso para adicion-lo. Isso ajuda a reduzir o nmero de erros ortogrficos nesse editor. Crie uma expresso como esta:

"SELECT TransactionID, ProductID, ReferenceOrderID, ReferenceOrderLineID, TransactionDate, TransactionType, Quantity, ActualCost, ModifiedDate FROM Production.TransactionHistory WHERE TransactionID > " + (DT_WSTR, 12 ) @[User::maxTransactionIDAtDestination] + " ORDER BY TransactionID"

Observe o uso de converso de tipos para alterar o valor inteiro para uma cadeia de caracteres com um mximo de 12 caracteres de largura.

Foi usada uma largura de 12 caracteres porque ela suficiente para conter todo o intervalo dos valores SQL INT, incluindo o negativo quando aplicvel. Para BIGINT, voc precisar de uma largura de 22 caracteres. Dimensione sua varivel de caractere de acordo com o tipo de dados recuperado.

Depois de digitar a expresso, clique no boto Avaliar Expresso para se certificar de que o SSIS possa analisar sua expresso corretamente. Voc ver que o valor inicial de maxTransactionIDAtDestination foi adequadamente colocado na expresso avaliada. Esse valor ser definido da maneira apropriada em tempo de execuo.

No se esquea de incluir a clusula ORDER BY na Instruo SQL. Somente com uma ORDER BY voc obtm uma ordem garantida de um banco de dados relacional. O mtodo de reincio que voc est criando depende da ordem dos valores de chave.

d. Feche o Construtor de Expresses clicando no boto OK. Sua Instruo SQL dinamicamente construda agora est armazenada na varivel SourceQuery.

11. Clique duas vezes na tarefa de Fluxo de Dados Movimentao de dados principal para abrir a superfcie de design de Fluxo de Dados.

12. Arraste uma Origem OLE DB para a superfcie de controle do Fluxo de Dados. Renomeie-a como Recuperar de TransactionHistory.

OBSERVAO: voc no pode incluir um ponto no nome de um componente de fluxo de dados, portanto o nome completo Efetuar pull de Production.TransactionHistory no permitido. Se voc no usar sublinhados para nomes de tabela, possvel substitu-los pelo ponto na conveno de nomenclatura do SSIS.

13. Clique duas vezes na origem Recuperar de TransactionHistory para abrir o Editor de Origem OLE DB.

a. Para o Gerenciador de Conexes OLE DB, escolha o gerenciador de conexes Servidor de Origem.

b. Na lista suspensa Modo de Acesso a Dados, escolha Comando do SQL da Varivel.

c. Na lista suspensa Nome da varivel, escolha a varivel User::sourceQuery que voc criou na etapa 10.

d. Clique em Visualizar para garantir que sua consulta possa ser executada no servidor de origem.

e. Na pgina Colunas do editor, garanta que todas as colunas sejam selecionadas.

f. Clique em OK para sair do Editor de Origem OLE DB.

14. Arraste um Destino OLE DB para a superfcie de controle. Renomeie-o como Destino de TransactionHistory. Conecte a origem Recuperar de TransactionHistory ao novo destino. Abra o destino clicando duas vezes e configure seguindo este processo:

a. Escolha o gerenciador de conexes Servidor de Destino na lista suspensa Gerenciador de conexes OLE DB.

b. Para Modo de acesso a dados, escolha Tabela ou exibio carregamento rpido se a opo j no estiver selecionada.

c. Em Nome da tabela ou exibio, escolha na lista suspensa ou digite o nome do servidor de destino. Nesse caso, Production.TransactionHistory.

d. Se estiver usando a definio de TransactionHistory determinada acima, para fins de demonstrao, voc poder manter as configuraes padro na pgina Gerenciador de Conexes. Se estiver usando o banco de dados AdventureWorks, voc dever selecionar Manter Valores de Identidade.

e. Na pgina Mapeamentos do editor, mapeie suas colunas.

OBSERVAO: em quase todos os casos, uma prtica recomendada enviar linhas de erro para um arquivo de destino e redirecionar a sada. Isso no necessrio para demonstrar a reinicializao no pipeline. Para ver as etapas de criao de um fluxo de erro e redirecionamento de linhas, consulte Configurar uma sada de erro em um componente do fluxo de dados (http://msdn.microsoft.com/pt-br/library/ms140083.aspx).

f. Clique em OK para sair do Editor de Destino OLE DB.

15. Teste essa abordagem iniciando e interrompendo uma importao e, em seguida, reiniciando. A cada vez, o fluxo de dados deve escolher a prxima linha que precisa ser movida. As linhas anteriores so ignoradas.

Voc precisa apenas criar um pacote simples que possa reiniciar seu fluxo de dados aps uma falha. Esse pacote ser usado como um ponto de partida para o exemplo de design de um pacote que pode fazer novas tentativas. Observe que voc no quer que nenhuma das tarefa no Fluxo de Controle salve pontos de verificao. Se o pacote falhar e precisar ser reiniciado, ser necessrio que os componentes Efetuar pull de TransactionID mnima da origem e Efetuar pull de TransactionID mxima do destino sejam executados para localizar onde exatamente o fluxo de dados foi interrompido na execuo anterior. Uma prtica recomendvel criar um pacote capaz de localizar seu progresso e reiniciar o fluxo sempre que as caractersticas existirem nos dados, para permitir a localizao do ponto em que o fluxo de dados foi interrompido. Entretanto, essa prtica torna-se especialmente importante em um ambiente como a nuvem, que mais suscetvel s incertezas da rede.

Exemplo com vrios destinos

Esse princpio pode ser estendido a fluxos de dados com vrios destinos. Um cenrio em que isso til ao mover dados para um modelo de dados fragmentado, como geralmente ocorre com um Banco de dados SQL do WA. Nesses casos, usada uma diviso condicional para enviar cada linha ao destino apropriado ou, para dados de referncia, possvel usar um multicast para enviar todos os dados a todos os destinos. Veja a seguir os princpios fundamentais a serem lembrados no design de reinicializao.

Destinos diferentes podem ter progredido para pontos diferentes no momento da falha. Desse modo, voc deve localizar o valor de chave mais alto inserido em cada destino. Crie uma varivel para manter o valor mais alto em cada destino.

O ponto de partida em sua origem ser o prximo registro aps o valor de chave mais baixo que foi inserido com xito em seus destinos. Por exemplo, se o valor de chave mais alto inserido em um conjunto de fragmentos fosse como o que se segue, em sua origem voc deveria retomar o fluxo de dados com o prximo registro depois de 1.000.

Shard00 key value 1000

Shard01 key value 1100

Shard02 key value 1050

Como isso deixa aberta a possibilidade de que alguns dados possam ser extrados mais de uma vez, voc deve filtrar cada destino para evitar uma violao de Chave Primria. Use uma Transformao Diviso Condicional para filtrar os valores de chave que j foram processados.

Para o exemplo de fragmentao acima, voc criaria variveis denominadas maxTransactionIDAtShard00, maxTransactionIDAtShard01 e maxTransactionIDAtShard02. Nas Tarefas Executar SQL, voc encontraria os valores a serem armazenados em cada uma delas. Na Diviso Condicional, voc poderia definir as sadas denominadas Shard00, Shard01 e Shard02. As expresses nas sadas teriam esta aparncia:

ShardID == 0 && TransactionID > @[User::maxTransactionIDAtShard00]

ShardID == 1 && TransactionID > @[User::maxTransactionIDAtShard01]

ShardID == 2 && TransactionID > @[User::maxTransactionIDAtShard02]

Se entrar alguma linha no pipeline que seja menor que a TransactionID em um fragmento especfico, mas o registro for para esse fragmento, o registro no ser enviado e nenhuma violao de chave primria ser encontrada. Deixe esses registros irem para a sada Padro ou qualquer sada de desconexo, para que no sejam mais processados.

Figura 2: Uma diviso condicional configurada para 3 fragmentos e para permitir a reinicializao sem violaes de chave primria no destino. No incio de qualquer execuo, o valor de chave mximo em cada destino armazenado nas variveis maxTransactionIDAtShardXX. No pipeline, as linhas destinadas a esse fragmento com um valor de chave muito baixo no sero enviadas ao destino e, desse modo, no sero reprocessadas. Essas linhas iro para a Sada Padro. Como a sada padro no est conectada, elas no avanaro mais no pipeline.

Outras dicas de reinicializao

Quando seu destino for um arquivo, use a varivel para representar o nome do seu arquivo e torne cada nome significativo (como em uma ordem ou um carimbo de data e hora acrescentados ao fim). Processe partes de dados diferentes para arquivos diferentes. Se voc processar na mesma ordem, e suas partes forem definidas de forma determinista, ser possvel observar quais arquivos j foram criados e determinar o ponto de partida a partir da. Dependendo de suas necessidades e da lgica, talvez seja preciso mover, renomear ou excluir arquivos que j foram processados.

Se a origem forem arquivos mltiplos, processe cada arquivo separadamente e rastreie qual seu arquivo atual. Na reinicializao, voc poder retomar depois que o ltimo arquivo for processado com xito. Use uma ordenao por nome de arquivo ou data para garantir o processamento dos arquivos sempre na mesma ordem e para poder determinar com facilidade o ltimo arquivo que foi processado com xito.

Quando o SQL Server for sua origem, voc poder usar um tipo de dados de cadeia de caracteres SSIS para consultar valores inteiros. Desde que a cadeia de caracteres possa ser convertida em um inteiro do SQL, o SQL converter o tipo de dados durante a otimizao. Usando esse princpio, voc pode alterar as variveis MaxTransactionIDAtDestination e MinTransactionIDAtSource no pacote de exemplo para uma cadeia de caracteres, alterar os tipos de parmetro de entrada em Efetuar pull de TransactionID mxima do destino e usar esse pacote como um modelo que tambm funcionar com chaves primrias de caracteres. No use um tipo de dados SQL_VARIANT com nenhum outro tipo de dados no SQL, pois isso resultar em exames completos na recuperao dos valores de chave mnimo e mximo.

Se a origem for um arquivo, ou qualquer origem onde voc no possa fazer consultas com WHERE ou qualquer outro tipo de clusula de filtro, no seu fluxo de dados execute o procedimento a seguir.

1. Coloque uma transformao diviso condicional entre os componentes de origem e destino.

2. Na diviso condicional, configure uma sada. Nomeie a sada como Lixo ou algum outro nome que permita saber que voc no deseja essas linhas.

3. Para a condio que obtm as linhas enviadas ao destino, use uma expresso para filtrar as linhas que j esto em seu destino. Por exemplo, a expresso para o exemplo anterior seria a seguinte:

[TransactionID] 0

order by source_component_name desc

Concluso

O SSIS (SQL Server Integration Services) pode ser usado de forma eficiente como uma ferramenta para mover dados para dentro e fora do Banco de dados SQL do Windows Azure (WA), como parte da soluo de ETL (extrao, transformao e carregamento) total e como parte da soluo de movimentao de dados. Pode ser usado tambm para mover dados entre origens e destinos na nuvem, bem como em um cenrio hbrido entre os ambientes em nuvem e local. Este documento descreveu as prticas recomendadas do SSIS para origens e destinos na nuvem, discutiu o planejamento para projetos SSIS se o projeto estiver todo na nuvem ou envolver movimentaes de dados hbridas e, usando um exemplo, explicou como maximizar o desempenho em uma movimentao hbrida expandindo a movimentao de dados.

Para obter mais informaes:

http://www.microsoft.com/sqlserver/: Site do SQL Server

http://technet.microsoft.com/pt-br/sqlserver/: TechCenter do SQL Server

http://msdn.microsoft.com/pt-br/sqlserver/: SQL Server DevCenter

Este documento ajudou voc? Envie seus comentrios. Em uma escala de 1 (ruim) a 5 (excelente), como voc classificaria este white paper e por qu? Por exemplo:

Voc est classificando-o como excelente devido aos bons exemplos, s excelentes capturas de tela, clareza do texto ou por outro motivo?

Voc est classificando-o como ruim devido aos exemplos insatisfatrios, s capturas de tela confusas ou ao texto mal-escrito?

Estes comentrios nos ajudam a melhorar a qualidade dos white papers que lanamos.

Enviar comentrios.

12