Você está na página 1de 174

Rangers

Visual Studio ALM

Documentao:
Projetos de Banco
de Dados no Visual
Studio 2010
Laboratrios
2010-10-12
Visual Studio ALM Rangers
Microsoft Corporation

Visual Studio ALM Rangers


Este contedo foi criado pelo Visual Studio ALM Rangers, um grupo especial formado por
membros do time de produto do Visual Studio, Microsoft Services, Microsoft Most Valued
Professionals (MVPs) e lderes da comunidade de Visual Studio.

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


A informao contida neste documento representa a viso atual da Microsoft Corporation sobre os
assuntos discutidos na data de sua publicao. Como a Microsoft deve responder a mudanas das
condies de mercado, no deve ser interpretado como um comprometimento de parte da Microsoft e
a Microsoft no pode garantir a preciso da informao aps a data de publicao.
Este documento tem fins informativos. A MICROSOFT NO D GARANTIAS, EXPRESSA, IMPLCITA OU
ESTATUTRIA REFERENTE S INFORMAES CONTIDAS NESTE DOCUMENTO.
Microsoft licencia este documento sob os termos do Creative Commons
Attribution 3.0 License. Todos os demais direitos reservados.
2009 Microsoft Corporation.
Microsoft, Active Directory, Excel, Internet Explorer, SQL Server, Visual Studio, e Windows so marcas
registradas do grupo de empresas Microsoft.
Todas as outras marcas so de propriedade dos respectivos proprietrios.

Copyright 2009 Microsoft Corporation

Page 2

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

ndice
Acrnimos.............................................................................................................................................. 6
Histrico do Documento......................................................................................................................... 7
Colaboradores........................................................................................................................................ 7
Revisores................................................................................................................................................ 7
Introduo.............................................................................................................................................. 8
Viso Geral......................................................................................................................................... 8
Visual Studio ALM Rangers.................................................................................................................. 8
Pr-requisitos...................................................................................................................................... 8
Gerenciamento de Soluo e Projeto...................................................................................................... 9
Refatorando uma Soluo do Visual Studio Database para habilitar cdigo compartilhado................9
Objetivos do cenrio:...................................................................................................................... 9
Passo 1: Examine os bancos de dados fsicos com cdigo e objetos sobrepostos............................9
Passo 2: Prepare a Soluo de Banco de Dados........................................................................... 11
Passo 3: Refatorar Referncias e Dependncias do Banco de Dados............................................17
Passo 4: Refatore a Soluo para habilitar Projetos Parciais.........................................................22
Passo 5: Propague as mudanas para os components de cdigo compartilhado..........................24
Controle de Cdigo-Fonte e Gerncia de Configurao......................................................................... 25
Viso Geral dos Cenrios:................................................................................................................. 25
Cenrio #1: Modelo de Branching para um nico Time.................................................................... 26
Introduo..................................................................................................................................... 26
Definies de Branch para este cenrio:....................................................................................... 26
Passo 1: Criar um novo projeto para o banco de dados AdventureWorks.....................................27
Passo 2: Faa o Check in do novo projeto no Team Foundation Server.........................................34
Passo 3: Crie um branch da soluo............................................................................................. 36
Passo 4: Faa o deploy da soluo de banco de dados.................................................................42
Passo 5: Fazendo o merge do branch (integrando alteraes entre dois branches)......................44
Passo 6: Sincronize as alteraes do cdigo com a verso atual do banco de dados...................47
Cenrio #2: Modelo de Branching para Mltiplos Times...................................................................49
Definies de Branch para este cenro:........................................................................................ 49
Passo 1: Crie um branch a partir da soluo................................................................................. 50
Passo 2: Faa alteraes no projeto.............................................................................................. 54
Passo 3: Faa o merge das mudanas do branch Team1 para o Main............................................56
Passo 4: Faa o merge das mudanas do branch Team2 para o Main............................................58
Integrando Mudanas Externas com o Sistema de Projeto....................................................................62
Mantendo Linked Servers no Projeto de Banco de Dados do Visual Studio........................................62
Resumo......................................................................................................................................... 62
Objetivos do Cenrio..................................................................................................................... 62
Passo 1: Criar dois novos projetos, um referenciando o outro......................................................62
Copyright 2009 Microsoft Corporation

Page 3

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


Movimentao Complexa de Dados.................................................................................................. 67
Resumo......................................................................................................................................... 67
Objetivos dos Cenrios.................................................................................................................. 67
Cenrio 1 Movimentao Complexa de Dados Comportamento Padro para Edio de
Desenvolvimento.......................................................................................................................... 67
Cenrio 2 Movimentao Complexa de Dados Engana engine de deployment (Enfraquece a
experincia atravs da IDE, quebra o SCC como mastre, e gera uma desvantagem de
performance)................................................................................................................................ 73
Cenrio 3 Movimentao Complexa de Dados Resolva o Problema de Performance (No utilize
a deployment engine, SCC torna-se o mestre).............................................................................. 75
Cenrio 4 Movimentao Complexa de Dados Integrar a Deployment Engine / Tratar converso
de dados externamente ao proejto............................................................................................... 78
Automao de Build e Deploy com Projetos de Banco de Dados no Visual Studio.................................83
Integrao WiX com Deployment de Banco de Dados....................................................................... 83
Resumo......................................................................................................................................... 83
Pr-requisitos................................................................................................................................ 85
Objetivos do Cenrio..................................................................................................................... 86
Passo 1: Estruturando a soluo.................................................................................................. 86
Passo 2: Criando a Informao da Aplicao................................................................................. 90
Passo 3: Configurando os redistribuveis....................................................................................... 98
Passo 4 Configurando projetos de banco de dados...................................................................101
Passo 5 Sequncias e Expresses Condicionais........................................................................ 105
Passo 6 Propriedades e Interface de Usurio (UI)......................................................................109
Passo 7 Armadilhas Comuns..................................................................................................... 113
Concluso................................................................................................................................... 118
O Cenrio de Integrao com o Team Build.................................................................................... 119
Resumo....................................................................................................................................... 119
Objetivos do Cenrio................................................................................................................... 119
Passo 1: Crie uma definio de build........................................................................................... 119
Passo 2: Enfileire um novo build a partir da definio.................................................................128
Passo 3: Verifique o progresso dos builds.................................................................................... 130
Build e deploy fora do team build................................................................................................... 132
Resumo....................................................................................................................................... 132
Objetivos do cenrio................................................................................................................... 132
Passo 1: Faa o build do projeto de banco de dados com o MSBUILD..........................................133
Passo 2: Faa o deploy do banco de dados com o VSDBCMD......................................................134
Testes de Banco de Dados e Verificao de Deployment.................................................................... 135
O Cenrio Bsico de Criao de Testes Unitrios..........................................................................135
Resumo....................................................................................................................................... 135
Objetivos do Cenrio................................................................................................................... 135
Passo 1: Crie um teste unitrio a partir de um modelo...............................................................135
Passo 2: Adicione condies de teste para o teste unitrio........................................................140

Copyright 2009 Microsoft Corporation

Page 4

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


O Cenrio Avanado de Criao de Testes Unitrios..................................................................... 143
Resumo....................................................................................................................................... 143
Objetivos do Cenrio................................................................................................................... 143
Passo 1: Configure o ambiente para mltiplos desenvolvedores................................................143
Passo 2: Deployment do banco de dados de teste.....................................................................145
Passo 3: Gerando dados de teste................................................................................................ 146
Passo 4: Testes de Performance Simples..................................................................................... 149
Cenrio Encontrando Alteraes de Modelo................................................................................. 150
Resumo....................................................................................................................................... 150
Objetivos Gerais do Cenrio........................................................................................................ 153
Cenrio 1: Garanta que voc testou seu banco de dados com a verso correta de produo SEM
ter acesso ao ambiente de produo (Verso confivel do DBA).................................................153
Cenrio 2: Certifique-se de que voc testou a aplicao de banco de dados com a verso obtida,
COM acesso ao banco de dados (Verso confivel do desenvolvedor)........................................156
Referncias......................................................................................................................................... 157
Documentao Tcnica de Design............................................................................................... 157
Vdeos......................................................................................................................................... 157
Links Gerais.................................................................................................................................... 157

Copyright 2009 Microsoft Corporation

Page 5

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

Acrnimos
Este guia utiliza os seguintes acrnimos comuns:
ACRONIMO

DESCRIO

ATDT

Application Tier, Data Tier (camada de aplicao, camada de dados).

Copyright 2009 Microsoft Corporation

Page 6

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

Histrico do Documento
20090501 v0.1

Willy-Peter Schaub

Criar um document base.

20090811 v1.0

Jens K. Smeyer

UE Reviso Finalizada

Colaboradores
Shishir Abhyanker
Chris Burrows
Larry Guger
Barclay Hill
Pablo Rincon
Scott Sharpe
Jens K. Smeyer
LeRoy Tuttle

Microsoft , Senior Development Engineer II | Visual Studio ALM


Range
Microsoft, SENIOR CONSULTANT
MVP, Visual Studio ALM Ranger
Microsoft, Senior Program Manager, Visual Studio for BizApps
Microsoft, Software Development Engineer | Visual Studio ALM
Range
Microsoft, SENIOR Software Development Engineer | Visual
Studio ALM Ranger
Microsoft, Senior Consultant | Visual Studio ALM Ranger
Microsoft, Senior Development Engineer | Visual Studio ALM
Range

Revisores
Visual Studio ALM Rangers

Visual Studio ALM Core and Extended Rangers

Bijan Javidi

Microsoft, Solution Architect | Visual Studio ALM Ranger

Copyright 2009 Microsoft Corporation

Page 7

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

Introduo
Viso Geral
Bem vindo ao Visual Studio Database Projects Hands-on Labs (HOL). Os HOLs esto aderentes
estrutura da documentao do Visual Studio Database Project Guidance disponvel no Codeplex.
Alinhados com a estrutura deste documento, os cenrios dos HOLs esto divididos nas seguintes
sees:

Seo de Gerenciamento de Soluo e Projeto


Controle de Cdigo Fonte e Gerncia de Configurao
Integrando Mudanas Externas com o Sistema de Projeto
Automao de Build e Deploy com o Visual Studio Database Projects
Testes de Banco de Dados e Verificao de Deployment

Cada seo ir contribuir para o entendimento do tpico coberto no documento guia.

Visual Studio ALM Rangers


O Visual Studio ALM Rangers um grupo especial formado por membros do grupo de produto do Visual
Studio, da Microsoft Services, Microsoft Most Valued Professionals (MVP) e Lderes da Comunidade de
Visual Studio. A misso deles prover solues adicionais para funcionalidades no implementadas e
guias de uso.
Este guia foi feito para usurios nvel Microsoft 200-300 do TFS. O grupo alvo considerado de
usurios do Team Foundation Server de nvel intermedirio para avanado e possui entendimento em
profundidade das funcionalidades do produto em um ambiente do mundo real. Partes deste guia
podem ser teis a novatos e experts no Team Foundation Server, porm este no nvel de
profissional focado neste contedo.

Pr-requisitos
Para completar o passo a passo dos cenrios bsicos e avanados dos laboratrios ser necessrio o
seguinte ambiente:

Visual Studio ALM Rangers Base Image (TR Hands-On-Lab)

Um nico servidor (fsico ou virtual) cujo ambiente possua os seguintes softwares instalados e
configurados:

- ou

Software

Verso

Nota

Sistema Operacional

Windows Server
2008
IIS7
SQL Server 2008
SP1
WSS 3.0 SP2

RC 2 ainda no foi testado

Office 2007 SP1

Recomenda-se no mnimo a verso


Professional

IIS
SQL Server
Windows SharePoint
Services
Microsoft Office
Team Foundation Server
Visual Studio Ultimate

Copyright 2009 Microsoft Corporation

2010
2010

Page 8

Empacotado como parte do SO


Recomenda-se Enterprise Edition

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

Gerenciamento de Soluo e Projeto


Refatorando uma Soluo do Visual Studio Database para
habilitar cdigo compartilhado
Objetivos do cenrio:

Identificar, manter e compilar de forma independente objetos compartilhados de banco de


dados

Refatorar projetos e dependncias sobrepostas de banco de dados

Habilitar SDLC atravs de componentizao em nvel de projeto

NOTA
No HOL, ns algumas vezes nos referimos ao caminho local
C:\Users\Administrator\Documents\Visual Studio 2010\Projects\SharedCode. Este caminho
padro para os projetos do Visual Studio pode ser utilizado se voc iniciar o HOL e criar os projetos
voc mesmo, passo a passo. Se ao invs disso voc quiser utilizar os projetos pr-definidos para cada
passo, utilize a pasta mencionada no incio de cada passo. Arquivos iniciais e finais esto definidos
neste local correspondente ao passo.

Passo 1: Examine os bancos de dados fsicos com cdigo e objetos sobrepostos


Para a proposta deste laboratrio iremos assumir que estamos refatorando dois bancos de dados
existentes que contm tabelas com definies idnticas. O SQL Server Reporting Services apresenta
em sua implementao um cenrio real com os bancos de dados criados durante a instalao do
produto. So eles os bancos ReportServer e ReportServerTempDB.

Durao estimada:

5 minutos

Identificar objetos com o mesmo nome nos bancos de dados ReportServer e


ReportServerTempDB
1. Abra o SQL Server Management Studio.
2.

No dilogo Connect to Server, na caixa de texto Server name: digite um ponto final (.) e
clique em Connect.

3.

No painel Object Explorer, expanda a rvore indo para o ponto final ( .) e expanda o n
Databases. Observe a existncia dos bancos de dados ReportServer e
ReportServerTempDB.

4.

Clique com o boto direito em ReportServer, e clique em New Query

5.

Na janela de query, execute a seguinte query para identificar os objetos com o mesmo nome
nos dois bancos de dados:

Copyright 2009 Microsoft Corporation

Page 9

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


SELECT

SCHEMA_NAME(schema_id) as SchemaName
,name as ObjectName
,type_desc as ObjectType
FROM ReportServer.sys.objects
WHERE
is_ms_shipped = 0
INTERSECT
SELECT
SCHEMA_NAME(schema_id) as SchemaName
,name as ObjectName
,type_desc as ObjectType
FROM ReportServerTempDB.sys.objects
WHERE
is_ms_shipped = 0;

Os resultados da execuo da query devem estar similares a este:

Figura 1 Resultados da query para localizar objetos similares


Utilizando a instruo INTERSECT ns consultamos os objetos de sistema do banco ReportServer
assim como do banco ReportServerTempDB e encontramos objetos que so comuns a ambos os
bancos de dados. Este foi o ponto de partida utilizado para selecionar os objetos em um projeto
qualquer.
NOTA
Em geral se voc quiser consolidar projetos para criar projetos compartilhados voc ter que se
certificar de que a estrutura dos objetos idntica. Ns recomendamos que voc generalize objetos
que possuam schemas idnticos, como colunas, tipos de dados, e assim por diante. Objetos podem ter
o mesmo nome e no ser idnticos porque seus schemas podem ser diferentes.

Copyright 2009 Microsoft Corporation

Page 10

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


Passo 2: Prepare a Soluo de Banco de Dados

Caminho dos arquivos finais:

C:\HOL\DatabaseProjectGuidance\SolutionProjectMgmt\SharedCode\Step2
Durao estimada: 10 minutos

Criar uma soluo e um projeto vazio do tipo SQL Server 2008 Database
Parmetro

Valor

Solution

SharedCode

Project

Database1

1.

Abra o Microsoft Visual Studio 2010 (edio Ultimate ou Professional).

2.

No menu principal clique em File, New, Project.

3.

No painel Installed Templates, expanda o n Database, clique em SQL Server e depois em


SQL Server 2008 Database Project.

4.

Na caixa de texto Name digite o seguinte texto: Database1.

5.

Na caixa de texto Solution Name digite SharedCode e clique no boto OK.

6.

No menu principal clique em File, Save All.

Engenharia reversa do banco de dados ReportServerTempDB no projeto Database1


Parmetro

Valor

Project

Database1

Server

Database

ReportServerTempDB

Copyright 2009 Microsoft Corporation

Page 11

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

1.

No Solution Explorer, clique com o boto direito em Database1 e clique em Properties.

2.

Na aba Database1, selecione o check box Include schema name in file name (Figura 2).

Figura 2 Altere as propriedades do projeto para incluir o nome do schema


3.

No Solution Explorer, clique com o boto direito em Database1 e clique em Import


Database Objects and Settings.

4.

No Import Database Wizard clique em New Connection

5.

No dilogo Connection Properties, no combo Server Name digite um ponto final (.)

6.

No combo Select or enter database name selecione o banco de dados


ReportServerTempDB.

7.

Clique em OK.

8.

No Import Database Wizard clique no boto Start.

9.

Quando o processo de importao dos objetos terminar voc ver a mensagem Click Finish to
continue. Clique em Finish.

10. No menu principal clique em File, Save All.


Engenharia reversa do banco de dados ReportServer em um novo projeto

Parmetro

Valor

Project

Database2

Server

Database

ReportServer

Copyright 2009 Microsoft Corporation

Page 12

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

1.

No Solution Explorer, clique com o boto direito em Solution SharedCode (1 project),


clique em Add e clique em New Project.

2.

No dilogo Add New Project, confirme que SQL Server 2008 Database Project est
selecionado.

3.

Na caixa de teste Name digite Database2 e clique em OK.

4.

No Solution Explorer, clique com o boto direito em Database2, e clique em Properties.

5.

Na aba Database2, selecione o check box Include schema name in file name.

6.

No Solution Explorer, clique com o boto direito em Database2 e clique em Import


Database Objects and Settings.

7.

No Import Database Wizard clique em New Connection.

8.

No dilogo Connection Properties, no combo Server Name digite um ponto final (.)

9.

No combo Select or enter database name, selecione o banco de dados ReportServer e


clique em OK.

10. No Import Database Wizard clique em Start.


11. Quando o processo de importao dos objetos terminar voc ver a mensagem Click Finish to
continue. Clique em Finish.
12. No menu principal, clique File, Save All.
Determine quais tabelas so comuns nos projetos de banco de dados originais

Parmetro

Valor

Source Schema
Project

Database1

Target Schema
Project

Database2

Equal tables

dbo.ChunkData,
dbo.ChunkSegmentMappi
ng, dbo.Segment

Copyright 2009 Microsoft Corporation

Page 13

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

1.

No menu principal, clique Data, clique Schema Compare, e clique em New Schema
Comparison.

2.

No dilogo New Schema Comparison (Figura 3), verifique que o valor do campo Source
Schema Project est definido com Database1, e que o campo Target Schema Project
est com o valor Database2. Clique em OK.

3.

Figura 3 Nova comparao de schemas para encontrar os objetos equivalentes


Na janela principal selecione a nova aba criada SchemaCompare1.

4.

No menu principal, clique Data, clique Schema Compare, clique Filter e clique em Equal
Objects.

5.

Na aba SchemaCompare1, inspecione e tome nota das tabelas que possuem definies
equivalentes nos dois projetos de banco de dados. A aba SchemaCompare dever estar similar
a Figura 4.

Figura 4 Resultado da comparao de Schema


6.
7.

Feche a aba SchemaCompare1 clicando no X ao lado da aba. Quando for solicitado, descarte
as alteraes realizadas em SchemaCompare1 (no necessrio salvar o arquivo).

No menu principal clique em File, Save All.

Copyright 2009 Microsoft Corporation

Page 14

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

NOTA
Na prtica, a seleo de objetos e cdigo reutilizveis deve ser feita como parte de uma deciso
deliberada de design. O processo de comparao de schema exibido anteriormente pode ser utilizado
para auxiliar essa deciso. Contudo, no deve ser o nico mtodo utilizado para realizar esta tarefa!
Engenharia reversa das estruturas das tabelas comuns em um novo projeto

Parmetro

Valor

Project

Database3

Shared tables

dbo.ChunkData,
dbo.ChunkSegmentMappi
ng, dbo.Segment

1.

No Solution Explorer, clique com o boto direito em Solution SharedCode (2 projects),


clique em Add e clique em New Project.

2.

No dilogo Add New Project, confirme que SQL Server 2008 Database Project est
selecionado.

3.

Na caixa de texto Name digite Database3 e clique em OK.

4.

No painel Solution Explorer, clique com o boto direito em Database3, e clique em


Properties.

5.

Na aba Database3, selecione o check box Include schema name in file name.

6.

No Solution Explorer, clique com o boto direito em Database3 e clique em Import Script.

7.

No dilogo Welcome to the Import SQL Script Wizard, clique em Next.

8.

No dilogo Select SQL Script File to Import wizard selecione a opo Multiple files e clique
em Browse.

9.

No dilogo Parent Directory for SQL Scripts v at


C:\Users\Administrator\Documents\Visual Studio
2010\Projects\SharedCode\Database1\Schema Objects\ e clique na pasta Schemas.
Depois clique em Select Folder.

10. No dilogo Select SQL Script File to Import sob o item Multiple files na rvore de items,
desmarque o n raiz e expanda totalmente o n Tables.

Copyright 2009 Microsoft Corporation

Page 15

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


11. Na rvore de arquivos abaixo do n Tables (Figura 5), selecione todos os 14 arquivos sob o
ns Tables, Constraints, Indexes, e Keys que estejam relacionados s tabelas
dbo.ChunkData, dbo.ChunkSegmentMapping, e dbo.Segment. Depois clique em
Finish.

Figura 5 Selecione os arquivos para importar no wizard


12. Quando o processo de importao dos objetos estiver finalizado voc ver a mensagem Click
Finish to continue. Clique em Finish.
13. No menu principal clique File, Save All.
Adicione um VIEW para ser compartilhada que dependa de um objeto de sistema
Parmetro

Valor

Project

Database3

View name

dbo.vwRowCounts

Copyright 2009 Microsoft Corporation

Page 16

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

1.

No Solution Explorer, expanda a rvore e v para o n Solution SharedCode (3 projects),


Database3, Schema Objects, Schemas, dbo, Views.

2.

Clique com o boto direito no n Views, clique Add, e ento clique em View.

3.

No dilogo Add New Item Database 3, certifique-se que View est selecionado.

4.

Na caixa de texto Name digite dbo.vwRowCounts e clique em Add.

5.

Na aba dbo.vwRowCounts.view.sql digite o seguinte cdigo TSQL:

CREATE VIEW dbo.vwRowCounts


AS
SELECT Y.object_id
,SCHEMA_NAME(Y.schema_id) as SchemaName
,Y.name as ObjectName
,X.rows as NumRecs
FROM sys.partitions as X WITH(NOLOCK)
INNER JOIN sys.objects as Y WITH(NOLOCK)
ON X.object_id = Y.object_id
WHERE
X.index_id <= 1
AND Y.is_ms_shipped = 0;
6.

No menu principal, clique em File, Save All.

7.

Note que o Error List agora mostra mensagens sobre as referncias no encontradas para
sys.objects e sys.partitions.

Copyright 2009 Microsoft Corporation

Page 17

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


Passo 3: Refatorar Referncias e Dependncias do Banco de Dados
Agora que montamos os componentes iniciais em projetos separados ns precisamos refatorar
dependncias e referncias fortemente acopladas de forma que os projetos possam ser compilados
juntos formando uma soluo coesa. Antes que o cdigo compartilhado possa ser injetado nesses
projetos eles precisam compilar individualmente sem erros.

Local dos arquivos iniciais:


C:\HOL\DatabaseProjectGuidance\SolutionProjectMgmt\SharedCode\Step2_Answer
Local dos arquivos finais:
C:\HOL\DatabaseProjectGuidance\SolutionProjectMgmt\SharedCode\Step3_Answer
Durao estimada:

20 minutos

Configure o projeto startup e bloqueie o deployment do projeto shared code


1. No Solution Explorer, clique com o boto direito em Solution SharedCode (3 projects), e
clique em Properties. A pgina de propriedades da soluo ir aparecer (Figura 6).
2.

No dilogo Solution SharedCode Property Pages, selecione a opo Single startup


project e ento selecione o projeto Database3 no mesmo combo.

3.

No painel esquerdo, clique em Configuration Properties.

4.

Na lista Configuration, selecione All Configurations.

5.

No painel direito, desmarque o checkbox Deploy para o Database3 project e clique em OK.

Figura 6 Defina as aes de Build e Deployment para os projetos


NOTA
Na prtica voc pode desejar variar as outras opes da soluo por tipo de configurao, isto ,
debug vs. release. Contudo, normalmente voc no ir desejar realizar deploy do projeto shared code
a no ser que esteja realizando testes unitrios contra ele.

Copyright 2009 Microsoft Corporation

Page 18

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


Adicione referncias a dbschemas externos para resolver objetos de sistema do SQL
Server

Parmetro

Valor

Projects

Database3 & Database2

master DB

sys.objects
sys.partitions
dbo.xp_sqlagent_enum_jo
bs
dbo.sysobjects

msdb DB

dbo.sysjobs
Sp_delete_job

1.

Utilizando o Windows Explorer, crie uma nova sub-pasta abaixo da pasta da soluo
(C:\Users\Administrator\Documents\visual studio 2010\Projects\SharedCode\)
chamada: DBSCHEMA

2.

Copie os arquivos dbschema para os objetos de bancos de dados master e msdb a partir de
C:\Program Files\Microsoft Visual Studio
10.0\VSTSDB\Extensions\SqlServer\2008\DBSchemas na pasta criada no passo anterior.

3.

No Solution Explorer, clique com o boto direito em Solution SharedCode (3 projects),


clique em Add e ento clique em Add Existing Item.

4.

No dilogo Add Existing Item, v para a pasta criada no passo 1, selecione os arquivos
master.dbschema e msdb.dbschema. Clique em Add.

5.

No Solution Explorer, expanda a rvore e v at o n Solution SharedCode (3 projects),


Database3, References.

6.

Clique com o boto direito no n References, clique em Add Database Reference.

7.

No dilogo Add Database Reference, selecione a opo Database project schema


(.dbschema) e clique em Browse.

8.

No dilogo Select Database File, v para a pasta criada no passo 1 e d um duplo-clique no


arquivo master.dbschema.

9.

Clique OK. Note algum tempo necessrio ao processamento de todo o contedo do


dbschema.

10. Repita os passos de 5 a 9, porm desta vez adicione a referncia para master.dbschema no
projeto Database1.
11. Repita os passos de 5 a 9, porm desta vez adicione a referncia para master.dbschema no
projeto Database2.
12. Repita os passos de 5 a 9, porm desta vez adicione a referncia para msdb.dbschema no
projeto Database2.
13. No menu principal clique em Build, Rebuild Solution.
14. No menu principal clique em File, Save All.

Copyright 2009 Microsoft Corporation

Page 19

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


Parametrize os nomes dos objetos de terceiros com referncia a Database Schemas
Parameter

Value

Project

Database2

Variable name

$(ReportServerTempDB)

Variable value

ReportServerTempDB

1.

No Solution Explorer, expanda a rvore e v at o n Solution SharedCode (3 projects),


Database2, References.

2.

Na rvore do Solution Explorer, clique com o boto direito no n References e clique Add
Database Reference.

3.

No dilogo Add Database Reference (Figura 7), selecione o checkbox Define database
variable.

4.

No lista Database projects in the current solution, selecione Database1.

5.

Abaixo do checkbox Define database variable, na caixa de texto Name digite: $


(ReportServerTempDB).

6.

No caixa de texto Value, digite: ReportServerTempDB.

7.

Selecione o checkbox Update the existing schema object definitions and scripts to use
the database reference variables, e clique em OK.

Figura 7 Adicione uma referncia ao projeto Database1 para resolver os problemas


de resoluo de nomes

Copyright 2009 Microsoft Corporation

Page 20

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

8.

No dilogo Preview Changes Rename Server or Database, reveja as mudanas


pendentes e clique em Apply.

9.

No menu principal, clique em Build e depois clique em Rebuild Solution.

10. No menu principal, clique em File, Save All.

Copyright 2009 Microsoft Corporation

Page 21

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

Otimize as referncias ao dbschema externo para os objetos de sistema do SQL Server


NOTA
Voc deve notado que necessrio algum tempo para validar e processar cada referncia feita pelos
projetos aos arquivos master.dbschema ou msdb.dbschema. Isso se deve ao grande nmero de
objetos definidos em cada um desses arquivos, a maioria dos quais no so necessrios nesta soluo.
Na prtica voc deve fazer uma cpia desses arquivos por soluo e edit-los para remover todas as
referncias a objetos no utilizados.
Parmetro

Valor

master.dbsche
ma

