<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">LUTI @ Microsoft</title><subtitle type="html">&lt;BR&gt;A tecnologia detalhada, descomplicada e bem empregada&lt;BR&gt;
==== &lt;I&gt;Docendo Discimus&lt;/I&gt; ====</subtitle><id>http://blogs.msdn.com/luti/atom.xml</id><link rel="alternate" type="text/html" href="http://blogs.msdn.com/luti/default.aspx" /><link rel="self" type="application/atom+xml" href="http://blogs.msdn.com/luti/atom.xml" /><generator uri="http://communityserver.org" version="2.1.61025.2">Community Server</generator><updated>2009-02-10T08:55:39Z</updated><entry><title>Contatos e novo domínio</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/luti/archive/2009/03/20/contatos-e-novo-dom-nio.aspx" /><id>http://blogs.msdn.com/luti/archive/2009/03/20/contatos-e-novo-dom-nio.aspx</id><published>2009-03-20T21:01:05Z</published><updated>2009-03-20T21:01:05Z</updated><content type="html">&lt;p&gt;Oi pessoal, conforme dito no post anterior, hoje é meu último dia na Microsoft. Espero que vocês tenham gostado do conteúdo que foi disponibilizado aqui e que o meu próximo blog também atenda a expectativa de vocês.&lt;/p&gt;  &lt;p&gt;Já estou com o domínio devidamente registrado, mas ainda estou criando o conteúdo que será publicado na semana que vêm. Com relação ao blog, estou decidindo qual ferramenta vou utilizar (estou analisando o WordPress e Blogger, sugestões?) e publicarei o endereço no meu site.&lt;/p&gt;  &lt;p&gt;Fica aqui meus contatos:&lt;/p&gt;  &lt;p&gt;E-mail: &lt;a href="mailto:luticm79@hotmail.com"&gt;luticm79@hotmail.com&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Skype: luticm&lt;/p&gt;  &lt;p&gt;Twiiter: luticm&lt;/p&gt;  &lt;p&gt;URL: &lt;a href="http://www.lucianomoreira.com"&gt;http://www.lucianomoreira.com&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Até o próximo post…&lt;/p&gt;  &lt;p&gt;[]s    &lt;br /&gt;Luciano Caixeta Moreira     &lt;br /&gt;&lt;a href="mailto:luciano.moreira@microsoft.com"&gt;luciano.moreira@microsoft.com&lt;/a&gt;     &lt;br /&gt;===============================================     &lt;br /&gt;This post is provided &amp;quot;AS IS&amp;quot; and confers no right     &lt;br /&gt;===============================================&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9493021" width="1" height="1"&gt;</content><author><name>LUTI - Microsoft</name><uri>http://blogs.msdn.com/members/LUTI+-+Microsoft.aspx</uri></author><category term="Pessoal" scheme="http://blogs.msdn.com/luti/archive/tags/Pessoal/default.aspx" /><category term="Carreira" scheme="http://blogs.msdn.com/luti/archive/tags/Carreira/default.aspx" /></entry><entry><title>Notícia quente! Últimos dias de atividade neste blog…</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/luti/archive/2009/03/18/not-cia-quente-ltimos-dias-de-atividade-neste-blog.aspx" /><id>http://blogs.msdn.com/luti/archive/2009/03/18/not-cia-quente-ltimos-dias-de-atividade-neste-blog.aspx</id><published>2009-03-19T01:44:45Z</published><updated>2009-03-19T01:44:45Z</updated><content type="html">&lt;p&gt;Olá queridos leitores deste blog. Esse post é mais um que chega sem aviso prévio e muda um pouco as regras do jogo…&lt;/p&gt;  &lt;p&gt;A próxima sexta-feira marca o meu último dia de trabalho na Microsoft Brasil. Depois de mais de três anos trabalhando nessa empresa fantástica, decidi que era hora de seguir algumas de minhas aspirações de carreira e partir para outras frentes de trabalho.&lt;/p&gt;  &lt;p&gt;Me desligar da Microsoft não foi uma escolha fácil, muito pelo contrário, a idéia vem me acompanhando durante alguns meses de muita reflexão e análise. A empresa sempre me ofereceu excelentes condições de trabalho, grandes desafios e bons amigos, algo difícil de se encontrar em muitas outras empresas.&lt;/p&gt;  &lt;p&gt;Se por um lado fica um grande pesar, por outro fica renovada as ambições e metas deste que vos escreve. Mudanças sempre dão aquele friozinho na barriga, mas pode ser que o resultado seja espetacular.&lt;/p&gt;  &lt;p&gt;O que esse post significa para você que está acostumado a gastar alguns minutos do seu dia comigo? Não falarei mais sobre SQL Server? Não continuarei colaborando com a comunidade? Longe disso… Trabalhar com a comunidade, blogar e, claro, brincar com o SQL Server e .NET, está no meu sangue e continuarei a fazer tudo isso, como já fazia antes de entrar na MS. O que irá mudar é meu e-mail e url do blog, mas o Luti continuará sendo o mesmo.&lt;/p&gt;  &lt;p&gt;E que diabos eu vou fazer da vida?&lt;/p&gt;  &lt;p&gt;Parte da minha agenda estará voltada para um novo projeto, onde trabalharei de perto com a computação na nuvem (o Azure está na lista, claro!) e com a outra parte do meu tempo estarei conduzindo consultorias e treinamentos, focados em SQL Server e .NET. Além disso, continuarei com as colaborações para o MSDN/TechNet, artigos em revistas, reuniões técnicas e o que mais aparecer.&lt;/p&gt;  &lt;p&gt;Se você quiser entrar em contato, fique à vontade para utilizar o e-mail: &lt;a href="mailto:luticm79@hotmail.com"&gt;luticm79@hotmail.com&lt;/a&gt;. Até sexta-feira eu publico o endereço do meu novo blog e mais informações, pois a saga continua.&lt;/p&gt;  &lt;p&gt;Espero que nosso caminhos continuem sempre se cruzando, seja através do meu próximo blog, uma eventual consultoria, treinamento ou evento.&lt;/p&gt;  &lt;p&gt;Sentirei saudades deste blog…&lt;/p&gt;  &lt;p&gt;[]s    &lt;br /&gt;Luciano Caixeta Moreira     &lt;br /&gt;&lt;a href="mailto:luciano.moreira@microsoft.com"&gt;luciano.moreira@microsoft.com&lt;/a&gt;     &lt;br /&gt;===============================================     &lt;br /&gt;This post is provided &amp;quot;AS IS&amp;quot; and confers no right     &lt;br /&gt;===============================================&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9488360" width="1" height="1"&gt;</content><author><name>LUTI - Microsoft</name><uri>http://blogs.msdn.com/members/LUTI+-+Microsoft.aspx</uri></author><category term="Pessoal" scheme="http://blogs.msdn.com/luti/archive/tags/Pessoal/default.aspx" /><category term="Carreira" scheme="http://blogs.msdn.com/luti/archive/tags/Carreira/default.aspx" /></entry><entry><title>Webcast amanhã! SQL Server x cenários de aplicação</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/luti/archive/2009/03/17/webcast-amanh-sql-server-x-cen-rios-de-aplica-o.aspx" /><id>http://blogs.msdn.com/luti/archive/2009/03/17/webcast-amanh-sql-server-x-cen-rios-de-aplica-o.aspx</id><published>2009-03-17T15:51:43Z</published><updated>2009-03-17T15:51:43Z</updated><content type="html">&lt;p&gt;Oi pessoal, amanhã eu estou de volta com mais um webcast, onde vou tentar tirar algumas dúvidas com relação ao SQL Server, suas edições e cenários de aplicação. Minha proposta é discutir como podemos usar os diversos recursos do SQL Server de acordo com tipos específicos de aplicações, minimizando o custo para você e sua empresa. &lt;/p&gt;  &lt;p&gt;Após a primeira parte teórica, vamos abrir a sessão para um painel de perguntas e respostas, onde quero ouvir de vocês dúvidas sobre como montar/planejar sua aplicação, questionamentos sobre o SQL Server e como podemos tirar o máximo do produto. &lt;/p&gt;  &lt;p&gt;Gostou da idéia? Ficou com vontade de discutir sobre o assunto?&lt;/p&gt;  &lt;p&gt;Então tire alguns minutos do seu dia e participe! &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="https://www112.livemeeting.com/cc/_XML/microsoft/join?id=S2P4BM&amp;amp;role=attend"&gt;MSDN Webcast: Saiba qual edição do SQL Server escolher para cada cenário de aplicação&lt;/a&gt;     &lt;br /&gt;URL: &lt;a title="https://www112.livemeeting.com/cc/_XML/microsoft/join?id=S2P4BM&amp;amp;role=attend" href="https://www112.livemeeting.com/cc/_XML/microsoft/join?id=S2P4BM&amp;amp;role=attend"&gt;https://www112.livemeeting.com/cc/_XML/microsoft/join?id=S2P4BM&amp;amp;role=attend&lt;/a&gt;     &lt;br /&gt;Neste Webcast, serão apresentado diversos cenários comuns de aplicações e analisado qual edição do SQL Server melhor se encaixa no seu projeto e bolso. Após a primeira parte, será aberto um painel para debate sobre o assunto em questão.     &lt;br /&gt;&lt;b&gt;Início: 18/3/2009 12:00:00 (Brasília)      &lt;br /&gt;Duração: 60 minutos&lt;/b&gt;     &lt;br /&gt;- Luciano Moreira&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;[]s     &lt;br /&gt;Luciano Caixeta Moreira     &lt;br /&gt;&lt;a href="mailto:luciano.moreira@microsoft.com"&gt;luciano.moreira@microsoft.com&lt;/a&gt;     &lt;br /&gt;===============================================     &lt;br /&gt;This post is provided &amp;quot;AS IS&amp;quot; and confers no right     &lt;br /&gt;===============================================&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9483536" width="1" height="1"&gt;</content><author><name>LUTI - Microsoft</name><uri>http://blogs.msdn.com/members/LUTI+-+Microsoft.aspx</uri></author><category term="SQL Server" scheme="http://blogs.msdn.com/luti/archive/tags/SQL+Server/default.aspx" /><category term="MSDN" scheme="http://blogs.msdn.com/luti/archive/tags/MSDN/default.aspx" /></entry><entry><title>ADO.NET Data Services V1.5 – CTP1 está próximo…</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/luti/archive/2009/03/02/ado-net-data-services-v1-5-ctp1-est-pr-ximo.aspx" /><id>http://blogs.msdn.com/luti/archive/2009/03/02/ado-net-data-services-v1-5-ctp1-est-pr-ximo.aspx</id><published>2009-03-02T22:02:15Z</published><updated>2009-03-02T22:02:15Z</updated><content type="html">&lt;p&gt;Ontem foi anunciado que o CTP1 do ADO.NET Data Services v1.5 (antes conhecido como Astoria) está a caminho! Isso é uma uma ótima notícia, pois muito se tem falado sobre soluções com arquitetura REST, onde o ADO.NET Data Services se encaixa como uma luva, expondo serviços de dados que podem ser consumidos facilmente por diversos clientes, escrito por exemplo, em WPF ou Silverlight.&lt;/p&gt;  &lt;p&gt;Também temos discutido isto recentemente dentro da Microsoft, sendo uma abordagem interessante para desenvolvimento rápido de soluções leves, onde não precisamos de todos os recursos (e alguns overheads) trazidos pelo SOAP.&lt;/p&gt;  &lt;p&gt;Para entender melhor sobre o assunto, recomendo:&lt;/p&gt;  &lt;p&gt;- Anúncio oficial: &lt;a title="http://blogs.msdn.com/astoriateam/archive/2009/03/01/announcing-ado-net-data-services-v1-5-ctp1.aspx" href="http://blogs.msdn.com/astoriateam/archive/2009/03/01/announcing-ado-net-data-services-v1-5-ctp1.aspx"&gt;http://blogs.msdn.com/astoriateam/archive/2009/03/01/announcing-ado-net-data-services-v1-5-ctp1.aspx&lt;/a&gt;     &lt;br /&gt;- Post do Otavio sobre RESTFul: &lt;a title="http://blogs.msdn.com/otavio/archive/2009/02/24/restful-or-not-restful.aspx" href="http://blogs.msdn.com/otavio/archive/2009/02/24/restful-or-not-restful.aspx"&gt;http://blogs.msdn.com/otavio/archive/2009/02/24/restful-or-not-restful.aspx&lt;/a&gt;     &lt;br /&gt;- Dev center do ADO.NET Data Services: &lt;a title="http://msdn.microsoft.com/pt-br/data/bb931106(en-us).aspx" href="http://msdn.microsoft.com/pt-br/data/bb931106(en-us).aspx"&gt;http://msdn.microsoft.com/pt-br/data/bb931106(en-us).aspx&lt;/a&gt;     &lt;br /&gt;- Webcasts:     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ADO.NET Data Services (Astoria) - &lt;a title="http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?culture=pt-BR&amp;amp;EventID=1032382239&amp;amp;CountryCode=BR" href="http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?culture=pt-BR&amp;amp;EventID=1032382239&amp;amp;CountryCode=BR"&gt;http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?culture=pt-BR&amp;amp;EventID=1032382239&amp;amp;CountryCode=BR&lt;/a&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Integrando ASP.NET Ajax com o ADO.NET Data Services - &lt;a title="https://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?culture=pt-BR&amp;amp;EventID=1032403816&amp;amp;CountryCode=BR" href="https://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?culture=pt-BR&amp;amp;EventID=1032403816&amp;amp;CountryCode=BR"&gt;https://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?culture=pt-BR&amp;amp;EventID=1032403816&amp;amp;CountryCode=BR&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Agora vamos torcer para que o CTP1 fique disponível logo!&lt;/p&gt;  &lt;p&gt;[]s    &lt;br /&gt;Luciano Caixeta Moreira     &lt;br /&gt;&lt;a href="mailto:luciano.moreira@microsoft.com"&gt;luciano.moreira@microsoft.com&lt;/a&gt;     &lt;br /&gt;===============================================     &lt;br /&gt;This post is provided &amp;quot;AS IS&amp;quot; and confers no right     &lt;br /&gt;===============================================    &lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9454958" width="1" height="1"&gt;</content><author><name>LUTI - Microsoft</name><uri>http://blogs.msdn.com/members/LUTI+-+Microsoft.aspx</uri></author><category term="MSDN" scheme="http://blogs.msdn.com/luti/archive/tags/MSDN/default.aspx" /><category term="ADO.NET Data Services" scheme="http://blogs.msdn.com/luti/archive/tags/ADO.NET+Data+Services/default.aspx" /></entry><entry><title>Configurando o BD do Development Storage – Azure SDK</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/luti/archive/2009/02/26/configurando-o-bd-do-development-storage-azure-sdk.aspx" /><id>http://blogs.msdn.com/luti/archive/2009/02/26/configurando-o-bd-do-development-storage-azure-sdk.aspx</id><published>2009-02-26T17:21:54Z</published><updated>2009-02-26T17:21:54Z</updated><content type="html">&lt;p&gt;Vamos brincar um pouco com o Azure?&lt;/p&gt;  &lt;p&gt;Depois que você instala o SDK do Azure (&lt;a title="http://www.microsoft.com/downloads/details.aspx?FamilyID=80e3eabf-0507-4560-aeb6-d31e9a70a0a6&amp;amp;displaylang=en" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=80e3eabf-0507-4560-aeb6-d31e9a70a0a6&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=80e3eabf-0507-4560-aeb6-d31e9a70a0a6&amp;amp;displaylang=en&lt;/a&gt;) pode disparar o processo do Development Storage, responsável por simular os diferentes modelos de armazenamento existentes na fundação do Azure (blobs, queues e tables). Mas se você não leu a documentação antes de disparar o processo, pode ser que você veja o seguinte erro:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/luti/WindowsLiveWriter/Azure_9C9D/DevStorage%20error.png"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="DevStorage error" border="0" alt="DevStorage error" src="http://blogs.msdn.com/blogfiles/luti/WindowsLiveWriter/Azure_9C9D/DevStorage%20error_thumb.png" width="514" height="178" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Explico: por padrão o processo do Development Storage vai tentar criar o banco de dados com a estrutura necessária para fazer os três tipos de armazenamento em uma instância nomeada do SQL Server Express, a “&lt;em&gt;localhost\SQLExpress&lt;/em&gt;”. &lt;/p&gt;  &lt;p&gt;Mas e se você não possui essa instância do SQL Server Express configurada ou quer usar uma outra instância já instalada, seja ela express ou não? A documentação oficial não nos entrega nenhum “how-to”, então resolvi fazer alguns testes e descrevo aqui o resultado.&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;strong&gt;&lt;u&gt;Alterando a configuração do Development Storage&lt;/u&gt;&lt;/strong&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Partindo do pressuposto que a instância do SQL Server (2005 ou 2008) está instalada, primeiramente vamos disparar o “Windows Azure SDK Command Prompt”.&lt;em&gt; Nota:&lt;/em&gt; para este e os próximos passos, eu estou executando-os com elevação de privilégio (run as administrator), por falta de pesquisa para definição das permissões necessárias. Sabe quais são? Deixe um comentário…&lt;/p&gt;  &lt;p&gt;Através da documentação vejo que existe o comando DSInit (Development Storage Init), que é bem sugestivo, então executo o comando “DSInit /Server: &amp;lt;instância&amp;gt;” no &lt;em&gt;command prompt &lt;/em&gt;aberto, onde “&amp;lt;instância&amp;gt;” é o nome da sua instância, ok? Aqui está o resultado:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/luti/WindowsLiveWriter/Azure_9C9D/DSInit.png"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="DSInit" border="0" alt="DSInit" src="http://blogs.msdn.com/blogfiles/luti/WindowsLiveWriter/Azure_9C9D/DSInit_thumb.png" width="637" height="419" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Nota: O DSInit é chamado automaticamente quando o Development Storage é iniciado, caso não exista um ambiente já configurado, então você não precisaria fazer esse passo manualmente (a documentação até recomenda não fazer), mas eu preferi fazer tudo passo a passo para entender melhor. :-)&lt;/p&gt;  &lt;p&gt;É visível na figura acima que o usuário responsável por executar o DSInit precisa ter acesso ao SQL Server e as permissões necessárias para criar um banco de dados. Usando o Management Studio é possível ver a estrutura criada (abaixo).&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/luti/WindowsLiveWriter/Azure_9C9D/DevStorageDB.png"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="DevStorageDB" border="0" alt="DevStorageDB" src="http://blogs.msdn.com/blogfiles/luti/WindowsLiveWriter/Azure_9C9D/DevStorageDB_thumb.png" width="353" height="305" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Uma vez criado o banco de dados DevelopmentStorageDb eu inicializei o processo do DevStorage e recebi o mesmo erro da primeira figura, indicando que não existe o banco de dados “&lt;em&gt;.\SQLExpress&lt;/em&gt;”, então ainda é preciso configurar mais alguma coisa.&lt;/p&gt;  &lt;p&gt;Navegue até o diretório &lt;em&gt;bin&lt;/em&gt; no caminho de instalação do SDK (“&lt;em&gt;C:\Program Files\Windows Azure SDK\v1.0\bin&lt;/em&gt;”, por padrão) e faça uma cópia de segurança do arquivo “&lt;em&gt;DevelopmentStorage.exe.config&lt;/em&gt;”. Depois abra o arquivo para editá-lo, configurando o servidor a ser utilizado. Nota: por restrições de segurança, talvez seja melhor copiá-lo para outro local, alterá-lo e depois substituir o arquivo original.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/luti/WindowsLiveWriter/Azure_9C9D/DevStorage%20config.png"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="DevStorage config" border="0" alt="DevStorage config" src="http://blogs.msdn.com/blogfiles/luti/WindowsLiveWriter/Azure_9C9D/DevStorage%20config_thumb.png" width="800" height="312" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Eu editei o arquivo nos dois lugares marcados em amarelo, substituindo-os pelo nome da instância utilizada. Fiz isso porque além do development storage eu também quero colocar os bancos/tabelas criadas no mesmo servidor SQL Server.&lt;/p&gt;  &lt;p&gt;Feito isso você pode disparar o processo do Development Storage e notar que ele será executando sem problema, conforme figura abaixo.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/luti/WindowsLiveWriter/Azure_9C9D/image_2.png"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/luti/WindowsLiveWriter/Azure_9C9D/image_thumb.png" width="648" height="213" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Pronto, se você chegou até aqui está com o Development Storage apontando para a instância do SQL Server que você escolheu!    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Configurando os exemplos&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Junto com o SDK do Azure também estão disponíveis uma série de exemplos para você se divertir, sendo necessário usar o “rundevstore.cmd” para fazer o build dos projetos e configurar o development storage com a estrutura das tabelas utilizadas por um dos exemplos.&lt;/p&gt;  &lt;p&gt;Quando executei o cmd diretamente, o processo estava indo bem até aparecer um problema relacionado com o acesso ao SQL Server. Dei uma olhada nos arquivos existentes e editei o arquivo “&lt;em&gt;MSBuild\Microsoft.Samples.ServiceHosting.targets&lt;/em&gt;”, adicionando o “&lt;em&gt;/Server:&amp;lt;instância&amp;gt;&lt;/em&gt;” no local marcado em amarelo (abaixo).&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/luti/WindowsLiveWriter/Azure_9C9D/SamplesConfig.png"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="SamplesConfig" border="0" alt="SamplesConfig" src="http://blogs.msdn.com/blogfiles/luti/WindowsLiveWriter/Azure_9C9D/SamplesConfig_thumb.png" width="684" height="106" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Depois disso o processo de montagem dos exemplos foi executado com sucesso.&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;Que venha toda a plataforma Azure…    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;[]s    &lt;br /&gt;Luciano Caixeta Moreira     &lt;br /&gt;&lt;a href="mailto:luciano.moreira@microsoft.com"&gt;luciano.moreira@microsoft.com&lt;/a&gt;     &lt;br /&gt;===============================================     &lt;br /&gt;This post is provided &amp;quot;AS IS&amp;quot; and confers no right     &lt;br /&gt;===============================================&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9446614" width="1" height="1"&gt;</content><author><name>LUTI - Microsoft</name><uri>http://blogs.msdn.com/members/LUTI+-+Microsoft.aspx</uri></author><category term="SQL Server" scheme="http://blogs.msdn.com/luti/archive/tags/SQL+Server/default.aspx" /><category term="Azure" scheme="http://blogs.msdn.com/luti/archive/tags/Azure/default.aspx" /></entry><entry><title>SQL Server 2008 SP1 CTP disponível</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/luti/archive/2009/02/25/sql-server-2008-sp1-ctp-dispon-vel.aspx" /><id>http://blogs.msdn.com/luti/archive/2009/02/25/sql-server-2008-sp1-ctp-dispon-vel.aspx</id><published>2009-02-25T16:20:14Z</published><updated>2009-02-25T16:20:14Z</updated><content type="html">&lt;p&gt;Oi pessoal, como foi o carnaval? Espero que todos tenham descansado e se divertido.&lt;/p&gt;  &lt;p&gt;Para essa quarta-feira de cinzas eu trago um post rápido, para aqueles que estão andando colados nas novidades. Saiu recentemente o CTP (&lt;em&gt;Community Technology Preview&lt;/em&gt;) do SQL Server 2008 &lt;strong&gt;Service Pack 1&lt;/strong&gt;. Então para aqueles que ainda trabalham com o famoso “eu somente instalo o produto XYZ depois do SP1”, esse é um forte indicativo de que você já pode se preparar para a atualização do SQL Server 2008, caso você ainda não esteja fazendo isso.&lt;/p&gt;  &lt;p&gt;Para mais informações, recomendo este post aqui: &lt;a title="http://blogs.msdn.com/sqlreleaseservices/archive/2009/02/23/sql-server-2008-service-pack-1-sp1-ctp.aspx" href="http://blogs.msdn.com/sqlreleaseservices/archive/2009/02/23/sql-server-2008-service-pack-1-sp1-ctp.aspx"&gt;http://blogs.msdn.com/sqlreleaseservices/archive/2009/02/23/sql-server-2008-service-pack-1-sp1-ctp.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Enjoy!&lt;/p&gt;  &lt;p&gt;[]s    &lt;br /&gt;Luciano Caixeta Moreira     &lt;br /&gt;&lt;a href="mailto:luciano.moreira@microsoft.com"&gt;luciano.moreira@microsoft.com&lt;/a&gt;     &lt;br /&gt;===============================================     &lt;br /&gt;This post is provided &amp;quot;AS IS&amp;quot; and confers no right     &lt;br /&gt;===============================================&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9444047" width="1" height="1"&gt;</content><author><name>LUTI - Microsoft</name><uri>http://blogs.msdn.com/members/LUTI+-+Microsoft.aspx</uri></author><category term="SQL Server" scheme="http://blogs.msdn.com/luti/archive/tags/SQL+Server/default.aspx" /></entry><entry><title>PHP 5 + SQL Server 2008 Express</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/luti/archive/2009/02/20/php-5-sql-server-2008-express.aspx" /><id>http://blogs.msdn.com/luti/archive/2009/02/20/php-5-sql-server-2008-express.aspx</id><published>2009-02-20T22:00:48Z</published><updated>2009-02-20T22:00:48Z</updated><content type="html">&lt;p&gt;Estou brincando um pouco com o PHP rodando no IIS 7, fazendo tanto acessos ao MySQL como ao SQL Server Express. Então vou aproveitar o gancho e deixar aqui algumas dicas que podem te ajudar a não perder tempo com alguns detalhes de configuração do ambiente.&lt;/p&gt;  &lt;p&gt;Depois de configurar no IIS um Handler FastCGI para trabalhar com PHP (&lt;a title="http://learn.iis.net/page.aspx/375/setting-up-fastcgi-for-php/" href="http://learn.iis.net/page.aspx/375/setting-up-fastcgi-for-php/"&gt;http://learn.iis.net/page.aspx/375/setting-up-fastcgi-for-php/&lt;/a&gt;), você deve ter feito o teste básico do &amp;lt;?php phpinfo() ?&amp;gt; e salvo o teste.php. Guarde ele…&lt;/p&gt;  &lt;p&gt;Feito algumas gracinhas com o PHP, foi hora de acessar o MySQL. Editei o PHP.ini e retirei o comentário da linha “extension=php_mysql.dll” e fui usar a função “&lt;em&gt;mysql_connect&lt;/em&gt;”, resultado: “PHP Fatal error: Call to undefined function mssql_connect() in …”. Esse erro foi tranquilo, reiniciei o serviço do IIS e alterei a configuração &lt;em&gt;extension_dir&lt;/em&gt; para “.\ext” ao invés de “.\”, pois as dlls estavam nesse diretório. Tudo funcionou corretamente e continuei brincando (nota: depois eu voltei o extension_dir para “.\” e o mysql ainda continuou funcionando, o que indica que isso não trouxe nenhum benefício).&lt;/p&gt;  &lt;p&gt;Então chegou a hora de usar o PHP para acessar o SQL Server. Como eu havia visto um php_mssql.dll no “php.ini”, fui direto lá e descomentei o bendito, mas quando fui utilizá-lo continuei recebendo o mesmo erro de função indefinida. Depois de alguns testes, deixei esse camarada de lado e baixei o &lt;em&gt;SQL Server 2005 Driver for PHP Cumulative Update – October 2008 &lt;/em&gt;(&lt;a title="http://www.microsoft.com/downloads/details.aspx?FamilyId=61BF87E0-D031-466B-B09A-6597C21A2E2A&amp;amp;displaylang=en" href="http://www.microsoft.com/downloads/details.aspx?FamilyId=61BF87E0-D031-466B-B09A-6597C21A2E2A&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=61BF87E0-D031-466B-B09A-6597C21A2E2A&amp;amp;displaylang=en&lt;/a&gt;)&lt;em&gt;.&lt;/em&gt; Importante: esse driver funciona para SQL Server 2008 também, então não precisa ficar correndo atrás de outro.&lt;/p&gt;  &lt;p&gt;Nota: nesse meio tempo, passei a usar uma função do php bem interessante, chamada &lt;em&gt;function_exists, &lt;/em&gt;que nos ajuda a descobrir se o módulo foi carregado corretamente.&lt;/p&gt;  &lt;p&gt;&lt;font size="3" face="Lucida Console"&gt;if (function_exists('&lt;em&gt;&amp;lt;nome da funcao&amp;gt;&lt;/em&gt;'))       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; echo &amp;quot;Função encontrada&amp;quot;;       &lt;br /&gt;else       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; echo &amp;quot;Aonde está você???&amp;quot;;       &lt;br /&gt;die(&amp;quot;AAAARRRRGGGHHHH&amp;quot;);&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;Fiz o extract do pacote, copiei o arquivo &lt;em&gt;php_sqlsrv.dll&lt;/em&gt; para a pasta “&lt;em&gt;ext” &lt;/em&gt;do php e configurei no arquivo php.ini esse novo módulo, adicionado “extension=php_sqlsrv.dll”. Pronto, o módulo passou a ser carregado pelo php, a verificação acima parou de reclamar e o teste.php passou a mostrar o módulo do SQL Server carregado.&lt;/p&gt;  &lt;p&gt;Quando fui abrir minha primeira conexão e executar uma consulta, recebi outra mensagem de erro! Que passou a ser “&lt;em&gt;SQLSTATE: IM002 - message: [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified&lt;/em&gt;”. O que fazer??? Depois de um pouco de pesquisa, descobri que precisamos instalar o SQL Server 2005 ODBC driver a partir do feature pack do SQL Server 2005, que pode ser conseguido aqui: &lt;a title="http://www.microsoft.com/downloads/details.aspx?FamilyID=50B97994-8453-4998-8226-FA42EC403D17&amp;amp;displaylang=en" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=50B97994-8453-4998-8226-FA42EC403D17&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=50B97994-8453-4998-8226-FA42EC403D17&amp;amp;displaylang=en&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;Feito tudo isso, eu consegui usar o PHP para fazer consultas no SQL Server Express sem a menor dificuldade, o que foi bem legal.&lt;/p&gt;  &lt;p&gt;Espero que esse post o ajude a evitar esses pequenos detalhes de configuração, permitindo-o utilizar o SQL Server com PHP. Mais importante, você pode usar a versão Express do SQL Server, que funciona muito bem para aplicações de menor porte e possui recursos avançados, como manipulação de XML, Full-Text Search, Filestream e reporting, o que o habilita a trabalhar com alguns cenários que são restringidos em diversos outros bancos de dados relacionais.&lt;/p&gt;  &lt;p&gt;Aproveitando a deixa, pergunto: Você está usando o SQL Server Express? Qual o tipo de aplicação?    &lt;br /&gt;Compartilhe aqui o seu caso para discutirmos com o pessoal.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;[]s    &lt;br /&gt;Luciano Caixeta Moreira     &lt;br /&gt;&lt;a href="mailto:luciano.moreira@microsoft.com"&gt;luciano.moreira@microsoft.com&lt;/a&gt;     &lt;br /&gt;===============================================     &lt;br /&gt;This post is provided &amp;quot;AS IS&amp;quot; and confers no right     &lt;br /&gt;===============================================&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9436428" width="1" height="1"&gt;</content><author><name>LUTI - Microsoft</name><uri>http://blogs.msdn.com/members/LUTI+-+Microsoft.aspx</uri></author><category term="SQL Server" scheme="http://blogs.msdn.com/luti/archive/tags/SQL+Server/default.aspx" /><category term="PHP" scheme="http://blogs.msdn.com/luti/archive/tags/PHP/default.aspx" /><category term="Express" scheme="http://blogs.msdn.com/luti/archive/tags/Express/default.aspx" /></entry><entry><title>Corrompendo seu banco de dados no SQL Server</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/luti/archive/2009/02/19/corrompendo-seu-banco-de-dados-no-sql-server.aspx" /><link rel="enclosure" type="application/octet-stream" length="7886" href="http://blogs.msdn.com/luti/attachment/9435316.ashx" /><id>http://blogs.msdn.com/luti/archive/2009/02/19/corrompendo-seu-banco-de-dados-no-sql-server.aspx</id><published>2009-02-20T05:23:00Z</published><updated>2009-02-20T05:23:00Z</updated><content type="html">&lt;P&gt;Hoje de manhã eu recebi uma pergunta de um amigo que queria saber como corromper um banco de dados, para fazer alguns testes. O mecanismo que ele estava utilizando não era efetivo, então eu mencionei que ele poderia usar um editor hexadecimal para fazer o trabalho, mas como não temos muitas referências em português, resolvi gastar alguns minutinhos para machucar um banco de dados. Vamos?&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;STRONG&gt;&lt;U&gt;Criando o banco de dados&lt;/U&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Execute o script abaixo para criarmos um coitado que será corrompido…&lt;/P&gt;
&lt;P&gt;&lt;FONT size=3 face="Lucida Console"&gt;USE master &lt;BR&gt;go &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=3 face="Lucida Console"&gt;-- drop database BDProblema &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=3 face="Lucida Console"&gt;CREATE DATABASE BDProblema &lt;BR&gt;go &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=3 face="Lucida Console"&gt;USE BDProblema &lt;BR&gt;go &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=3 face="Lucida Console"&gt;ALTER DATABASE BDProblema &lt;BR&gt;SET PAGE_VERIFY NONE &lt;BR&gt;go &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=3 face="Lucida Console"&gt;CREATE TABLE Dados ( &lt;BR&gt;IdDado INT IDENTITY(1,1) NOT NULL PRIMARY KEY, &lt;BR&gt;Nome VARCHAR(200) NOT NULL) &lt;BR&gt;go &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=3 face="Lucida Console"&gt;INSERT INTO Dados VALUES ('Luciano Caixeta Moreira') &lt;BR&gt;go&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;Note que eu configurei o banco de dados para não trabalhar com nenhum modelo de verificação de página, pois quero mostrar para vocês uma edição do arquivo sem recebermos nenhuma mensagem de erro.&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;STRONG&gt;&lt;U&gt;Analisando a tabela criada com DBCC PAGE&lt;/U&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Agora vamos dar uma olhada na estrutura da página. Primeiro descobrimos onde ela está e depois usando o DBCC PAGE para vermos sua estrutura.&lt;/P&gt;
&lt;P&gt;&lt;FONT size=3 face="Lucida Console"&gt;SELECT * &lt;BR&gt;FROM sys.sysindexes as s &lt;BR&gt;where s.id = OBJECT_ID('Dados') &lt;BR&gt;/* &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; First: 0x900000000100 &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Arquivo = 1 &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Página = 144 (0x90) &lt;BR&gt;*/ &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=3 face="Lucida Console"&gt;DBCC TRACEON(3604) &lt;BR&gt;DBCC PAGE (BDProblema, 1, 144, 2) &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=3 face="Lucida Console"&gt;/* &lt;BR&gt;Vamos guardar o início da página, pois é o que importa! &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=3 face="Lucida Console"&gt;Memory Dump @0x5C19C000 &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=3 face="Lucida Console"&gt;5C19C000:&amp;nbsp;&amp;nbsp; 01010400 00c00001 00000000 00000800 †.....À..........&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;5C19C010:&amp;nbsp;&amp;nbsp; 00000000 00000100 1b000000 781f8600 †............x..&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;5C19C020:&amp;nbsp;&amp;nbsp; 90000000 01000000 14000000 40000000 †............@...&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;5C19C030:&amp;nbsp;&amp;nbsp; 13000000 00000000 00000000 00000000 †................&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;5C19C040:&amp;nbsp;&amp;nbsp; 01000000 00000000 00000000 00000000 †................&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;5C19C050:&amp;nbsp;&amp;nbsp; 00000000 00000000 00000000 00000000 †................&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;5C19C060:&amp;nbsp;&amp;nbsp; 30000800 01000000 02000001 002600&lt;STRONG&gt;4c&lt;/STRONG&gt; †0............&amp;amp;.L&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;5C19C070:&amp;nbsp;&amp;nbsp; 75636961 6e6f2043 61697865 7461204d †uciano Caixeta M&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;5C19C080:&amp;nbsp;&amp;nbsp; 6f726569 72610000 21212121 21212121 †oreira..!!!!!!!!&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=3 face="Lucida Console"&gt;*/&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Agora vamos executar uma pequena alteração para identificarmos se o 0x4c em negrito é realmente o “L” do meu nome.&lt;/P&gt;
&lt;P&gt;&lt;FONT size=3 face="Lucida Console"&gt;UPDATE Dados &lt;BR&gt;SET Nome = 'Muciano Caixeta Moreira' &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=3 face="Lucida Console"&gt;DBCC TRACEON(3604) &lt;BR&gt;DBCC PAGE (BDProblema, 1, 144, 2) &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=3 face="Lucida Console"&gt;/* &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=3 face="Lucida Console"&gt;5C19C000:&amp;nbsp;&amp;nbsp; 01010400 00c00001 00000000 00000800 †.....À..........&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;5C19C010:&amp;nbsp;&amp;nbsp; 00000000 00000100 1b000000 781f8600 †............x..&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;5C19C020:&amp;nbsp;&amp;nbsp; 90000000 01000000 14000000 5b000000 †............[...&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;5C19C030:&amp;nbsp;&amp;nbsp; 02000000 00000000 00000000 00000000 †................&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;5C19C040:&amp;nbsp;&amp;nbsp; 01000000 00000000 00000000 00000000 †................&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;5C19C050:&amp;nbsp;&amp;nbsp; 00000000 00000000 00000000 00000000 †................&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;5C19C060:&amp;nbsp;&amp;nbsp; 30000800 01000000 02000001 002600&lt;STRONG&gt;4d&lt;/STRONG&gt; †0............&amp;amp;.M&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;5C19C070:&amp;nbsp;&amp;nbsp; 75636961 6e6f2043 61697865 7461204d †uciano Caixeta M&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;5C19C080:&amp;nbsp;&amp;nbsp; 6f726569 72610000 21212121 21212121 †oreira..!!!!!!!! &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=3 face="Lucida Console"&gt;*/&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Aqui vemos que o caractere na posição 0x5C19C06F alterou de 0x4c (L) para 0x4d (M). &lt;BR&gt;Como estamos na página 144, sabemos que o offset dessa página no arquivo em bytes é: 144 * 8192 = 1179648 (em hexadecimal –&amp;gt; 0x120000). Vamos para o editor hexadecimal? &lt;BR&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;U&gt;Editando o arquivo BDProblema.mdf&lt;/U&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Pare a instância do SQL Server em questão e utilizando o editor hexadecimal de sua preferência (baixei o Free Hex Editor Neo da HDD Software) abra o arquivo BDProblema.mdf.&lt;/P&gt;
&lt;P&gt;Navegue até o offset 120000 e a partir daí vá até a posição 6F e encontre o caractere 4d, alterando-o para 4c.&lt;/P&gt;
&lt;P&gt;(Antes) &lt;BR&gt;&lt;A href="http://blogs.msdn.com/blogfiles/luti/WindowsLiveWriter/CorrompendoseubancodedadosnoSQLServer_13DBF/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/luti/WindowsLiveWriter/CorrompendoseubancodedadosnoSQLServer_13DBF/image_2.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/luti/WindowsLiveWriter/CorrompendoseubancodedadosnoSQLServer_13DBF/image_thumb.png" width=743 height=124 mce_src="http://blogs.msdn.com/blogfiles/luti/WindowsLiveWriter/CorrompendoseubancodedadosnoSQLServer_13DBF/image_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;(Depois) &lt;BR&gt;&lt;A href="http://blogs.msdn.com/blogfiles/luti/WindowsLiveWriter/CorrompendoseubancodedadosnoSQLServer_13DBF/image_4.png" mce_href="http://blogs.msdn.com/blogfiles/luti/WindowsLiveWriter/CorrompendoseubancodedadosnoSQLServer_13DBF/image_4.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/luti/WindowsLiveWriter/CorrompendoseubancodedadosnoSQLServer_13DBF/image_thumb_1.png" width=744 height=100 mce_src="http://blogs.msdn.com/blogfiles/luti/WindowsLiveWriter/CorrompendoseubancodedadosnoSQLServer_13DBF/image_thumb_1.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&lt;BR&gt;Agora salve o arquivo, feche o editor, reinicie a instância do SQL Server e execute um SELECT na tabela Dados. Qual será o resultado??? O “Muciano” voltou a ser “Luciano”. Até aqui não vemos nenhum erro, pois o SQL Server não estava com nenhuma verificação específica para o banco de dados, o que está para mudar…&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;STRONG&gt;&lt;U&gt;Habilitando o page checksum e corrompendo o banco&lt;/U&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Primeiramente, execute o script abaixo:&lt;/P&gt;
&lt;P&gt;&lt;FONT size=3 face="Lucida Console"&gt;ALTER DATABASE BDProblema &lt;BR&gt;SET PAGE_VERIFY CHECKSUM &lt;BR&gt;go &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=3 face="Lucida Console"&gt;UPDATE Dados &lt;BR&gt;SET Nome = 'Muciano Caixeta Moreira' &lt;BR&gt;go &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=3 face="Lucida Console"&gt;DBCC CHECKDB() &lt;BR&gt;GO&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=3 face="Lucida Console"&gt;DBCC results for 'Dados'. &lt;BR&gt;There are 1 rows in 1 pages for object "Dados". &lt;BR&gt;CHECKDB found 0 allocation errors and 0 consistency errors in database 'BDProblema'.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;Como resultado, teremos um banco de dados com CHECKSUM habilitado e a página com seu checksum calculado, pois foi executado um update na tabela. O CHECKDB vai executar com sucesso e nenhum erro será reportado.&lt;/P&gt;
&lt;P&gt;Repita do procedimento listado no tópico “Editando o arquivo BDProblema.mdf”, onde você vai alterar o nome “Muciano” para “Luciano” através do editor hexadecimal. Reinicie o serviço do SQL Server e tente executar a consulta abaixo:&lt;/P&gt;
&lt;P&gt;&lt;FONT size=3 face="Lucida Console"&gt;SELECT * &lt;BR&gt;FROM Dados &lt;BR&gt;/* &lt;BR&gt;IdDado&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Nome &lt;BR&gt;----------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- &lt;BR&gt;Msg 824, Level 24, State 2, Line 1 &lt;BR&gt;SQL Server detected a logical consistency-based I/O error: incorrect checksum (expected: 0xd73d977b; actual: 0xd73d97fb). It occurred during a read of page (1:144) in database ID 7 at offset 0x00000000120000 in file 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\BDProblema.mdf'.&amp;nbsp; Additional messages in the SQL Server error log or system event log may provide more detail. This is a severe error condition that threatens database integrity and must be corrected immediately. Complete a full database consistency check (DBCC CHECKDB). This error can be caused by many factors; for more information, see SQL Server Books Online. &lt;BR&gt;*/ &lt;BR&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Se tentar executar um CHECKDB, vai ver algo parecido com: &lt;BR&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=3 face="Lucida Console"&gt;DBCC results for 'Dados'. &lt;BR&gt;Msg 8928, Level 16, State 1, Line 1 &lt;BR&gt;Object ID 2105058535, index ID 1, partition ID 72057594038779904, alloc unit ID 72057594039697408 (type In-row data): Page (1:144) could not be processed.&amp;nbsp; See other errors for details. &lt;BR&gt;Msg 8939, Level 16, State 98, Line 1 &lt;BR&gt;Table error: Object ID 2105058535, index ID 1, partition ID 72057594038779904, alloc unit ID 72057594039697408 (type In-row data), page (1:144). Test (IS_OFF (BUF_IOERR, pBUF-&amp;gt;bstat)) failed. Values are 12716041 and -4. &lt;BR&gt;There are 0 rows in 0 pages for object "Dados". &lt;BR&gt;CHECKDB found 0 allocation errors and 2 consistency errors in table 'Dados' (object ID 2105058535). &lt;BR&gt;CHECKDB found 0 allocation errors and 2 consistency errors in database 'BDProblema'. &lt;BR&gt;repair_allow_data_loss is the minimum repair level for the errors found by DBCC CHECKDB (BDProblema). &lt;BR&gt;DBCC execution completed. If DBCC printed error messages, contact your system administrator.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;Pronto! Você está com o seu banco de dados corrompido. &lt;BR&gt;Como é um problema na página de dados, não podemos fazer um rebuild de um índice (método utilizado quando um índice não-cluster está corrompido) e temos que partir para outros métodos de disaster recovery, como recuperar um backup.&lt;/P&gt;
&lt;P&gt;Espero que você tenha gostado e te ajudado a entender como pode simular falhas no seu banco de dados, para testar seu planejamento de disaster recovery, antes que seu ambiente de produção não esteja ok e você não sabia o que fazer. Além disso, claro, veja como é importante manter o checksum habilitado!&lt;/P&gt;
&lt;P&gt;Até a próxima!&lt;/P&gt;
&lt;P&gt;[]s &lt;BR&gt;Luciano Caixeta Moreira &lt;BR&gt;&lt;A href="mailto:luciano.moreira@microsoft.com" mce_href="mailto:luciano.moreira@microsoft.com"&gt;luciano.moreira@microsoft.com&lt;/A&gt; &lt;BR&gt;=============================================== &lt;BR&gt;This post is provided "AS IS" and confers no right &lt;BR&gt;===============================================&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9435316" width="1" height="1"&gt;</content><author><name>LUTI - Microsoft</name><uri>http://blogs.msdn.com/members/LUTI+-+Microsoft.aspx</uri></author><category term="SQL Server" scheme="http://blogs.msdn.com/luti/archive/tags/SQL+Server/default.aspx" /><category term="DBCC" scheme="http://blogs.msdn.com/luti/archive/tags/DBCC/default.aspx" /></entry><entry><title>Pacotes DTS + SQL Server 2008 + arquitetura de 64 bits</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/luti/archive/2009/02/18/pacotes-dts-sql-server-2008-arquitetura-de-64-bits.aspx" /><id>http://blogs.msdn.com/luti/archive/2009/02/18/pacotes-dts-sql-server-2008-arquitetura-de-64-bits.aspx</id><published>2009-02-18T19:06:33Z</published><updated>2009-02-18T19:06:33Z</updated><content type="html">&lt;p&gt;Hoje conversei com um dos nossos clientes que me perguntou se exisita alguma maneira de executar pacotes DTS no SQL Server 2008 rodando em uma plataforma de 64 bits. Em primeiro lugar, eu nem sabia se existia um problema, pois na minha cabeça bastaria pegar e executar o DTEXEC como um processo em modo 32 bits mesmo.    &lt;br /&gt;Mas para garantir que eu não estava falando besteira, pesquisei mais sobre o assunto e achei o que queria na documentação oficial do SQL Server:&lt;/p&gt;  &lt;p&gt;- BOL: &lt;a title="http://msdn.microsoft.com/en-us/library/bb500440.aspx" href="http://msdn.microsoft.com/en-us/library/bb500440.aspx"&gt;http://msdn.microsoft.com/en-us/library/bb500440.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;O BOL diz claramente que “&lt;em&gt;There is no 64-bit design-time or run-time support for DTS packages. On a 64-bit computer, DTS packages, and Integration Services packages that run DTS packages, can run only in 32-bit mode. To run DTS packages in 32-bit mode, you have to install and use the 32-bit version of the &lt;strong&gt;dtexec&lt;/strong&gt; utility (dtexec.exe). To install the 32-bit version of the &lt;strong&gt;dtexec&lt;/strong&gt; utility, select Client Tools or Business Intelligence Development Studio during setup&lt;/em&gt;”.&lt;/p&gt;  &lt;p&gt;Porém não temos muito mais informação além disso, o que acaba deixando o profissional sem maior embasamento. Como essa história de 32/64 gera muita confusão, pois quando falamos no BIDS (Business Intelligence Development Studio) ele requer o uso de providers 32-bit em design time e somente em run-time pode usar providers de 64 bits. Então achei melhor continuar procurando mais um pouco e encontrei uma thread na nossa lista interna que apontava para esse blog aqui: &lt;a title="http://dougbert.com/blogs/dougbert/archive/2008/06/10/64-bit-considerations-for-sql-server-integration-services-final.aspx" href="http://dougbert.com/blogs/dougbert/archive/2008/06/10/64-bit-considerations-for-sql-server-integration-services-final.aspx"&gt;http://dougbert.com/blogs/dougbert/archive/2008/06/10/64-bit-considerations-for-sql-server-integration-services-final.aspx&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Conteúdo excelente e leitura obrigatória para quem quer saber maiores detalhes sobre o assunto. Façam bom uso!&lt;/p&gt;  &lt;p&gt;[]s    &lt;br /&gt;Luciano Caixeta Moreira     &lt;br /&gt;&lt;a href="mailto:luciano.moreira@microsoft.com"&gt;luciano.moreira@microsoft.com&lt;/a&gt;     &lt;br /&gt;===============================================     &lt;br /&gt;This post is provided &amp;quot;AS IS&amp;quot; and confers no right     &lt;br /&gt;===============================================&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9431654" width="1" height="1"&gt;</content><author><name>LUTI - Microsoft</name><uri>http://blogs.msdn.com/members/LUTI+-+Microsoft.aspx</uri></author><category term="SQL Server" scheme="http://blogs.msdn.com/luti/archive/tags/SQL+Server/default.aspx" /><category term="SSIS" scheme="http://blogs.msdn.com/luti/archive/tags/SSIS/default.aspx" /></entry><entry><title>Também estou no twitter… Será que a moda pega?</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/luti/archive/2009/02/17/tamb-m-estou-no-twitter-ser-que-a-moda-pega.aspx" /><id>http://blogs.msdn.com/luti/archive/2009/02/17/tamb-m-estou-no-twitter-ser-que-a-moda-pega.aspx</id><published>2009-02-17T15:23:59Z</published><updated>2009-02-17T15:23:59Z</updated><content type="html">&lt;p&gt;Redes sociais estão mudando a maneira como nos relacionamos e como os negócios são conduzidos. Um dos mecanismos que mais cresce atualmente é o twitter e resolvi experimentar. Então aqui estou eu: &lt;a title="http://twitter.com/luticm" href="http://twitter.com/luticm"&gt;http://twitter.com/luticm&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;[]s    &lt;br /&gt;Luciano Caixeta Moreira     &lt;br /&gt;&lt;a href="mailto:luciano.moreira@microsoft.com"&gt;luciano.moreira@microsoft.com&lt;/a&gt;     &lt;br /&gt;===============================================     &lt;br /&gt;This post is provided &amp;quot;AS IS&amp;quot; and confers no right     &lt;br /&gt;===============================================&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9427506" width="1" height="1"&gt;</content><author><name>LUTI - Microsoft</name><uri>http://blogs.msdn.com/members/LUTI+-+Microsoft.aspx</uri></author></entry><entry><title>Unificação dos fóruns de SQL Server – MSDN/TechNet</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/luti/archive/2009/02/17/unifica-o-dos-f-runs-de-sql-server-msdn-technet.aspx" /><id>http://blogs.msdn.com/luti/archive/2009/02/17/unifica-o-dos-f-runs-de-sql-server-msdn-technet.aspx</id><published>2009-02-17T15:12:39Z</published><updated>2009-02-17T15:12:39Z</updated><content type="html">&lt;p&gt;No ano passado foi discutido a possibilidade de termos um fórum unificado de SQL Server entre o MSDN e TechNet, conforme mencionei neste post aqui: &lt;a title="http://blogs.msdn.com/luti/archive/2008/07/08/sql-server-no-msdn-e-technet.aspx" href="http://blogs.msdn.com/luti/archive/2008/07/08/sql-server-no-msdn-e-technet.aspx"&gt;http://blogs.msdn.com/luti/archive/2008/07/08/sql-server-no-msdn-e-technet.aspx&lt;/a&gt;, lembram?&lt;/p&gt;  &lt;p&gt;Pois é, aquela história se tornou verdade e hoje estamos com os fóruns de SQL Server unificados, como pode ser visto abaixo…&lt;/p&gt;  &lt;p&gt;- &lt;a title="http://social.msdn.microsoft.com/Forums/pt-BR/category/sqlserver/" href="http://social.msdn.microsoft.com/Forums/pt-BR/category/sqlserver/"&gt;http://social.&lt;strong&gt;msdn&lt;/strong&gt;.microsoft.com/Forums/pt-BR/category/sqlserver/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;- &lt;a title="http://social.technet.microsoft.com/Forums/pt-BR/category/sqlserver/" href="http://social.technet.microsoft.com/Forums/pt-BR/category/sqlserver/"&gt;http://social.&lt;strong&gt;technet&lt;/strong&gt;.microsoft.com/Forums/pt-BR/category/sqlserver/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Então se você está navegando pelo TechNet ou MSDN, terá acesso os mesmos fóruns, sem necessidade de sair do seu portal preferido para poder usufruir de boas discussões.&lt;/p&gt;  &lt;p&gt;Além de criarmos o espelhamento, também tentamos dividir melhor os temas, assim as pessoas poderão postar a dúvida no fórum correto ao invés de ficar colocando o mesmo post em N fóruns, o que só atrapalha os moderadores e a comunidade. Nos próximos dias vocês ainda verão algumas alterãções, como a criação de dois novos fóruns, um voltado para o SSIS e outro para recursos de alta disponibilidade.&lt;/p&gt;  &lt;p&gt;Com essas mudanças eu espero que os fóruns continuem sendo um ponto importante de acesso e pesquisa para todos da comunidade, e não somente para aqueles que estão iniciando na tecnologia, mas também para os profissionais mais experientes. &lt;/p&gt;  &lt;p&gt;Eu quero ouvir vocês! Gostaram da nova versão do fórum? O que poderia melhorar?&lt;/p&gt;  &lt;p&gt;Já assinei os RSSs dos fóruns e estou esperando as threads quentes! Quem venham excelentes discussões…    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;[]s    &lt;br /&gt;Luciano Caixeta Moreira     &lt;br /&gt;&lt;a href="mailto:luciano.moreira@microsoft.com"&gt;luciano.moreira@microsoft.com&lt;/a&gt;     &lt;br /&gt;===============================================     &lt;br /&gt;This post is provided &amp;quot;AS IS&amp;quot; and confers no right     &lt;br /&gt;===============================================&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9427498" width="1" height="1"&gt;</content><author><name>LUTI - Microsoft</name><uri>http://blogs.msdn.com/members/LUTI+-+Microsoft.aspx</uri></author><category term="SQL Server" scheme="http://blogs.msdn.com/luti/archive/tags/SQL+Server/default.aspx" /><category term="MSDN" scheme="http://blogs.msdn.com/luti/archive/tags/MSDN/default.aspx" /><category term="TechNet" scheme="http://blogs.msdn.com/luti/archive/tags/TechNet/default.aspx" /></entry><entry><title>Dica rápida: Guia de arquitetura P&amp;P – Vídeos</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/luti/archive/2009/02/16/dica-r-pida-guia-de-arquitetura-p-p-v-deos.aspx" /><id>http://blogs.msdn.com/luti/archive/2009/02/16/dica-r-pida-guia-de-arquitetura-p-p-v-deos.aspx</id><published>2009-02-16T14:57:01Z</published><updated>2009-02-16T14:57:01Z</updated><content type="html">&lt;p&gt;Existe uma grande chance de que você tenha visto recentemente anúncios sobre o guia de arquitetura (&lt;a href="http://www.codeplex.com/AppArch"&gt;www.codeplex.com/AppArch&lt;/a&gt;) montado pelo time de Patterns and Practices. Mas normalmente o pessoal vai lá, faz o download e não olha algumas coisas interessantes que são oferecidas, como por exemplo, uma série de vídeos sobre o assunto: &lt;a title="http://www.codeplex.com/AppArch/Wiki/View.aspx?title=Video%20Index" href="http://www.codeplex.com/AppArch/Wiki/View.aspx?title=Video%20Index"&gt;http://www.codeplex.com/AppArch/Wiki/View.aspx?title=Video%20Index&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Muito bom para um fim de dia corrido, onde você quer ouvir alguma coisa rápida e interessante.&lt;/p&gt;  &lt;p&gt;Fica aqui a dica…&lt;/p&gt;  &lt;p&gt;[]s    &lt;br /&gt;Luciano Caixeta Moreira     &lt;br /&gt;&lt;a href="mailto:luciano.moreira@microsoft.com"&gt;luciano.moreira@microsoft.com&lt;/a&gt;     &lt;br /&gt;===============================================     &lt;br /&gt;This post is provided &amp;quot;AS IS&amp;quot; and confers no right     &lt;br /&gt;===============================================&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9425774" width="1" height="1"&gt;</content><author><name>LUTI - Microsoft</name><uri>http://blogs.msdn.com/members/LUTI+-+Microsoft.aspx</uri></author><category term="P&amp;amp;P" scheme="http://blogs.msdn.com/luti/archive/tags/P_2600_amp_3B00_P/default.aspx" /><category term="Arquitetura" scheme="http://blogs.msdn.com/luti/archive/tags/Arquitetura/default.aspx" /></entry><entry><title>Como identificar o usuário através de uma conexão genérica?</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/luti/archive/2009/02/12/como-identificar-o-usu-rio-atrav-s-de-uma-conex-o-gen-rica.aspx" /><id>http://blogs.msdn.com/luti/archive/2009/02/12/como-identificar-o-usu-rio-atrav-s-de-uma-conex-o-gen-rica.aspx</id><published>2009-02-12T22:44:06Z</published><updated>2009-02-12T22:44:06Z</updated><content type="html">&lt;p&gt;Uma questão que aflige muitos desenvolvedores e DBAs, é reconhecer qual o usuário está executando uma determinada operação no banco de dados, quando se utiliza uma conexão genérica com o SQL Server (integrada ou não). Você também já parou para pensar nesse problema? Como resolveu?&lt;/p&gt;  &lt;p&gt;A utilização de uma conexão genérica é muito comum em aplicações ASP.NET ou serviços do Windows que ficam recebendo chamadas e executando procedimentos específicos. O que usualmente fazemos? Configuramos a aplicação para utilizar a identidade do processo em questão para acessar o SQL Server (segurança integrada e uma boa abordagem) ou então o pessoal cria um usuário UsrAplicacao e atribui as permissões adequadas… Tá bom, eu sei que vocês têm aquela(ssssssss) aplicação que usa o SA, mas que tal evitar?&lt;/p&gt;  &lt;p&gt;Para evitar esse problema, poderíamos configurar nosso processo para personificar a identidade do usuário que acessa a aplicação, atribuindo as permissões adequadas para cada usuário (ou grupo). Até aqui tudo bem, mas o pessoal acaba não aplicando as permissões corretas ou começam a enfrentar problemas como o double-hop do kerberos ou muitos pools de conexão criados (um por usuário). E por fim, voltam a adotar uma conexão genérica.&lt;/p&gt;  &lt;p&gt;Tenho uma conexão genérica, o que eu posso fazer? Normalmente as opções são…&lt;/p&gt;  &lt;p&gt;1 – Não implementar nenhuma forma de registro (essa é fácil!)    &lt;br /&gt;2 – Utilizar a sua biblioteca de logging e, antes ou depois de cada operação no banco de dados, registrar em uma tabela de log o que foi feito e por quem.     &lt;br /&gt;3 – Se você somente utiliza procedimentos armazenados, pode colocar mais um parâmetro em todas as operações e registrar isso em uma tabela de log.&lt;/p&gt;  &lt;p&gt;Eu já implementei as três opções em diferentes sistemas que eu trabalhei (sim, as três ;-p), mas sempre encontrei alguma dor de cabeça, pois ficava muito dependente do desenvolvedor ou dava um trabalhão. Então vamos analisar mais uma alternativa que apareceu…&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;CONTEXT_INFO&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Estava preparando um webcast e passei pelo CONTEXT_INFO, de onde tirei a idéia para esse post. O interessante foi que quando pesquisei sobre o assunto, encontrei algumas pessoas que já usavam a abordagem que eu tinha em mente, mas infelizmente não acho que seja algo muito difundido. Veja como funciona e se te agrada…&lt;/p&gt;  &lt;p&gt;No SQL Server é possível configurar para uma sessão aberta a informação de contexto, contendo 128 bytes com alguma informação específica. Se você abrir uma conexão com o Management Studio e executar o seguinte script, vai receber NULL como resposta.&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Lucida Console"&gt;SELECT CONTEXT_INFO()      &lt;br /&gt;SELECT CAST(CONTEXT_INFO() AS VARCHAR)&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Isso mostra que por padrão a informação de contexto para uma sessão vem vazia. Agora, se você executar o script abaixo, o resultado será diferente.&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Lucida Console"&gt;DECLARE @binario BINARY(128)      &lt;br /&gt;SET @binario = CAST('Luciano Moreira' AS BINARY(128))       &lt;br /&gt;SET CONTEXT_INFO @binario       &lt;br /&gt;      &lt;br /&gt;SELECT CONTEXT_INFO()       &lt;br /&gt;SELECT CAST(CONTEXT_INFO() AS VARCHAR)&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Aqui veremos que o contexto da sessão atual foi alterado e está registrando o meu nome… hhhuuummmm, sacou né? O interessante é que você não consegue limpar o contexto atual através do &lt;em&gt;SET CONTEXT_INFO NULL, &lt;/em&gt;apenas consegue o definir como 0x0, o que é totalmente diferente de NULL (faça o teste e execute novamente os dois selects acima). A única maneira de ter o contexto zerado é abrindo uma nova conexão.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Uma abordagem usando CONTEXT_INFO&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Com o que você já sabe até o momento, pode começar a implementar sua solução, que consiste em definir um contexto específico após aberta a conexão com o SQL Server. &lt;/p&gt;  &lt;p&gt;Partindo do pressuposto que você configurou sua aplicação ASP.NET com autenticação Windows (&lt;em&gt;&amp;lt;authentication mode=&amp;quot;Windows&amp;quot;/&amp;gt;&lt;/em&gt;), pode utilizar o &lt;em&gt;WindowsIdentity.GetCurrent().Name&lt;/em&gt; para identificar quem é o usuário e, antes de executar o comando SQL, definir o contexto:&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Lucida Console"&gt;string comandoContexto = &amp;quot;DECLARE @binario BINARY(128); &amp;quot;;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; comandoContexto += &amp;quot;SET @binario = CAST('&amp;quot; + WindowsIdentity.GetCurrent().Name + &amp;quot;' AS BINARY(128)); &amp;quot;;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; comandoContexto += &amp;quot;SET CONTEXT_INFO @binario; &amp;quot;;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Lucida Console"&gt;SqlConnection conexao = new SqlConnection(strConexao);      &lt;br /&gt;SqlCommand comando = new SqlCommand(comandoContexto, conexao);       &lt;br /&gt;conexao.Open(); &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Lucida Console"&gt;comando.ExecuteNonQuery();      &lt;br /&gt;comando.CommandText = &amp;quot;INSERT INTO TESTE VALUES ('ZZZZZZZZZZZZ')&amp;quot;;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;comando.ExecuteNonQuery(); &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Lucida Console"&gt;conexao.Close();&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;No banco de dados, você poderia utilizar uma trigger para registrar quem está fazendo a operação:&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Lucida Console"&gt;CREATE TRIGGER trgI_Teste      &lt;br /&gt;ON Teste       &lt;br /&gt;FOR INSERT       &lt;br /&gt;AS       &lt;br /&gt;BEGIN       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; DECLARE @Usr VARCHAR(200)       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; SELECT @Usr = CAST(CONTEXT_INFO() AS VARCHAR)       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; INSERT INTO Audit VALUES ('Insert na tabela teste', @Usr)&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;END&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;É claro que essa abordagem ainda dá muito trabalho, pois você teria que colocar isso em toda chamada que fizesse, mas você pode melhorar isso. Como o seu projeto possui uma &lt;strong&gt;camada de persistência com funções auxiliares para gerenciar a conexão/comandos&lt;/strong&gt;, minha sugestão é que você coloque a definição do contexto em um único lugar, de forma transparente para o programador que já está acostumado a usar sua biblioteca. Por exemplo…&lt;/p&gt;  &lt;p&gt;Supondo que em sua empresa o padrão de trabalho seja algo do tipo…&lt;/p&gt;  &lt;p&gt;using (SqlConnection conexao = AcessoDados.NovaConexao())    &lt;br /&gt;{     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; …     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; AcessoDados.ExecutarComando(comando, conexao);     &lt;br /&gt;}&lt;/p&gt;  &lt;p&gt;Aqui você pode incluir o código que define o contexto da conexão no método &lt;em&gt;NovaConexao&lt;/em&gt;, mas temos o problema de deixá-la aberta, ou antes de executar o comando no método &lt;em&gt;ExecutarComando&lt;/em&gt;. Dessa forma, supondo que sua aplicação atual não faça nenhum controle do usuário e tenha uma biblioteca de acesso a dados, você poderia incluir de forma transparente a informação de contexto, sem gerar retrabalho de codificação.&lt;/p&gt;  &lt;p&gt;Sobre a criação de triggers, sei que isso pode gerar um impacto de desempenho se não for bem utilizada, mas &lt;strong&gt;coloca o controle de registrar as ações na mão do DBA&lt;/strong&gt;, não do desenvolvedor, que normalmente vê essa história de audit somente como um trabalho extra, que vai levar mais tempo para codificar. Já vi projetos onde o logging manual somente funciona no início do projeto e, quando o prazo aperta, ninguém se lembra disso.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Refletindo sobre a solução&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Ainda não considero essa abordagem uma solução ideal, mas uma vez o contexto definido de forma transparente (em um lugar centralizado, sem impactar centenas de linhas de código), podemos usar a informação dentro de procedimentos ou triggers, sem necessitar passarmos essa informação através de parâmetros ou outros meios. &lt;/p&gt;  &lt;p&gt;Outro ponto bacana é que, sendo um campo binário, eu posso passar qualquer coisa no contexto, seja a identidade de um usuário Windows, a identidade de uma autenticação Forms ou outra coisa qualquer, que pode me trazer uma aplicabilidade interessante no dia-a-dia.&lt;/p&gt;  &lt;p&gt;Também gosto dessa abordagem por deixar o controle de logging mais focado nas mãos dos DBAs. Em contrapartida, não vejo necessidade de criarmos triggers em todas as tabelas do banco de dados, mas sim naquelas que são mais sensíveis e precisam de um acompanhamento mais detalhado.&lt;/p&gt;  &lt;p&gt;Outro detalhe que precisamos levar em conta é o pool de conexões, já que tenho conexões que ficam abertas e são reutilizadas. Por padrão o ADO.NET executa um Connection Reset que, segundo a documentação, deixa o estado da conexão de acordo com um novo login, mas se você usar uma string de conexão com “Connection Reset = false” imagino que pode encontrar problemas. Obs: nos meus testes eu não consegui reproduzir um cenário aonde uma nova conexão vinha com o contexto preenchido (mesmo com reset = false), mas ainda acredito que eu não testei o bastante. :-)&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Change Tracking e o contexto&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Essa história toda começou quando eu estava brincando com o Change Tracking (CT) e notei que ao executar a função CHANGETABLE ela retornava uma coluna chamada SYS_CHANGE_CONTEXT, do tipo VARBINARY(128). Sugestivo? MUITO! &lt;/p&gt;  &lt;p&gt;Particularmente, eu esperava que ao registrar uma alteração na tabela de change tracking, o SQL Server automaticamente pegasse o contexto. Isso seria muito melhor do que usar triggers ou SPs, pois além de não necessitar codificá-las, o CT “injeta” os comandos que registram as alterações de forma transparente, o que me parece mais eficiente e menos problemático.&lt;/p&gt;  &lt;p&gt;PORÉM, não é assim que funciona (que droga!). A documentação mostra que precisamos executar nosso comando de INSERT, DELETE ou UPDATE com a cláusula WITH, conforme exemplo abaixo:&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Lucida Console"&gt;DECLARE @originator_id varbinary(128);      &lt;br /&gt;SET @originator_id = CAST('MyApplicationID' AS varbinary(128));       &lt;br /&gt;WITH CHANGE_TRACKING_CONTEXT (@originator_id)       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; UPDATE Employees       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; SET Salary = 50000       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; WHERE EmpID = 1&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Trabalhando dessa forma eu perco a generalização criada na minha camada de acesso a dados (que automaticamente definia o contexto), além de exigir do desenvolvedor que ele saiba quais são as tabelas com change tracking para adicionar o WITH. &lt;/p&gt;  &lt;p&gt;Minha expectativa era de habilitar o tracking do contexto automaticamente e, caso ele seja diferente de NULL, o código injetado pelo CT armazenaria o conteúdo na tabela de controle das alterações. No exemplo do BOL, falou o trecho em negrito…&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Lucida Console"&gt;ALTER DATABASE AdventureWorks      &lt;br /&gt;SET CHANGE_TRACKING = ON       &lt;br /&gt;(CHANGE_RETENTION = 2 DAYS, AUTO_CLEANUP = ON, &lt;strong&gt;TRACK_CONTEXT = ON&lt;/strong&gt;)&lt;/font&gt;&lt;/p&gt; &lt;font color="#555555"&gt;&lt;/font&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Conclusão&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Acho que o CONTEXT_INFO pode nos ajudar em diversos cenários e, mesmo com alguns ajustes e controles manuais, ainda parece uma alternativa interessante para aplicações que utilizam conexões genéricas.&lt;/p&gt;  &lt;p&gt;Ainda pretendo refinar um pouco a aplicabilidade do contexto, ver se existe alguma saída automática com o change tracking, alguns blockers e, quem sabe, até ver como isso ficaria com o LINQtoSQL e Entity Framework.&lt;/p&gt;  &lt;p&gt;Gostou? Odiou? Sabe como melhorar? Entre em contato.&lt;/p&gt;  &lt;p&gt;[]s    &lt;br /&gt;Luciano Caixeta Moreira     &lt;br /&gt;&lt;a href="mailto:luciano.moreira@microsoft.com"&gt;luciano.moreira@microsoft.com&lt;/a&gt;     &lt;br /&gt;===============================================     &lt;br /&gt;This post is provided &amp;quot;AS IS&amp;quot; and confers no right     &lt;br /&gt;===============================================&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9415577" width="1" height="1"&gt;</content><author><name>LUTI - Microsoft</name><uri>http://blogs.msdn.com/members/LUTI+-+Microsoft.aspx</uri></author><category term="SQL Server" scheme="http://blogs.msdn.com/luti/archive/tags/SQL+Server/default.aspx" /><category term="Soluções" scheme="http://blogs.msdn.com/luti/archive/tags/Solu_E700F500_es/default.aspx" /></entry><entry><title>Webcast – SQL Server Express</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/luti/archive/2009/02/10/webcast-sql-server-express.aspx" /><link rel="enclosure" type="application/x-zip-compressed" length="92772" href="http://blogs.msdn.com/luti/attachment/9411267.ashx" /><id>http://blogs.msdn.com/luti/archive/2009/02/10/webcast-sql-server-express.aspx</id><published>2009-02-10T23:27:00Z</published><updated>2009-02-10T23:27:00Z</updated><content type="html">&lt;P&gt;Amanhã teremos um webcast sobre a utilização do SQL Server Express, onde serão abordadas suas capacidades e como podemos criar soluções grátis, de maneira fácil, utilizando o distinto. Particularmente eu acho que esse é um webcast muito interessante, pois muitas pessoas não sabem que podem utilizar ferramentas da Microsoft para desenvolvimento de soluções que não precisam ser pagas.&lt;/P&gt;
&lt;P&gt;Lembro-me de um evento muito bom que participei, onde tínhamos um público misto (profissionais e estudantes), e fui questionado se havia possibilidade de se criar uma solução .NET que não fosse paga. Claro que sim! E mais do que isso, ainda existia até o mito de que você precisaria de pagar alguma coisa para distribuir uma aplicação winforms, por exemplo. Veja como são as coisas…&lt;/P&gt;
&lt;P&gt;Aqui está o link para inscrição no evento: &lt;A title=https://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032404575&amp;amp;EventCategory=4&amp;amp;culture=pt-BR&amp;amp;CountryCode=BR href="https://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032404575&amp;amp;EventCategory=4&amp;amp;culture=pt-BR&amp;amp;CountryCode=BR" mce_href="https://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032404575&amp;amp;EventCategory=4&amp;amp;culture=pt-BR&amp;amp;CountryCode=BR"&gt;https://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032404575&amp;amp;EventCategory=4&amp;amp;culture=pt-BR&amp;amp;CountryCode=BR&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Nos encontramos amanhã no webcast, mas dessa vez vou ficar como moderador, enquanto o Roberto comanda o show!&lt;/P&gt;
&lt;P&gt;[]s &lt;BR&gt;Luciano Caixeta Moreira &lt;BR&gt;&lt;A href="mailto:luciano.moreira@microsoft.com" mce_href="mailto:luciano.moreira@microsoft.com"&gt;luciano.moreira@microsoft.com&lt;/A&gt; &lt;BR&gt;=============================================== &lt;BR&gt;This post is provided "AS IS" and confers no right &lt;BR&gt;===============================================&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9411267" width="1" height="1"&gt;</content><author><name>LUTI - Microsoft</name><uri>http://blogs.msdn.com/members/LUTI+-+Microsoft.aspx</uri></author><category term="SQL Server" scheme="http://blogs.msdn.com/luti/archive/tags/SQL+Server/default.aspx" /><category term="MSDN" scheme="http://blogs.msdn.com/luti/archive/tags/MSDN/default.aspx" /></entry><entry><title>Screencast - Office Business Applications #1</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/luti/archive/2009/02/10/screencast-office-business-applications-1.aspx" /><id>http://blogs.msdn.com/luti/archive/2009/02/10/screencast-office-business-applications-1.aspx</id><published>2009-02-10T14:55:39Z</published><updated>2009-02-10T14:55:39Z</updated><content type="html">&lt;p&gt;São tantas tecnologias ao nosso redor que diversas vezes não paramos para explorar em detalhes a riqueza e o potencial de cada uma delas.    &lt;br /&gt;Recentemente eu tenho investido um pouquinho do meu tempo e olhado com carinho para OBA, Office Business Applications e gostaria de compartilhar com vocês, partindo do princípio, um pouco do que tenho visto. Pensando nisso, gravei um screencast bbeeeemmmm simples, para aqueles que nunca viram nada sobre o assunto…&lt;/p&gt;  &lt;p&gt;Aqui está o vídeo disponível no Soapbox:&lt;/p&gt;  &lt;p&gt;&lt;embed src="http://images.video.msn.com/flash/soapbox1_1.swf" width="432" height="364" id="1kffd5k1" type="application/x-shockwave-flash" allowFullScreen="true" allowScriptAccess="always" pluginspage="http://macromedia.com/go/getflashplayer" flashvars="c=v&amp;v=ca82cfe4-ac8f-4fe3-a2b2-3a4208e839c5&amp;ifs=true&amp;fr=msnvideo&amp;mkt=en-US"&gt;&lt;/embed&gt;&lt;noembed&gt;&lt;br/&gt;&lt;a href="http://video.msn.com/video.aspx?vid=ca82cfe4-ac8f-4fe3-a2b2-3a4208e839c5" target="_new" title="OBASC_001"&gt;Video: OBASC_001&lt;/a&gt;&lt;/noembed&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Se preferir, pode fazer download do vídeo disponível no meu skydrive:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://cid-e145f7753042d628.skydrive.live.com/self.aspx/Public/Screencast/ScreenCast%7C_OBA%7C_001.zip" href="http://cid-e145f7753042d628.skydrive.live.com/self.aspx/Public/Screencast/ScreenCast%7C_OBA%7C_001.zip"&gt;http://cid-e145f7753042d628.skydrive.live.com/self.aspx/Public/Screencast/ScreenCast%7C_OBA%7C_001.zip&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Simples, mas espero que você goste.&lt;/p&gt;  &lt;p&gt;Dica: se você quer ser mais eficiente, faça o download e veja o vídeo em “fast playback”. Eu sempre faço isso, gosto e já testei como ficou com o meu vídeo, que mantém uma boa qualidade.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;[]s    &lt;br /&gt;Luciano Caixeta Moreira     &lt;br /&gt;&lt;a href="mailto:luciano.moreira@microsoft.com"&gt;luciano.moreira@microsoft.com&lt;/a&gt;     &lt;br /&gt;===============================================     &lt;br /&gt;This post is provided &amp;quot;AS IS&amp;quot; and confers no right     &lt;br /&gt;===============================================&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9410398" width="1" height="1"&gt;</content><author><name>LUTI - Microsoft</name><uri>http://blogs.msdn.com/members/LUTI+-+Microsoft.aspx</uri></author><category term="Screencast" scheme="http://blogs.msdn.com/luti/archive/tags/Screencast/default.aspx" /><category term="OBA" scheme="http://blogs.msdn.com/luti/archive/tags/OBA/default.aspx" /></entry></feed>