Visual Studio alm rangers


Cenário 2 – Movimentação Complexa de Dados – Engana engine de deployment (Enfraquece a experiência através da IDE, quebra o SCC como mastre, e gera uma desvantagem de performance)



Baixar 7.59 Mb.
Página36/62
Encontro30.10.2016
Tamanho7.59 Mb.
1   ...   32   33   34   35   36   37   38   39   ...   62

Cenário 2 – Movimentação Complexa de Dados – Engana engine de deployment (Enfraquece a experiência através da IDE, quebra o SCC como mastre, e gera uma desvantagem de performance)


Local dos arquivos iniciais: C:\HOL\DatabaseProjectGuidance\Integration with Custom Code and External Changes\ComplexDataMovement\Scenario1_Answer

Local dos arquivos finais: C:\HOL\DatabaseProjectGuidance\Integration with Custom Code and External Changes\ComplexDataMovement\Scenario2_Answer

Estamos empacados? Não. Apenas precisamos eliminar a ambiguidade de forma que a deployment engine possa fazer seu trabalho. A primeira ideia é adicionar um valor DEFAULT ao campo e removê-lo após o fato, no momento adequado.

Adicione uma constraint DEFAULT na tabela



  1. Adicione uma Constraint DEFAULT na tabela Companies



    1. Abra a pasta Schema Objects/Schemas/dbo/Constraints.

    2. Clique com o botão direito na pasta Constraints e clique em Add e depois em New Item.

    3. Escolha o modelo referente a Default Constraint e dê o nome de DC_Companies_LanguageLocal. Clique em OK para fechar o wizard.

    4. Quando o script com o modelo default for aberto, troque o a definição do schema para o script abaixo:

ALTER TABLE [dbo].[Companies]

ADD CONSTRAINT [DC_Companies_LanguageLocale]

DEFAULT 'EN-US'

FOR [LanguageLocale]



  1. Faça o deploy do projeto

    1. Clique com o botão direito na solução de banco de dados e clique em Deploy para fazer o deploy para o banco de dados especificado. Você verá o progresso do deployment na janela Output do Visual Studio. Ao final da saída registrada na janela output você verá uma seção Deployment script generated to: que contém o caminho para o arquivo .sql contendo as instruções de alteração do banco de dados.

    2. Abra o arquivo .sql gerado localizado no caminho indicado na janela output.

    3. Você irá ver o seguinte script de alteração com a constraint default adicionada:

Agora o deployment será bem sucedido. Mas por outro lado o banco de dados não está no estado que desejamos. Ele tem um DEFAULT em coluna que nós não queremos. Trata-se apenas de uma conveniência para conseguirmos realizar o deploy. Adicionalmente precisamos considerar que os dados após o deployment está errados, uma vez que não faz sentido que todos os registros tenham o valor ‘EN-US’ na nova coluna. Para resolver estes problemas utilizaremos um PostDeployment script.

Remova a constraint default no script que é executado após deployment


  1. Adicione um PostDeployment script para alterar os dados.



    1. No Solution Explorer, vá até a pasta Scripts/PostDeployment no projeto de banco de dados, clique com o botão direito e selecione Add e então em Script.

    2. Dê o nome PopulateLanguageLocale.sql para o script e clique em OK.

    3. Após o script ser aberto, substitua o texto pelo seguinte script:

UPDATE [dbo].[Companies]

SET [LanguageLocale] = 'ES-MX'

FROM [dbo].[Companies] CO

INNER JOIN [dbo].Addresses ADDR ON CO.Id = ADDR.CompanyId

WHERE ADDR.State IN ('COLORADO',

'CALIFORNIA',

'UTAH',

'ARIZONA',

'NEW MEXICO',

'TEXAS',

'FLORIDA',

'NEVADA')


NOTA

Caso haja qualquer problema com o passo de geração de dados este comando não irá alterar nenhum registro.



  1. Adicione outro PostDeployment script para excluir a atributo DEFAULT

    1. No Solution Explorer, no projeto de banco de dados, vá até a pasta Scripts/PostDeployment, clique em Add e então em clique em Script.

    2. Dê o nome ManageObjects.sql para o script e clique em OK.

    3. Após o script ser aberto, substitua o texto pelo seguinte script:

IF EXISTS (SELECT * FROM sys.sysobjects WHERE NAME = 'DC_Companies_LanguageLocale')