Type=ISql100DatabaseOpti
ons
Name=[sys].[objects]
Name=[sys].[partitions]
Name=[sys].[sysobjects]
Name=[dbo].
[xp_sqlagent_enum_jobs]

msdb.dbschem
a

Type=ISql100DatabaseOpti
ons
Name=[dbo].
[sp_delete_job]
Name=[dbo].
[sp_verify_job_identifiers]
Name=[dbo].[sysjobs]

1.

No Solution Explorer, expanda a rvore e v at o n Solution SharedCode (3 projects),


Solution Items.

2.

D um duplo-clique no arquivo master.dbschema para editar o seu contedo XML.

3.

Na aba master.dbschema, sob element XML <Model>, delete todas as entidades


<Element /> que no se encaixam no padro listado na tabela acima. Ns sugerimos que voc
recorte e cole os elementos desejados do topo do documento, diretamente abaixo do n
<Model>. Aps isso, delete o restante das entidades <Element />.

4.

Repita os passos 2-3 para o arquivos msdb.dbschema e seus valores.

5.

No menu principal, clique em Build e ento em Rebuild Solution. Finalmente, verifique se


voc no introduziu novos erros ou alertas.

Copyright 2009 Microsoft Corporation

Page 22

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

Algumas limpezas no projeto


NOTA
H tambm uma referncia ambgua para uma proc de sistema contida no banco de dados
msdb no mesmo projeto (a referncia no especifica o owner da SP); ento vamos corrigir o
problema!
1.

No Solution Explorer, expanda a rvore e v at o n Solution SharedCode (3 projects),


Database2, Schema Objects, Schemas ,dbo, Programmability, Stored Procedures.

2.

Clique com o boto direito em dbo.MigrationExecutionLog.proc.sql, e ento clique em


Exclude from Project.

NOTA
H uma stored procedure com uma referncia no resolvida para um objeto rfo em no
projeto Database2 (ReportServer). Provavelmente este problema no existiria se os
desenvolvedores originais estivessem usando o VSDB! Vamos exclu-la do projeto de forma
que o problema no nos distraia dos objetivos do laboratrio.

1.

No menu principal, clique em View, Error List.

2.

No painel Error List, d um duplo-clique no alerta SQL04151 referente ao arquivo


dbo.Get_sqlagent_job_status.proc.sql.

3.

Corrija o erro alterando a chamada a SP utilizando o nome totalmente qualificado (fullyqualified name):

EXECUTE @retval = msdb..sp_verify_job_identifiers


deve ser alterado para

EXECUTE @retval = msdb.dbo.sp_verify_job_identifiers


4.

No menu principal, clique em Build e ento em Rebuild Solution.

5.

No menu principal, clique File, All.

IMPORTANTE
A soluo deve compilar por completo sem nenhum erro ou alertas. importante ter as coisas
funcionando bem nesse passo antes de partirmos para a implementao dos arquivos de
projetos parciais. Se no tivermos um estado limpo (sem erros ou alertas) pode ser mais
complicado identificar os problemas aps a implementao dos arquivos de projetos parciais.

Copyright 2009 Microsoft Corporation

Page 23

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


Passo 4: Refatore a Soluo para habilitar Projetos Parciais

Local dos arquivos iniciais:


C:\HOL\DatabaseProjectGuidance\SolutionProjectMgmt\SharedCode
\Step3_Answer
Local dos arquivos finais:
C:\HOL\DatabaseProjectGuidance\SolutionProjectMgmt\SharedCode\Step4_Answer
Durao Estiamada: 15 minutos

Verifique que os objetos nos cdigo compartilhado no iro propagar erros


1. No Solution Explorer, clique com o boto direito no projeto Database3 e ento clique em
Properties.
2.

Na aba Database3, selecione a pgina Code Analysis.

3.

No painel da direita, selecione o check box Enable Code Analysis on Build.

4.

No menu principal, clique em Build e em Rebuild Database3.

5.

No painel Output, verifique que o build do projeto foi bem sucedido.

6.

No painel Error List, corrija todos os erros e alertas de anlise de cdigo, caso haja algum.

7.

No menu principal, clique em File, Save All.

Exporte os objetos compartilhados como uma definio de arquivo de projeto parcial


1. No Solution Explorer, clique com o boto direito em Database3 e ento clique em Export As
Partial Project
2.

No dilogo Save As, clique em New Folder, e depois digite: Partial Projects Export.

3.

Na caixa de texto File name, digite: Shared Objects e ento clique Save.

4.

No dilogo do Microsoft Visual Studio entitulado Do you want to add this partial project
file to your current project? clique em Yes.

Refatore a configurao padro do arquivo de projeto parcial


1. No Solution Explorer, abaixo de Database3, Partial Projects Export, d um duplo-clique em
Shared Objects.files.
2.

No dilogo Inconsistent Line Endings, clique em Yes.

3.

Na aba Shared Objects.files, tome nota do nome da propriedade referenciada no comentrio


no topo do arquivo; deve ser algo como Database3BasePath_XX_X_XXX_X_XX_XX_XX.

4.

Encontre e substitua todas as ocorrncias do valor do nome desta propriedade por


Database3BasePath. Altere 19 instncias desse valor.

5.

Encontre e substitua todas as ocorrncias de <Link>Database3BasePath\ por


<Link>Partial Projects Import\Shared Objects\. Altere 9 instncias do valor.

6.

No menu principal, clique em File, Save All.

Copyright 2009 Microsoft Corporation

Page 24

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


7.

Feche a aba Shared Objects.files.

Importe os arquivos parciais de projeto e elimine os conflitos de referncias no


resolvidas
1. No Solution Explorer, clique com o boto direito em Database2 e ento clique em Import
Partial Project.
2.

No dilogo do Microsoft Visual Studio entitulado Including a partial project will cause
the project to load and unload. Do you want to save your project and continue?
clique em Yes.

3.

No dilogo Open, v para a pasta ..\Database3\Partial Projects Export e d um duploclique em Shared Objects.files.

4.

No menu principal, clique em View e ento em Error List.

Copyright 2009 Microsoft Corporation

Page 25

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

NOTA
Ao importar os arquivos parciais de projeto do projeto Database3 no projeto Database2, ns de
fato duplicamos os objetos para cada objeto compartilhado aqueles que importamos e os que
foram identificados quando fizemos a comparao dos esquemas de banco de dados entre os
projetos Database1 e Database2. Estas entradas duplicadas resultaram em diversos erros de
referncias no resolvidas (SQL03006) os quais precisam ser corrigidos removendo os objetos
originais do projeto Database2 e mantendo os objetos importados.

5.

No Solution Explorer, expanda o n Database2 e expanda os seguintes ns: Schemas , dbo,


Tables, dbo.ChunkData.table.sql.

6.

Clique com o boto direito em dbo.ChunkData.table.sql, clique em View Object in


Schema View e ento clique em ChunkData.

NOTA
Existem duas entradas para esta tabela, ambas prefixadas por um cone de erro. Voc precisa
vizualizar as propriedades de cada uma delas e excluir a que esteja na estrutura de pastas do
projeto Database2, mantendo a outra definio referente ao projeto compartilhado Database3.

7.

Clique com o boto direito em ChunkData, e ento clique em Properties.

8.

No painel de propriedades, examine o valor da propriedade Full Path. Caso ela esteja fazendo
referncia ao caminho do projeto Database2, delete a entidade ChunkData. Caso contrrio,
inspecione e delete a outra entidade ChunkData.

9.

Repita os passos 7-8 para as tabelas ChunkSegmentMapping e Segment.

10. No menu principal, clique Build e ento clique em Rebuild Database2.


11. Examine o contedo do painel Error List e repita os passos 7-8 para cada novo objeto chave,
constraint, ndice no projeto Database2.
12. No menu principal, clique Build e depois em Rebuild Database2.
13. Na janela Output, verifique se a compilao do projeto foi bem sucedida.
14. No painel Error, certifique-se de que no h erros ou alertas.
15. No menu principal, clique em File e ento em Save All.
16. Repita os passos 1-14, mas desta vez, importe os arquivos parciais do projeto Database3 no
Database1.

Copyright 2009 Microsoft Corporation

Page 26

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


Exercite diferentes nveis de granularidade do build
1. No Solution Explorer, clique com o boto direito Database3 e clique em Rebuild.
2.

Clique com o boto direito em Database3 e ento clique em Unload Project.

3.

Clique com o boto direito em Database1 e ento clique em Rebuild.

4.

Clique com o boto direito em Database2 e ento clique em Rebuild.

5.

No menu principal, clique Build e ento clique em Rebuild Solution.

NOTA
Com este tipo de build voc ir notar que atualmente ns no precisamos que a soluo
Database3 compile os outros dois projetos referenciados. O projeto parcial referenciado a
partir dos arquivos de projeto e voc no precisa incluir o projeto Database3 na sua soluo.

Copyright 2009 Microsoft Corporation

Page 27

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


Passo 5: Propague as mudanas para os components de cdigo compartilhado
Agora que ns refatoramos e consolidamos o cdigo compartilhado em um projeto comum, ns
podemos com facilidade realizar mudanas a estas estruturas de forma centralizada e
automaticamente propagar estas mudanas para os projetos dependentes.

Local dos arquivos iniciais:


C:\HOL\DatabaseProjectGuidance\SolutionProjectMgmt\SharedCode\Step4_Answer
Local dos arquivos finais:
C:\HOL\DatabaseProjectGuidance\SolutionProjectMgmt\SharedCode\Step5_Answer
Durao Estimada:
10 minutos

Altere uma view no projeto compartilhado


1. No painel Solution Explorer, expanda a rvore e v para Solution SharedCode (3
projects), Database3. (Caso o projeto esteja descarregado do passo 4 neste cenrio, clique
com o boto direito no n do projeto e selecione Reload Project.) Aps, clique no n
Schema Objects, Schemas , dbo, Views, e ento efetue um duplo-clique
dbo.vwRowCounts.view.sql.
2.

Na aba dbo.vwRowCounts.view.sql, edite a definio da view e adicione uma nova coluna


chamada DatabaseName que retorne DB_NAME() como seu valor.

3.

No menu principal, clique em Build e selecione Rebuild Database3.

4.

No painel Output, verifique que o build do projeto foi bem sucedido, sem erros ou alertas.

5.

No menu principal, clique em Build e ento em Build Solution.

6.

No painel Output, verifique que o build da soluo foi bem sucedido, sem erros ou alertas.

Inspecione os projetos dependentes e verifique que as alteraes no cdigo


compartilhado foram propagadas
1. No painel Schema View, expanda a rvore e navegue at o n Database1, Schemas, dbo,
Views, vwRowCounts, Columns. Observe a adio da coluna DatabaseName.
2.

Clique com o boto direito em vwRowCounts e selecione Properties.

3.

No painel Properties, examine o valor da propriedade Full Path e note que ela faz referncia
ao arquivo localizado na rvore de diretrios do projeto Database3.

4.

Repita os passos 1-3, mas desta vez examine a mesma viso lgica no projeto Database2.

Copyright 2009 Microsoft Corporation

Page 28

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

Controle de Cdigo-Fonte e Gerncia de Configurao


Viso Geral dos Cenrios:
Estes cenrios mostram exemplos de situaes comuns nas quais os times de desenvolvimento se
encontram e oferece padres de branching (ramificaes do controle de cdigo fonte) para solucionar
tais situaes. Um dos desafios mais frequentes enfrentados empresas de desenvolvimento quando
times distintos necessitam trabalhar em paralelo, ou precisam isolar uma parte do seu trabalho dos
demais times.
Estes cenrios devem permitir aos times rapidamente compreender as vrias opes de branching
disponveis. Os cenrios devem ainda prover o arcabouo necessrio para que os times adotem uma
estrutura de branching que atenda s suas necessidades. importante ressaltar que enquanto estes
cenrios apresentam solues vlidas para situaes especficas possvel que existam solues
alternativas que tambm sejam vlidas.
Cada cenrio descreve o esquema do banco de dados, a estrutura de projeto do the Visual Studio
Database e a hierarquia da estrutura de branching. Mesmo sendo estes elementos complexos para a
maioria dos times de desenvolvimento, padres de branching se apresentam como solues
recorrentes e ns esperamos que os cenrios aqui apresentados ajudem a responder questes como:
quando ramificar, o que ramificar e o valor que a ramificao traz para tornar os esforos de
desenvolvimento mais rpidos e suaves.
Em cada cenrio ns apresentamos uma situao enfrentada por um time de desenvolvimento
hipottico trabalhando no banco de dados AdventureWorks. A estrutura de branching recomendada,
assim como o processo de branching e merging sero explorados e examinados em detalhe.

Copyright 2009 Microsoft Corporation

Page 29

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

Cenrio #1: Modelo de Branching para um nico Time


Objetivos do cenrio:

Descrever como os projetos de banco de dados do Visual Studio podem:


o Ser integrados com o controle de cdigo-fonte
o Suportar o desenvolvimento de banco de dados e o processo de gerenciamento de
mudanas

Introduo
Alinhados s recomendaes gerais para branching e merging, que podem ser encontradas no guia de
branching e merging publicado pelos grupo Visual Studio ALM Rangers no Codeplex Microsoft Team
Foundation Server Branching Guidance 1
os cenrios utilizaro a seguinte metodologia de branching.

1 http://branchingguidance.codeplex.com/
Copyright 2009 Microsoft Corporation

Page 30

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

8
5
7

Copyright 2009 Microsoft Corporation

Page 31

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


Figura 8 Modelo de branching para time nico

Definies de Branch para este cenrio:

DEV O branch DEV est isolando todas as atividades relacionadas a novos densevolvimentos,
seja para novas funcionalidades, correo de bugs para o prximo release (vNext), ou para
integrao de grandes mudanas. Esta rea projetada para isolar, conter e estabilizar as novas
atividades de desenvolvimento.
MAIN O branch MAIN utilizado para a estabilizao final (QA) de todas as funcionalidades
antes do release da prxima verso (vNext). MAIN deve ser sempre mantido o mais estvel
possvel.

Copyright 2009 Microsoft Corporation

Page 32

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

Passo 1: Criar um novo projeto para o banco de dados AdventureWorks


A base para este laboratrio ser um projeto de banco de dados do Adventureworks, o qual ser
extrado de um banco de dados pr-existente na mquina do HOL. Caso voc j tenha alterado o
schema do banco de dados e queira preservar as mudanas certifique-se de fazer um backup ou
renomear seu banco de dados antes do exerccio.

Durao estimada:5 minutos

Restaure o AdventureWorksDB
A mquina do HOL contm um backup do banco de dados AdventureworksDB que foi baixado do
SQL Server Samples Site.2 Para restaur-lo, execute os seguintes passos na mquina do HOL:

Cuidado
Os passos a seguir para restaurar o backup do banco de dados iro sobrescrever o banco
AdventureworksDB, caso ele j exista. Se voc fez alteraes a este banco e quer preserv-las,
faa um backup ou renomeie o banco de dados ADVENTUREWORKSDB existente antes do restore.
1.
2.
3.

V at a pasta C:\HOL\DatabaseProjectGuidance\RestoreDatabase localizada na


maquina do HOL.
Execute o script StartAdventureWorksRestoration.cmd.
Aguarde o prompt de commando ser fechado. Quando o backup tiver sido restaurado na
sua mquina, qualquer banco de dados com o nome AdventureworksDB ser sobrescrito.

2 http://sqlserversamples.codeplex.com/
Copyright 2009 Microsoft Corporation

Page 33

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


Crie um novo projeto de banco de dados e importe o schema do AdventureworksDB
1.

Inicie o Visual Studio 2010.

2. No menu File, aponte para New e clique em Project. Voc ver o dilogo New Project
mostrado na Figura 9.
3. Sob Installed Templates, expanda o n Database, expanda o n SQL Server, e selecione o
template SQL Server 2008 Wizard.
4.

Em Name, digite o nome AdventureWorksDB para o nome do projeto.

5.

Selecione o check box Add to source control.

6.

Clique em OK para confirmar a criao do projeto.

Figura 9 Dilogo de novo projeto para banco de dados


NOTA
Certifique-se de que voc selecionou um nome e local que no tenha uma estrutura de diretrios
muito longa. Como o sistema de projeto cria uma hierarquia para armazenar os scripts dos objetos, os
nomes dos arquivos podem ser muito longos, levando a problemas durante a automao.

7. Como queremos colocar os artefatos no controle de verso do Team Foundation Server ns


precisaremos especificar o servidor e o workspace (cpia local dos arquivos son controle de
verso). Para tanto, o dilogo Connect to Team Project para conectar o projeto ao Team
Foundation Server ir aparecer. (Figura 10).

Copyright 2009 Microsoft Corporation

Page 34

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

Figura 10 Dilogo para conectar ao Team Project no Team Foundation Server

8.

Selecione a mquina local como sendo o servidor de Team Foundation Server e clique em
Connect. O dilogo Add <your project> to Source Control ir aparecer. (Figura 11)

9.

Selecione Make new folder e nomeie a pasta como HOL_Database. Clique OK para fechar o
dilogo.

Figura 11 Dilogo para adicionar a soluo ao controle de verso

Copyright 2009 Microsoft Corporation

Page 35

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


10. O wizard para importar um projeto de banco de dados a partir de um banco de dados existente
(engenharia reversa) aparece. Clique Next. (Figura 12)

Figura 12 Pgina de boas vindas do New Project Wizard

Copyright 2009 Microsoft Corporation

Page 36

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


11. Altere a opo padro para Organize by Schema e clique em Next. (Figura 13)

Figura 13 Pgina de Propriedades de Projetos

12. Na pgina Set Database Options, selecione as opes desejadas e clique em Next. (Figura 14)

Figura 14 Pgina Set Database Options

Copyright 2009 Microsoft Corporation

Page 37

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


13. Na pgina Import Database Schema, selecione os checkboxes conforme anbaixo. Import
options:

Import permissions

Add imported permissions to the project model

14. Clique Next.(Figura 15)

Figura 15 Pgina Import Database Schema

15. Clique em New connection e especifique o nome do servidor digitando um ponto final (.) e
clique no boto com do banco de dados AdventureworksDB. Clique em Finish. (Figura
15)

Figura 16 Pgina Configure Build and Deploy


Copyright 2009 Microsoft Corporation

Page 38

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

Copyright 2009 Microsoft Corporation

Page 39

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


16. Aguarde a importao do banco de dados ser finalizada. A mensagem Click Finish to
Continue ser escrita na janela de log. Clique em Finish para fechar o wizard. (Figura 17)

Figura 17 Progresso do processo de engenharia reversa

Copyright 2009 Microsoft Corporation

Page 40

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


Passo 2: Faa o Check in do novo projeto no Team Foundation Server
Agora que criamos o projeto de banco de dados no passo 1 ns queremos utilizar o processo de
branching e merging. Para fazer isso, ns devemos realizer o check in (subir o cdigo-fonte) do projeto
no Team Foundation Server.

Durao estimada:

1 minuto

Faa o check in das mudanas do projeto local para o controle de verso


1.

No Solution Explorer, clique com o boto direito no projeto de banco de dados e clique em
Check in. (Figura 18)

Figura 18 Iniciando o processo de check-para as mudanas pendentes

Copyright 2009 Microsoft Corporation

Page 41

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


2.

Certifique-se de que todos os items do projeto esto selecionados no painel Pending


changes e ento clique em Check in. (Figura 19)

Figura 19 Revise os artefatos para o check in e certifique-se de que todos esto


selecionados
3.

No menu principal, clique em File e ento em Close solution.

Copyright 2009 Microsoft Corporation

Page 42

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


Passo 3: Crie um branch da soluo
Agora que fizemos o check in da soluo e dos artefatos relevantes no Team Foundation Server, ns
podemos iniciar o trabalho com as funcionalidades de controle de verso e criar branches (ramos).

Durao estimada:

2 minutos

1.

No menu principal, clique em View e depois em Team Explorer.

2.

No Team Explorer, d um duplo-clique em Source Control (Figura 20). A rvore de cdigo do


controle de verso ir aparecer na janela principal do Visual Studio.

Figura 20 Janela do Team Explorer com a viso do projeto

Copyright 2009 Microsoft Corporation

Page 43

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


3.

Na janela Source Control, v at o caminho do controle de verso em


$/HOL_DatabaseProjects/HOL_Database, clique com o boto direito no n e selecione
Branching and merging e ento clique em Branch. O dilogo mostrado na Figura 21 ir
aparecer.

4.

No combo Under Branch from version, selecione Latest version e no campo Target digite o
nome HOL_Database-Branch_Rewards. Sempre digite uma descrio para o branch que torne
mais fcil reconhecer sua finalidade no futuro. Clique em Ok para prosseguir.

Figura 21 Especifique as informaes de origem do cdigo para criar o branch

5.

Se voc ainda no especificou um workspace o seguinte dilogo ir aparecer, como mostrado


Figura 22. Mapeie o Workspace para
C:\HOL\DatabaseProjectGuidance\Workspace\HOL_Database-Branch_Rewards e clique em
Map.

Figura 22 Crie um mapeamento para um workspace

Copyright 2009 Microsoft Corporation

Page 44

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


6.

O comando para realizar o branch sera enviado para o servidor e executado. Voc ver o branch no
Source Control Explorer, como mostrado na Figura 23.

Figura 23 Novo branch no Source Control Explorer


7.

Utilizando o Team Explorer, reveja o novo branch e abra a soluo HOL_Database.sln.

8.

No Solution Explorer, clique com o boto direito no projeto de banco de dados e depois em
Check in. (Figure 24)

Figure 24 Inicie o processo de check in para as alteraes pendentes

Copyright 2009 Microsoft Corporation

Page 45

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


9.

Certifique-se de que todos os itens do projeto estejam selecionados no painel Pending changes
e clique em Check in. (Figure 25)

Figure 25 Reveja os artefatos para o check In e certifique-se de que todos esto


selecionados

10. Agora ns iremos iniciar mudanas no projeto de banco de dados. Mais tarde iremos realizar o
merge dos artefatos do projeto de banco de dados de volta para o branch principal (main). Para
simular o merge ns iremos importer uma srie de arquivos que representam as mudanas que
faremos no cdigo do projeto.
11. No Solution Explorer, clique com o boto direito em AdventureWorksDB e em Import Script.
12. Na pgina Welcome to the Import SQL Script Wizard clique em Next.

13. Na pgina Select SQL Script File to Import selecione a opo Single file e clique em Browse.
14. V at a pasta C:\HOL\DatabaseProjectGuidance\Source Code Control and Configuration
Management\RewardsProgram e selecione o arquivo
RewardsProgrammScriptForImport.sql. Clique OK para fechar a caixa de dilogo.

Copyright 2009 Microsoft Corporation

Page 46

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

Figura 26 Importe um arquivo com as mudanas para o branch


15. Clique em Finish para iniciar o processo de importao.

Copyright 2009 Microsoft Corporation

Page 47

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


16. Quando o processo de importao estiver finalizado voc ver a mensagem Click Finish to
continue. Clique em Finish. (Figura 27)

Figura 27 O wizard importou as mudanas para o branch


Agora que o processo de importao foi concludo com sucesso vamos realizar o deploy das novas
mudanas no banco de dados SQL Server.

Copyright 2009 Microsoft Corporation

Page 48

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


Passo 4: Faa o deploy da soluo de banco de dados
Ns criamos o branch a partir do cdigo-fonte existente e nosso prximo passo ser realizar o deploy
do banco de dados para uma instncia local do SQL Server.

Durao estimada:
1.

5 minutos

No Solution Explorer, clique com o boto direito no n do projeto e selecione Properties.

Clique com o boto direito no projeto AdventureWorksDB e selecione Properties.


Selecione no combo Deploy action a opo Create a deployment script (.sql) and
deploy to the database.
Na aba Deploy, ao lado prximo de Target connection clique em Edit para especificar
uma conexo SQL vlida para o deployment. Digite um ponto final (.) no nome do servidor
e clique em OK para fechar a janela de conexo.
Na aba Deploy, digite HOL_Eval2008_RewardsBranch como sendo o nome do banco de
dados a ser criado no deployment. (Figura 28)

Figura 28 Propriedades de deployment do projeto


2.

Como o AdventureworksDB inclui um FileStream filegroup e o caminho no ser alterado


automaticamente durante a importao do projeto, teremos que realizar algumas pequenas
alteraes para poder realizar o deploy.

No Solution Explorer, v at Schema Objects, Database Level Objects, Storage, Files


e abra o arquivo FileStreamDocuments.sqlfile.sql.

Altere o script .sql conforme abaixo para incluir o nome do banco de dados:
ALTER DATABASE [$(DatabaseName)]
ADD FILE (NAME = [FileStreamDocuments], FILENAME = '$(Path3)$(DatabaseName).Documents')
TO FILEGROUP [DocumentFileStreamGroup];

Copyright 2009 Microsoft Corporation

Page 49

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

3.