BEGIN


ALTER TABLE [dbo].[Companies] DROP CONSTRAINT [DC_Companies_LanguageLocale];

END


  1. Inclua os scripts no arquivo Script.PostDeployment.sql

    1. No Solution Explorer, navegue até a pasta Scripts/PostDeployment no projeto de banco de dados e abra o arquivo Script.PostDeployment.sql.

    2. Inclua os arquivos PopulateLanguageLocale.sql e ManageObjects.sql adicionando as seguintes linhas ao final do script:

:r .\PopulateLanguageLocal.sql

:r .\ManageObjects.sql

Faça o deploy das mudanças para o banco de dados clicando com botão direito na solução de banco de dados e selecionando Deploy para publicar as alterações para o banco de dados especificado.



CONCLUSÃO

Esta abordagem quebra boas práticas e resulta em dois problemas:



  • O primeiro problema é que o controle de código-fonte não fica sincronizado com o banco de dados alvo. Quando você exclui o arquivo Companies.LanguageLocale.defconst.sql do projeto? Se você executar diversas iterações durante o desenvolvimento você corre o risco de esquecer de atualizar o controle de código-fonte. Você pode adicionar alguns alvos customizados no seu arquivo de projeto para excluir e incluir este arquivo cada vez que faz o deploy. Você pode ainda executar esta tarefa de forma manual. De uma forma ou de outra, o efeito é que você acaba adicionando esforço de manutenção do projeto quando o desejável é poder focar nas funcionalidades.



  • O Segundo problema é o impacto potencial na performance do deployment. As instruções DEFAULT e UPDATE resultam em consume de disco desnecessário. Tente rodar isso em tabela com 10 milhões de linhas...


Cenário 3 – Movimentação Complexa de Dados – Resolva o Problema de Performance (Não utilize a deployment engine, SCC torna-se o mestre)


Local dos arquivos iniciais: C:\HOL\DatabaseProjectGuidance\Integration with Custom Code and External Changes\ComplexDataMovement\Scenario1_Answer

Local dos arquivos finais: C:\HOL\DatabaseProjectGuidance\Integration with Custom Code and External Changes\ComplexDataMovement\Scenario3_Answer

Resolver problemas de performance, na maioria dos casos, é prioridade máxima. Tratando isso também poderemos resolver o problema de que o controle de código-fonte não corresponde a verdade (versão mestra), ou seja, fica fora de sincronia com o banco de dados.


  1. Abra a solução

    1. Abra o Visual Studio 2010.

    2. No menu principal clique em File e então clique em Open project. Vá para o projeto localizado em C:\HOL\DatabaseProjectGuidance\Integration with Custom Code and External Changes\ComplexDataMovement\Scenario1_Answer e abra o arquivo SimpleDatabase.sln.

  2. Faça o deploy do banco de dados clicando com o botão direito na solução Database e selecionando Deploy para publicá-la no banco de dados especificado.

  3. Adicione outro script de PreDeployment para mover os dados para um local temporário.

    1. No Solution Explorer, vá até o projeto de banco de dados e clique com o botão direito na pasta Scripts/PreDeployment, clique em Add e então em Script.

    2. Dê o nome de CopyCompanies.sql para este script e clique em OK.

    3. Após o script ter sido aberto, substitua o conteúdo pelo script abaixo:

CREATE TABLE [dbo].[tmp_ms_xx_Companies] (

[Id] INT NOT NULL,

[ParentId] INT NULL,

[Name] NVARCHAR (100) NOT NULL,

[LanguageLocale] NVARCHAR (5) NOT NULL

);
ALTER TABLE [dbo].[tmp_ms_xx_Companies]

ADD CONSTRAINT [tmp_ms_xx_clusteredindex_PK_Companies_Id] PRIMARY KEY CLUSTERED ([Id] ASC)

WITH (ALLOW_PAGE_LOCKS = ON, ALLOW_ROW_LOCKS = ON, PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF);


  1. Movo os dados. No arquivo CopyCompanies.sql, acrescente o código a seguir:

IF EXISTS (SELECT TOP 1 1

FROM [dbo].[Companies])

BEGIN


INSERT INTO [dbo].[tmp_ms_xx_Companies] ([Id], [ParentId], [Name], [LanguageLocale])

SELECT Com.[Id],

Com.[ParentId],

Com.[Name],

[LanguageLocale] = CASE ADDR.[State]

WHEN ('DISTRICT OF COLUMBIA') THEN 'ES-MX'

WHEN ('COLORADO') THEN 'ES-MX'

WHEN ('KENTUCKY') THEN 'ES-MX'

WHEN ('ARIZONA') THEN 'ES-MX'

WHEN ('TEXAS') THEN 'ES-MX'

WHEN ('NEW MEXICO') THEN 'ES-MX'

WHEN ('IDAHO') THEN 'ES-MX'

WHEN ('ILLINOIS') THEN 'ES-MX'

WHEN ('MAINE') THEN 'FR-FR'

WHEN ('MINNESOTA') THEN 'FR-CA'

WHEN ('ARKANSAS') THEN 'FR-CA'

END

FROM [dbo].Addresses ADDR



INNER JOIN [dbo].[Companies] Com

ON Com.Id = ADDR.CompanyId

END


  1. Exclua o conteúdo da tabela Companies. Aqui é o ponto onde as coisas começam a ficar complicadas. Nós temos que lidar com uma boa quantidade de relacionamentos. Você também notará que nós não iremos apagar a tabela. Ao invés disso, nós iremos truncá-la. A deployment engine espera que a tabela esteja presente e por isso gera um comando ALTER. Porém, nós não poderemos truncar a tabela sem excluir os relacionamentos.



  1. No script CopyCompanies.sql adicione o seguinte script:

PRINT N'Dropping FK_CustomersCompanyId_CompaniesId...';

GO

ALTER TABLE [dbo].[Customers] DROP CONSTRAINT [FK_CustomersCompanyId_CompaniesId];



GO

PRINT N'Dropping FK_CompanyId_Id...';

GO

ALTER TABLE [dbo].[Addresses] DROP CONSTRAINT [FK_CompanyId_Id];



GO

PRINT N'Dropping FK_CompanyId_CompanyParentId...';

GO

ALTER TABLE [dbo].[Companies] DROP CONSTRAINT [FK_CompanyId_CompanyParentId];



GO

PRINT N'Truncate table [dbo].[Companies]...';

GO

TRUNCATE TABLE [dbo].[Companies];



  1. Devolva os dados à tabela Companies e recrie os relacionamentos



    1. No Solution Explorer, vá até o projeto de banco de dados e clique com o botão direito na pasta Scripts/PostDeployment, clique em Add e então em Script.

    2. Dê o nome de MoveCompanies.sql para o script e clique em OK.

    3. Após o script ter sido aberto, substitua o texto com o seguinte script:

INSERT INTO [dbo].[Companies] ([Id], [ParentId], [Name], [LanguageLocale])

SELECT [Id],

[ParentId],

[Name],

[LanguageLocale]



FROM [dbo].[tmp_ms_xx_Companies]
SET IDENTITY_INSERT [dbo].[Companies] ON
PRINT N'Creating FK_CustomersCompanyId_CompaniesId...';

GO

ALTER TABLE [dbo].[Customers] WITH NOCHECK



ADD CONSTRAINT [FK_CustomersCompanyId_CompaniesId]

FOREIGN KEY ([CompanyId]) REFERENCES [dbo].[Companies] ([Id]) ON DELETE NO ACTION ON UPDATE NO ACTION;

GO

PRINT N'Creating FK_CompanyId_Id...';



GO

ALTER TABLE [dbo].[Addresses] WITH NOCHECK

ADD CONSTRAINT [FK_CompanyId_Id]

FOREIGN KEY ([CompanyId]) REFERENCES [dbo].[Companies] ([Id]) ON DELETE NO ACTION ON UPDATE NO ACTION;

GO

PRINT N'Creating FK_CompanyId_CompanyParentId...';



GO

ALTER TABLE [dbo].[Companies] WITH NOCHECK

ADD CONSTRAINT [FK_CompanyId_CompanyParentId]

FOREIGN KEY ([ParentId]) REFERENCES [dbo].[Companies] ([Id]) ON DELETE NO ACTION ON UPDATE NO ACTION;



GO

  1. Inclua o script no arquivo Script.PreDeployment.sql

    1. No Solution Explorer, no projeto de banco e dados, vá até a pasta Scripts/PreDeployment e abra o aquivo Script.PreDeployment.sql.

    2. Inclua o script CopyCompanies.sql adicionando a seguinte linha ao final do script:


:r .\ CopyCompanies.sql


  1. Inclua o script no arquivo Script.PostDeployment.sql

    1. No Solution Explorer, no projeto de banco e dados, vá até a pasta Scripts/PostDeployment e abra o aquivo Script.PostDeployment.sql.

    2. Inclua o script MoveCompanies.sql adicionando a seguinte linha ao final do script:


:r .\MoveCompanies.sql

  1. Faça o deploy do banco de dados clicando com o botão direito na solução Database e selecionando Deploy para publicá-la no banco de dados especificado.

CONCLUSÃO

Neste cenário obtivemos uma abordagem que nos dá controle sobre o movimento dos dados de forma que melhoramos a performance no melhor nível possível. Desta forma, não precisamos após o deployment nos preocupar com a gestão de arquivos no nosso projeto. Porém, nós violamos o princípio de Gerenciamento de Objetos. Este cenário tem um modelo de dados relativamente simples e mesmo assim temos uma boa quantidade de objetos para gerenciar durante o deployment.



Essa abordagem aniquila as melhores inovações que a deployment engine trás para edição do banco de dados.

Cenário 4 – Movimentação Complexa de Dados –Integrar a Deployment Engine / Tratar conversão de dados externamente ao proejto


Local dos arquivos iniciais: C:\HOL\DatabaseProjectGuidance\Integration with Custom Code and External Changes\ComplexDataMovement\Scenario1_Answer

Local dos arquivos finais: C:\HOL\DatabaseProjectGuidance\Integration with Custom Code and External Changes\ComplexDataMovement\Scenario4_Answer

Agora que resolvemos o problema de performance, mantivemos a experiência na IDE objetiva e mantivemos o controle de versão como sendo o mestre; Como podemos evitar o gerenciamento de objetos durante o deployment?

Para isso precisamos, fora do sistema de projeto, alterar o estado do banco de dados antes de rodar o processo de deployment.



  • Se nós rodarmos um script .sql a partir da linha de comando antes de executarmos o deployment podemos alterar o estado do banco de dados.

  • A deployment engine irá gerar o script baseado no estado depois da nossa alteração via linha de comando. Podemos gerar ainda um Post Deployment script para recolocar os dados no banco.

  • Na maioria dos casos esta opção nos permite evitar o problema de gerenciamento de objetos. Foreign keys são uma exceção.



  1. Abra a solução

    1. Inicie o Visual Studio 2010.

    2. No menu principal, clique em File e então em Open project. Vá até a pasta C:\HOL\DatabaseProjectGuidance\Integration with Custom Code and External Changes\ComplexDataMovement\Scenario1_Answer e abra a solução SimpleDatabase.sln.



  1. Faça o deploy do banco de dados clicando com o botão direito na solução Database e selecionando Deploy para publicá-la no banco de dados especificado.



  1. Em script externo mova os dados para uma tabela temporário em TempDB.

NOTA

Há três partes neste script.



  • Criar um banco de dados de conversão

  • Copiar os dados

  • Excluir os relacionamentos de foreign keys.

Como estamos executando o script a partir da linha de comando com o SqlCmd nós corremos o risco de que o servidor não possua sessões abertas quando o script é finalizado. Por este motivo não utilizaremos o TempDb uma vez que uma tabela temporária global seria destruída quando a última sessão aberta for finalizada.

    1. No Solution Explorer, vá até o projeto de banco de dados e clique com o botão direito na pasta Scripts/PreDeployment, clique em Add e então em Script.

    2. Dê o nome CopyCompaniesTempDB.sql para o script e clique em OK.

    3. Após o script ter sido aberto, substitua o conteúdo pelo script abaixo:

USE [master]

GO
PRINT N'Creating ConversionDB...'

GO

CREATE DATABASE [ConversionDB]



GO

EXECUTE sp_dbcmptlevel [ConversionDB], 100;


USE [ConversionDB]

GO
PRINT N'Starting moving table [dbo].[Companies]...';

CREATE TABLE [dbo].[Companies] (

[Id] INT NOT NULL,

[ParentId] INT NULL,

[Name] NVARCHAR (100) NOT NULL

);

GO
USE [SimpleDatabase]



GO
IF EXISTS (SELECT TOP 1 1

FROM [dbo].[Companies])