Clique com o boto direito na soluo de banco de dados e selecione Deploy para realizar o
deploy da soluo para o banco de dados especificado. Voc ver o progresso do deployment na
janela Output do Visual Studio. (Se voc no vizualizar a janela output, voc poder alternar para
ela atravs do menu principal. Clique em View e ento em Output. Ao visualizar a janela Output
voc poder alterar a opo Show output from para Build. (Figura 29)

Figura 29 Monitorando o progresso do deployment na janela Output


O deployment dever ser finalizado sem erros, conforme mostrado ao final da das mensagens na
janela Output. (Figura 30)

Figura 30 Resultado final na janela Output

Copyright 2009 Microsoft Corporation

Page 50

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


Passo 5: Fazendo o merge do branch (integrando alteraes entre dois branches)
Agora que fizemos o deploy do banco de dados no servidor e o desenvolvimento foi finalizado, ns
iremos fazer o check in das mudanas e realizar o merge destas mudanas com o branch main.

Durao estimada:

5 minutos

1. Agora que fizemos o deploy da verso ramificada e alterada do projeto para o servidor, ns temos
uma verso diferente do banco de dados no nosso branch, para a qual devemos fazer check in.
No Solution Explorer, clique com o boto dierito no projeto de banco de dados e selecione Check
in pending changes. O dilogo Pending Changes ir aparecer. (Figura 31)
Certifique-se de que todos os items esto selecionados e clique no boto Check In.

Figura 31 Reveja as alteraes pendentes para o HOL_Database-Branch_Rewards

2.

Para visualizar os branches existentes e preparar o merge v para a janela Branch Visualization.
Clique em no branch HOL_Database-Branch_Rewards, clique com o boto direito no n e v
para Branching and merging. Clique em View hierarchy. A janela mostrada na Figura 32 ir
aparecer.

Figura 32 Vizualizao das ramificaes (branching) para o branch criado

Copyright 2009 Microsoft Corporation

Page 51

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


3.

Na janela Branch Visualization, selecione o smbolo HOL_Database-Branch_Rewards, clique


com o boto direito sobre ele e selecione o comando Merge. O Source Control Merge Wizard
aparece. (Figura 33)

Figura 33 Source Control Merge Wizard


4.

Aps revisar a informao do wizard e certificar-se de que o branch de origem o HOL_DatabaseBranch_Rewards e o branch de destino o HOL_Database, e ento clique em Next. (Figura 33)

5.

Na prxima pgina certifique-se de que Latest version esteja selecionado para a operao de
merge e clique em Next.

6.

Na pgina summary clique em Finish para iniciar a operao de Merge.

7.

No Solution Explorer, clique com o boto direito no projeto de banco de dados e selecione Check
in pending changes. O dilogo Pending Changes aparece. (Figura 34)
Certifique-se de que todos os itens esto selecionados e clique em Check In.

Copyright 2009 Microsoft Corporation

Page 52

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

Figura 34 Realize o check in das alteraes pendentes realizadas durante a operao


de merge

Copyright 2009 Microsoft Corporation

Page 53

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


Passo 6: Sincronize as alteraes do cdigo com a verso atual do banco de dados
Agora que ns fizemos o merge das mudanas de volta para o branch principal (main), vamos fazer o
deploy do banco de dados para garantir a sincronia do cdigo-fonte com o deployment atual.

Durao estiamda:

1.

1 minuto

No menu principal clique em Data, clique em Schema Compare e ento clique em New schema
comparison. O dilogo para uma nova comparao de schemas ser aberto. (Figura 35)

Figura 35 Dilogo para uma nova comparao de schemas

Para o schema de origem (source schema) selecione o banco de dados de onde voc
extraiu o schema no passo 1. Trata-se do banco de dados Adventureworks no servidor
local.
Para o schema alvo (target schema) (o banco de dados onde desejamos aplicar as
alteraes) selecione o banco de dados o qual foi feito deploy no passo 4 com o nome
HOL_Eval2008_RewardsBranch.

Aps definer os schemas de origem e destino clique em OK.


2.

Voc ir notar que no painel de resultado da comparao de schemas, o banco


HOL_Eval2008_RewardsBranch contm alguns objetos que no existem no banco de dados
AdventureworksDB. (Figura 36) As alteraes do branch main ainda no foram aplicadas para o
banco de dados correspondente. Neste ponto as alteraes esto somente no controle de verso.

Copyright 2009 Microsoft Corporation

Page 54

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

Figura 36 Painel com os resultados da comprao de Schemas


3.

Para aplicar as diferenas ns iremos utilizar a capacidade do projeto de banco de dados de


realizar o deploy incremental das mudanas. Para tanto, no Solution Explorer, clique com o boto
direito nos projetos de banco de dados e selecione Properties. Clique na aba Deploy e certifiquese de que as opes Create Deploy Script e Deployment action estejam selecionadas.

4.

Clique com o boto direito na soluo e clique em Deploy para fazer o deploy da soluo para o
banco de dados especificado. Voc ir ver o progresso do deployment na janela Output do Visual
Studio. Ao final das mensagens voc dever ver uma seo chamada Deployment script
generated to que contm o caminho para o arquivo .sql para executar no banco de dados relativo
ao branch main. Este script pode ser utilizado para sincronizar o banco de dados com o cdigo do
branch.

Copyright 2009 Microsoft Corporation

Page 55

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

Cenrio #2: Modelo de Branching para Mltiplos Times

Descrever como os projetos de banco de dados podem:


o Integrar-se ao controle de cdigo-fonte
o Suportar o desenvolvimento do banco de dados em mltiplos branches
o Tratar alteraes conflitantes entre os branches

Figura 37 Modelo de Branching para Mltiplos Times

Definies de Branch para este cenro:

TEAM-1 O branch TEAM-1 est isolando todas as atividades relacionadas a novos


desenvolvimentos, seja para novas funcionalidades, correo de bugs para o prximo release
(vNext), ou para integrao de grandes mudanas. Esta rea projetada para isolar, conter e
estabilizar as novas atividades designadas ao Time 1.
TEAM-2 O branch TEAM-2 est isolando todas as atividades relacionadas a novos
desenvolvimentos, seja para novas funcionalidades, correo de bugs para o prximo release
(vNext), ou para integrao de grandes mudanas. Esta rea projetada para isolar, conter e
estabilizar as novas atividades designadas ao Time 2.
MAIN O branch MAIN utilizado para a estabilizao final (QA) de todas as funcionalidades
antes do release da prxima verso (vNext). MAIN deve ser sempre mantido o mais estvel
possvel.

Copyright 2009 Microsoft Corporation

Page 56

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


Passo 1: Crie um branch a partir da soluo
Para simular diferentes times trabalhando no projeto ns criaremos 2 branches a partir da soluo no
branch main o qual ns fizemos check in anteriormente (veja o cenrio #1).

Durao estimada:

10 minutos

1.

Na janela Source Control, v at o caminho do controle de verso


$/HOL_DatabaseProjects/HOL_Database, clique com o boto direito neste n e selecione
Branching and merging. Clique em Branch. O dilogo Branch from HOL_Database ir
aparecer, conforme mostrado na Figura 38.

2.

No combo Branch from Version, selecione Latest version e digite o nome


$/HOL_DatabaseProjects /HOL_Database-Team1 no campo Target Branch Name. Digite uma
descrio para o branch que torne fcil reconhecer o seu propsito no futuro. Clique no boto
Branch para prosseguir. (Figura 38)

Figura 38 Especifique informaes sobre a origem do branch

Copyright 2009 Microsoft Corporation

Page 57

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

3.

Clique em Yes para confirmar que voc deseja criar o branch.

Figura 39 Dilogo de confirmao do Branch


4.

O comando de branching ser enviado ao servidor e executado. Quando o processo de branching


for finalizado, voc ir visualizer o branch no Source Control Explorer, conforme mostrado na Figura
23.

Figura 40 Novo branch no Source Control Explorer


5.

Reveja o novo branch utilizando o Team Explorer.

Copyright 2009 Microsoft Corporation

Page 58

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

6.

Na janela Source Control, v at o caminho do controle de verso


$/HOL_DatabaseProjects/HOL_Database, clique com o boto direito neste n e selecione
Branching and merging. Clique em Branch. O dilogo Branch from HOL_Database ir
aparecer, conforme mostrado na Figura 41.

7.

No combo Branch from Version, selecione Latest version e digite o nome


$/HOL_DatabaseProjects /HOL_Database-Team2 no campo Target Branch Name. Digite uma
descrio para o branch que torne fcil reconhecer o seu propsito no futuro. Clique no boto
Branch para prosseguir. (Figura 38)

Figure 41 Especifique informaes sobre a origem do branch

8.

Clique em Yes para confirmar que voc deseja criar o branch.

Figure 42 Dilogo de confirmao do branch

Copyright 2009 Microsoft Corporation

Page 59

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

9.

O comando de branching ser enviado ao servidor e executado. Quando o processo de branching


for finalizado, voc ir visualizar o branch no Source Control Explorer, conforme mostrado na Figura
23.

Figure 43 Novo branch no Source Control Explorer


10. Reveja o novo branch utilizando o Team Explorer.

Copyright 2009 Microsoft Corporation

Page 60

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


Passo 2: Faa alteraes no projeto
Aps criar dois branches, ns iremos simular diferentes alteraes nos branches para preparamos o
processo de merge que sera executado no prximo passo.

Durao estimada:

1.

15 minutos

Faa alteraes na tabela Purchasing.Vendor no branch Team1.


a. No Source Control Explorer, abra a soluo a partir do branch HOL_DatabaseTeam1.
b. Abra o arquivo Vendor.table.sql file. Ele est localizado em AdventureWorksDB,
AdventureWorksDB, Schema Objects, Schemas, Purchasing, Tables.
c. Adicione a coluna PreferredVendor adicionado a linha de cdigo correspondente no
script. O script final deve ser como o abaixo:
CREATE TABLE [Purchasing].[Vendor] (
[VendorID]
INT
IDENTITY (1, 1) NOT NULL,
[AccountNumber]
[dbo].[AccountNumber] NOT NULL,
[Name]
[dbo].[Name]
NOT NULL,
[CreditRating]
TINYINT
NOT NULL,
[PreferredVendorStatus] [dbo].[Flag]
NOT NULL,
[ActiveFlag]
[dbo].[Flag]
NOT NULL,
[PurchasingWebServiceURL] NVARCHAR (1024)
NULL,
[ModifiedDate]
DATETIME
NOT NULL,
[PreferredVendor]
BIT
NOT NULL
);

2.

Faa o check in das alteraes pendentes no branch Team1.


No Solution Explorer, clique com o boto direito no projeto de banco de dados e selecione a
opo Check in pending changes. O dilogo Pending Changes sera exibido. (Figura 44)
Certifique-se de que todos os items estejam selecionados e clique em Check In.

Figura 44 Reviso das alteraes pendentes para o branch HOL_Database-Team1

1.

Faa alteraes na tabela Purchasing.Vendor no branch Team2.


a. No Source Control Explorer, abra a soluo a partir do branch HOL_Database-Team1.

Copyright 2009 Microsoft Corporation

Page 61

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


b. Abra o arquivo Vendor.table.sql. Ele est localizado em AdventureWorksDB,
AdventureWorksDB, Schema Objects, Schemas, Purchasing, Tables.
c. Altere a coluna PurchasingWebServiceURL e reduza o tamanho do tipo de dados de
1024 para 512 caracteres. O script resultante deve se parecer com o abaixo::
CREATE TABLE [Purchasing].[Vendor] (
[VendorID]
INT
IDENTITY (1, 1) NOT NULL,
[AccountNumber]
[dbo].[AccountNumber] NOT NULL,
[Name]
[dbo].[Name]
NOT NULL,
[CreditRating]
TINYINT
NOT NULL,
[PreferredVendorStatus] [dbo].[Flag]
NOT NULL,
[ActiveFlag]
[dbo].[Flag]
NOT NULL,
[PurchasingWebServiceURL] NVARCHAR (512)
NULL,
[ModifiedDate]
DATETIME
NOT NULL
);

3.

Faa o check in das alteraes pendentes no branch Team2.


No Solution Explorer, clique com o boto direito no projeto de banco de dados e selecione Check
in pending changes. O dilogo pending changes sera exibido. (Figura 45)
Certifique-se de que todos os itens estejam selecionados e clique em Check In.

Figura 45 Reveja as alteraes pendentes para o branch HOL_Database-Team2

Copyright 2009 Microsoft Corporation

Page 62

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


Passo 3: Faa o merge das mudanas do branch Team1 para o Main
Agora que ns fizemos alteraes nos branches Team1 e Team2, ns iremos realizar o merge do
contedo de volta para o branch main. Neste passo ns iremos nos concentrar no branch Team1.

Durao estimada:

5 minutos

1.

No menu principal, clique em View e ento clique em Team Explorer

8.

No Team Explorer, v at o source control no caminho $/HOL_DatabaseProjects/HOL_DatabaseTeam1, clique com o boto direito no n e selecione Merge. O Source Control Merge Wizard
aparece. (Figura 46)

Figura 46 Source Control Merge Wizard

Copyright 2009 Microsoft Corporation

Page 63

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


9.

Aps revisar a informao no wizard certificar-se de que o branch de origem HOL_DatabaseBranch_Team1 e o branch de destino o HOL_Database, clique em Next. (Figura 46)

10. Um dilogo de confirmao ir aparecer. Clique em Finish para iniciar a operao de merge.
(Figura 47)

Figura 47 Merge confirmation dialog box

11. No Solution Explorer, clique com o boto direito no projeto de banco de dados e selecione Check
in pending changes. O dilogo de alteraes pendentes aparece. (Figura 48)
Certifique-se de que todos os itens selecionados e clique em Check In.

Figura 48 Faa o check in das alteraes pendentes feitas durante a operao de


merge

Copyright 2009 Microsoft Corporation

Page 64

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


Passo 4: Faa o merge das mudanas do branch Team2 para o Main
Agora que ns fizemos as alteraes nos branches Team1 e Team2, ns iremos realizar o merge do
contedo de volta para o branch main. Neste passo ns iremos nos concentrar no branch Team2.
Como ns j fizemos o check in das mudanas do branch Team1 ns precisaremos resolver os conflitos
resultantes do processo de merge.

Durao estimada:

10 minutos

1.

No menu principal, clique em View e ento clique em Team Explorer.

2.

No Team Explorer, v at o source control no caminho


$/HOL_DatabaseProjects/HOL_Database-Team2, clique com o boto direito no n e
selecione Merge. O Source Control Merge Wizard aparece. (Figura 49)

Figura 49 Source Control Merge Wizard

Copyright 2009 Microsoft Corporation

Page 65

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


3.

Aps revisar a informao do wizard e certificar-se de que o branch de origem o


HOL_Database-Branch_Team2 e o branch de destino o HOL_Database, clique em Next.
(Figura 46)

4.

Um dilogo de confirmao aparece na pgina Perform the merge operation. Clique em


Finish para iniciar a operao de merge. (Figura 47)

Figura 50 Dilogo de confirmao de merge


5.

A execuo do merge ir gerar um conflito de merge, conforme mostrado na janela Pending


Changes Conflicts (Figura 51). Escolha a opo Merge changes in Merge Tool para que
seja possvel vizualizar os conflitos e encaminhar a resoluo manualmente. O dilogo de
resoluo de conflitos ser exibido. (Figura 52)

Copyright 2009 Microsoft Corporation

Page 66

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


Figura 51 Conflitos de merge sero exibidos no dilogo Pending Changes - Conflicts

6.

O dilogo de resoluo de conflitos ir lhe mostrar as diferentes alteraes realizadas. No lado


esquerdo voc ver o branch main HOL_Database que j contm as alteraes do branch
Team1, feitas atravs do merge no passo 3. No lado direito voc ver as alteraes que foram
feitas no branch Team2. Embora a sugesto de merge j deva ter sido sugerida pela ferramenta,
voc pode clicar nas partes relevantes para informar ao visualizador de conflitos quais partes
voc de fato deseja mesclar.

Figura 52 Dilogo de resoluo de conflitos


7.

Se voc ja selecionou as partes relevantes, o script na parte inferior da janela dever estar como
o trecho abaixo:
CREATE TABLE [Purchasing].[Vendor] (
[VendorID]
INT
IDENTITY (1, 1) NOT NULL,
[AccountNumber]
[dbo].[AccountNumber] NOT NULL,
[Name]
[dbo].[Name]
NOT NULL,
[CreditRating]
TINYINT
NOT NULL,
[PreferredVendorStatus] [dbo].[Flag]
NOT NULL,
[ActiveFlag]
[dbo].[Flag]
NOT NULL,
[PurchasingWebServiceURL] NVARCHAR (512)
NULL,
[ModifiedDate]
DATETIME
NOT NULL,
[PreferredVendor]
BIT
NOT NULL
);

Copyright 2009 Microsoft Corporation

Page 67

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

8.

No Solution Explorer, clique com o boto direito no projeto de banco de dados e selecione Check
in pending changes. O dilogo Pending Changes dever aparecer. (Figura 53)
Certifique-se de que todos os items estejam selecionados e clique em Check In.

Figura 53 Faa o check in das alteraes pendentes feitas durante a operao de


merge

Copyright 2009 Microsoft Corporation

Page 68

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

Integrando Mudanas Externas com o Sistema de Projeto


Mantendo Linked Servers no Projeto de Banco de Dados do
Visual Studio
Resumo
Neste cenrio um banco de dados depende de informaes que reside em um outro banco que est
em uma instncia diferente do SQL Server. Um linked server creado para prover uma conexo
comum para todas as queries que possivelmente acessem este banco de dados. O nome utilizado
pelo projeto de banco de dados pode ser diferente entre os ambientes.

Objetivos do Cenrio

Descreva como os objetos em um linked server so criados, utilizados e publicados em


projetos de bancos de dados
Manter a estrutura existente, bem como as validaes de referncia, mantendo a compilao
do schema bem sucedida.

Durao estiamada:

5 minutos

Passo 1: Criar dois novos projetos, um referenciando o outro


Crie um no projeto de banco de dados para ser referenciado
O projeto a seguir o tipo de projeto que normalmente seria referenciado em outros projetos.
1.

Abra o Visual Studio 2010.

2.

Clique em File, clique em New e ento clique em Project. Voc ver o dilogo mostrado na
Figura 54.

3.

Especifique o nome do projeto como sendo ReferencedDatabase e um local para salvar os


arquivos.

4.

Clique em OK para confirmar a criao do projeto.

Copyright 2009 Microsoft Corporation

Page 69

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

Figura 54 Dilogo de criao de projetos de banco de dados


NOTA
Certifique-se de que voc selecionou um nome e local que no tenha uma estrutura de diretrios
muito longa. Como o sistema de projeto cria uma hierarquia para armazenar os scripts dos objetos, os
nomes dos arquivos podem ser muito longos, levando a problemas durante a automao.

Crie uma nova tabela no projeto


1.

Clique com o boto direito no projeto de banco de dados e selecione Add. Clique em Table. O
dilogo Add New Item ir aparecer. (Figura 55)

Copyright 2009 Microsoft Corporation

Page 70

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

Figura 55 Dilogo para adicionar um novo objeto


2.

Adicione o seguinte script para definir a nova tabela:

CREATE TABLE [dbo].[ReferenceTable]


(
CustomerId INT,
CustomerName VARCHAR(255)
)
Salve as alteraes.
3.

Compile projeto clicando com o boto direito no projeto de banco de dados no Solution
Explorer e selecionando o item Build. Voc ir visualizar o progresso do deployment na janela
Output do Visual Studio. (Caso voc no veja a janela Output voc poder exib-la atravs do
menu principal. Clique em View e ento clique em Output. Na janela Output voc pode
alterar a opo Show output from para Build).
O projeto ir compilar e um arquivo .dbschema ser criado representando o schema do
projeto. Anote o caminho do arquivo .dbschema a partir da janela Output, logo abaixo da linha
contendo a mensagem Writing model to ReferencedDatabase.dbschema.

4.

Feche o projeto. No menu principal, clique em File e ento clique em Close solution.

Copyright 2009 Microsoft Corporation

Page 71

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


Crie um no projeto de banco de dados para fazer referncia ao projeto criado no passo
anterior
O projeto abaixo um projeto tpico que normalmente faz referncia a outros projetos.
5.

Abra o Visual Studio 2010.

6.

Clique em File, clique em New e ento clique em Project.

7.

Voc ver o dilogo exibido conforme Figura 1

8.

Especifique o nome do projeto como sendo ReferencingDatabase e um local para salvar os


arquivos.

9.

Clique em OK para confirmar a criao do projeto.

Figure 56 Dilogo de criao de projetos de banco de dados


NOTA
Certifique-se de que voc selecionou um nome e local que no tenha uma estrutura de diretrios
muito longa. Como o sistema de projeto cria uma hierarquia para armazenar os scripts dos objetos, os
nomes dos arquivos podem ser muito longos, levando a problemas durante a automao.

Crie uma referncia para o projeto ReferencedDatabase


1.

Clique com o boto direito sobre o projeto de banco de dados. Selecione Add e ento clique
em Add Database Reference. O dilogo Add Database Reference. (Figura 57)

Copyright 2009 Microsoft Corporation

Page 72

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

Figura 57 Adicione uma referncia para ReferencedDatabase

2.

Clique no boto Browse para localizer o arquivo .dbschema referente ao banco de dados do
projeto ReferencedDatabase.

Marque a opo Define server variables e digite o nome da varivel para o nome do
servidor como $(MyReferencedServer). Digite o valor MyLinkedServer (este ser
o nome do servidor linked server nos prximos passos).

Marque a opo Define database variable e digite o nome da varivel para o nome
do servidor como $(MyReferencedDatabase). Digite o valor ReferencedDatabase
(este ser o nome do banco de dados nos prximos passos)..

Clique em OK para fechar o dilogo Database Reference.

NOTA
A opo Update the existing schema object definitions pode ser muito til se voc j desenvolveu
um banco de dados que contm referncias estticas a um linked server ou em geral nomes
compostos de 3 ou quatro partes. til inclusive para fazer engenharia reversa de um banco de dados
existente. Esta opo ir Refatorar as existncias existentes e torn-las configurveis atravs destas
variveis.

Crie uma nova view no projeto que faz referncia a tabela do projeto externo
(referenciado)

Copyright 2009 Microsoft Corporation

Page 73

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


1.

Clique com o boto direito no projeto de banco de dados. Selecione Add e ento clique em
View. O dilogo Add New Item ser exibido. (Figura 55)

Figura 58 Dilogo para adicionar uma nova view


2.

Adicione o script abaixo para definir o schema da nova view:

CREATE VIEW [dbo].[ReferenceTable]


AS
SELECT CustomerId
FROM
[$(MyReferencedServer)].[$(MyReferencedDatabase)].dbo.ReferenceTable
Salve as alteraes. Voc dever perceber que no h erros de compilao na janela Error
List. (Se voc no conseguir visualizar a janela Error voc pode visualiz-la atravs do menu
principal View, Error List).
3.

Compile projeto clicando com o boto direito no projeto de banco de dados no Solution
Explorer e selecionando o item Build. Voc ir visualizar o progresso do deployment na janela
Output do Visual Studio. (Caso voc no veja a janela Output voc poder exib-la atravs do
menu principal. Clique em View e ento clique em Output. Na janela Output voc pode
alterar a opo Show output from para Build).

4.

Feche o projeto. No menu principal, clique em File e ento clique em Close solution.

O objetivo com o linked server criar um objeto que no ser recriado em re-deploy de forma que
erros e alertas de validao de referncia no sejam gerados.

Copyright 2009 Microsoft Corporation

Page 74

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

Movimentao Complexa de Dados


Resumo
Os cenrios abaixo utilizaro a tarefa de adicionar uma coluna NOT NULL em uma tabela. Esta tarefa
simples mas dependendo do resultado desejado voc pode encontrar uma srie de problemas. Muitas
abordagens iro mover ou renomear a tabela o que pode ter consequncias para as chaves
estrangeiras ou relacionamentos. Adicionar uma coluna NOT NULL ir cobrir muitos dos problemas que
voc ter ao alterar chaves estrangeiras entre tabelas.
Ns utilizaremos uma estrutura de banco de dados simples para que possamos focar no
comportamento da ferramenta sem maiores intereferncias.
Este laboratrio est dividio em quatro cenrios

O cenrio 1 ir lhe mostrar como as mudanas so geralmente tratadas em um sistema de


projeto e quais problemas voc pode encontrar quando faz deploy de mudanas para um
banco de dados que contm dados.
Os cenrios de 2 a 4 iro sugerir abordagens para tratar estas mudanas, incluindo os prs e
contras de cada situao.

Objetivos dos Cenrios

Entendimento das trs formas atravs das quais possvel integrar cdigo customizado ao
sistema de deployment.
Balanceamento das necessidades de performance, gesto de fonts e migrao complexa de
dados sem comprometer as funcionalidades do banco do dados.

Durao estimada:

2 horas

Cenrio 1 Movimentao Complexa de Dados Comportamento Padro para Edio de


Desenvolvimento

Local dos arquivos iniciais:

C:\HOL\DatabaseProjectGuidance\Integration with Custom Code and


External Changes\ComplexDataMovement\Scenario1

Local dos arquivos finais:

C:\HOL\DatabaseProjectGuidance\Integration with Custom Code and


External Changes\ComplexDataMovement\Scenario1_Answer

Qual o comportamento padro da edio de banco de dados? Existem alguns caminhos possveis.
Se a tabela estiver vazia um comando ALTER TABLE ser gerado. Seno, ser feita uma tentativa de
mover os dados, realizar as alteraes e devolver os dados a tabela.

O que acontece se a tabela possuir dados?


O que acontece se a tabela possuir relacionamentos com chaves?

Neste cenrio ns iremos preparar nosso exemplo e explorar o comportamento padro da edio de
banco de dados. Uma rea para o incio do laboratrio oferecida para servir de ponto de partida
para o projeto. Copie este projeto para uma rea de teste. Conforme for progredindo no laboratrio,
caso voc trave em algum ponto, voc poder checar o projeto na rea com o resultado final e revisar
as diversas sees do laboratrio.

Copyright 2009 Microsoft Corporation

Page 75

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


Abra o projeto de exemplo
1.

Abra a soluo
a. Abra o Visual Studio 2010.
b. No menu principal clique em File, clique em Open project e ento v at o projeto
localizado em C:\HOL\DatabaseProjectGuidance\Integration with Custom Code
and External Changes\ComplexDataMovement\Scenario1. Abra o arquivo
SimpleDatabase.sln.

Se voc navegar at o projeto SimpleDatabase (Selecione a pasta Schema


Objects/Schemas/Dbo/Tables sob o projeto) voc ir perceber que ele descreve uma estrutura de
banco de dados conforme abaixo. (Figura 59)

Figura 59 Diagrama de ER dos objetos includos no schema

Faa o Build e Deploy da soluo

1.
2.
3.
4.

No Solution Explorer, clique com o boto direito no projeto SimpleDatabase e selecione


Properties.
Defina a opo Deploy action para Create a deployment script (.sql) and deploy to
the database.
Especifique a conexo SQL para a instncia de banco de dados de destino clicanco em
Edit. Digite . no campo server name e SimpleDatabase para o nome do banco de
dados.
Verifique se as opes esto como na Figura 60.

Copyright 2009 Microsoft Corporation

Page 76

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

Figura 60 Opes de Deployment para o projeto SimpleDatabase


5.

No Solution Explorer, clique com o boto direito no projeto SimpleDatabase e selecione


Deploy.

Agora que temos um banco de dados vazio ns podemos explorar o comportamento da edio do
banco de dados conforme formos fazendo as mudanas. Ns iremos dedicar um bom tempo avaliando
a sada da engine de deployment, logo iremos alterar a ao de Deploy para que o script seja apenas
gerado.

Faa alteraes no projeto e avalie o script de deployment


1.

Defina a ao de Deploy
a. No Solution Explorer, clique com o boto direito no projeto SimpleDatabase e
selecione Properties.
b. Altere o campo Deploy action para Create a deployment script (.sql).

2.

Adicione uma coluna NOT NULL na tabela Companies


a. Abra o arquivo Companies.table.sql expandindo a pasta Schema Objects,
Schemas, dbo, Tables.
b. Adicione o atributo NOT NULL na coluna LanguageLocale. O script deve ficar igual ao
abaixo:
CREATE TABLE [dbo].[Companies]
(
Id int NOT NULL,
ParentId int NULL,
Name nvarchar(100) NOT NULL,
LanguageLocale nvarchar(5) NOT NULL
)

3.

Faa o deploy do projeto

Copyright 2009 Microsoft Corporation

Page 77

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


a.

b.

Clique com o boto direito na soluo 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 sada registrada na janela output voc ver
uma seo Deployment script generated to: que contm o caminho para o arquivo
.sql contendo as instrues de alterao do banco de dados.
Abra o arquivo .sql gerado localizado no caminho indicado na janela output.

Copyright 2009 Microsoft Corporation

Page 78

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

NOTA
H dois comportamentos que precisamos notar:

A engine detecta que voc est adicionando uma coluna NOT NULL sem DEFAULT e exibe
um alerta de que o deployment ir falhar caso j existam dados na tabela. O alerta
aparece na janela Output conforme a seguir: "Warning SQL01270: The column
LanguageLocale on table [dbo].[Companies] must be changed from NULL to NOT NULL. If
the table contains data,..."
O comportamento padro gerar um script com a instruo ALTER.

Este comportamento esperado, mas no interessante uma vez que no temos nenhum
dado na tabela. Vamos ento popular as tabelas com dados para que seja possvel
visualizar o que acontece neste caso.

Popule a tabela com dados de exemplo


4.

Remova a coluna LanguageLocale


a. Abra o arquivo Companies.table.sql expandindo a pasta Schema Objects,
Schemas, dbo, Tables.
b. Remova a coluna LanguageLocale deletando o cdigo relevante do script. O resultado
deve ser como abaixo:
CREATE TABLE [dbo].[Companies]
(
Id int NOT NULL,
ParentId int NULL,
Name nvarchar(100) NOT NULL
)

c.

d.

5.

Certifique-se de que o a ao de deployment esteja configurada para fazer o deploy.


No Solution Explorer, clique com o boto direito no projeto SimpleDatabase e clique
em Properties. Na aba Deploy, o campo Deploy action deve ser alterado para
Create a deployment script (.sql) and deploy to the database.
Clique com o boto direito na soluo e selecione Deploy para publicar as alteraes no
banco de dados especificado.

Gere dados de exemplo


a.
b.

No Solution Explorer, abra a pasta Data Generation Plans.


D um duplo-clique no arquivo SampleData.dgen. O plano de gerao de dados sera
aberto e voc ir visualizar uma prvia dos dados que sero gerados. (Figura 61)

NOTA
Voc pode perceber um problema com a mensagem "No Coercible Output" ao tentar
definir os valores para cidade e estado. Isso se deve ao caminho divergente definido para
esta conexo. Para corrigir o problema, clique nas propriedades para cada campo com o
problema e edite a propriedade Connection Information para:
Dsn=Excel Files;dbq=C:\HOL\DATABASEPROJECTGUIDANCE\INTEGRATION WITH
CUSTOM CODE AND EXTERNAL
CHANGES\COMPLEXDATAMOVEMENT\Scenario1_Answer\SolutionItems\USStatesA
Copyright 2009 Microsoft Corporation

Page 79

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


ndCities.xlsx;defaultdir=C:\HOL\DATABASEPROJECTGUIDANCE\INTEGRATION
WITH CUSTOM CODE AND EXTERNAL
CHANGES\COMPLEXDATAMOVEMENT\Scenario1_Answer\SolutionItems;driverid=
1046;maxbuffersize=2048;pagetimeout=5System.Data.OdbcFalse
Caso tenha dificuldades para corrigir este problema, voc pode prosseguir com os passos
do laboratrio, que continuaro funcionando. A diferena que os dados exibidos no iro
corresponder ao que exibido em alguns passos deste documento. Se a prvia no for
exibida corretamente, clique com o boto direito na lista de colunas no alto e selecione
Preview data generation.

Figura 61 Janela com prvia da gerao dos dados de exemplo


c.
d.

Pressione F5 para gerar os dados.


Selecione o banco de dados SimpleDatabase conforme mostrado na Figura 62.

Figura 62 Dilogo para selecionar o banco de dados onde sero gerados os


dados
e.

Clique em Yes para confirmar a deleo dos dados existentes e a gerao dos novos
dados. (Figure 63)

Copyright 2009 Microsoft Corporation

Page 80

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

Figure 63 Dialog box to check if data has to be first deleted


Propague as mudanas com os dados de exemplo inseridos no banco de dados
Agora que temos dados no banco de dados vamos ver o que acontece quando executamos o deploy
com a coluna NOT NULL.
1.

Defina ao de deploy.
a. No Solution Explorer, clique com o boto direito no projeto SimpleDatabase e
selecione Properties.
b. Altere o valor do campo Deploy action para Create a deployment script (.sql).

2.

Adicione uma coluna NOT NULL na tabela Companies


a. Abra o arquivo Customers.table.sql expandindo a pasta Schema Objects,
Schemas, dbo, Tables.
b. Adicione a coluna LanguageLocale novamente com o atributo NOT NULL. O script
resultante deve estar como abaixo:
CREATE TABLE [dbo].[Customers]
(
Id int NOT NULL,
CompanyId int NOT NULL,
LanguageLocale nvarchar(5) NOT NULL
)

3.

Faa o deploy do projeto


a. Clique com o boto direito na soluo 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 sada registrada na janela output voc ver
uma seo Deployment script generated to: que contm o caminho para o arquivo
.sql contendo as instrues de alterao do banco de dados.
b. Abra o arquivo .sql gerado localizado no caminho indicado na janela output.

CONCLUSO
Voc ir perceber que o deployment falha porque a engine de deployment no capaz de
determinar o que fazer com os dados existentes uma vez que no h um valor default
especificado para a nova coluna. Voc ir obter a mesma informao durante o deployment:
Warning SQL01269: The column [dbo].[Customers].[LanguageLocale] on table [dbo].
[Customers] must be added, but the column has no default value and does not allow NULL
values. If the table contains data, the ALTER script will not work. To avoid this issue, you must
add a default value to the column or mark it as allowing NULL values.
Isso significa que o seguinte comando falharia no caso de haverem dados na tabela:

Copyright 2009 Microsoft Corporation

Page 81

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

Copyright 2009 Microsoft Corporation

Page 82

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


Cenrio 2 Movimentao Complexa de Dados Engana engine de deployment (Enfraquece
a experincia atravs 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? No. 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
aps o fato, no momento adequado.
Adicione uma constraint DEFAULT na tabela
1.

Adicione uma Constraint DEFAULT na tabela Companies


a.
b.
c.
d.

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


Clique com o boto direito na pasta Constraints e clique em Add e depois em New
Item.
Escolha o modelo referente a Default Constraint e d o nome de
DC_Companies_LanguageLocal. Clique em OK para fechar o wizard.
Quando o script com o modelo default for aberto, troque o a definio do schema para
o script abaixo:

ALTER TABLE [dbo].[Companies]


ADD CONSTRAINT [DC_Companies_LanguageLocale]
DEFAULT 'EN-US'
FOR [LanguageLocale]

2.

Faa o deploy do projeto


a. Clique com o boto direito na soluo 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 sada registrada na janela output voc ver
uma seo Deployment script generated to: que contm o caminho para o arquivo
.sql contendo as instrues de alterao do banco de dados.
b. Abra o arquivo .sql gerado localizado no caminho indicado na janela output.
c. Voc ir ver o seguinte script de alterao com a constraint default adicionada:

Agora o deployment ser bem sucedido. Mas por outro lado o banco de dados no est no estado que
desejamos. Ele tem um DEFAULT em coluna que ns no queremos. Trata-se apenas de uma
convenincia para conseguirmos realizar o deploy. Adicionalmente precisamos considerar que os
dados aps o deployment est errados, uma vez que no 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 aps deployment

Copyright 2009 Microsoft Corporation

Page 83

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


1.

Adicione um PostDeployment script para alterar os dados.


a.
b.
c.

No Solution Explorer, v at a pasta Scripts/PostDeployment no projeto de banco de


dados, clique com o boto direito e selecione Add e ento em Script.
D o nome PopulateLanguageLocale.sql para o script e clique em OK.
Aps 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 gerao de dados este comando no ir
alterar nenhum registro.

2.

Adicione outro PostDeployment script para excluir a atributo DEFAULT


a. No Solution Explorer, no projeto de banco de dados, v at a pasta
Scripts/PostDeployment, clique em Add e ento em clique em Script.
b. D o nome ManageObjects.sql para o script e clique em OK.
c. Aps 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

3.

Inclua os scripts no arquivo Script.PostDeployment.sql


a. No Solution Explorer, navegue at a pasta Scripts/PostDeployment no projeto de
banco de dados e abra o arquivo Script.PostDeployment.sql.
b. Inclua os arquivos PopulateLanguageLocale.sql e ManageObjects.sql adicionando
as seguintes linhas ao final do script:
:r .\PopulateLanguageLocal.sql
:r .\ManageObjects.sql

Faa o deploy das mudanas para o banco de dados clicando com boto direito na soluo
de banco de dados e selecionando Deploy para publicar as alteraes para o banco de
dados especificado.

CONCLUSO
Esta abordagem quebra boas prticas e resulta em dois problemas:

O primeiro problema que o controle de cdigo-fonte no fica sincronizado com o banco


de dados alvo. Quando voc exclui o arquivo Companies.LanguageLocale.defconst.sql do
projeto? Se voc executar diversas iteraes durante o desenvolvimento voc corre o
risco de esquecer de atualizar o controle de cdigo-fonte. Voc pode adicionar alguns alvos

Copyright 2009 Microsoft Corporation

Page 84

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


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 esforo de manuteno do projeto quando o
desejvel poder focar nas funcionalidades.

O Segundo problema o impacto potencial na performance do deployment. As instrues


DEFAULT e UPDATE resultam em consume de disco desnecessrio. Tente rodar isso em
tabela com 10 milhes de linhas...

Cenrio 3 Movimentao Complexa de Dados Resolva o Problema de Performance (No


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 mxima. Tratando isso
tambm poderemos resolver o problema de que o controle de cdigo-fonte no corresponde a verdade
(verso mestra), ou seja, fica fora de sincronia com o banco de dados.
1.

Abra a soluo
a. Abra o Visual Studio 2010.
b. No menu principal clique em File e ento 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.

Faa o deploy do banco de dados clicando com o boto direito na soluo Database e
selecionando Deploy para public-la no banco de dados especificado.
Adicione outro script de PreDeployment para mover os dados para um local temporrio.
a. No Solution Explorer, v at o projeto de banco de dados e clique com o boto direito
na pasta Scripts/PreDeployment, clique em Add e ento em Script.
b. D o nome de CopyCompanies.sql para este script e clique em OK.
c. Aps o script ter sido aberto, substitua o contedo pelo script abaixo:

3.

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);

4.

Movo os dados. No arquivo CopyCompanies.sql, acrescente o cdigo a seguir:

IF EXISTS (SELECT TOP 1 1


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

Copyright 2009 Microsoft Corporation

Page 85

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


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

5.

Exclua o contedo da tabela Companies. Aqui o ponto onde as coisas comeam a ficar
complicadas. Ns temos que lidar com uma boa quantidade de relacionamentos. Voc tambm
notar que ns no iremos apagar a tabela. Ao invs disso, ns iremos trunc-la. A
deployment engine espera que a tabela esteja presente e por isso gera um comando ALTER.
Porm, ns no poderemos truncar a tabela sem excluir os relacionamentos.
a.

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];

6.

Devolva os dados tabela Companies e recrie os relacionamentos


d.
e.
f.

No Solution Explorer, v at o projeto de banco de dados e clique com o boto direito


na pasta Scripts/PostDeployment, clique em Add e ento em Script.
D o nome de MoveCompanies.sql para o script e clique em OK.
Aps 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]

Copyright 2009 Microsoft Corporation

Page 86

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


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

7.

Inclua o script no arquivo Script.PreDeployment.sql


g. No Solution Explorer, no projeto de banco e dados, v at a pasta
Scripts/PreDeployment e abra o aquivo Script.PreDeployment.sql.
h. Inclua o script CopyCompanies.sql adicionando a seguinte linha ao final do script:
:r .\ CopyCompanies.sql

8.

Inclua o script no arquivo Script.PostDeployment.sql


i. No Solution Explorer, no projeto de banco e dados, v at a pasta
Scripts/PostDeployment e abra o aquivo Script.PostDeployment.sql.
j. Inclua o script MoveCompanies.sql adicionando a seguinte linha ao final do script:
:r .\MoveCompanies.sql

9.

Faa o deploy do banco de dados clicando com o boto direito na soluo Database e
selecionando Deploy para public-la no banco de dados especificado.
CONCLUSO
Neste cenrio obtivemos uma abordagem que nos d controle sobre o movimento dos dados
de forma que melhoramos a performance no melhor nvel possvel. Desta forma, no
precisamos aps o deployment nos preocupar com a gesto de arquivos no nosso projeto.
Porm, ns violamos o princpio de Gerenciamento de Objetos. Este cenrio 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 inovaes que a deployment engine trs para
edio do banco de dados.

Copyright 2009 Microsoft Corporation

Page 87

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


Cenrio 4 Movimentao Complexa de Dados Integrar a Deployment Engine / Tratar
converso 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 experincia na IDE objetiva e


mantivemos o controle de verso 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 ns 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 alterao via linha
de comando. Podemos gerar ainda um Post Deployment script para recolocar os dados no
banco.
Na maioria dos casos esta opo nos permite evitar o problema de gerenciamento de objetos.
Foreign keys so uma exceo.

1.

Abra a soluo
a. Inicie o Visual Studio 2010.
b. No menu principal, clique em File e ento em Open project. V at a pasta
C:\HOL\DatabaseProjectGuidance\Integration with Custom Code and External
Changes\ComplexDataMovement\Scenario1_Answer e abra a soluo
SimpleDatabase.sln.

2.

Faa o deploy do banco de dados clicando com o boto direito na soluo Database e
selecionando Deploy para public-la no banco de dados especificado.

3.

Em script externo mova os dados para uma tabela temporrio em TempDB.

NOTA
H trs partes neste script.

Criar um banco de dados de converso


Copiar os dados
Excluir os relacionamentos de foreign keys.

Como estamos executando o script a partir da linha de comando com o SqlCmd ns


corremos o risco de que o servidor no possua sesses abertas quando o script
finalizado. Por este motivo no utilizaremos o TempDb uma vez que uma tabela
temporria global seria destruda quando a ltima sesso aberta for finalizada.
a.
b.
c.

No Solution Explorer, v at o projeto de banco de dados e clique com o boto direito


na pasta Scripts/PreDeployment, clique em Add e ento em Script.
D o nome CopyCompaniesTempDB.sql para o script e clique em OK.
Aps o script ter sido aberto, substitua o contedo pelo script abaixo:

Copyright 2009 Microsoft Corporation

Page 88

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

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

Copyright 2009 Microsoft Corporation

Page 89

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

4.

Habilite a verificao e criao de constraints.


a. No Solution Explorer, clique com o boto direito no n de projeto e selecione
Properties.
b. Nas propriedades do projeto, v at a aba Deploy.
c. Clique em Edit ao lado de Deployment configuration file settings.
d. Marque a opo CheckNewConstraints. (Figura 64)

Figura 64 Marque a opo "CheckNewConstraints"

NOVA FUNCIONALIDADE
5.

Se ns executarmos este script antes da execuo do deploy a tabela Companies no possuir


dados e as foreign keys ser excludas. 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 opo habilitada, a deployment engine ir criar uma nova chave ou constraint,
mas com a opo NO CHECK. Ao final da execuo do script de deploymen, aps a execuo
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 criao de
chaves e constraints enquanto move os dados atravs do script de Post-Deployment.

Copyright 2009 Microsoft Corporation

Page 90

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


6.

Agora temos que mover os dados de volta para o banco atravs de um script de post
deployment.
a.
b.
c.

No Solution Explorer, v at o projeto de banco de dados e clique com o boto direito


na pasta Scripts/PostDeployment, clique em Add e ento em Script.
D o nome MoveCompaniesTempDB.sql para o script e clique em OK.
Aps o script ter sido aberto, substitua o contedo 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

d.
e.

No Solution Explorer, no projeto de banco e dados, v at a pasta


Scripts/PostDeployment e abra o aquivo Script.PostDeployment.sql.
Inclua o script MoveCompaniesTempDB.sql adicionando a seguinte linha ao final:
:r .\MoveCompaniesTempDB.sql

7.

Agora precisamos garantir uma boa experincia na IDE. Para atingir esse objetivo teremos que
alterar as opes de build do projeto. O arquivo *.dbproj importa uma srie de alvos que
definem as tarefas de build e deploy. Elas nos oferecem o gancho necessrio para as aes de
pre e post deployment.
a.
b.

No Solution Explorer, clique com o boto direito no projeto SimpleDatabase e


selecione Unload Project.
No Solution Explorer, clique com o boto direito no projeto SimpleDatabase e
selecione Edit SimpleDatabase.dbproj.

Copyright 2009 Microsoft Corporation

Page 91

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


RECOMENDAO
Os arquivos de projeto so basedos em XML e podem ser bagunados facilmente. Se
voc no est familiarizado com o processo de edio dos arquivos de projeto,
sugerimos que voc crie uma cpia do arquivo por segurana antes de edit-lo.

c.
d.

Tudo que ns precisamos fazer definir uma propriedade especial para a linha de
comando que iremos executar.
Adicione o cdigo a seguir aps as definies de PropertyGroup para as
configuraes de Release e Debug conforme o script abaixo:
<PropertyGroup>
<PreDeployEvent>sqlcmd -S localhost I ..\..\Scripts\PreDeployment\CopyCompaniesTempDB.sql</PreDeployEvent>
</PropertyGroup>

e.
f.

No Solution Explorer, clique com o boto direito no projeto SimpleDatabase e


selecione Reload Project.
Aps o projeto ter sido recarregado, clique com o boto 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
consequncia para a janela output. Isto nos dar a chance de executar os procedimentos
de preparao antes que a deployment engine principal seja executada.

CONCLUSO
Neste cenrio final ns apresentamos uma abordagem que preserva a funcionalidade da
deployment engine e nos d controle sobre a movimentao dos dados com boa performance.
Esta abordagem evita que seja necessrio realizar o gerencimamento dos objetos nos scripts
de pre e post deployment. Alm disso, preserva a experincia da IDE, mantm o controle de
verso sincronizado como verso mestra e nos d controle sobre o processo de converso de
dados e seu desempenho.

Copyright 2009 Microsoft Corporation

Page 92

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

Automao de Build e Deploy com Projetos de Banco de


Dados no Visual Studio
Integrao WiX com Deployment de Banco de Dados
Resumo
O VSDBCMD faz um bom trabalho ao realizar deployments de banco de dado, sendo relativamente
simples customizar o processo atravs de scripts na ferramenta de edio de sua preferncia. Caso
seja necessrio uma experincia de instalao mais completa voc provavelmente deve utilizar o
Windows Installer. O Windows Installer oferece os benefcios de empacotamento de todos os artefatos
desenvolvidos, como cdigo-fonte e schemas de banco de dados juntos, versionando os seus releases,
tornando-os detectveis via WMI/MOM, executar checagem de pr-requisitos antes da instalao e
tratamento e configurao de ambiente relacionadas ao seu banco de dados. O Windows Installer
prov ainda o tratamento de erros e a definio de um workflow para o processo de setup.
Nas pginas a seguir ns iremos gui-lo atravs de um cenrio avanado. Mas antes de comearmos
devemos mencionar que o Windows Installer XML (WiX) uma linguagem XML para criar arquivos de
instalao do tipo *. msi. Este cenrio no um tutorial de WiX. Ao invs disso, focamos nos pontos
de integrao entre projetos de banco de dados e o WiX. Caso voc no esteja familiarizado com o
Wix e com o SDK do Windows Installer, recomendamos que execute um dos tutoriais online disponveis
antes de executar este laboratrio. Alex Shevchuk publicou um tutorial excelente 3 referente WiX e
Windows Installer.
Para este exemplo ns iremos utilizar projetos de banco de dados simples, uma vez que o tamanho e a
complexidade do schema do projeto no se mostra relevante para os procedimentos de instalao. A
estrutura da soluo e a interao entre os difrentes tipos de projetos so mais relevantes para este
caso. Ns iremos explorar todos as opes com o mnimo de complexidade necessria para que voc
se concentre na compreenso do funcionamento do WiX. Os projetos a seguir sero utilizados nos
laboratrios para gui-lo nesta inteno:

Customers um banco de dados simples com algumas tabelas, views e stored procedures.

Sales um banco de dados simples para registro de pedidos que faz referncia o banco de
dados Customers.

CustomerServer um projeto do tipo server que gerencia linked servers e tarefas agendadas
do SQL Agent.

CustomersCLR um proejto do tipo SqlCLR que definie alguns tipos customizados para o
banco de dados Customers.

Ambos os bancos Sales e Customers fazem referncia para objetos de sistema e


consequentemente ao master.dbschema.

3 http://blogs.technet.com/alexshev/pages/from-msi-to-wix.aspx
Copyright 2009 Microsoft Corporation

Page 93

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


Abaixo uma lista rpida dos pontos de integrao que sero importantes no momento de fazer o
empacotamento da instalao.

O master.dbschema precisa fazer parte da instalao ou voc correr o risco de que o


VSDBCMD falhe.

O Customers.dbschema precisa fazer parte da instalao do banco de dados Sales pelo


mesmo motivo anterior.

O banco de dados CustomersServer precisa ser instalado antes do banco de dados


Customers. O banco de dados Customers precisa ser instalado antes do banco de dados Sales.
necessrio habilitar o suporte a CLR no banco CustomersServer que pertence a um Server
Project ao invs de um Database Project.

Antes de realizarmos o deployment do projeto de banco de dados CustomerServer ser


necessrio parar o servio do SQLAgent e depois reinici-lo. Evitaremos criar um job SQL que
faa referncia a um banco de dados no existente, o que falharia o job durante sua execuo.

Os bancos de dados Customers e Sales precisam expor seus caminho para dados e logs, de
forma que possam ser definidos durante a instalao.

Figura 65 Diagrama de dependncia para o processo de deployment

Copyright 2009 Microsoft Corporation

Page 94

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


Em uma viso de alto nvel, WiX cria um instalador que faz os seguinte:

Empacota os
arquivos

Reune os
parmetros
de usurio

Copia os
arquivos

Realiza
alteraes no
registro

Executa o
VSDBCMD

Como usurio seu papel principal popular as variveis do SqlCmdVar.

Figura 66 Exemplo para mapeamento das propriedades do MSI para as SQLCmdVars


Aps a soluo bsica e o instalador do WiX estarem prontos, a maior parte do trabalho configurar o
mapeamento das variveis SqlCmdVars para propriedades do MSI.

Pr-requisitos
Para trabalhar com os projetos instalados (.wixprj) voc vai precisar instalar o Windows Installer XML
Toolset 3.5. Como trata-se de um projeto do Codeplex, voc pode fazer o download atravs do site do
Codeplex em Windows Installer XML (WiX) toolset.4 Se voc estiver utilizando o HOL pr-instalado, o
toolset j estar instalado na mquina. Tambm est disponvel na sua mquina em
C:\HOL\Prerequisite Software\Prerequisite\Wix35.msi.

4 http://wix.sourceforge.net/
Copyright 2009 Microsoft Corporation

Page 95

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


Objetivos do Cenrio

Saber como utilizar as funcionalidades do Wix para fazer deploy de banco de dados
o Customizar a interface do instalador
o Customizar sequncias de instalaes
o Incluir redistribuveis para o deployment do banco de dados

Durao estimada:

90 minutos

Passo 1: Estruturando a soluo


1.
2.
3.

Inicie o Visual Studio 2010.


Abra a soluo. No menu principal clique em File e ento clique em Open project. V
para o camimnho em
C:\HOL\DatabaseProjectGuidance\BuildAndDeploy\WiXDBProSample.
Abra o aqrquivo de soluo WiXDBProSample.sln.

IMPORTANTE
Se voc receber um erro alertando que o projeto .wixproj no pode ser aberto porque o tipo de
projeto no suportado, voc provavelmente no possui o Windows Installer XML Toolset 3.5
instalado. D uma olhada na seo de pr-requisitos para obter instrues de como instalar o
toolset.

Figura 67 Mensagem de erro caso voc no possua o WiX installer toolset instalado

A soluo tem uma estrutura especfica. Esta estrutura ir auxili-lo a manter a rastreabilidade s
referncias de arquivo no seu projeto WiX. A estrutura importante est na pasta BuildSupportFiles
que abriga todos os redistribuveis do VsDbCmd. Por padro, estes redistribuveis so instalados pelo
instalador do Visual Studio 2010 em $(VisualStudioInstallDir)\VSTSDB\Deploy.

Copyright 2009 Microsoft Corporation

Page 96

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


Esta soluo contm um projeto do tipo server e um do tipo CLR. O projeto Sales faz referncia ao
projeto Customers que por sua vez faz referncia ao projeto CustomersCLR. Ambos os bancos de
dados so publicados no mesmo servidor representado por CustomerServer. Ns podemos explorar
uma srie de cenrios de instalao atravs desta soluo. O que no est coberto so os cenrios
envolvendo projetos parciais e projetos compostos. Voc pode ter uma viso geral do projeto na Figura
68.

Figura 68 Viso geral da soluo do projeto


1.

O projeto de instalao consiste de diversos arquivos, mostrados na Figura 69.

Figura 69 Viso geral do projeto de instalao resultante

a.

A maior parte das funcionalidades do instalador esto no arquivo Product.wxs.

b.

Os arquivos na pasta Common e Databases so os arquivos os quais precisamos


empacotar e instalar.

c.

Os arquivos na pasta UI definem a interface de usurio.

d.

Os arquivos em Resources so arquivos de apoio.

Copyright 2009 Microsoft Corporation

Page 97

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


e.

2.

O arquivo Sequences.wxi define a ordem na qual aes especiais devem ocorrer.

Faa referncia aos projetos dependentes no projeto Setup. Quando fazemos referncia a um
projeto a partir de um projeto Wix possvel acessar o diretrio desse projeto referenciado. Essa
caracterstica torna o gerenciamento de arquivos mais simples.

a.

No Solution Explorer, localize o projeto com o nome Setup. Clique com o boto direito na
pasta References e selecione Add reference. O dilogo Add Reference ser exibido
(Figura 70).

Figura 70 Dilogo Add Reference para os projetos dependentes

3.

b.

Selecione todos os projetos exceto o projeto CustomersCLR. Como o projeto Customers faz
referncia ao projeto CustomersCLR o assembly .dll correspondente ser copiado no
diretrio de destino do projeto Customers.

c.

Clique em Add para adicionar as referncias e cliquem em OK para aplicar as mudanas e


fechar o dilogo.

Aps definir as referncias de projeto voc poder fazer referncia aos arquivos de sada dos
projetos.

Copyright 2009 Microsoft Corporation

Page 98

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


a.

Projetos de banco de dados e projetos de servidor geram a sada de um build para a


pasta \sql\$(configuration), onde $(configuration) define a configurao de build utilizada,
por exemplo, Debug ou release. (Figura 71) Voc pode exibir os arquivos e pastas na
estrutura de pastas que no esto sob controle do projeto clicando no cone Show all files
no topo do Solution Explorer.

Figura 71 Pasta de sada dos artefatos resultantes do build

b.

Estes so os arquivos que iremos publicar utilizando o VsDbCmd. Para fazer referncias a
arquivos que esto em projetos referenciados utilizamos a seguinte forma:

Source="$(var.Customers.TargetDir)Customers.dbschema"

Quando fazemos referncia a um projeto o WiX automaticamente criar uma varivel


var.<ProjectName>. A partir da possvel utilizar macros padro do MSBuild como TargetDir,
ProjectDir, SolutionDir, etc.

Copyright 2009 Microsoft Corporation

Page 99

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


Passo 2: Criando a Informao da Aplicao
O Windows Installer prov um banco de dados das aplicaes instaladas na mquina chamado ARP
(Add Remove Programs). Este um timo mecanismo para gerenciamento de do processo de
instalao. Se todos os seus deployments forem feitos atravs do Windows Installer, voc pode utilizar
este banco de dados para determinar qual a verso instalada da sua aplicao de banco de dados.
Isto lhe permitir gerenciar pr-requisitos de banco de dados, por exemplo.
O Windows Installer define Produtos que contm Funcionalidades que so constitudas de
Componentes. Voc pode estruturar seu produto de diversas maneiras. Este exemplo explorar uma
funcionalidade principal no projeto Server e funcionalidades dependentes no projeto Database. A
vantagem dessa estrutura que ela garante que o projeto Server ser instalado quando qualquer
projeto de banco de dados for selecionado. Isolando os projetos de banco de dados em funcionalidades
separadas possvel reutilizar o projeto de setup mesmo que apenas um dos projetos mude.
Este exerccio ir explorar os pontos principais de um arquivo .msi. As tarefas em alto nvel so:

Criar uma definio de Produto

Criar as Funcionalidades e Componentes

Criar a estrutura de Diretrio

Criar a Interface de Usurio

4.

No Solution Explorer, abra o arquivo Product.wxs no projeto do instalador. (Figura 69)

A primeira seo deste arquivo define variveis que nos ajudam a gerenciar as diferenas entre as
plataformas x86 e x64. Voc ver referncias a estas variveis em outras sees da instalao.
<!-- ********************************************************************************************
Define variables to be used during install
******************************************************************************************** -->
<?define Major = "1" ?>
<?define Minor = "0" ?>
<?define Build = "0" ?>
<?define Revision = "0" ?>
<?define Version = "$(var.Major).$(var.Minor).$(var.Build).$(var.Revision)" ?>
<?if $(var.Platform) = "x64" ?>
<?define ProgramFilesFolder = "ProgramFiles64Folder" ?>
<?define ProgramFilesFolderX86 = "ProgramFilesFolder" ?>
<?define SystemFolder = "System64Folder" ?>
<?define SystemFolderX86 = "SystemFolder" ?>
<?define SoftwareKey = "Software" ?>
<?define SoftwareKeyX86 = "Software\Wow6432Node" ?>
<?define FrameworkKey = "Software" ?>
<?else?>
<?define ProgramFilesFolder = "ProgramFilesFolder" ?>
<?define ProgramFilesFolderX86 = "ProgramFilesFolder" ?>
<?define SystemFolder = "SystemFolder" ?>
<?define SystemFolderX86 = "SystemFolder" ?>
<?define SoftwareKey = "Software" ?>

Copyright 2009 Microsoft Corporation

Page 100

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


<?define SoftwareKeyX86 = "Software" ?>
<?endif?>
<!-- *************************************************************************************** -->

A prxima seo define Product(name). No nosso caso, o nome do produto WiXDBProSample.


<Product Id="78fd1848-d60e-448d-99cd-2562c0a856dc"
Name="!(loc.ProductName)"
Language="1033"
Version="$(var.Version)"
Manufacturer="!(loc.ProductManufacturer)"
UpgradeCode="1e9672fc-86de-4073-957b-5fb712688b04">
<Package InstallerVersion="200" Compressed="yes" />
<Media Id="1" Cabinet="media1.cab" EmbedCab="yes" />

O atributos em <Product> Name, Version e Manufacturer sero exibidos na seo Programas e


Recursos do Painel de Controle. (Figura 72)

Figura 72 Exemplo da informao exibida no Painel de Controle aps a instalao

O trecho $(var.Version)faz referncia a propriedade version que definimos na seo de variveis.


Voc tambm ir notar que ns localizamos algumas variveis !(loc.ProductName) as quais voc pode
reconhecer atravs do prefixo .loc. As tradues esto definidas no arquivo especfico para
localizao Strings.wxl. (Figura 69)
5.

No Solution Explorer, abra o arquivo Strings.wxl que est na pasta Resources.

<WixLocalization Culture="en-us" xmlns="http://schemas.microsoft.com/wix/2006/localization">


<String Id="ProductName">WiXDBProSample v1.0</String>
<String Id="ProductNameNoVersion">WiXDBProSample</String>
<String Id="ProductManufacturer">Microsoft</String>
<String Id="ProductDir">!(loc.ProductNameNoVersion)</String>
<String Id="ProductMenu">!(loc.ProductName)</String>
<String Id="ProductKey">!(loc.ProductNameNoVersion)</String>
<String Id="ProductUrl">http://codeplex</String>
<String Id="Databases">Databases</String>
<String Id="Database1">Customers</String>
<String Id="Database2">Sales</String>
<String Id="DatabaseServer1">Customers Server Settings</String>
</WixLocalization>

Voc pode criar verses diferentes deste aquivo alterando o atributo Culture="en-us" para o idioma
desejado.

Copyright 2009 Microsoft Corporation

Page 101

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


6.

Na sequencia iremos definir algumas propriedades. As propriedades que esto em caixa


alta so denominadas public properties e voc pode definir os seus valores ao
executar o arquivo .msi a partir da linha de comando. Iremos demonstrar essa opo
adiante.

<!-- *****************************************************************************************************
Define General Use Properties. Properties specific to components are in the individual component .wxi files
****************************************************************************************************** -->
<!--general purpose properties for detecting OS and Framework-->
<Property Id="ALLUSERS" Value="1" />
<!-- wixNetFxExtension generated properties that we want to use-->
<PropertyRef Id="NETFRAMEWORK20" />
<PropertyRef Id="NETFRAMEWORK20_SP_LEVEL" />
<PropertyRef Id="NETFRAMEWORK20INSTALLROOTDIR" />
<PropertyRef Id="NETFRAMEWORK30" />
<PropertyRef Id="NETFRAMEWORK30_SP_LEVEL" />
<PropertyRef Id="NETFRAMEWORK30INSTALLROOTDIR" />
<PropertyRef Id="NETFRAMEWORK35" />
<PropertyRef Id="NETFRAMEWORK35_SP_LEVEL" />
<PropertyRef Id="NETFRAMEWORK35INSTALLROOTDIR" />
<!--This property is used to detect the presence of SQL 2008-->
<Property Id="SQL08DIR">
<RegistrySearch Id="Sql08DirSearch" Type="raw" Root="HKLM"
Key="$(var.SoftwareKey)\Microsoft\Microsoft SQL Server\100"
Name="VerSpecificRootDir" />
</Property>
<Property Id="CUSTOMERSDB" Value="Customers" />
<Property Id="SALESDB" Value="Sales" />
<Property Id="SQLINSTANCE" />
<Property Id="SqlServer" Value="localhost" />
<!-- ************************************************************************************************* -->

As propriedades que nos interessam agora so:


<Property Id="CUSTOMERSDB" Value="Customers" />
<Property Id="SALESDB" Value="Sales" />
<Property Id="SQLINSTANCE" />
<Property Id="SqlServer" Value="localhost" />
CUSTOMERSDB utilizado para definir o nome do banco de dados Customers. Esta opo muito til

em desenvolvimento e teste, uma vez que possvel executar o instalador diversas vezes para criar
bancos de dados especficos para desenvolvimento ou teste.
SALESDB utilizado para definir o nome do banco de dados Sales.
SQLINSTANCE utilizado para definir o valor da instncia SQL.

Copyright 2009 Microsoft Corporation

Page 102

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

IMPORTANTE
Embora o VsDbCmd lhe permita controle do servidor para o qual voc ir fazer o deploy, NO
FAA deploy para um servidor diferente de localhost. O efeito disso seria registrar o
software como tendo sido instalado na Maquina1 quando na verdade o software foi instalado
em Maquina2. Alm disso, podem haver problemas como controle da conta de usurio e de
delegao de acesso (double hop). Adicionalmente, voc ir perder todas as vantagens de
gerenciamento do Windows Installer.
A prxima seo define uma srie de pr-requisitos para a instalao.

<!-- *****************************************************************************************************
Define General Prerequisite conditions.
****************************************************************************************************** -->
<!--Require Administrator privileges-->
<Condition Message="An administrator must approve or install [ProductName].">
Privileged
</Condition>
<!--If Installer is 64 bit require 64bit OS-->
<?if $(var.Platform) = "x64" ?>
<Condition Message="[ProductName] must be run on a x64 system.">
VersionNT64
</Condition>
<?endif ?>
<!--If Installer is 32 bit require 32bit OS-->
<?if $(var.Platform) = "x86" ?>
<Condition Message="[ProductName] must be run on a x86 system.">
VersionNT And Not VersionNT64
</Condition>
<?endif ?>
<!--Require Windows Vista or Windows Server 2008 or higher-->
<Condition Message="[ProductName] is only supported on Windows Vista, Windows Server 2008, or higher.">
Installed Or VersionNT >= 600
</Condition>
<!--Require .Net Framework 2.0 SP2-->
<Condition Message="[ProductName] requires .NET Framework 2.0 Service Pack 2 to be installed.">
Installed Or (NETFRAMEWORK20 And NETFRAMEWORK20_SP_LEVEL >= "#2")
</Condition>
<!--Require .Net Framework 3.5 SP1-->
<Condition Message="[ProductName] requires .NET Framework 3.5 Service Pack 1 to be installed.">
Installed Or (NETFRAMEWORK35 And NETFRAMEWORK35_SP_LEVEL >= "#1")
</Condition>
<!-- ************************************************************************************************* -->

Copyright 2009 Microsoft Corporation

Page 103

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

NOTA
importante notar que estas condies se aplicam para toda a instalao. Algumas condies
aplicam-se somente para Funcionalidades especifcias ou para Componentes. Mais adiante
demonstraremos uma forma de determinar se o SQL Server est instalado quando a funcionalidade
Database selecionada.
A prxima seo define a estrutura de diretrio onde iremos copiar os arquivos do nosso programa.
<!-- *****************************************************************************************************
Define the directory structure where files should be installed
****************************************************************************************************** -->
<Directory Id="TARGETDIR" Name="SourceDir">
<!--install the files under Program Files or Program Files x86-->
<Directory Id="$(var.ProgramFilesFolder)">
<!--the !loc.* values are localization variables that define the friendly names displayed to the
user-->
<Directory Id="INSTALLDIR" Name="!(loc.ProductDir)">
<Directory Id="DatabasesDir" Name="Databases">
<Directory Id="DatabaseServer1Dir" Name="!(loc.DatabaseServer1)" />
<Directory Id="Database1Dir" Name="!(loc.Database1)" />
<Directory Id="Database2Dir" Name="!(loc.Database2)" />
</Directory>
</Directory>
</Directory>
<!--Add a Menu Item to the All Programs structure-->
<Directory Id="ProgramMenuFolder">
<Directory Id="ProductMenuFolder" Name="!(loc.ProductMenu)">
<Component Id="UninstallShortcut" Guid="{14C164C5-1C09-480b-A47D3371F54A6CAE}">
<RegistryKey Root="HKCU"
Key="$(var.SoftwareKey)\Microsoft\!(loc.ProductKey)">
<RegistryValue Value="!(loc.ProductName)"
Type="string"
KeyPath="yes" />
</RegistryKey>
<Shortcut Id="UninstallProduct" Name="Uninstall !(loc.ProductName)"
Target="[$(var.SystemFolder)]msiexec.exe"
Arguments="/x [ProductCode]"
Directory="ProductMenuFolder"
Description="Uninstalls !(loc.ProductName)" />
<RemoveFolder Id="UninstallShortcutRemoveProductMenuFolder"
On="uninstall" />
</Component>
</Directory>
</Directory>
</Directory>

Copyright 2009 Microsoft Corporation

Page 104

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

NOTAS

O diretrio SourceDir uma funcionalidade embutida no WiX que refere-se ao drive de instalao.

O atalho UninstallProduct uma forma conveniente de proporcionar a desinstalao do seu


produto. Isto pode ser muito til durante o desenvolvimento ou para debugging.

A prxima seo define as Funcionalidades e Componentes do produto.


fcil visualizar estes itens atravs da interface definida na Figura 73. Funcionalidades e
Componentes so grupos de arquivos que definem uma unidade coesa do programa. Quando voc
define os arquivos que fazem parte do Componente ou da Funcionalidade eles recebem GUIDS. Isto
permite ao servio de instalao rastrear esses arquivos do programa de forma que seja possvel
escrever upgrades ou correes pontuais que afetem apenas alguns arquivos especficos e no
necessariamente o produto inteiro.

Figura 73 Interface de instalao de Componente que renderizada a partir de


propriedades especificadas no XML do instalador
Esta interface (Figura 73) mapeada para a estrutura de diretrio atravs da seo Features.
<!-- *****************************************************************************************************
Define the features to display in the UI
****************************************************************************************************** -->
<Feature Id="Databases" Title="!(loc.Databases)" Display="2" Level="1">
<ComponentRef Id="UninstallShortcut" />
<ComponentRef Id="VsDbCmd" />
<ComponentRef Id="DatabaseServer1" />
<Feature Id="Database1" Title="!(loc.Database1)" Level="1">
<ComponentRef Id="Database1" />
</Feature>
<Feature Id="Database2" Title="!(loc.Database2)" Level="1">

Copyright 2009 Microsoft Corporation

Page 105

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


<ComponentRef Id="Database2" />
</Feature>
<!-- Note: The following ComponentGroupRef is required to pull in generated authoring from project
references. -->
<ComponentGroupRef Id="Product.Generated" />
</Feature>

NOTA
Note a referncia ao componente para o VsDbCmd e para o DatabaseServer1. Eles so definidos
como parte da funcionalidade Databases e sero instalados quando Database1 ou Database2
forem selecionados.
A prxima seo define as aes customizadas que iremos executar como parte da nossa instalao
O Windows Installer no foi de fato desenvolvido para executar funcionalidades customizadas. Ele
realiza um excelente trabalho de mapeamento entre arquivos, componentes e banco de dados com
chaves de registro associadas. Apesar disso, voc precisa utilizar passos alternativos caso queira
adicionar funcionalidades especiais. Os elementos Custom actions definem as informaes que so
necessrias para executar o comando. Os comandos atuais so executados no arquivo
Sequences.wxi.
<!-- **************************************************************************************************************
Define General purpose CustomActions. CustomActions specific to Components are defined in the
component.wxi
files.
*******************************************************************************************************************
-->
<!--

Some prerequisites depend on whether a particular feature and/or component is installed.


You cannot use Condition for this. Conditions apply to the entire install. You can set a property
through a CustomAction and then condition when the CustomAction is executed.
Use this approach if you want an install with multiple features that don't necessarily need SQL

Server -->
<CustomAction Id="PrerequisitesExSql08" Error="[ProductName] requires Sql08 to be installed." />
<!-These custom actions create the SERVER property used by VsDbCmd. All installs are made on the local
machine.
DO NOT try to run an .msi on Machine A to deploy to Machine B. Therefore the server is always
localhost.
We do need to provide a way to deploy to specific instances on a SERVER -->
<CustomAction Id="SetSQLServer" Property="SqlServer" Value="localhost" Execute="firstSequence" />
<CustomAction Id="SetSQLServerInstance" Property="SqlServer" Value="localhost\[SQLINSTANCE]"
Execute="firstSequence" />

A ao PrerequisitesExSql08 ir disparar um erro caso as Custom Actions sejam executadas.


Explicaremos mais sobre este ponto ao explorarmos o arquivo Sequences.wxi.
As outras duas aes so utilizadas para construer o nome do servidor ao executarmos o VsDbCmd.
No arquivo Sequences ns iremos utilizar expresses condicionais para definir a propriedade
SQLServer para localhost ou localhost\<InstanceName>.
As sees finais fazem referncia ao arquivo Sequences.wxi e aos arquivos de interface para definir a
sequncia de aes customizadas e de formulrios a serem exibidos.
<!-- ************************************************************************************************* -->

Copyright 2009 Microsoft Corporation

Page 106

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

<?include Sequences.wxi ?>


<!-- ****************************************************************************************************
Define the references to the UI of this install.
****************************************************************************************************** -->
<UIRef Id="WixUI_FeatureTreeEx" />
<!-- use this to invoke UI\* defined customized version of WixUI_FeatureTree -->
<WixVariable Id="WixUILicenseRtf" Value="Resources\License.rtf" />
<!-- ************************************************************************************************* -->

7.

Por ltimo, ns precisamos fazer referncia a todos os demais arquivos que fazem parte do
projeto WiX.

Ns iremos explor-los em detalhe nos exerccios seguintes.


<?include Components\Common\VsDbCmd.wxi ?>
<?include Components\Databases\DatabaseServer1.wxi ?>
<?include Components\Databases\Database1.wxi ?>
<?include Components\Databases\Database2.wxi ?>
<?include UI\WixUI_FeatureTreeEx.wxi ?>
<?include UI\UserRegistrationDlg.wxi ?>
<?include UI\CustomPropertiesDlg.wxi ?>

Copyright 2009 Microsoft Corporation

Page 107

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


Passo 3: Configurando os redistribuveis
Para fazer o deploy de um projeto para um banco de dados ns precisamos dos redistribuveis do
VsDbCmd redistributables instalados na mquina. Conforme mencionado anteriormente, estes
arquivos esto em um local especial da soluo. Isso nos permite conectar na estrutura de macros do
Visual Studio.
1.

No Solution Explorer, v para o projeto de instalao e abra o arquivo VsDbCmd.wxi na


pasta Components\Common.

Esta estrutura ser repetida para cada projeto de banco de dados que fizer parte da instalao. Vamos
avaliar este arquivo em detalhe para que seja possvel melhor compreender o processo.
O primeiro trecho instrui ao WiX que este arquivo um fragmento do arquivo maior Product.wxs.
Lembre-se de que ns inclumos este arquivo no exerccio anterior.
<Include xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:sql="http://schemas.microsoft.com/wix/SqlExtension"
xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
<Fragment>

IMPORTANTE
H uma estrutura de registro especfica que deve existir para que o VsDbCmd funcione. Isso
um erro do VsDbCmd na verso final do Visual Studio 2008. A ao a seguir nos permitir criar
as entradas de registro necessrias caso voc esteja utilizando Visual Studio 2008.
Por que ns definimos uma CustomAction ao invs de utilizar o elemento <Registry/>? Esta
abordagem nos permite controlar quando uma criao de registro deve acontecer baseada em
decises por Funcionalidade ou Componente. Assim, se uma funcionalidade de banco de dados no for
selecionada para uma instalao em suma mquina em particular, estas chaves no sero geradas
desnecessariamente. Voc ver como especificar essa condio no exerccio de Sequncias.
<CustomAction Id="SetDbeRegKey1" Property="RunDbeRegKey1" Value="&quot;
[WindowsFolder]system32\reg.exe&quot; add &quot;HKCU\Software\Microsoft\VisualStudio\9.0&quot; /v VsDbCmd /t
REG_SZ /d &quot;The registry key containing this value must exist for VsDbCmd.exe to work.&quot; /f" />
<CustomAction Id="RunDbeRegKey1" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="deferred"
Return="ignore" />
<CustomAction Id="SetDbeRegKey2" Property="RunDbeRegKey2" Value="&quot;
[WindowsFolder]system32\reg.exe&quot; add
&quot;HKCU\Software\Microsoft\VisualStudio\9.0\VSTSDB\Database&quot; /f" />
<CustomAction Id="RunDbeRegKey2" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="deferred"
Return="ignore" />
<CustomAction Id="SetDbeRegKey3" Property="RunDbeRegKey3" Value="&quot;
[WindowsFolder]system32\reg.exe&quot; add
&quot;HKCU\Software\Microsoft\VisualStudio\9.0\VSTSDB\Tracing&quot; /f" />
<CustomAction Id="RunDbeRegKey3" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="deferred"
Return="ignore" />

2.

A seguir definiremos o componente e o colocamos em um diretrio.


Ns criamos a estrutura de diretrio no exerccio anterior e agora iremos fazer referncia a
essa estrutura, extendendo-a para o Componente.

Copyright 2009 Microsoft Corporation

Page 108

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

<DirectoryRef Id="INSTALLDIR">
<Directory Id="VsDbCmdDir" Name="VsDbCmd">
<Component Id="VsDbCmd" Guid="{D6A12A03-B57D-4886-8B08-D5B47F809833}">

3.

Adicione os arquivos e componentes que o VsDbCmd requer para execuo. (Figura 74)
Por padro, eles esto localizados \Program Files (x86)\Microsoft Visual Studio
10.0\VSTSDB\Deploy. Esta soluo possui uma cpia na pasta
Solution\BuildSupportFiles\AnyCpu\VsDbCmd.

Figura 74 Arquivos necessrios para executar o VSDBCMD includos no projeto de


instalao
4.

Para inclu-los no instalador necessrio alterar o XML conforme o script abaixo:

<File Id="VsDbCmdVsDbCmd.exe" Name="VsDbCmd.exe" Source="$


(var.SolutionDir)BuildSupportFiles\AnyCpu\VsDbCmd\VsDbCmd.exe" KeyPath="yes" />
<File Id="VsDbCmdVsDbCmd.exe.config" Name="VsDbCmd.exe.config" Source="$
(var.SolutionDir)BuildSupportFiles\AnyCpu\VsDbCmd\VsDbCmd.exe.config" />
<File Id="VsDbCmdDatabaseSchemaProviders.Extensions.xml" Name="DatabaseSchemaProviders.Extensions.xml"
Source="$(var.SolutionDir)BuildSupportFiles\AnyCpu\VsDbCmd\DatabaseSchemaProviders.Extensions.xml" />
<File Id="VsDbCmdMicrosoft.Data.Schema.dll" Name="Microsoft.Data.Schema.dll" Source="$
(var.SolutionDir)BuildSupportFiles\AnyCpu\VsDbCmd\Microsoft.Data.Schema.dll" />
<File Id="VsDbCmdMicrosoft.Data.Schema.ScriptDom.dll" Name="Microsoft.Data.Schema.ScriptDom.dll"
Source="$(var.SolutionDir)BuildSupportFiles\AnyCpu\VsDbCmd\Microsoft.Data.Schema.ScriptDom.dll" />
<File Id="VsDbCmdMicrosoft.Data.Schema.ScriptDom.Sql.dll" Name="Microsoft.Data.Schema.ScriptDom.Sql.dll"
Source="$(var.SolutionDir)BuildSupportFiles\AnyCpu\VsDbCmd\Microsoft.Data.Schema.ScriptDom.Sql.dll" />
<File Id="VsDbCmdMicrosoft.Data.Schema.Sql.dll" Name="Microsoft.Data.Schema.Sql.dll" Source="$
(var.SolutionDir)BuildSupportFiles\AnyCpu\VsDbCmd\Microsoft.Data.Schema.Sql.dll" />
<File Id="VsDbCmdsqlceer35EN.dll" Name="sqlceer35EN.dll" Source="$
(var.SolutionDir)BuildSupportFiles\AnyCpu\VsDbCmd\sqlceer35EN.dll" />
<File Id="VsDbCmdsqlceme35.dll" Name="sqlceme35.dll" Source="$
(var.SolutionDir)BuildSupportFiles\AnyCpu\VsDbCmd\sqlceme35.dll" />
<File Id="VsDbCmdsqlceqp35.dll" Name="sqlceqp35.dll" Source="$
(var.SolutionDir)BuildSupportFiles\AnyCpu\VsDbCmd\sqlceqp35.dll" />
<File Id="VsDbCmdsqlcese35.dll" Name="sqlcese35.dll" Source="$
(var.SolutionDir)BuildSupportFiles\AnyCpu\VsDbCmd\sqlcese35.dll" />
<File Id="VsDbCmdSystem.Data.SqlServerCe.dll" Name="System.Data.SqlServerCe.dll" Source="$
(var.SolutionDir)BuildSupportFiles\AnyCpu\VsDbCmd\System.Data.SqlServerCe.dll" />

Copyright 2009 Microsoft Corporation

Page 109

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

Copyright 2009 Microsoft Corporation

Page 110

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

NOTA
Existem alguns pontos a serem destacados:

$(var.SolutionDir) Esta a macro do Visual Studio que aponta para o diretrio da Soluo.

Os atributos Source e Name so especficos. Se o caminho Source no no coincidir voc ir


obter um erro de compilao. De toda forma, se o atributo Name estiver incorreto a instalao
ser feita com o nome incorreto, o que ir provocar erros em tempo de execuo. Outro efeito
que sero exibidas mensagens de erro que podero ilud-lo quanto ao real problema do
contexto.

O atributo KeyPath um requisito do WiX. Todo Componente deve ter pelo menos um arquivo
com o atributo KeyPath.

5.

Finalmente, existem alguns requisites do WiX que precisam ser includos para a realizao
de uma desinstalao.

<Shortcut Id="VsDbCmdShortcut1"
Name="VsDbCmd.exe command prompt"
Description="VsDbCmd.exe command prompt"
WorkingDirectory="INSTALLDIR"
Advertise="yes"/>
<RemoveFolder Id="VsDbCmdShortcutsRemoveProductMenuFolder" On="uninstall" />

Copyright 2009 Microsoft Corporation

Page 111

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


Passo 4 Configurando projetos de banco de dados
O guia do WiX recomenda a criao de um Componente para cada arquivo que voc desejar instalar, o
que simplifica os cenrios de upgrade ou correes menores. Nestes cenrios o Windows Installer
verifica a existncia do produto e simplismente copia as novas verses dos arquivos especficos. Cada
arquivo faz parte de um nico component e possui uma GUID. Durante o processo upgrade (ou
correo) o instalador compara os GUIDS copia/exclui somente os arquivos cujos GUIDS foram
alterados.
Embora seja uma boa prtica criar um componente para cada arquivo isso no obrigatrio. Para os
pacotes de projeto de banco de dados este ponto no faz muito sentido. Dificilmente ser criado um
processo de upgrade que copia a nova verso de um arquivo como, por exemplo, o
Database.sqlcmdvars, de forma que funcionalidades do banco de dados sejam alteradas. Ns iremos
criar um nico componente que hospedar todos os arquivos do projeto.
No exerccio anterior ns explicamos os elementos do componente. Vamos manter o foco na tarefa
principal que mapear a sada do projeto de banco de dados para o pacote de instalao.
1.

No Solution Explorer, v at o projeto de instalao e abra o arquivo Database1.wxi na


pasta Components\Databases. Voc ver o seguinte script:

<!-- files needed for vsdbcmd.exe custom action related processing -->
<File Id="Database1.dbschema" Name="Customers.dbschema" Source="$
(var.Customers.TargetDir)Customers.dbschema" KeyPath="yes" />
<File Id="Database1.deploymanifest" Name="Customers.deploymanifest" Source="$
(var.Customers.TargetDir)Customers.deploymanifest" />
<File Id="Database1Database.sqlcmdvars" Name="Customers_Database.sqlcmdvars" Source="$
(var.Customers.TargetDir)Customers_Database.sqlcmdvars" />
<File Id="Database1Database.sqldeployment" Name="Customers_Database.sqldeployment" Source="$
(var.Customers.TargetDir)Customers_Database.sqldeployment" />
<File Id="Database1Database.sqlsettings" Name="Customers_Database.sqlsettings" Source="$
(var.Customers.TargetDir)Customers_Database.sqlsettings" />
<File Id="Database1Script.PostDeployment.sql" Name="Customers_Script.PostDeployment.sql" Source="$
(var.Customers.TargetDir)Customers_Script.PostDeployment.sql" />
<File Id="Database1Script.PreDeployment.sql" Name="Customers_Script.PreDeployment.sql" Source="$
(var.Customers.TargetDir)Customers_Script.PreDeployment.sql" />
<!--add database schema references here. if you don't vsdbcmd will throw errors during deployment-->
<File Id="Database1master.dbschema" Name="master.dbschema" Source="$
(var.Customers.TargetDir)master.dbschema" />
<!-- include assembly references here. -->
<File Id="CustomersCLR.dll" Name="CustomersCLR.dll" Source="$(var.Customers.TargetDir)CustomersCLR.dll" />

NOTA

Quando o build de um projeto de banco de dados executado, a pasta .\sql populada com os
arquivos que so necessrios ao processo de deployment utilizando o VsDbCmd. Dependendo
da configurao (release ou debug) estes arquivos sero criados em pastas diferentes dentro
da pasta .\sql. Ns temos uma forma conveniente de fazer referncia a pasta utilizando uma
macro do Visual Studio $(var.Customers.TargetDir) .

Como o banco de dados faz referncia a objetos de sistema ns precisamos incluir o arquivo
master.dbschema.

Copyright 2009 Microsoft Corporation

Page 112

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

Como o banco de dados faz referncia ao projeto CustomerCLR ns precisamos incluir tambm
essa .dll.

Copyright 2009 Microsoft Corporation

Page 113

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


2.

Agora que os arquivos foram includos podemos definir o comando utilizado para instalar o
banco de dados. As linhas a seguir so responsveis por este passo:

<CustomAction Id="CmdLineSetDatabase1"
Property="CmdLineRunDatabase1"
Value="&quot;[WindowsFolder]system32\cmd.exe&quot; /c pushd &quot;
[Database1Dir]&quot; &amp; &quot;[VsDbCmdDir]VsDbCmd.exe&quot; /a:Deploy /cs:&quot;Data
Source=[SqlServer];Integrated Security=True;Pooling=False&quot; /dd+ /manifest:&quot;
[#Database1.deploymanifest]&quot; /p:TargetDatabase=&quot;[CUSTOMERSDB]&quot; /dsp:Sql" />
<CustomAction Id="CmdLineRunDatabase1"
BinaryKey="WixCA"
DllEntry="CAQuietExec"
Execute="deferred"
Return="ignore"
TerminalServerAware="yes"/>

NOTA

O comando pushd uma extenso da linha de comando. Ele armazena o nome do diretrio
atual para ser utilizado pelo comando popd antes de alterar o diretrio para o destino
especificado.

O comando pushd extremamente importante. Se voc no utilizar o comando pushd o


diretrio de trabalho ser o System32 ou System64WoW, dependendo da arquitetura do SO
(32 ou 64 bits). O Pushd garante que o script .sql gerado durante o deployment ser levado ao
local de instalao de cada banco de dados.

No Passo 2 ns configuramos algumas propriedades cruciais que agora comearemos a utilizar.


Qualquer diretrio definido no WiX podem ser referenciados atravs do seu Id. [WindowsFolder],
[Database1Dir], e [VsDbCmdDir] so evoludos para o seus caminhos respectivos.

A propriedade [SqlServer] uma privada e resolve tanto localhost quanto localhost\


[SQLINSTANCE]. Se o usurio informa uma instncia de SQL especfica, seja na interface ou
atravs da linha de comando, o atributo SqlServer inclui o nome da instncia.

O item [#Database1.deploymanifest] equivale ao caminho completo do deploymanifest.

/p:TargetDatabase definido com o valor provido pelo usurio [CUSTOMERSDB].

Note o atributo TerminalServerAware. Estes atributos definem para o SO que h uma instalao
sendo executada em uma sesso do Terminal Server. Podem ocorrer erros atpicos nesse
cenrio, normalmente em sesses do Windows 2003 Terminal Services.

Copyright 2009 Microsoft Corporation

Page 114

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


Agora que temos um banco de dados definido, vamos dar uma olhada em alguns trechos especficos
dos outros dois projetos.
3.

No Solution Explorer, v at o projeto de instalao e abra o arquivo Database2.wxi


localizado na pasta Components\Databases.

Quase todo o contedo o mesmo do Database1.wxi exceto por alguns nomes de arquivos
especficos que incluem o nome do projeto. Ateno a estas linhas:
<File Id="Customers.dbschema" Name="Customers.dbschema" Source="$
(var.Sales.TargetDir)Customers.dbschema" />
<util:XmlConfig Id="SalesSqlCmdVar1"
File="[Database2Dir]Sales_Database.sqlcmdvars"
Action="create"
ElementPath="//SqlCommandVariables/Properties/Property[\
[]PropertyName='Customers'[\]]/PropertyValue"
Value="[CUSTOMERSDB]"
Node="value"
Sequence="1"
On="install"/>

Como o banco de dados Sales faz referncia ao banco de dados Customers, necessrio ns incluir o
arquivo Customers.dbschema.
Alm disso, como o nosso instalador nos permite alterar o nome do banco de dados no momento da
instalao, necessrio atualizar o arquivo sales_database.sqlcmdvars. para este fim que
utilizamos a tag <util:XmlConfig . O schema util uma extenso do WiX que adiciona uma srie de
novas funcionalidades experincia padro do Windows Installer. Para habilitar estas capacidades
preciso incluir a dll como uma referncia de projeto e import-la nos arquivos WiXS.
<Include xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:sql="http://schemas.microsoft.com/wix/SqlExtension"
xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">

O elemento XmlConfig possui uma srie de atributos:

O atributo Action definido para criar ou atualizar o item caso ele exista.

O atributo ElementPath um trecho XSL que significa: Encontre o elemento Property que
contm um elemento filho chamado PropertyName com o contedo texto equivalente a
Customers e ento encontre um elemento irmo que tenha o nome de PropertyValue. Isto
serve para definir o contexto do n.

O atributo Value especifica o valor do contexto do n.

O atributo Node especifica quando atualizar um atributo ou o Texto do contexto do n.

Se existirem mltiplas mudanas utilize o n Sequence para especificar a ordem das mudanas.

Finalmente, observe algumas diferenas entre os projetos de servidor (Server Projects) e os projetos
de banco de dados (Database Projects).
No projeto do instalador, abra o arquivo DatabaseServer1.wxi localizado na pasta
Components\Databases.
Copyright 2009 Microsoft Corporation

Page 115

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


A diferena prtica est no fato de que o projeto de servidor possui um conjunto diferente de arquivos
de sada.
<File Id="DatabaseServer1Master.sqlcmdvars" Name="master_Master.sqlcmdvars" Source="$
(var.CustomersServer.TargetDir)master_Master.sqlcmdvars" />
<File Id="DatabaseServer1Master.sqldeployment" Name="master_Master.sqldeployment" Source="$
(var.CustomersServer.TargetDir)master_Master.sqldeployment" />
<File Id="DatabaseServer1Master.sqlsettings" Name="master_Master.sqlsettings" Source="$
(var.CustomersServer.TargetDir)master_Master.sqlsettings" />
<File Id="DatabaseServer1Server.sqlsettings" Name="master_Server.sqlsettings" Source="$
(var.CustomersServer.TargetDir)master_Server.sqlsettings" />

Projetos de servidor apontam para o banco de dados master e por este motivo que possuem o
prefixo master hard-coded. Eles possuem ainda um arquivo especial chamado Server.sqlsettings.

Copyright 2009 Microsoft Corporation

Page 116

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


Passo 5 Sequncias e Expresses Condicionais
Neste exerccio ns iremos controlar como e quando executar todos as CustomActions que foram
definidas. Existem trs detalhes que devem ser monitorados:

A sequncia dos eventos de instalao.

As diferentes sequncias de instalao: Install, Uninstall, Repair, e assim por diante.

Execuo condicional. Dependendo das Funcionalidades e Componentes que foram


instalados voc pode desejar no executar uma das aes customizadas.

O Windows Installer possui uma sequncia de eventos que so definidos no Windows Installer SDK.
Ns desejamos executar o deployment aps os arquivos terem sido instalados e o arquivo .sqlcmdvars
tenha sido modificado com o valores de nossas propriedades. necessrio garantir tambm que os
requisitos de registro relativos ao VsDbCmd tenham sido aplicados antes de executarmos o
deployment.
1.

No Solution Explorer, v at o projeto de instalao e abra o arquivo Sequences.wxi


localizado na pasta raiz. Voc ver o seguinte contedo:
<InstallExecuteSequence>
<!-- for prerequisites that require checking feature and/or component state and action conditions -->
<Custom Action="PrerequisitesExSql08" Before="InstallInitialize">!Databases=2 And
&amp;Databases=3 And Not SQL08DIR</Custom>

<!--Some registry keys need to exist before vsdbcmd runs. The WriteRegistry action is almost the
last action to execute so we have to use a custom action to run these before WriteRegistry happens.->
<Custom Action="SetDbeRegKey1" Before="RunDbeRegKey1">!Databases=2 And
&amp;Databases=3</Custom>
<Custom Action="RunDbeRegKey1" Before="SetDbeRegKey2">!Databases=2 And
&amp;Databases=3</Custom>
<Custom Action="SetDbeRegKey2" Before="RunDbeRegKey2">!Databases=2 And
&amp;Databases=3</Custom>
<Custom Action="RunDbeRegKey2" Before="SetDbeRegKey3">!Databases=2 And
&amp;Databases=3</Custom>
<Custom Action="SetDbeRegKey3" Before="RunDbeRegKey3">!Databases=2 And
&amp;Databases=3</Custom>
<Custom Action="RunDbeRegKey3" Before="InstallFiles">!Databases=2 And
&amp;Databases=3</Custom>
<Custom Action="SetSQLServerInstance" Before="StartServices">SQLINSTANCE
&lt;&gt;&quot;&quot;</Custom>
<Custom Action="CmdLineSetDatabaseServer1" After="StartServices">!Databases=2 And
&amp;Databases=3</Custom>
<Custom Action="CmdLineRunDatabaseServer1" After="CmdLineSetDatabaseServer1">!
Databases=2 And &amp;Databases=3</Custom>
<Custom Action="CmdLineSetDatabase1" After="CmdLineRunDatabaseServer1">!Database1=2
And &amp;Database1=3 And ?Database1=2 And $Database1=3</Custom>
<Custom Action="CmdLineRunDatabase1" After="CmdLineSetDatabase1">!Database1=2 And
&amp;Database1=3 And ?Database1=2 And $Database1=3</Custom>

Copyright 2009 Microsoft Corporation

Page 117

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

<Custom Action="CmdLineSetDatabase2" After="CmdLineRunDatabaseServer1">!Database2=2


And &amp;Database2=3 And ?Database2=2 And $Database2=3</Custom>
<Custom Action="CmdLineRunDatabase2" After="CmdLineSetDatabase2">!Database2=2 And
&amp;Database2=3 And ?Database2=2 And $Database2=3</Custom>
</InstallExecuteSequence>

Cada elemento Custom refere-se a uma CustomAction que definimos anteriormente. Os atributos
Before e After definem onde na sequncia de instalao estas aes customizadas devem ser
executadas. H um conjunto de aes definidas que compem a sequncia padro de instalao.
(Figura 75)
Ao

Condio

LaunchConditions

Sequncia
100

AppSearch

400

CCPSearch

NOT Installed

500

RMCCPSearch

NOT Installed

600

ValidateProductID

700

CostInitialize

800

FileCost

900

CostFinalize

1000

SetODBCFolders

1100

InstallValidate

1400

InstallInitialize
AllocateRegistrySpace

1500
NOT Installed

1550

ProcessComponents

1600

UnpublishComponents

1700

UnpublishFeatures

1800

StopServices

VersionNT

1900

DeleteServices

VersionNT

2000

UnregisterComPlus

2100

SelfUnregModules

2200

UnregisterTypeLibraries

2300

RemoveODBC

2400

UnregisterFonts

2500

RemoveRegistryValues

2600

UnregisterClassInfo

2700

UnregisterExtensionInfo

2800

UnregisterProgIdInfo

2900

UnregisterMIMEInfo

3000

RemoveIniValues

3100

RemoveShortcuts

3200

RemoveEnvironmentStrings

3300

RemoveDuplicateFiles

3400

RemoveFiles

3500

RemoveFolders

3600

Copyright 2009 Microsoft Corporation

Page 118

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


CreateFolders

3700

MoveFiles

3800

InstallFiles

4000

PatchFiles

4090

DuplicateFiles

4210

BindImage

4300

CreateShortcuts

4500

RegisterClassInfo

4600

RegisterExtensionInfo

4700

RegisterProgIdInfo

4800

RegisterMIMEInfo

4900

WriteRegistryValues

5000

WriteIniValues

5100

WriteEnvironmentStrings

5200

RegisterFonts

5300

InstallODBC

5400

RegisterTypeLibraries

5500

SelfRegModules

5600

RegisterComPlus

5700

InstallServices

VersionNT

5800

StartServices

VersionNT

5900

RegisterUser

6000

RegisterProduct

6100

PublishComponents

6200

PublishFeatures

6300

PublishProduct

6400

InstallFinalize

6600

Figura 75 Order definida da sequncia de instalao


No passo 3 ns inclumos uma extenso para o WiX que nos permite alterar os arquivos XML. Estas
extenses adicionam eventos sequncia. Estes eventos aparecem no arquivo Sequences com
sendo Custom Actions s quais voc pode se vincular atravs dos atributos Before e After. As
aes util:XmlConfig ocorrem exatamente antes da ao StartServices. Tudo isso faz parte de uma
extensa explicao de porqu as Customs Actions para o deployment de banco de dados so
encadeadas de forma a acontecerem aps o evento StartServices. Isto garante que as aes de
deployment ocorrem aps os arquivos XML (*.sqlcmdvars) e aps as mudanas no Registro.
Agora que temos as Custom Actions na sequncia necessria, precisamos controlar quando uma
Custom Action deve ser executa. Para faz-lo, ns iremos utilizar uma condio especial de sintaxe
que o Windows Installer usa. Voc insere essas condies no texto dos elementos do tipo Custom.
<Custom Action="RunDbeRegKey3" Before="InstallFiles">!Databases=2 And &amp;Databases=3</Custom>

A condio acima valida o seguinte: a funcionalidade Databases no est instalada e a funcionalidade


Databases est instalando.
<Custom Action="SetSQLServerInstance" Before="StartServices">SQLINSTANCE
&lt;&gt;&quot;&quot;</Custom>

Esta condio valida o seguinte: a propriedade SQLINSTANCE <> . Como o WiX uma linguagem
XML sobre o Windows Installer necessrio evitar os caracteres como <, >, and &.
Copyright 2009 Microsoft Corporation

Page 119

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


<Custom Action="CmdLineSetDatabase1" After="CmdLineRunDatabaseServer1">!Database1=2 And
&amp;Database1=3 And ?Database1=2 And $Database1=3</Custom>

Este ltimo exemplo valida se: a funcionalidade Databases no est instalada e a funcionalidade
Databases est instalando e o component Database1 no est instalado e o componente Database1
est instalando. Lembre-se que no exerccio 2 ns mapeamos Database1 e Database2 para os nomes
amigveis Customers e Sales. O que essas condies fazem garantir que a custom action
executada somente se o usurio tiver selecionado aquela funcionalidade ou componente para a
instalao, alm de garantir que estas aes no sero executadas caso o usurio esteja
desinstalando.

Copyright 2009 Microsoft Corporation

Page 120

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


Passo 6 Propriedades e Interface de Usurio (UI)
H somente mais um ponto que precisamos enderear para obtermos um instalador funcionando. Ns
precisamos criar uma interface que mapeie as entradas do usurio para as propriedades que
controlam o deployment.
1.
2.

No Solution Explorer, v at o projeto Install e abra o arquivo CustomPropertiesDlg.wxi


localizado na pasta UI.
Este arquivo contm a definio de uma pgina do wizard do instalador. H uma srie de
estruturas que definem os elementos de interface e maior parte deles autoexplicativa. A
parte um pouco menos intuitiva so os delegates dos eventos Back e Next.
<Property Id="WixUI_CustomPropertiesDlgBack" Value="CustomizeDlg" />
<Property Id="WixUI_CustomPropertiesDlgNext" Value="VerifyReadyDlg" />

Estas propriedades fazem referncia as interfaces de dilogo que so definidas no arquivo


WiXUI_FeatureTreeEx.wxi.
O principal ponto de interesse a definio das trs caixas de texto que capturam as
entradas de usurio.
<Control Id="CustomProperty1Label" Type="Text" X="45" Y="70" Width="280" Height="15"
TabSkip="no" Text="SQL Server Instance Name" />
<Control Id="CustomProperty1Edit" Type="Edit" X="45" Y="80" Width="280" Height="18"
Property="SQLINSTANCE" Text="{80}" />
<Control Id="CustomProperty2Label" Type="Text" X="45" Y="100" Width="280" Height="15"
TabSkip="no" Text="Name of the Customers Database" />
<Control Id="CustomProperty2Edit" Type="Edit" X="45" Y="110" Width="280" Height="18"
Property="CUSTOMERSDB" Text="{80}" />
<Control Id="CustomProperty3Label" Type="Text" X="45" Y="130" Width="280" Height="15"
TabSkip="no" Text="Name of the Sales Database" />
<Control Id="CustomProperty3Edit" Type="Edit" X="45" Y="140" Width="280" Height="18"
Property="SALESDB" Text="{80}" />

O atributo Property mapeia a entrada de usurio para uma propriedade particular. Abaixo
vemos como o dilogo ser renderizado quando o instalador for executado. (Figura 76)

Copyright 2009 Microsoft Corporation

Page 121

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


Figura 76 Dilogo de Propriedades customizadas criadas no instalador
3.
4.

No Solution Explorer, clique com o boto direito no projeto Install e selecione Build.
Enquanto voc pode executar o arquivo Install.msi atravs de um duplo-clique mais
interessante execut-lo atravs de uma linha de comando e capturar as informaes de
log. (Figura 77)
Utilize o comando a seguir para chamar o pacote msiexec:
Msiexec.exe /I WiXDBProInstall_X64.msi /l*v WixDBProInstall_x64.install.log
Se voc j executou a instalao manualmente, desinstale o produto atravs do Painel de
Controle e exclua (drop) os bancos de dados Customer e Sales. Para excluir os bancos de
dados, abra o SQL Management Studio, conecte na instncia local do SQL Server, clique
com o boto direito nos bancos de dados citados e selecione Drop database.

Figura 77 Executando o instalador a partir da linha de comando utilizando o


parmetro /l
6.

Quando a instalao finalizada, abra o arquivo WiXDBProInstall_x64.install.log, que


est localizado na mesma pasta do pacote de instalao. H aparentemente bastante
rudo neste arquivo. Todas as informaes tem um propsito, porm est alm dos
objetivos deste laboratrio explicar estes detalhes.

7.

Role at o ponto onde as Custom actions comeam a ser executados, prximo ao final do
arquivo. Voc est procurando pelas linhas a seguir:

MSI (s) (CC:DC) [14:06:34:904]: Executing op: ActionStart(Name=CmdLineRunDatabaseServer1,,)


Action 14:06:34: CmdLineRunDatabaseServer1.
MSI (s) (CC:DC) [14:06:34:906]: Executing op:
CustomActionSchedule(Action=CmdLineRunDatabaseServer1,ActionType=17473,Source=BinaryData,T
arget=CAQuietExec,CustomActionData="C:\Windows\system32\cmd.exe" /c pushd "C:\Program
Files\WiXDBProSample\Databases\Customers Server Settings\" & "C:\Program
Files\WiXDBProSample\VsDbCmd\VsDbCmd.exe" /a:Deploy /cs:"Data Source=localhost;Integrated
Security=True;Pooling=False" /dd+ /manifest:"C:\Program
Files\WiXDBProSample\Databases\Customers Server Settings\CustomersServer.deploymanifest"
/dsp:Sql)
MSI (s) (CC:10) [14:06:34:935]: Invoking remote custom action. DLL:
C:\Windows\Installer\MSI42AA.tmp, Entrypoint: CAQuietExec
CAQuietExec: TSD00560
The project and target databases have different collation settings.
Deployment errors might occur.
CAQuietExec: TSD00566
Deployment script generated to:
CAQuietExec: C:\Program Files\WiXDBProSample\Databases\Customers Server
Settings\CustomersServer.sql
CAQuietExec:
CAQuietExec: *** SQL01268 C:\Program Files\WiXDBProSample\Databases\Customers Server
Settings\CustomersServer.sql (47,0)
.Net SqlClient Data Provider: Msg 14262, Level 16, State 1,

Copyright 2009 Microsoft Corporation

Page 122

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


Procedure sp_verify_category_identifiers, Line 50 The specified @category_name ('Sales') does not
exist.
CAQuietExec: SQL01268
C:\Program Files\WiXDBProSample\Databases\Customers Server
Settings\CustomersServer.sql (47,0)
An error occurred while the batch was being executed.
CAQuietExec: Error 0x80070001: Command line returned an error.
CAQuietExec: Error 0x80070001: CAQuietExec Failed
CustomAction CmdLineRunDatabaseServer1 returned actual error code 1603 but will be translated to
success due to continue marking
MSI (s) (CC:DC) [14:06:49:194]: Executing op: ActionStart(Name=CmdLineRunDatabase1,,)
Action 14:06:49: CmdLineRunDatabase1.
MSI (s) (CC:DC) [14:06:49:197]: Executing op:
CustomActionSchedule(Action=CmdLineRunDatabase1,ActionType=17473,Source=BinaryData,Target
=CAQuietExec,CustomActionData="C:\Windows\system32\cmd.exe" /c pushd "C:\Program
Files\WiXDBProSample\Databases\Customers\" & "C:\Program
Files\WiXDBProSample\VsDbCmd\VsDbCmd.exe" /a:Deploy /cs:"Data Source=localhost;Integrated
Security=True;Pooling=False" /dd+ /manifest:"C:\Program
Files\WiXDBProSample\Databases\Customers\Customers.deploymanifest"
/p:TargetDatabase="Customers" /dsp:Sql)
MSI (s) (CC:C4) [14:06:49:234]: Invoking remote custom action. DLL:
C:\Windows\Installer\MSI7A7D.tmp, Entrypoint: CAQuietExec
CAQuietExec: TSD00566
Deployment script generated to:
CAQuietExec: C:\Program Files\WiXDBProSample\Databases\Customers\Customers.sql
CAQuietExec:
CAQuietExec: SQL01268
C:\Program Files\WiXDBProSample\Databases\Customers\Customers.sql
(38,0) Creating Customers...
CAQuietExec: SQL01268
C:\Program Files\WiXDBProSample\Databases\Customers\Customers.sql
(171,0) Creating ...
CAQuietExec: SQL01268
C:\Program Files\WiXDBProSample\Databases\Customers\Customers.sql
(182,0) Creating ....
CAQuietExec: SQL01268
C:\Program Files\WiXDBProSample\Databases\Customers\Customers.sql
(191,0) Creating ....
CAQuietExec: SQL01268
C:\Program Files\WiXDBProSample\Databases\Customers\Customers.sql
(208,0) Creating PK_Addresses...
CAQuietExec: SQL01268
C:\Program Files\WiXDBProSample\Databases\Customers\Customers.sql
(217,0) Creating ....
CAQuietExec: SQL01268
C:\Program Files\WiXDBProSample\Databases\Customers\Customers.sql
(230,0) Creating PK_Companies...
CAQuietExec: SQL01268
C:\Program Files\WiXDBProSample\Databases\Customers\Customers.sql
(239,0) Creating ....
CAQuietExec: SQL01268
C:\Program Files\WiXDBProSample\Databases\Customers\Customers.sql
(251,0) Creating PK_CompanyAddresses...
CAQuietExec: SQL01268
C:\Program Files\WiXDBProSample\Databases\Customers\Customers.sql
(260,0) Creating ....
CAQuietExec: SQL01268
C:\Program Files\WiXDBProSample\Databases\Customers\Customers.sql
(272,0) Creating PK_CompanyContacts...
CAQuietExec: SQL01268
C:\Program Files\WiXDBProSample\Databases\Customers\Customers.sql
(281,0) Creating ....
CAQuietExec: SQL01268
C:\Program Files\WiXDBProSample\Databases\Customers\Customers.sql
(296,0) Creating PK_Contacts...
CAQuietExec: SQL01268
C:\Program Files\WiXDBProSample\Databases\Customers\Customers.sql
(305,0) Creating ....
CAQuietExec: SQL01268
C:\Program Files\WiXDBProSample\Databases\Customers\Customers.sql
(317,0) Creating PK_Customers...
CAQuietExec: SQL01268
C:\Program Files\WiXDBProSample\Databases\Customers\Customers.sql
(326,0) Creating .....
CAQuietExec: SQL01268
C:\Program Files\WiXDBProSample\Databases\Customers\Customers.sql
(335,0) Creating ....
CAQuietExec: SQL01268
C:\Program Files\WiXDBProSample\Databases\Customers\Customers.sql
(346,0) Creating PK_Partners...
CAQuietExec: SQL01268
C:\Program Files\WiXDBProSample\Databases\Customers\Customers.sql
(355,0) Creating .....
CAQuietExec: SQL01268
C:\Program Files\WiXDBProSample\Databases\Customers\Customers.sql
(364,0) Creating ....
CAQuietExec: SQL01268
C:\Program Files\WiXDBProSample\Databases\Customers\Customers.sql
(375,0) Creating PK_Vendors...
CAQuietExec: SQL01268
C:\Program Files\WiXDBProSample\Databases\Customers\Customers.sql
(384,0) Creating .....

Copyright 2009 Microsoft Corporation

Page 123

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


CAQuietExec: SQL01268
C:\Program Files\WiXDBProSample\Databases\Customers\Customers.sql
(393,0) Creating FK_Companies_Companies...
CAQuietExec: SQL01268
C:\Program Files\WiXDBProSample\Databases\Customers\Customers.sql
(402,0) Creating FK_CompanyAddresses_Addresses...
CAQuietExec: SQL01268
C:\Program Files\WiXDBProSample\Databases\Customers\Customers.sql
(411,0) Creating FK_CompanyAddresses_Companies...
CAQuietExec: SQL01268
C:\Program Files\WiXDBProSample\Databases\Customers\Customers.sql
(420,0) Creating FK_CompanyContacts_Companies...
CAQuietExec: SQL01268
C:\Program Files\WiXDBProSample\Databases\Customers\Customers.sql
(429,0) Creating FK_CompanyContacts_Contacts...
CAQuietExec: SQL01268
C:\Program Files\WiXDBProSample\Databases\Customers\Customers.sql
(438,0) Creating FK_Customers_Companies...
CAQuietExec: SQL01268
C:\Program Files\WiXDBProSample\Databases\Customers\Customers.sql
(447,0) Creating FK_Partners_Companies...
CAQuietExec: SQL01268
C:\Program Files\WiXDBProSample\Databases\Customers\Customers.sql
(456,0) Creating FK_Vendors_Companies...
CAQuietExec: SQL01268
C:\Program Files\WiXDBProSample\Databases\Customers\Customers.sql
(465,0) Creating ....
CAQuietExec: SQL01268
C:\Program Files\WiXDBProSample\Databases\Customers\Customers.sql
(489,0) Creating ....
CAQuietExec: SQL01268
C:\Program Files\WiXDBProSample\Databases\Customers\Customers.sql
(505,0) Creating ....
CAQuietExec: SQL01268
C:\Program Files\WiXDBProSample\Databases\Customers\Customers.sql
(516,0) Creating ....
CAQuietExec: SQL01268
C:\Program Files\WiXDBProSample\Databases\Customers\Customers.sql
(530,0) Creating ....
CAQuietExec: SQL01268
C:\Program Files\WiXDBProSample\Databases\Customers\Customers.sql
(572,0) Checking existing data against newly created constraints
MSI (s) (CC:DC) [14:07:34:774]: Executing op: ActionStart(Name=CmdLineRunDatabase2,,)
Action 14:07:34: CmdLineRunDatabase2.
MSI (s) (CC:DC) [14:07:34:780]: Executing op:
CustomActionSchedule(Action=CmdLineRunDatabase2,ActionType=17473,Source=BinaryData,Target
=CAQuietExec,CustomActionData="C:\Windows\system32\cmd.exe" /c pushd "C:\Program
Files\WiXDBProSample\Databases\Sales\" & "C:\Program
Files\WiXDBProSample\VsDbCmd\VsDbCmd.exe " /a:Deploy /cs:"Data Source=localhost;Integrated
Security=True;Pooling=False" /dd+ /manifest:"C:\Program
Files\WiXDBProSample\Databases\Sales\Sales.deploymanifest" /p:TargetDatabase="Sales" /dsp:Sql)
MSI (s) (CC:44) [14:07:34:814]: Invoking remote custom action. DLL:
C:\Windows\Installer\MSI2C8D.tmp, Entrypoint: CAQuietExec
CAQuietExec: TSD00566
Deployment script generated to:
CAQuietExec: C:\Program Files\WiXDBProSample\Databases\Sales\Sales.sql
CAQuietExec:
CAQuietExec: SQL01268
C:\Program Files\WiXDBProSample\Databases\Sales\Sales.sql (39,0)
Creating Sales...
CAQuietExec: SQL01268
C:\Program Files\WiXDBProSample\Databases\Sales\Sales.sql (172,0)
Creating ....
CAQuietExec: SQL01268
C:\Program Files\WiXDBProSample\Databases\Sales\Sales.sql (185,0)
Creating ....
CAQuietExec: SQL01268
C:\Program Files\WiXDBProSample\Databases\Sales\Sales.sql (196,0)
Creating ....
CAQuietExec: *** SQL01268 C:\Program Files\WiXDBProSample\Databases\Sales\Sales.sql (200,0)
.Net SqlClient Data Provider: Msg 4504, Level 16, State 1, Procedure Customers, Line 3 Could not
create view 'Customers' because CLR type 'CustomerAddressType' does not exist in the target
database 'Sales'.
CAQuietExec: SQL01268
C:\Program Files\WiXDBProSample\Databases\Sales\Sales.sql (200,0)
An error occurred while the batch was being executed.
CAQuietExec: Error 0x80070001: Command line returned an error.
CAQuietExec: Error 0x80070001: CAQuietExec Failed
CustomAction CmdLineRunDatabase2 returned actual error code 1603 but will be translated to
success due to continue marking

Copyright 2009 Microsoft Corporation

Page 124

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


Passo 7 Armadilhas Comuns
Note que temos erros mesmo que a instalao tenha sido bem sucedida. Esta uma das partes mais
complicadas do deployment utilizando o VsDbCmd. Algumas vezes voc pode obter sucesso parcial.
Quando voc estiver desenvolvendo ou inspecionando a experincia de instalao pode ser til deixar
o banco de dados no seu estado de deploy parcial, para que seja possvel solucionar esses erros. Isso
pode ser til se voc tiver muitas atividades nos scripts de pre e post deployment.
H um efeito colateral da comparao de schema realziada pela deployment engine: voc pode
reexecutar a instalao e trazer o banco de dados para o estado desejado. Isso particularmente
verdade se sua sequncia de instalao no estiver correta.
Ns podemos controlar quando a instalao abortada caso ocorra um erro quando definimos
elementos CustomAction que executam o VsDbCmd.
5.

No Solution Explorer, v at o projeto Install e abra o arquivo Database2.wxi localizado


na pasta Components\Databases. Examine as seguintes linhas:

<CustomAction Id="CmdLineRunDatabase2"
BinaryKey="WixCA"
DllEntry="CAQuietExec"
Execute="deferred"
Return="ignore"
TerminalServerAware="yes"/>

O atributo Return informa o Windows Installer para executar a linha de comando e ignorar qualquer
resposta. Vamos alter-lo para check.
<CustomAction Id="CmdLineRunDatabase2"
BinaryKey="WixCA"
DllEntry="CAQuietExec"
Execute="deferred"
Return="check"
TerminalServerAware="yes"/>

6.

Pressione F6 para realizar o build do projeto Install novamente.

7.

No Painel de Controle, clique em Programas e Recursos. Selecione


WiXDBProSample v1.0 e escolha Desinstalar.

8.

Abra o SQL Management Studio e exclua os bancos de dados Sales e Customers. Para
excluir os bancos de dados conecte na instncia local do SQL Server, clique com o boto
direito nos bancos citados e selecione Drop database.

9.

Execute o WiXDBProInstall_x64 a partir da linha de comando e voc ir perceber este erro.


(Figura 78)

Copyright 2009 Microsoft Corporation

Page 125

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

Figura 78 Instalao abortada do projeto de instalao do WiX

10. Ns intencionalmente alteramos o arquivo Database2.wxi para que voc pudesse ver um
efeito importante. Se voc abrir o arquivo WixDBProInstall_x64.install.log voc ver o
seguinte:
CAQuietExec: TSD00566 Deployment script generated to:
CAQuietExec: C:\Program Files\WiXDBProSample\Databases\Sales\Sales.sql
CAQuietExec:
CAQuietExec: SQL01268 C:\Program Files\WiXDBProSample\Databases\Sales\Sales.sql (39,0)

Creating Sales...

CAQuietExec: SQL01268 C:\Program Files\WiXDBProSample\Databases\Sales\Sales.sql (172,0) Creating ....


CAQuietExec: SQL01268 C:\Program Files\WiXDBProSample\Databases\Sales\Sales.sql (185,0) Creating ....
CAQuietExec: SQL01268 C:\Program Files\WiXDBProSample\Databases\Sales\Sales.sql (196,0) Creating ....
CAQuietExec: *** SQL01268
C:\Program Files\WiXDBProSample\Databases\Sales\Sales.sql (200,0) .Net
SqlClient Data Provider: Msg 4504, Level 16, State 1, Procedure Customers, Line 3 Could not create view
'Customers' because CLR type 'CustomerAddressType' does not exist in the target database 'Sales'.
CAQuietExec: SQL01268 C:\Program Files\WiXDBProSample\Databases\Sales\Sales.sql (200,0) An error occurred
while the batch was being executed.
CAQuietExec: Error 0x80070001: Command line returned an error.
CAQuietExec: Error 0x80070001: CAQuietExec Failed

O que aconteceu que mesmo com o VsDbCmd retornando um erro e a instalao tendo falhado, o
banco de dados e uma srie de objetos foram criados.
Vamos fazer com que a instalao funcione corretamente.
Para resolver o erro CustomerAddressType acima ns precisamos adicionar uma referncia ao projeto
CLR.
11. No projeto Sales, clique com o boto direito na pasta references no Solution Explorer and
selecione Add Reference. O dilogo Add Reference ser exibido. (Figura 79)

Copyright 2009 Microsoft Corporation

Page 126

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

Figura 79 Dilogo Add Reference


12. Selecione o projeto CustomersCLR e clique em OK.
13. Crie uma definio para o CustomersAddressType no projeto Sales.
a.

No Solution Explorer, v at o projeto Sales. (Figure 80)

Figure 80 O projeto de banco de dados Sales


b.
c.
d.
e.

Clique com o boto direito na pasta User Defined Types CLR e selecione New Item.
Selecione o template User Defined Type (CLR).
Para o nome do arquivo digite CustomerAddress e clique em Add.
Aps o novo arquivo ser aberto, substitua o texto com o seguinte script:

CREATE TYPE [dbo].[CustomerAddressType]


EXTERNAL NAME [CustomersCLR].[CustomerAddressType]

14. Precisamos incluir o arquivo CustomersCLR.dll na instalao definindo-o no arquivo


Database2.wxi file.
a.
b.

No Solution Explorer, v at o projeto Install e abra o arquivo Database2.wxi que est


localizado na pasta Components\Databases.
Procure pela linha que definie Customers.dbschema

<File Id="Customers.dbschema" Name="Customers.dbschema" Source="$


(var.Sales.TargetDir)Customers.dbschema" />

c.

Insira a linha a seguir aps essa definio. Preste ateno no valor do Id para que no
colida com a definio em Database1.wxi.

Copyright 2009 Microsoft Corporation

Page 127

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


<File Id="Sales.CustomersCLR.dll" Name="CustomersCLR.dll" Source="$
(var.Sales.TargetDir)CustomersCLR.dll" />

15. Ns tambm precisamos resolver o problema no projeto CustomerServer.


a.

No exerccio anterior vimos o erro a seguir durante o deployment:


CAQuietExec: *** SQL01268
C:\Program Files\WiXDBProSample\Databases\Customers
Server Settings\CustomersServer.sql
(47,0)
.Net SqlClient Data Provider: Msg 14262,
Level 16, State 1, Procedure sp_verify_category_identifiers, Line 50 The specified
@category_name ('Sales') does not exist.

Precisamos corrigir um erro no nosso script de post deployment.


16. Em CustomersServer sob Scripts\PostDeployment abra o arquivo em
ShippingDatePost.sql.
a.

Encontre as linhas abaixo:


/****** Object: JobCategory [[Uncategorized (Local)]]]

Script Date: 09/28/2009 15:00:27 ******/

IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'Customers' AND


category_class=1)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL',
@name=N'Customers'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

b.

Altere N'Customers' para N'Sales'.

Este script tambm ir falhar caso o banco de dados Sales no exista, de forma que devemos
rearranjar a sequncia de execuo.
17. No Solution Explorer, v at o projeto Install e abra o arquivo Sequences.wxi lozalizado
na pasta raiz.
a.

necessrio rearranjar os atributos After para que fiquem conforme abaixo:


<Custom Action="CmdLineSetDatabase1" After="StartServices">!Database1=2 And
&amp;Database1=3 And ?Database1=2 And $Database1=3</Custom>
<Custom Action="CmdLineRunDatabase1" After="CmdLineSetDatabase1">!Database1=2 And
&amp;Database1=3 And ?Database1=2 And $Database1=3</Custom>
<Custom Action="CmdLineSetDatabase2" After=" CmdLineRunDatabase1">!Database2=2 And
&amp;Database2=3 And ?Database2=2 And $Database2=3</Custom>
<Custom Action="CmdLineRunDatabase2" After="CmdLineSetDatabase2">!Database2=2 And
&amp;Database2=3 And ?Database2=2 And $Database2=3</Custom>
<Custom Action="CmdLineSetDatabaseServer1" After=" CmdLineRunDatabase2">!Databases=2
And &amp;Databases=3</Custom>
<Custom Action="CmdLineRunDatabaseServer1" After="CmdLineSetDatabaseServer1">!
Databases=2 And &amp;Databases=3</Custom>

18. No Solution Explorer, clique com o boto direito no projeto Install e selecione Build.
19. Agora ns podemos executar o instalador novamente a partir da linha de comando:

Copyright 2009 Microsoft Corporation

Page 128

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


Msiexec.exe /I WiXDBProInstall_X64.msi /l*v WixDBProInstall_x64.install.log

Figura 81 Sada da linha de comando do instalador iniciado


Aps o instalador ter sido executado, voc deve visualizar a sada mostrada na Figura 81. Agora,
quando voc abre o arquivo de log, no deve haver falhas.

Copyright 2009 Microsoft Corporation

Page 129

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


Concluso
Neste laboratrio ns exploramos o deployment de bancos de dados atravs de uma experincia com
o Windows Installer baseado no WiX. Definimos um produto com suas funcionalidades e diretrios,
empacotamos a sada dos projetos de banco de dados e construmos a sequncia de instalao.
Finalmente, percorremos alguns cenrios de falha para demonstrar algumas noes de
troubleshooting e armadilhas comuns neste processo.
Embora tenhamos obtido um processo de instalao bem sucedido, podemos melhor-lo tratando as
armadilhas que econtramos. Isto seria um aumento considervel do escopo deste laboratrio, portanto
no iremos gui-lo nesse passo-a-passo. Abaixo esto os assuntos mais importantes e algumas ideias
de como enderear cada rea.
O problema mais complicado certamente o rollback. Neste laboratrio ns demonstramos um
cenrio onde estamos realizando o deployment de mltiplos bancos de dados. Isso pode ser comum
para aplicaes de uma grande empresa que constituem um ecossistema conectado. Temos algumas
ferramentas a nossa disposio mas no h uma nica abordagem que resolvem todos os problemas.
Faa backup do banco de dados antes do deployment. Esta a estratgia mais confivel, porm
vem acompanhada de uma reduo de performance. Voc ppode habilitar este comportamento nas
opes Deployment configuration do projeto, selecionando Back up database before
deployment. (Figura 82)

Figura 82 Opo para criar um backup antes do deployment


Para implementar essa estratgia siga os passos a seguir:
1

Habilite a opo de Backup.

Escreva um script .sql que restaure o backup.

Execute esse script .sql em uma CustomAction que esteja condicionada a execuo do
rollback.

Se voc pode tolerar o tempo necessrio durante a instalao, esta a opo mais direta e eficiente.
Se voc no puder esperar pelo tempo de backup e restore, h uma abordagem que lhe d controle
granular.
Separe o deployment do schema do deployment dos dados. A ideia aplicar todas as
alteraes de schema utilizando o VsDbCmd e ento criar um nico script que aplica qualquer
alterao aos dados.
Para implementar essa estratgia siga os seguintes passos:
1. Execute uma CustomAction que importa o schema do banco de dados alvo. Isto preserva o
estado atual do banco de dados e nos permite reaplic-lo caso algo d errado.
2.

Escreva um script .sql que move os dados para uma banco de dados temporrio ou para um
arquivo.

3.

Execute o script .sql em uma CustomAction que esteja condicionada para executar durante a
instalao.

4.

Faa o deploy dos seus bancos de dados.

Copyright 2009 Microsoft Corporation

Page 130

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


5.

Escreva um script .sql que aplica as alteraes de dados. Certifique-se de que sejam
transacionais.

6.

Execute o script .sql em uma CustomAction condicionada a execuo da instalao.

7.

Escreva uma CustomAction que executa o deploy do schema que preservamos no passo 1.
Condicione sua execuo ao rollback da instalao.

8.

Escreva um script .sql que restaura os dados preservados no passo 2.

9.

Execute o script em uma CustomAction. Condicione sua execuo ao rollback da instalao.

Se voc decidir utilizar essa abordagem, considere criar um Setup.exe no qual voc tenha controle
completo do cdigo de interface. Fazendo isso voc ir simplificar os instaladores e poder tratar
lgicas complexas e converso de texto que o WiX no trata.

Copyright 2009 Microsoft Corporation

Page 131

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

O Cenrio de Integrao com o Team Build


Resumo
O Team build com o Team Foundation Server prov uma forma fcil e automatizada para compilar,
fazer o build, executar testes automatizados, fazer release de arquivos em um local pr-definido (build
drop) e fornecer informaes sobre a qualidade da informao do build publicando informaes em
relatrios atravs de um data warehouse. Com estes processos automatizados, problemas de
interoperabilidade podem ser encontrados antecipadamente no ciclo de vida da aplicao. Como os
projetos de banco de dados do Visual Studio podem ser includos em Team Builds, eles provm uma
excelente forma de garantir builds estveis e com qualidade conhecida.
Objetivos do Cenrio

Criar definies de build


Enfileirar builds a partir de uma definio de build
Investigar problemas encontrados durante a execuo do build e verifique o progresso do
builds enfileirados

Local dos arquivos iniciais:

C:\DatabaseProjectGuidance\HOL\Database Project Build and


Deployment Automation Management

Durao estimada:

20 minutos

Passo 1: Crie uma definio de build


Para utilizar o Team Build em nosso projeto de banco de dados precisamos criar uma definio de build
e armazen-la no Team Foundation Server. O passo ir criar uma definio de build pronta para ser
enfileirada no processo do Team Build.

Durao estimada:

10 minutos

1.

No menu principal, clique em View e ento em Team Explorer.

2.

Expanda o Team Project HOL_DatabaseProjects. (Figura 83)

Copyright 2009 Microsoft Corporation

Page 132

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

Figura 83 Viso do projeto no Team Explorer


3.

Selecione o n Builds.

4.

Clique com o boto direito e selecione New Build definition. (Figura 84)

Figura 84 Criando uma nova definio de build

5.

Digite o nome AdventureWorksExample para a nova definio de build e opcionalmente digite


uma descrio. Procure identificar com clareza o build para que seja fcil para os demais
membros do time diferenci-lo sem precisar inspecionar os detalhes.

Copyright 2009 Microsoft Corporation

Page 133

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

NOTA
Nota: Se o erro a seguir for exibido, o controlador no foi configurado. Para configurar o service de
build veja Configurando uma Mquina de Build5

Figura 85 Dilogo alertando sobre a ausncia de um controlador de build

5 http://msdn.microsoft.com/en-us/library/ms181712.aspx
Copyright 2009 Microsoft Corporation

Page 134

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


6.

Para completer a definio de build, todos os passos no menu da esquerda (como mostrada na
figura abaixo) devem ser preenchidos. Contudo, os passos obrigatrios esto identificados com o
tringulo

. (Figura 86)

Figura 86 Informaes obrigatrias da definio de build destacadas por um tringulo


amarelo
7.

Clique em Trigger. A tela a seguir aparece. O disparador (trigger) do build indica como o build
ser iniciado. No Team Foundation Server existem 5 formas:

Manual O build precisa ser manualmente iniciado.

Continuous Integration O build ser iniciado cada vez que ocorrer um check-in.

Rolling builds Os builds aps a ocorrncia de um check-in e aps o tempo


transcorrido.

Gated Check-in O build s ser gravado de fato no controle de cdigo-fonte aps o


trmino do build, caso ele seja bem sucedido, inclusive em relao aos testes
associados.

Scheduled O build iniciado em data/hora especfica. Esta a opo na qual


possvel agendar um build mesmo que nenhum check-in tenha ocorrido.

Selecione a trigger Continuous Integration para indicar que o build deve ser feito a cada
check-in. (Figura 87)

Copyright 2009 Microsoft Corporation

Page 135

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

Figura 87 Opo para disparar um build


8.

Clique no item Workspace. O workspace o mapeamento entre a pasta no controle de verso


no Team Foundation Server e o diretrio onde os arquivos sero extrados na mquina de build.

9.

Voc no precisa alterar nada nesta tela. Contudo, para intergrao continua, a pasta do
controle de verso selecionada corresponde estrutura sob a qual ao ocorrer um check-in ser
disparado um build.

Figura 88 Mapeamento do Workspace para o build

Copyright 2009 Microsoft Corporation

Page 136

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

10. Clique no item Build defaults. A tela Build Defaults onde so detalhados o controlador
(mquina onde o build ser executado) e o local onde os artefatos do build sero copiados ao
final do processo.

11. Selecione um controlador de build a partir da lista. O controlador de build comumente referido
como mquina de build.

NOTA
Se voc estiver usando sua prpria mquina virtual voc precisa selecionar o seu prprio
controlador.

12. Digite o local \\localhost\drops no campo output location. Este o local onde os artefatos de
build sero copiados aps o processo de build ser finalizado. Este local precisa ser
obrigatoriamente um compartilhamento de rede (UNC).

NOTA
Se voc estiver utilizando sua prpria If you are using you own image you must have already
set up a file share to which the Team Foundation Build process has access.

13. Clique em Process. O Source Control Explorer ser exibido. A tela de seleo do template de
processo build nova no Visual Studio 2010. Ela define parmetros a serem utilizados durante o
processo de build. (Figura 89)

Copyright 2009 Microsoft Corporation

Page 137

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

Figura 89 Defina informaes sobre o processo de build

14. Clique na caixa de texto Items to build e clique em no boto


exibido. Figura 90.

. O dilogo Items to Build

Figura 90 Dilogo Items to Build

15. Clique em Add. No dilogo browse, v at o caminho


$/HOL_DatabaseProjects/BuildAndDeploy/AdventureworksDB e selecione
AdventureworksDB.sln como sendo a soluo para o build. Clique em OK para aceitar a
seleo. Voc deve ver agora o sumrio mostrado na Figura 91 .

Copyright 2009 Microsoft Corporation

Page 138

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

Figura 91 Soluo selecionada para o build


16. O Team Foundation Build descobre quais so os testes a serem executados atravs das opes
definidas na seo Automated Test. Por padro o Team Foundation Build utiliza uma mscara
para identificar quais testes devem ser executados. Conforme mostra a Figura 92 o valor da
mascara **\*test*.dll. Como no temos nenhum teste unitrio neste projeto, o build ir
ignorar esta seo.

17. Clique em Retention Policy. A poltica de reteno diz respeito a quantos builds so
preservados para projetos de mdio porte. A Figura 92 mostra os valores padro. No
necessrio alterar nada nesta tela.

Figura 92 Configurao de poltica de reteno de build

Copyright 2009 Microsoft Corporation

Page 139

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

18. Neste ponto o processo de definio de build est concludo. Aps clicar em Save no menu
principal (ou pressionar CTRL+S), a nova definio de build aparece dentro da pasta build no
Solution Explorer. (Figure 93)

Figure 93 A nova definio de build criada

Copyright 2009 Microsoft Corporation

Page 140

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


Passo 2: Enfileire um novo build a partir da definio
Agora que criamos a definio de build iremos criar uma nova instncia da definio de build, inserida
na fila de build.

Durao estimada:5 minutos

1.

No Team Explorer, clique com o boto direito na nova definio de build


AdventureWorksExample. A tela exibida conforme mostrado na Figura 94.

Figura 94 Aes relativas definio de Build


2.

Selecione Queue New Build. O dilogo Queue Build HOL_DatabaseProject exibido.


(Figura 95)

Copyright 2009 Microsoft Corporation

Page 141

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


Figura 95 Dilogo Queue Build
3.

Clique em Queue para enfileirar o build desejado. O Build Explorer exibido e na aba Queued
so listados os builds atualmente enfileirados. (Figura 96)

Figura 96 O build exibido no Build Explorer

Copyright 2009 Microsoft Corporation

Page 142

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


Passo 3: Verifique o progresso dos builds
Agora que enfileiramos o novo build iremos visualizar como verificar o build sendo executado, bem
como o histrico de builds previamente executados.

Durao estimada:

1.

5 minutos

No Build Explorer, d um duplo-clique no build (Figura 96) para ver mais detalhes sobre o build.
(Figura 97)

Figura 97 Progresso do build atualmente sendo executado


2.

Aps o build ser concludo, uma tela similar a Figura 98 aparece.

Copyright 2009 Microsoft Corporation

Page 143

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

Figura 98 Build bem sucedido na fila de build


3.

Para ver as sadas dos builds, clique em View Log - Open Drop Folder.

Figura 99 Sada do build gerada

Copyright 2009 Microsoft Corporation

Page 144

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

Build e deploy fora do team build


Resumo
Ocasionalmente, voc pode no ter uma IDE disponvel ou o Team Foundation Build para realizar o
build do projeto. Nestes casos, o comando MSBUILD far o trabalho por voc. Voc poder realizar o
build dos projetos e utilizar a sada do build para fazer o deploy do banco de dados. Esse cenrio pode
ser obtido com apenas alguns passos

Objetivos do cenrio

Aprender como realizar o build dos projetos de banco de dados com o MSBuild
Fazer o deploy utilizando VSDBCMD

Local dos arquivos iniciais:


C:\HOL\DatabaseProjectGuidance\BuildAndDeploy\AdventureworksDB
Pr-requisitos:

Para completar o passo do deployment ao final, voc precisa ter o banco de


dados Adventureworks na mquina local. Se for necessrio restaruar o banco
de dados execute o comando
C:\HOL\DatabaseProjectGuidance\HOLSetup\RestoreDatabase\StartAd
ventureWorksRestoration.cmd

NOTA
Antes de iniciar este laboratrio, importante compreender que quando um projeto compilado
atravs do Visual Studio, uma chamada feita em segundo plano para o MSBuild.
O MSBuild o motor de build responsvel por compilar cdigo baseado nas informaes contidas
nos arquivos de projeto fornecidos (.dbpro, csproj, etc). Os projetos de banco de dados do Visual
Studio no so exceo. Eles tambm so compilados atravs do MSBuild.
O MSBuild pode ser invocado a partir da linha de comando para compilar um projeto da mesma
forma que a IDE do Visual Studio faz. Adicionalmente, o MSBuild pode ser parametrizado para
suportar cenrios mais complexos de build.
Siga estes passos para compilar o Adventureworks atravs do MSBuild.
Durao estimada:

10 minutos

Copyright 2009 Microsoft Corporation

Page 145

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


Passo 1: Faa o build do projeto de banco de dados com o MSBUILD
1. Abra o Visual Studio Command prompt. Clique em Start, aponte para All Programs, aponte
para Microsoft Visual Studio 2010 point to Microsoft Visual Studio 2010 Tools e ento
clique em Visual Studio Command Prompt (2010). A janela a seguir ser exibida.

Figura 100 Visual Studio Command Prompt (2010)

NOTA
A parte importante que se voc abrir o Visual Studio command prompt ao invs do prompt de
comando padro, voc ter todas as variveis de ambiente necessrias j definidas para acessar
as aplicaes de desenvolvimento relevantes. Se voc estiver em uma mquina que no possui o
Visual Studio instalado possvel econtrar o MSBUILD.EXE na pasta do Framework .Net localizada
em C:\Windows\Microsoft.NET\[FrameworkVersion].

Copyright 2009 Microsoft Corporation

Page 146

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


Passo 2: Faa o deploy do banco de dados com o VSDBCMD

1.

Faa o build do projeto executando o comando a seguir:

MSBuild
C:\HOL\DatabaseProjectGuidance\BuildAndDeploy\AdventureworksDBAdventur
eworksDB.dbproj
O MSBuild ser executado, compilando o projeto de banco de dados e enviando a sada
(.dbschema e arquivos de propriedades) para o diretrio de sada padro.
2.

Execute uma comparao de Schema utilizando o VSDBCMD e cria o script com o delta.

3.

V at o caminho do VSDBCMD.exe execute o comando a seguir:

VSDBCMD.exe /a:Deploy /cs:"Data Source=.;Integrated


Security=True;Pooling=False" /dsp:Sql
/model:"C:\HOL\DatabaseProjectGuidance\BuildAndDeploy\
AdventureworksDB\sql\debug\AdventureworksDB.dbschema"
/p:TargetDatabase=AdventureWorks2008
/p:SqlCommandVariablesFile="C:\hol\DatabaseProjectGuid
ance\BuildAndDeploy\AdventureworksDB\sql\debug\Adventu
reworksDB_Database.sqlcmdvars"
/manifest:"C:\hol\DatabaseProjectGuidance\BuildAndDepl
oy\AdventureworksDB\sql\debug\AdventureworksDB.deploym
anifest"
/script:"C:\hol\DatabaseProjectGuidance\BuildAndDeploy
\AdventureworksDB\AdventureworksDB_Database_Delta.sql"
\AdventureWorks.sql
O script com o delta resultante ser gerado na pasta
C:\hol\DatabaseProjectGuidance\BuildAndDeploy\AdventureworksDB\AdventureworksDB_Database
_Delta.sql" \AdventureWorks.sql.
4.

Faa o deploy do script delta executando o comando a seguir:

sqlcmd i
C:\hol\DatabaseProjectGuidance\BuildAndDeploy\AdventureworksDB\Adventure
worksDB_Database_Delta.sql
Isso executa o deploy do script delta no banco de dados de destino.

NOTA
O deployment tambm pode ser feito utilizando o parmetro /dd+ no VSDBCMD. Isso ir
automaticamente realizar a comparao de schema e executar o deploy das mudanas no banco
de dados utilizado para comparao. As opes adicionais tambm podem ser investigadas na
seo Cenrio Encontrando Alteraes de Modelo.

Copyright 2009 Microsoft Corporation

Page 147

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

Testes de Banco de Dados e Verificao de Deployment


O Cenrio Bsico de Criao de Testes Unitrios
Resumo
O fluxo de trabalho coberto neste documento simula a execuo de tarefas tpicas de um
desenvolvedor tentando validar sua aplicao de banco de dados. Como todos os laboratrios neste
guia, utilizaremos o banco de dados Adventureworks.

Objetivos do Cenrio

Familiarizar desenvolvedores com as capacidades dos Testes Unitrios


o Customizando condies de teste
o Adicionando testes adicionais
o Executando Testes Unitrios

Local dos arquivos iniciais:


C:\HOL\DatabaseProjectGuidance\VerificationAndTesting\UnitTesting\BasicUnitTesting

Local dos arquivos finais:


C:\HOL\DatabaseProjectGuidance\VerificationAndTesting\UnitTesting\BasicUnitTesting_Answ
er
Durao Estimada:

5 minutos

Passo 1: Crie um teste unitrio a partir de um modelo

Para criar um projeto de teste simples, iremos extender o projeto AdventureworksDB.


Este projeto j est presente no nosso diretrio do HOL.
a.

Inicie o Visual Studio 2010.

b.

No menu principal, clique em File e ento clique em Open project. V at o


projeto localizado em C:\HOL\DatabaseProjectGuidance\Verification and
Testing\UnitTesting\BasicUnitTesting e abra o arquivo em
AdventureWorksDB.sln.

A nica forma na qual testes unitrios de banco de dados podem ser adicionados
atravs do Schema view. O Schema view pode ser acessado de duas formas. A mais
comum atravs do cone schema view

Copyright 2009 Microsoft Corporation

Page 148

localizado na barra de ferramentas do

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


Solution Explorer. (Figura 101)

Figura 101 Boto Schema view no Solution Explorer


Uma outra maneira de acessar o Schema view atravs do menu View, atravs do
menu principal:
View, Database Schema View (Figura 102)

Figura 102 Acessando o Database Schema View atravs do menu principal do


Visual Studio

A janela schema view do banco de dados ser exibida. (Figura 103)

Copyright 2009 Microsoft Corporation

Page 149

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


Figura 103 Janela Database Schema View exibindo os objetos inclusos.

Expanda o n Schemas, dbo, Programmability e ento clique com o boto direito


na pasta Stored Procedures no Schema view. O seguinte menu de contexto
exibidoconforme a Figura 104.

Figura 104 Menu de contexto no Schema view

Selecione o item Create Unit Tests. O dilogo Create Unit Tests ser exibido.
(Figura 105)

Testes unitrios podem ser inseridos em um projeto de testes existente. Como no


temos nenhum projeto de testes na nossa soluo neste momento, iremos criar um
novo projeto e novas classes de teste unitrio. Digite as informaes a seguir:

Project: selecione a opo new Visual C# test project.

New project name: Digite AdventureWorksDatabaseTests

Current Selection: Selecione apenas o item


dbo.uspGetEmployeeManagers.

Aps concluir os passos acima o dilogo deve estar conforme a Figura 105.

Figura 105 Dilogo Create Unit Tests com as informaes necessrias


preenchidas

Copyright 2009 Microsoft Corporation

Page 150

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

NOTA
Para este laboratrio ns iremos testar uma stored procedure. Contudo, a partir desta
interface voc pode adicionar outras funes de banco de dados que deseja testar.

Clique em OK. O dilogo de configuraes de testes unitrios do projeto exibido.

Neste tela voc ir definir as configuraes para os testes de banco de dados. Para
este laboratrio as configuraes a seguir devem ser selecionadas:

Execute Unit Tests Using the following data connection: Selecione a


conexo AdventureWorks2008.

Automatically Deploy the database project before unit tests are


run: Marque esta opo.

Database Project: Selecione o projeto AdventureWorksExample.dbproj

Deployment Configuration: Selecione o item Debug

Aps completar a configurao o dilogo deve estar como na imagem a seguir:

Figura 106 Configuraes de teste unitrio de banco de dados preenchidas

Copyright 2009 Microsoft Corporation

Page 151

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

Clique em OK. Isso completa a criao do projeto de testes unitrios para a SP


dbo.uspGetEmployeeManagers. O dilogo deve estar similar ao exibido na Figura
107.

Figura 107 Modelo padro de teste unitrio aberto aps a criao

Copyright 2009 Microsoft Corporation

Page 152

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


Passo 2: Adicione condies de teste para o teste unitrio
Aps a criao do projeto de testes e do teste unitrio voc pode especificar que tipo de teste ser
executado. As condies de teste padro so:

Data Checksum: Gera um checksum dos dados retornados para que possam ser comparados
cada vez que o teste unitrio executado.
Empty Resultset: Valida se o retorno de execuo est vazio.
Execution Time: A durao do teste deve ser menor do que o tempo especificado.
Expected Schema: O schema do retorno deve coincidir com o schema definido.
Inconclusive: O resultado do teste ser sempre inconclusivo.
Non Empty Resultset: O retorno de execuo no deve conter dados.
Row Count: O retorno de execuo deve conter um nmero especfico de linhas.
Scalar Value: O retorno de execuo deve ser um valor escalar especfico.

Mais informaes podem ser econtradas na documentao MSDN Using Test Conditions in Database
Unit Tests.6
Neste passo iremos adicionar uma condio de teste do tipo data checksum para garantir que o os
dados retornados no teste corresponda um conjunto de dados especfico.
1.

Anteriormente, ns abrimos um modelo de teste unitrio para stored procedure. Agora


vamos alterar o modelo e definir o valor da varivel @BusinessEntityID de 0 para 3.
(Figura 108)

Figura 108 Varivel alterada no template

2.

Nas condies de teste exibidas na janela abaixo, remova a condio Inconclusive


selecionando-a e clicando no cone
.

3.

Selecione o item Data Checksum na lista de checksums disponveis e clique no boto


. Isto ir adicionar uma condio do tipo Checksumcondition ao teste.

6 http://msdn.microsoft.com/en-us/library/aa833423(VS.80).aspx
Copyright 2009 Microsoft Corporation

Page 153

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

Figura 109 Adicionando uma condio de teste do tipo checksum

Se voc observar o valor da condio ver a mensagem The expected checksum needs to be
configured (O checksum esperado precisa ser configurado). Para configurar o checksum, selecione as
condies de teste e v para a janela Properties (dependendo da sua configurao, isso pode ser
acessado pressionando F4). Com isso a tela de propriedades ser exibida conforme Figura 110.

Figura 110 Janela de configurao de propriedades da condio de teste do


tipo checksum
4.

Na seo Configuration clique no boto


ao lado da texto Press to configure.
A janela ser exibidia conforme a Figura 111:

Figura 111 Janela de configurao da condio checksum


Copyright 2009 Microsoft Corporation

Page 154

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


5.

Na janela de configurao do checksum selecione a conexo de banco de dadose


confirme que @BusinessEntityID = 3 esteja definido no cdigo exibido.

6.

Clique em Retrieve para obter o schema resultante para o qual o checksum ser
calculado. A janela deve estar similar a Figura 112.

Figura 112 Editor de configuraes de checksum exibindo o schema


resultante

7.

Clique em OK para gerar o checksum a partir dos dados exibidos. A janela retornar
para as condies de teste. Se voc observer atentamente poder ver que o campo
Value foi atualizado com o checksum. (Figura 113)

Figura 113 Condio de teste atualizada com o novo valor de checksum


8.

Com isso fianlizamos a incluso da condio de teste. Agora voc pode executar o
teste utilizando o Test Explorer. Clique em Test, clique em Windows e ento clique
em Test view. Selecione o teste relevante clicando com o boto direito e selecione
Run selection.

Copyright 2009 Microsoft Corporation

Page 155

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

O Cenrio Avanado de Criao de Testes Unitrios


Resumo
Nesta seo iremos continuar o cenrio bsico, adicionando tcnicas avanadas de teste de forma a
auxiliar a gerao de dados de teste, habilitar testes de qualidade contra o cdigo, garantindo a
qualidade dos artefatos e sua interoperabilidade.
Objetivos do Cenrio

Suporte a mltiplos desenvolvedores utilizando diferentes configuraes


Utilizao de transaes para melhoria de performance
Utiliao de planos de gerao de dados (Data Generation Plans)
Execuo de um teste de performance

Local dos arquivos iniciais:C:\HOL\DatabaseProjectGuidance\VerificationAndTesting\UnitTesting\


AdvancedUnitTesting

Local dos arquivos finais:

C:\HOL\DatabaseProjectGuidance\VerificationAndTesting\UnitTesting\
AdvancedUnitTesting_Answer

Durao estimada:

15 minutos

Passo 1: Configure o ambiente para mltiplos desenvolvedores


O Visual Studio 2010 lhe d a habilidade de sobrescrever as configuraes padro quando os testes
so executados. Isto tipicamente utilizado em dois cenrios diferentes:

Quando h mltiplos desenvolvedores com configuraes diferentes


A mquina de build precisa executar os testes contra um banco de dados diferente.

Esta seo do laboratrio avanado lhe mostrar como preparar o ambiente para suportar difierentes
opes de configurao.
1.
2.
3.

Abra o Visual Studio 2010.


Abra a soluo do Adventure Works que utilizamos no laboratrio anterior.
Abra o arquivo app.config no projeto de teste. Dentro da configurao voc ir encontrar
uma seo <DatabaseUnitTesting>. Neste seo, adicione o atributo
AllowConfigurationOverride no element DatabaseUnitTesting com o valor definido
para true. Depois disso, o cdigo deve estar como abaixo:
<DatabaseUnitTesting AllowConfigurationOverride=true>.

NOTA
Copyright 2009 Microsoft Corporation

Page 156

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


Ao definir este valor estamos especificando que desejamos sobrescrever a configurao
da aplicao com outro arquivo.
4.

O prximo passo adicionar uma nova configurao. Adicione um novo arquivo .xml ao
projeto de testes clicando em Add new Item e ento clique em Select XML file.
Nomeie o arquivo como TFSBuild.dbunittest.config.

5.

Abra o arquivo .xml e copie o contedo do arquivo app.config para este novo arquivo.

6.

Altere a string de conexo para que o catlogo inicial em <ExecutionContext> e


<PrivilegedContext> sejam AdventureWorksBuildTests conforme o exemplo a seguir:
<ExecutionContext Provider="System.Data.SqlClient" ConnectionString="Data Source=.;Initial
Catalog=AdventureWorksBuildTests;Integrated Security=True;Pooling=False"
CommandTimeout="30" />
<PrivilegedContext Provider="System.Data.SqlClient" ConnectionString="Data Source=.;Initial
Catalog=AdventureWorksBuildTests;Integrated Security=True;Pooling=False"
CommandTimeout="30" />

7.

Abaixo da Soluo, na pasta Solution Item voc ir encontrar um arquivo chamado


local.testsettings. D um duplo-clique no arquivo para abrir a janela Test Settings. De
forma alternative, v at o item de menu Test, clique em Edit Test Settings e ento
clique em Local (local.testsettings).

8.

Selecione a opo Deployment, selecione Enable deployment e adicione o arquivo de


configurao que voc criou no passo 4. Para adicionar o arquivo de configurao, clique
em Add File e v at o arquivo TFSBuild.dbunittest.config. (Figura 114)

Copyright 2009 Microsoft Corporation

Page 157

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

Figura 114 Alterando as configuraes de deployment


Quando os testes unitrios so executados no servidor de build, o agente de build seleciona o
arquivo de configurao baseado na opo AllowConfigurationOverride e ento utiliza o nome
da mquina ou ou nome da conta de execuo para carregar o arquivo apropriado.
Passo 2: Deployment do banco de dados de teste

1.

No Solution Explorer, clique com o boto direito no projeto de banco de dados e selecione
Properties.

2.

Altere a opo Deploy action para Create a deployment script (.sql) and deploy to
the database.

3.

Na aba Deploy, clique em Edit, prximo ao campo Target connection para especificar
uma conexo SQLConnection vlida para o deployment. Digite um ponto final (.) para o
nome do servidor e ento clique em OK para fechar o dilogo de conexo.

4.

Na aba Deploy, digite AdventureWorksExample para o nome do banco de dados a ser


criado no deployment.

Copyright 2009 Microsoft Corporation

Page 158

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


5.

Clique com o boto direito na soluo e selecione Deploy para realizar o deployment do
banco de dados especificado. Voc ver o progresso do deployment na janela Output do
Visual Studio.

6.

Confirme que o banco de dados foi criado abrindo o Server Explorer e navegando at a
conexo AdventureWorksExample. Confirme que os artefatos (tabelas, stored procedures,
etc.) foram criados conforme definido no projeto original do banco de dados
AdventureWorks.

Copyright 2009 Microsoft Corporation

Page 159

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


Passo 3: Gerando dados de teste

1.

Ao testar unitariamente um banco de dados importante garantir que o banco de dados


est em um estado consistente antes e depois da execuo dos testes. Este passo ir
mostrar como criar um plano de gerao de dados bsico que popula o banco de dados
com dados consistentes a cada execuo deployment.

2.

Comece clicando com o boto direito no projeto de banco de dados no Solution Explorer,
selecione Add e ento clique em Data Generation Plan.(Figura 115)

Figura 115 Adicionando um plano de gerao de dados atravs do menu de contexto


do projeto
3.

No dilogo Add New Item, selecione Data Generation Plan a partir da lista de
templates. D o nome ao plano de EmployeeData.dgen. (Figura 116)

Copyright 2009 Microsoft Corporation

Page 160

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

Figura 116 Adicionando um novo plano de gerao de dados


4.

Clique em Add. Aps o plano ter sido carregado, clique com o boto direito na lista de
tabelas e selecione Exclude All Tables from Data Generation e ento selecione
somente a tabela HumanResources.Employee. Note que as tabelas dependentes
Person.Contact, Person.BusinessEntity, Person.Person tambm so marcadas para
gerao.

5.

Clique com o boto direito na tabela HumanResources.Employee e selecione Preview


Data Generation. A janela Data Generation Preview ser exibida mostrando os dados que
sero gerados utilizando este plano.

6.

Execute o plano atravs do menu do Visual Studio, clicando em Data, Data Generator e
ento em Generate Data. Selecione AdventureWorksExample a partir da lista de
bancos de dados no dilogo Connect to Database e clique em OK. Se voc quiser excluir
qualquer dado existente, clique em Yes ao ser solicitado.

7.

Aps a execuo do plano de gerao de dados voc ir notar que diversas tabelas tero
indicadores verdes denotando que a execuo do plano foi bem sucedida para estar
tabelas. Perceba que duas tabelas esto marcadas com um x vermelho. So elas
HumanResources.Employee e Person.Person. O indicador verde so referents as
tabelas que tiveram qualquer dado excludo. Essas tabelas possuem chaves estrangeiras
nas tabelas HumanResources.Employee ou Person.Person. O erro resultante diz
respeito incompatibilidade entre os dados gerados e as colunas nas tabelas.

8.

Feche a janela Data Generation Population e retorne ao plano de gerao de dados.


Selecione a tabela Person.Person e na janela de seleo de colunas limpe o contedo
das colunas AdditionalContactInfo e Demographics. Isso ir interromper a gerao de
dados para estas colunas.

Copyright 2009 Microsoft Corporation

Page 161

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


9.

Selecione a tabela HumanResources.Employee. A gerao dos dados para diversas


colunas ir falhar para esta tabela devido ao fato de que os dados no esto em
conformidade com as constraints de algumas colunas. Ns iremos ignorar a maioria
destas colunas e corrigir os dados para uma delas.

10. Limpe a seleo das colunas SalariedFlag, VacationHours, SickLeaveHours e


CurrentFlag.
11. Selecione a coluna BirthDate e abra a janela Properties pressionando F4. Na janela
Properties, defina o campo Max value para 12/31/1990 e Min field para 1/1/1930.
12. Selecione MaritalStatus e altere o gerador (Generator) nas colunas para serem Regular
Expression. Na expresso digite o valor M|S que far com sejam gerados somente os
valores M ou S.

Figura 117 Na janela Properties altere o valor da expresso para gerar somente
M ou S
13. Selecione a coluna Gender e altere o item na coluna Generator para Regular Expression.
Informe M|F para o valor da expresso, de forma que sejam gerados somente os valores
Mou F.
14. Selecione a coluna HireDate. Na janela Properties, altere Max value para 12/30/2009
12:00:00 AM e Min value para 7/1/1996 12:00:00 AM.
15. Selecione a tabela Person.Person. A gerao dos dados para diversas colunas ir falhar
para esta tabela devido ao fato de que os dados no esto em conformidade com as
constraints de algumas colunas. Ns iremos ignorar a maioria destas colunas e corrigir os
dados para uma delas.
16. Selecione a coluna PersonType e altere o gerador da coluna para Regular Expression.
Para a expresso digite o valor GC|SP|EM|IN|VC|SC que restringir a gerao dos valores
ao conjunto GC, SP, EM, IN, VC ou SC.
17. Execute o plano de gerao de dados clicando no menu Data do Visual Studio. Selecione a
opo Data Generator e ento clique em Generate Data. Escolha o banco de dados
AdventureWorksExample na lista de bancos de dados no dilogo Connect to
Database e clique em OK. Caso queira excluir qualquer dado pr-exisitente clique em
Yes ao ser solicitado.
Copyright 2009 Microsoft Corporation

Page 162

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

Copyright 2009 Microsoft Corporation

Page 163

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


Passo 4: Testes de Performance Simples
Agora que geramos dados para o banco de dados, iremos executar alguns testes de performance.
1.

Abra o teste unitrio que voc criou no cenrio anterior e d um duplo-clique no arquivo
DatabaseUnitTest1.cs no projeto de teste.

2.

Para adicionar um tempo mximo de execuo para o teste, sob Test Conditions,
selecione Execution Time e clique no cone com o sinal de + verde.
Note que o valor estipula que o teste deve ser executado no tempo mximo de 00:00:30.

3.

Na janela Properties, digite o valor 00:00:00.500. Isso indica que o teste somente ser
considerado bem sucedido se for executado em no mximo meio segundo. Ao adicionar
esse tipo de condio aos testes possvel monitorar de forma contnua a performance de
execuo. Ao associar a execuo destes testes a gerao de dados possvel simular
bancos de dados de diversos tamanhos e avaliar a performance sob estas condies.

4.

Agora voc pode executar o teste utilizando o Test Explorer. V at o novo teste abrindo
a janela Test view. Para abrir esta janela, clique no menu Test, clique em Windows e
ento clique em Test view. Selecione o teste desejado clicando com o boto direito e
selecione a opo Run selection.

Copyright 2009 Microsoft Corporation

Page 164

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

Cenrio Encontrando Alteraes de Modelo


Resumo
Aps o banco de dados ter sido publicado em produo ocorrem situaes especficas quando o ciclo
de desenvolvimento quebrado. Pode haver casos em que seja necessrio alterar diretamente o
schema do banco de dados de produo, como procedures, ndices, etc., no intuito de aplicar
correes emergenciais para um bug severo descoberto durante o ciclo de desenvolvimento. Embora
estes casos devam ser excees, a realidade nos mostra que isso ocorre a todo tempo e, pior ainda, as
correes no so propagadas adequadamente para o desenvolvimento, testes futuros, controle de
cdigo-fonte e novas funcionalidades. Este tipo de situao traz diversos problemas a qualquer ciclo
de desenvolvimento aps a alterao. Pense nas situaes a seguir que so muito comuns se voc lida
com clientes que no possuem um ciclo de desenvolvimento com processos claros e bem definidos:

Aps o deployment da verso 1 do banco de dados, o administrador de banco de


dados percebeu que as queries esto sendo executadas com muita lentido, causando
gargalos de memria, IO e ciclos de CPU. Ele investigou os planos das queries e
descobriu que falta um ndice para uma tabela em particular, forando o SQL Server a
realizar operaes custosas de table scan. Para resolver o problema o nosso eficiente
DBA criou um ndice na tabela para satisfazer as queries lentas, tornando os processos
de consulta mais rpidos. Infelizmente ele no informou os desenvolvedores sobre a
adio deste ndice, tampouco fez o check-in de suas alteraes no Team Foundation
Server. Com o desenvolvimento da verso 2 do banco de dados o VSDBCMD reconhece
que o ndice no faz parte do arquivo .dbschema utilizado no deployment, removendo
o ndice desnecessrio que causa a falta de sincronia para a tabela especfica.
Obviamente isso far com que o problema de lentido do incio dessa histria volte a
ocorrer. Pense na mesma situao ocorrendo para uma stored procedure que causa
deadlocks no banco de dados, ou em outros problemas severos sendo corrigidos
temporariamente pelo DBA e que sero continuamente desfeitos a cada publicao de
nova verso do banco de dados.

Em alguns casos o processo de deployment do banco de dados no inclui o uso do


comando VSDBCMD diretamente antes do deployment porque os DBAs tem medo de
execut-lo contra um banco de dados rodando em produo. Neste caso voc constri
o script de deployment em outra mquina, leva-o para a mquina de produo e ento
executa o script. Neste caso voc assume que o schema esperado exatamente o
mesmo publicado na verso 1 (ou na ltima verso publicada). Contudo, o arquivo
.dbschema foi construdo e testado partindo da premissa de que o schema em
produo o mesmo publicado no ltimo deployment. Considerando as alteraes
feitas diretamente em produo, das quais o time de desenvolvimento no tem
notcia, o atual script de deployment poder falhar.

Esta lista de cenrios interminvel e sempre h situaes de altssimo estresse no time, onde o nico
objetivo a ser alcanado concluir as tarefas e corrigir os bugs. No muito difcil perder o controle
das mudanas feitas durante esse perodo.
Em grandes projetos, o time de Build responsvel por prover os bits para o procedimento de
deployment. Eles criam os artefatos relevantes a partir dos projetos e os coletam do BuildDrop (local
onde o resultado do build copiado) para entregar aos DBAs. O time de build no se envolve com o
Copyright 2009 Microsoft Corporation

Page 165

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


deployment do banco de dados em produo e raramente os DBAs se importam com o que acontece
em desenvolvimento, controle de cdigo-fonte e testes.

Figura 118 Ilustrao do caminho comum dos arquivos para deployment


A situao sempre a mesma. Voc j realizou o deployment da verso 1 do banco de dados e agora
quer atualizar o banco de dados para a verso 2 (upgrade). Ns iremos apresentar abordagens
diferentes para encontrar desvios de modelo, bem como quando utilizar cada uma delas. Voc ir
notar que estas abordagens tratam diferentes nveis de parania e at de confiana entre as pessoas e
a deployment engine. A escolha final uma questo de experincia e depende de diversos fatores
como o determinismo das mudanas, como as pessoas conduzem o ciclo de vida do banco de dados, o
quo severo a auditoria dos processos de mudana e deployment, etc. H ainda fatores como o
tamanho do banco de dados, disponibilidade de backups, tempos de restaurao e janelas de
manuteno, que influenciam nas decises sobre como reagir no caso de um erro de deployment e no
tempo necessrio para se reestabelecer o estado anterior do banco de dados.
Confiana bom, controle melhor. Embora voc possa perguntar ao DBA se algo mudou desde o
ltimo deployment da verso 1 do banco de dados, voc deveria verificar novamente para ter certeza
de que nada ficou de fora, mesmo as mudanas menores que podem no ser relevantes para o DBA,
mas que para voc podem causar grandes problemas. Adicionalmente, o DBA pode ter confiana nos
produtos, mas no deseja que o desenvolvedor execute o VSDBCMD no banco de dados de produo.
Consequentemente, ele ir extrair o atual schema de produo e enviar para os desenvolvedores para
que eles possam comparar ao schema que ficou registrado na ltima verso, imediatamente antes do
deployment da verso 1. Co isso, podemos ter certeza de que nenhum comportamento inesperado
ocorra.

Copyright 2009 Microsoft Corporation

Page 166

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

Copyright 2009 Microsoft Corporation

Page 167

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

RECOMENDAO
Descobrir desvios de modelo antes da execuo do deployment pode ser sua garantia contra
estes problemas durante o deployment. Sugerimos que sempre sejam executados
procedimentos de verificao em busca de desvios de modelo antes da execuo de um
deployment em produo.
Para um ciclo de desenvolvimento de banco de dados perfeito, seria timo se fosse possvel
congelar o schema em produo de forma que pudssemos nos apoiar sob um schema estvel
em execuo. Caso isso no seja possvel em virtude de mudanas inesperadas para correo
de problemas, no mnimo precisamos garantir a comparao dos schemas ANTES da execuo
de qualquer deployment.
Se voc puder organizar esta tarefa, interessante at realizar comparaes regulares,
independentes de deployment, com o intuito de verificar se no h alteraes em produo que
precisam ser portadas para o desenvolvimento.

Copyright 2009 Microsoft Corporation

Page 168

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


Objetivos Gerais do Cenrio

Familiarizao com o comando VSDBCMD e suas capacidades para:


o Encontrar diferenas nos modelos
o Encontrar diferenas entre modelo versus banco de dados
o Realizar o deploy da soluo utilizando o VSDBCMD

Durao estimada:

10 minutos

Cenrio 1: Garanta que voc testou seu banco de dados com a verso correta de produo
SEM ter acesso ao ambiente de produo (Verso confivel do DBA)
1.

Extraia o schema atual do banco de dados de produo


Administradores de banco de dados muitas vezes tratam os bancos de dados como se
fossem seus filhos. O resultado disso que eles no querem que ningum do time de
build ou desenvolvimento os toquem. Alm disso, h casos onde o banco de dados
contm informao sensvel e o acesso restrito a um pequeno gurpo de pessoas. Isso
coloca o desenvolvedor na situao onde necessrio instruir o DBA sobre como
procurar por desvios de modelo. O comando no passo c o comando que voc
deve enviar ao DBA para que ele possa execut-lo e lhe devolver o arquivo .dbschema
resultante, facilitando o processo de busca por desvios de modelo.

a.

Abra o prompt de comando do Visual Studio. Clique em Start, aponte para All
Programs, aponte para Microsoft Visual Studio 2010, aponte para Microsoft
Visual Studio 2010 Tools e clique em Visual Studio Command Prompt
(2010).

b. Localize a pasta C:\HOL\DatabaseProjectGuidance\Verification and


Testing\ModelDrift\Scenario1
c.

Extraia o schema de banco de dados utilizando o comando VSDBCMD a seguir:


vsdbcmd /action:Import /dsp:sql
/modelfile:.\TheVersionExtractedBeforeDeployment.dbschema /cs:"Data
Source=.;Initial Catalog=AdventureWorksDB;Integrated Security=True"

Isso ir extrair o schema e gerar um arquivo de modelo na pasta atual.

2.

Compare o schema versionado com o schema extrado do modelo atual de produo.


a.

Agora iremos comparar o modelo de banco de dados extrado de produo com o


modelo do nosso sistema de controle de cdigo-fonte. Este modelo pode tanto ser
o modelo do momento em que publicamos a verso 1, sob o qual continuamos o
desenvolvimento para a verso 2 ou qualquer branch para hotfixes que

Copyright 2009 Microsoft Corporation

Page 169

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


corresponda ao sistema atualmente em produo, caso os hotfixes tenham sido
propagados para o ciclo de desenvolvimento.
vsdbcmd /action:Deploy /dsp:sql
/modelfile:.\V1SchemaOfTheDatabase_WeBuildOurDevelopmentAndTestingOn.dbsc
hema /DeploymentScriptFile:.\V1_Model_Drift_DeployScript.sql
/p:TargetDatabase=AdventureWorks2008
/Targetmodel:.\TheVersionExtractedBeforeDeployment.dbschema
Voc ir notar que utilizamos o parmetro /DeploymentScriptFile na chamada
da linha de comando. Isso ir instruir o deployment para no aplicar as alteraes,
apenas criando o arquivo com o script necessrio para sincronizar o arquivo
especificado como TargetModelFile com o arquivo especificado como SourceModel.
Se nenhuma mudana foi realizada aps a verso 1, seja em em produo ou em
desenvolvimento, podemos ter certeza de que realizamos testes com uma verso
estvel.
b.

Abra o arquivo V1_Model_Drift_DeployScript.sql no diretrio atual.

c.

Enquanto rola pelo arquivo .sql, voc ver que nenhuma mudana feita ao banco
dados. De fato, o nico contedo do arquivo diz respeito a checagem do ambiente
alvo do deployment e preparao do script atravs da definio de algumas
variveis. A parte do script que faz as alteraes, geralmente vem logo aps o
comando USE DATABASENAME, est vazia. Assim podemos ter certeza de que
nenhuma mudana foi feita no tempo transcorrido entre o ltimo deployment.
/*
Deployment script for AdventureWorks2008
*/
GO
SET ANSI_NULLS, ANSI_PADDING, ANSI_WARNINGS, ARITHABORT,
CONCAT_NULL_YIELDS_NULL, QUOTED_IDENTIFIER ON;
SET NUMERIC_ROUNDABORT OFF;
GO
:setvar DatabaseName "AdventureWorks2008"
:setvar DefaultDataPath ""
:setvar DefaultLogPath ""
GO
USE [master]
GO
:on error exit
GO
IF (DB_ID(N'$(DatabaseName)') IS NOT NULL
AND DATABASEPROPERTYEX(N'$(DatabaseName)','Status') <> N'ONLINE')
BEGIN
RAISERROR(N'The state of the target database, %s, is not set to ONLINE. To
deploy to this database, its state must be set to ONLINE.', 16, 127,N'$
(DatabaseName)') WITH NOWAIT
RETURN
END
GO
IF NOT EXISTS (SELECT 1 FROM [master].[dbo].[sysdatabases] WHERE [name] = N'$
(DatabaseName)')

Copyright 2009 Microsoft Corporation

Page 170

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


BEGIN
RAISERROR(N'You cannot deploy this update script to target . The database
for which this script was built, AdventureWorks2008, does not exist on this
server.', 16, 127) WITH NOWAIT
RETURN
END
GO
IF (@@servername != '')
BEGIN
RAISERROR(N'The server name in the build script %s does not match the name
of the target server %s. Verify whether your database project settings are
correct and whether your build script is up to date.', 16,
127,N'',@@servername) WITH NOWAIT
RETURN
END
GO
IF CAST(DATABASEPROPERTY(N'$(DatabaseName)','IsReadOnly') as bit) = 1
BEGIN
RAISERROR(N'You cannot deploy this update script because the database for
which it was built, %s , is set to READ_ONLY.', 16, 127, N'$(DatabaseName)')
WITH NOWAIT
RETURN
END
GO
USE [$(DatabaseName)]
GO

NOVA FUNCIONALIDADE
O VSDBCMD introduziu a nova opo de comparao entre modelos no Visual Studio 2010 para
tornar mais fcil realizar uma comparao offline dos schemas referentes a qualquer
conexo de banco de dados.

Copyright 2009 Microsoft Corporation

Page 171

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


Cenrio 2: Certifique-se de que voc testou a aplicao de banco de dados com a verso
obtida, COM acesso ao banco de dados (Verso confivel do desenvolvedor)
Desta vez iremos comparar diretamente o modelo da nossa verso 1 arquivada com a verso
atualmente em produo. Ns no iremos criar o modelo primeiro para depois fazer uma comparao
modelo versus modelo, uma vez que isso requer que o DBA tenha alguma f nos desenvolvedores e
que estes, por sua vez, utilizem as opes corretas do VSDBCMD para apenas criar o script de
upgrade, ao invs de aplic-lo ao banco de dados de destino.
1.

Compare o schema de banco de dados versionado com o schema atual do banco de dados
de produo.
a.

Abra o prompt de comando do Visual Studio. Clique em Start, aponte para All
Programs, aponte para Microsoft Visual Studio 2010, aponte para Microsoft
Visual Studio 2010 Tools e clique em Visual Studio Command Prompt
(2010).

b. V para a pasta C:\HOL\DatabaseProjectGuidance\Verification and


Testing\ModelDrift\Scenario2
c.

Agora iremos comparar o modelo de banco de dados extrado de produo com o


modelo do nosso sistema de controle de cdigo-fonte. Este modelo pode tanto ser
o modelo do momento em que publicamos a verso 1, sob o qual continuamos o
desenvolvimento para a verso 2 ou qualquer branch para hotfixes que
corresponda ao sistema atualmente em produo, caso os hotfixes tenham sido
propagados para o ciclo de desenvolvimento.
vsdbcmd /action:Deploy /dsp:sql
/modelfile:.\V1SchemaOfTheDatabase_WeBuildOurDevelopmentAndTestingOn.dbsc
hema /DeploymentScriptFile:.\v1_model_Drift_DeployScript.sql
/p:TargetDatabase=AdventureWorks2008 /cs:"Data Source=.;Integrated
Security=True"

d.

Abra o arquivo V1_Model_Drift_DeployScript.sql no diretrio atual.

e.

Enquanto rola pelo arquivo .sql, voc ver que nenhuma mudana feita ao banco
dados. De fato, o nico contedo do arquivo diz respeito a checagem do ambiente
alvo do deployment e preparao do script atravs da definio de algumas
variveis. A parte do script que faz as alteraes, geralmente vem logo aps o
comando USE DATABASENAME, est vazia. Assim podemos ter certeza de que
nenhuma mudana foi feita no tempo transcorrido entre o ltimo deployment

NOTA

Esta estratgia no serve apenas como uma forma de encontrar desvios de modelo, mas
tambm como ferramenta para aplicar as mudanas no banco de dados atravs de scripts.
Muitas pessoas preferem criar um script baseado nas mudanas do schema, inspecion-lo
manualmente e aplic-lo atravs do SQL Server Management Studio. Imagine que o modelo
referenciado em /modelfile seja o modelo que deve ser publicado e que o banco de dados em
ConnectionString seja o banco de dados de destino que ser atualizado. Para um

Copyright 2009 Microsoft Corporation

Page 172

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios


deployment que inclua somente alteraes simples de schema esta tcnica pode funcionar.
Caso voc tenha pre/post scripts voc precisa fazer referncia ao arquivo de manifesto a ser
utilizado no deployment atravs do parmeto /ManifestFile.

Copyright 2009 Microsoft Corporation

Page 173

Documentao: Projetos de Banco de Dados no Visual Studio 2010 Laboratrios

Referncias
Documentao Tcnica de Design
A documentao tcnica de design e arquitetura est disponvel atravs de
solicitao.
Vdeos
Uma srie de videos de introduo tcnica e de preparao para
tecnolologias esto disponveis.

Links Gerais
Visual Studio ALM Rangers Site
http://msdn.microsoft.com/en-us/teamsystem/ee358786.aspx
Team System Widgets
http://www.teamsystemwidgets.com
Videos for Team System
http://msdn.microsoft.com/en-ca/vsts2008/bb507749.aspx?wt.slv=topsectionsee

Copyright 2011 por Microsoft Corporation. Todos os direitos reservados.


Traduo feita por Allmatech - www.allmatech.com.br

Copyright 2009 Microsoft Corporation

Page 174