BEGIN

INSERT INTO [ConversionDB].[dbo].[Companies] ([Id], [ParentId], [Name])



SELECT [Id],

[ParentId],

[Name]

FROM [dbo].[Companies]



END
PRINT N'Dropping FK_CustomersCompanyId_CompaniesId...';

GO

ALTER TABLE [dbo].[Customers] DROP CONSTRAINT [FK_CustomersCompanyId_CompaniesId];



GO

PRINT N'Dropping FK_CompanyId_Id...';

GO

ALTER TABLE [dbo].[Addresses] DROP CONSTRAINT [FK_CompanyId_Id];



GO

PRINT N'Dropping FK_CompanyId_CompanyParentId...';

GO

ALTER TABLE [dbo].[Companies] DROP CONSTRAINT [FK_CompanyId_CompanyParentId];



GO

PRINT N'Dropping table [dbo].[Companies]...';



GO

TRUNCATE TABLE [dbo].[Companies];



GO


  1. Habilite a verificação e criação de constraints.

    1. No Solution Explorer, clique com o botão direito no nó de projeto e selecione Properties.

    2. Nas propriedades do projeto, vá até a aba Deploy.

    3. Clique em Edit ao lado de Deployment configuration file settings.

    4. Marque a opção CheckNewConstraints. (Figura 64)

Figura 64 Marque a opção "CheckNewConstraints"



NOVA FUNCIONALIDADE

  1. Se nós executarmos este script antes da execução do deploy a tabela Companies não possuirá dados e as foreign keys será excluídas. A deployment engine irá alterar (ALTER) a tabela Companies e recriar as foreign keys. Esta é uma nova funcionalidade para projetos de banco de dados do Visual Studio 2010. (Figura 64)

Quando esta opção é habilitada, a deployment engine irá criar uma nova chave ou constraint, mas com a opção NO CHECK. Ao final da execução do script de deploymen, após a execução do script de Post-Deployment, será criado um bloco de script com comandos para habilitar as constraints. Isto nos permite deixar a deployment engine a continuar gerenciando a criação de chaves e constraints enquanto move os dados através do script de Post-Deployment.



  1. Agora temos que mover os dados de volta para o banco através de um script de post deployment.



    1. No Solution Explorer, vá até o projeto de banco de dados e clique com o botão direito na pasta Scripts/PostDeployment, clique em Add e então em Script.

    2. Dê o nome MoveCompaniesTempDB.sql para o script e clique em OK.

    3. Após o script ter sido aberto, substitua o conteúdo pelo script abaixo:

PRINT N'Converting Companies Data...'

GO
INSERT INTO [dbo].[Companies] ([Id], [ParentId], [Name], [LanguageLocale])

SELECT CO.[Id],

CO.[ParentId],

CO.[Name],

[LanguageLocale] = CASE ADDR.[State]

WHEN ('NEW MEXICO') THEN 'ES-MX'

WHEN ('COLORADO') THEN 'ES-MX'

WHEN ('CALIFORNIA') THEN 'ES-MX'

WHEN ('ARIZONA') THEN 'ES-MX'

WHEN ('TEXAS') THEN 'ES-MX'

WHEN ('FLORIDA') THEN 'ES-MX'

WHEN ('NEVADA') THEN 'ES-MX'

WHEN ('UTAH') THEN 'ES-MX'

WHEN ('WASHINGTON') THEN 'FR-FR'

WHEN ('MINNESOTA') THEN 'FR-CA'

WHEN ('MAINE') THEN 'FR-CA'

ELSE 'EN-US'

END


FROM [ConversionDB].[dbo].[Companies] CO

INNER JOIN (SELECT DISTINCT CompanyId,

MAX(State) AS [State]

FROM [dbo].[Addresses]

GROUP BY CompanyId) ADDR ON ADDR.CompanyId = CO.Id

ORDER BY CO.[Id] ASC;


GO
USE [master]

GO
PRINT N'Dropping ConversionDB...'



GO

DROP DATABASE [ConversionDB]



GO


    1. No Solution Explorer, no projeto de banco e dados, vá até a pasta Scripts/PostDeployment e abra o aquivo Script.PostDeployment.sql.

    2. Inclua o script MoveCompaniesTempDB.sql adicionando a seguinte linha ao final:


:r .\MoveCompaniesTempDB.sql



  1. Agora precisamos garantir uma boa experiência na IDE. Para atingir esse objetivo teremos que alterar as opções de build do projeto. O arquivo *.dbproj importa uma série de alvos que definem as tarefas de build e deploy. Elas nos oferecem o gancho necessário para as ações de pre e post deployment.



    1. No Solution Explorer, clique com o botão direito no projeto SimpleDatabase e selecione Unload Project.

    2. No Solution Explorer, clique com o botão direito no projeto SimpleDatabase e selecione Edit SimpleDatabase.dbproj.

RECOMENDAÇÃO

Os arquivos de projeto são basedos em XML e podem ser “bagunçados” facilmente. Se você não está familiarizado com o processo de edição dos arquivos de projeto, sugerimos que você crie uma cópia do arquivo por segurança antes de editá-lo.



    1. Tudo que nós precisamos fazer é definir uma propriedade especial para a linha de comando que iremos executar.

    2. Adicione o código a seguir após as definições de PropertyGroup para as configurações de Release e Debug conforme o script abaixo:

sqlcmd -S localhost –I ..\..\Scripts\Pre-Deployment\CopyCompaniesTempDB.sql





    1. No Solution Explorer, clique com o botão direito no projeto SimpleDatabase e selecione Reload Project.

    2. Após o projeto ter sido recarregado, clique com o botão direito no projeto SimpleDatabase e selecione Deploy.

NOTA

Na janela output, você verá que o comando é chamado antes de qualquer outro script de deployment e que o texto de debug será redirecionado para a linha de comando, e em consequência para a janela output. Isto nos dará a chance de executar os procedimentos de preparação antes que a deployment engine principal seja executada.



CONCLUSÃO

Neste cenário final nós apresentamos uma abordagem que preserva a funcionalidade da deployment engine e nos dá controle sobre a movimentação dos dados com boa performance. Esta abordagem evita que seja necessário realizar o gerencimamento dos objetos nos scripts de pre e post deployment. Além disso, preserva a experiência da IDE, mantém o controle de versão sincronizado como versão mestra e nos dá controle sobre o processo de conversão de dados e seu desempenho.



Catálogo: 2012
2012 -> Fapesp e inpe promovem workshop para discutir relatório do ipcc sobre Riscos de Extremos Climáticos e Desastres nas Américas do Sul e Central
2012 -> Anima Mea Concerto no Convento Corpus Christi, 14junho2015
2012 -> Branches e merge com Visual Studio Team Foundation Server 2012
2012 -> Perfil: Time de Qualidade, Testadores
2012 -> Lista de Biologia Vanessa / Frente a volume 2
2012 -> CÂmara municipal de sapopema estado do paraná cnpj: 77. 774. 487/0001-94 Av. Manoel Ribas, 520, cep – 84. 294-000 Fone/Fax (43) 3548-1258
2012 -> Instituto nacional de estudos e
2012 -> Gabinete do ministro
2012 -> Indice de leis complementar 2012 lei 114 À 154 lei complementar 114 de 19 de janeiro de 2012
2012 -> Agenda do presidente do Ibram, Angelo Oswaldo de Araújo Santos 30 de dezembro de 2014

Baixar 7.59 Mb.

Compartilhe com seus amigos:
1   ...   32   33   34   35   36   37   38   39   ...   62




©bemvin.org 2020
enviar mensagem

    Página principal
Prefeitura municipal
santa catarina
Universidade federal
prefeitura municipal
pregão presencial
universidade federal
outras providências
processo seletivo
catarina prefeitura
minas gerais
secretaria municipal
CÂmara municipal
ensino fundamental
ensino médio
concurso público
catarina município
Dispõe sobre
reunião ordinária
Serviço público
câmara municipal
público federal
Processo seletivo
processo licitatório
educaçÃo universidade
seletivo simplificado
Secretaria municipal
sessão ordinária
ensino superior
Relatório técnico
Universidade estadual
Conselho municipal
técnico científico
direitos humanos
científico período
espírito santo
pregão eletrônico
Curriculum vitae
Sequência didática
Quarta feira
prefeito municipal
distrito federal
conselho municipal
língua portuguesa
nossa senhora
educaçÃo secretaria
segunda feira
Pregão presencial
recursos humanos
Terça feira
educaçÃO ciência
agricultura familiar