<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Diário de um DBA</title>
	<atom:link href="http://silasmendes.com/dba/feed" rel="self" type="application/rss+xml" />
	<link>http://silasmendes.com/dba</link>
	<description>SQL Server &#38; Banco de Dados</description>
	<lastBuildDate>Wed, 25 Aug 2010 03:12:28 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>SQL Injection :)</title>
		<link>http://silasmendes.com/dba/sql-injection</link>
		<comments>http://silasmendes.com/dba/sql-injection#comments</comments>
		<pubDate>Mon, 09 Aug 2010 16:51:12 +0000</pubDate>
		<dc:creator>Silas Mendes</dc:creator>
				<category><![CDATA[Bla bla bla]]></category>
		<category><![CDATA[Vida Real]]></category>
		<category><![CDATA[drop table]]></category>
		<category><![CDATA[segurança]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[sql injection]]></category>

		<guid isPermaLink="false">http://silasmendes.com/dba/?p=625</guid>
		<description><![CDATA[Acabei de ver essa no Buzz do meu amigo e professor Rodrigo Smarzaro&#8230; muito boa! Fonte: http://xkcd.com/327/ Traduzido por: seginfo.com.br]]></description>
			<content:encoded><![CDATA[<p>Acabei de ver essa no <em>Buzz </em>do meu amigo e professor Rodrigo Smarzaro&#8230; muito boa!</p>
<p><img class="aligncenter size-full wp-image-626" title="sql injection" src="http://silasmendes.com/dba/wp-content/uploads/2010/08/exploits_of_a_mom.png" alt="" width="666" height="205" /></p>
<p>Fonte: <a href="http://xkcd.com/327/">http://xkcd.com/327/</a></p>
<p>Traduzido por: <a href="http://www.seginfo.com.br/mais-uma-otima-tirinha-exploits-de-uma-mae/" target="_blank">seginfo.com.br</a></p>
]]></content:encoded>
			<wfw:commentRss>http://silasmendes.com/dba/sql-injection/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SQL Server 2008 R2 Express Edition</title>
		<link>http://silasmendes.com/dba/sql-server-2008-r2-express-edition</link>
		<comments>http://silasmendes.com/dba/sql-server-2008-r2-express-edition#comments</comments>
		<pubDate>Thu, 15 Jul 2010 13:35:38 +0000</pubDate>
		<dc:creator>Silas Mendes</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Vida Real]]></category>
		<category><![CDATA[Instalar SQL Server 2008]]></category>
		<category><![CDATA[SQL Server 2008 Express]]></category>
		<category><![CDATA[SQL Server 2008 R2]]></category>

		<guid isPermaLink="false">http://silasmendes.com/dba/?p=590</guid>
		<description><![CDATA[A cada nova versão do SQL Server a Microsoft torna suas edições gratuitas ainda mais atrativas. Já abordei anteriormente por aqui sobre a instalação do SQL Server 2008 Express; então se você está procurando informações sobre SQL Server 2008 Express, aproveite esse texto para se atualizar sobre o segundo release (R2) do SQL Server 2008 [...]]]></description>
			<content:encoded><![CDATA[<p>A cada nova versão do SQL Server a Microsoft torna suas edições gratuitas ainda mais atrativas. Já abordei <a href="http://silasmendes.com/dba/sql-server-2008-express" target="_blank">anteriormente por aqui</a> sobre a instalação do SQL Server 2008 Express; então se você está procurando informações sobre SQL Server 2008 Express, aproveite esse texto para se atualizar sobre o segundo release (R2) do SQL Server 2008 Express Edition.</p>
<p>De cara, a principal novidade é que SQL 2008 <strong>R2</strong> Express permite gerenciar bases de dados com até 10 GB. Na última versão o limite eram 4 GB por base de dados. Uma melhoria interessante não é?</p>
<p>As limitações de CPU e memória continuam as mesmas, sendo 1 CPU e 1GB RAM. No caso da CPU lembre-se que a limitação é por chip; logo, se você tiver um chip <em>Six-Core</em> seu SQL irá utilizar os 6 núcleos deste chip.</p>
<p><a rel="http://www.microsoft.com/express/Database/InstallOptions.aspx" href="http://silasmendes.com/dba/wp-content/uploads/2010/07/logo_SQL2008R2.png" target="_blank"><img class="size-medium wp-image-591 alignright" title="logo_SQL2008R2" src="http://silasmendes.com/dba/wp-content/uploads/2010/07/logo_SQL2008R2-300x82.png" alt="" width="300" height="82" /></a>Para este release são ofertados três opções de instalação: a instalação <strong><em>SQL Server 2008 R2 Express</em></strong> instala somente a engine do SQL, ou seja, o serviço principal do SQL Server onde é possível rodar bancos de dados, criar ou alterar objetos e etc, porém sem nenhuma ferramenta gráfica. A instalação <strong><em>SQL Server 2008 R2 Express with Tools Edition</em></strong> oferece a engine e adiciona também o Management Studio que é uma ferramenta gráfica para gerenciamento das instâncias; na <strong><em>SQL Server 2008 R2 Express with Advanced Services</em></strong> além da engine e do Management Studio é oferecido também o Reporting Services para o desenvolvimento de relatórios no SQL Server. Ambas instalações estão disponíveis para as plataformas de 32 e 64 bits.</p>
<p>Os pré-requisitos continuam os mesmos: se você for instalar somente a <em>Engine</em> desta versão (sem nenhuma ferramenta gráfica), será necessário somente o Framework 2.0; se for utilizar as ferramentas gráficas o Framework 3.5 SP1 é um pré-requisito. Assim como na última versão o Windows Installer 4.5 e Windows Power Shell 1.0 são necessários para a instalação.</p>
<p>O processo de instalação continua bem similiar ao que publiquei aqui no ano passado, portanto se desejar um <a href="http://silasmendes.com/dba/sql-server-2008-express" target="_blank">passo-a-passo da instalação básica acesse este link</a>.</p>
<p>E pra finalizar segue o link de download do R2 Express: <a href="http://www.microsoft.com/express/Database/InstallOptions.aspx">http://www.microsoft.com/express/Database/InstallOptions.aspx</a></p>
<p>Até +</p>
]]></content:encoded>
			<wfw:commentRss>http://silasmendes.com/dba/sql-server-2008-r2-express-edition/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MCTS SQL Server 2008</title>
		<link>http://silasmendes.com/dba/mcts-sql-server-2008</link>
		<comments>http://silasmendes.com/dba/mcts-sql-server-2008#comments</comments>
		<pubDate>Tue, 20 Apr 2010 13:54:50 +0000</pubDate>
		<dc:creator>Silas Mendes</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Vida Real]]></category>
		<category><![CDATA[70-431]]></category>
		<category><![CDATA[70-432]]></category>
		<category><![CDATA[Brás Figueiredo]]></category>
		<category><![CDATA[Certificação]]></category>
		<category><![CDATA[MCTS]]></category>
		<category><![CDATA[Segunda Chance]]></category>
		<category><![CDATA[SQL Server 2008]]></category>

		<guid isPermaLink="false">http://silasmendes.com/dba/?p=583</guid>
		<description><![CDATA[Eu estava reagendando esta prova a mais de um mês. Toda vez que eu folheava o Training Kit me deparava com uma novidade do SQL Server 2008 que me fazia olhar e querer entender mais os detalhes, e assim eu reagendava o exame pois achava que não estava preparado. No fim de semana estabeleci que [...]]]></description>
			<content:encoded><![CDATA[<p>Eu estava reagendando esta prova a mais de um mês. Toda vez que eu folheava o Training Kit me deparava com uma novidade do SQL Server 2008 que me fazia olhar e querer entender mais os detalhes, e assim eu reagendava o exame pois achava que não estava preparado. No fim de semana estabeleci que faria a prova na segunda-feira (ontem) e que não iria adiar mais.</p>
<p>A questão é que o foco do 70-432 não são os detalhes, você precisa ter o conhecimento das novas features, entender suas principais finalidades e os pré-requisitos para implementá-las.</p>
<p><img class="alignleft size-full wp-image-584" title="button_MCTS_SQL2008_Implementation" src="http://silasmendes.com/dba/wp-content/uploads/2010/04/button_MCTS_SQL2008_Implementation.gif" alt="" width="240" height="77" /></p>
<p>O exame me surpreendeu porque eu esperava um grau maior de dificuldade&#8230; mas foi uma boa prova; o grande foco está nas novidades, mas em algumas questões você tem que utilizar soluções de versões anteriores. Ao contrário da 70-431 não teve o teste prático (que eu achava interessante) e foram quase duas horas para responder aproximadamente 40</p>
<p>questões. Comparando os dois exames, para mim o 70-432 está mais fácil.</p>
<p>Se você está preocupado com a complexidade das novas features do SQL Server 2008, eu te encorajo dizendo que este não é o exame que irá abordar detalhes. Foque na visão geral da administração e encare a prova.</p>
<p>Tenho que acrescentar também que esta foi a primeira vez que fiz uma prova na <a href="http://www.bf.com.br/" target="_blank"><span style="color: #000000;">Brás Figueiredo</span></a> e a experiência foi muito agradável: ambiente silencioso, ar-condicionado numa temperatura adequada, um bom equipamento, enfim, recomendo.</p>
<p>Depois de escrever tudo isso tenho que complementar que fui aprovado :)</p>
<p>A sensação de não utilizar a &#8220;Segunda Chance&#8221; é sempre boa (não posso negar) e eu só posso desejar o mesmo a todos vocês.</p>
<p>Bom trabalho e bom estudo!</p>
]]></content:encoded>
			<wfw:commentRss>http://silasmendes.com/dba/mcts-sql-server-2008/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Copa Microsoft 2010</title>
		<link>http://silasmendes.com/dba/copa-microsoft-2010</link>
		<comments>http://silasmendes.com/dba/copa-microsoft-2010#comments</comments>
		<pubDate>Wed, 14 Apr 2010 16:08:16 +0000</pubDate>
		<dc:creator>Silas Mendes</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[competição]]></category>
		<category><![CDATA[copa microsoft]]></category>
		<category><![CDATA[Exchange 2010]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[ranking]]></category>
		<category><![CDATA[Windows Server 2008 R2]]></category>

		<guid isPermaLink="false">http://silasmendes.com/dba/?p=573</guid>
		<description><![CDATA[Já está rolando a Copa Microsoft, uma ótima oportunidade para atualizar seu conhecimento nas novas ferramentas da Microsoft. Além da atualização o participante concorre a prêmios bem interessantes como uma LED 42’’, XBOXs, BluRay, Technet Plus e etc. Inicialmente é possível ganhar pontos indicando amigos e baixando os softwares; depois vem as provas online para [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a title="Copa Microsoft 2010" rel="http://www.talentosmicrosoft.com.br" href="http://www.talentosmicrosoft.com.br" target="_blank"><img class="aligncenter size-full wp-image-574" title="logo_COPA" src="http://silasmendes.com/dba/wp-content/uploads/2010/04/logo_COPA.png" alt="" width="299" height="178" /></a></p>
<p>Já está rolando a Copa Microsoft, uma ótima oportunidade para atualizar seu conhecimento nas novas ferramentas da Microsoft. Além da atualização o participante concorre a prêmios bem interessantes como uma LED 42’’, XBOXs, BluRay, Technet Plus e etc.</p>
<p>Inicialmente é possível ganhar pontos indicando amigos e baixando os softwares; depois vem as provas <em>online</em> para as quais você poderá se preparar assistindo aos <em>webcasts</em>&#8230; isso é só o começo, depois vem treinamentos e provas na Microsoft e a preparação de um vídeo onde o participante deverá demonstrar em 3 minutos a utilização de uma das novas tecnologias. A final é uma prova <em>surpresa</em> :D</p>
<p>Já rolaram duas provas <em>online</em>: <strong>Windows Server 2008 R2</strong> e <strong>Exchange 2010</strong>; mas pra quem tá interessado, ainda dá tempo de se inscrever e correr atrás!</p>
<p><a href="http://www.talentosmicrosoft.com.br/">http://www.talentosmicrosoft.com.br/</a></p>
<p>To lutando pra garantir meu 12º lugar&#8230; mas tá difícil, risos, a concorrência é pesada :)</p>
<p><a href="http://silasmendes.com/dba/wp-content/uploads/2010/04/ranking1.png"><img class="aligncenter size-full wp-image-580" title="Meu ranking atual na copa Microsoft" src="http://silasmendes.com/dba/wp-content/uploads/2010/04/ranking1.png" alt="" width="629" height="76" /></a></p>
<p>Bom jogo!</p>
<p><strong><span style="color: #ff0000;">UPDATE em 22/07/2010: </span></strong></p>
<p>Infelizmente não consegui ir muito longe no jogo, justamente durante a última prova da 3° etapa (que por sinal era a de SQL Server) meu Internet Explorer travou&#8230;  consegui chegar às quartas de final, mas a pontuação acumulada não foi suficiente pra avançar&#8230; a decepção foi grande, mas tudo bem.  <a href="http://www.talentosmicrosoft.com.br/Final.aspx" target="_blank">Parabéns aos ganhadores!</a> No ano que vem tem mais :)</p>
]]></content:encoded>
			<wfw:commentRss>http://silasmendes.com/dba/copa-microsoft-2010/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Resposta Desafio &#8211; CHAR X VARCHAR</title>
		<link>http://silasmendes.com/dba/resposta-desafio-char-x-varchar</link>
		<comments>http://silasmendes.com/dba/resposta-desafio-char-x-varchar#comments</comments>
		<pubDate>Tue, 16 Mar 2010 14:52:54 +0000</pubDate>
		<dc:creator>Silas Mendes</dc:creator>
				<category><![CDATA[Vida Real]]></category>
		<category><![CDATA[char]]></category>
		<category><![CDATA[right()]]></category>
		<category><![CDATA[varchar]]></category>

		<guid isPermaLink="false">http://silasmendes.com/dba/?p=549</guid>
		<description><![CDATA[Primeiro tenho que registrar que boa parte das pessoas pra quem enviei o desafio responderam corretamente. Achei interessante a interação e o clima da brincadeira; agora tá na hora de oficializar a resposta. Vamos lá: Normalmente, quando questionam a diferença entre CHAR e VARCHAR a primeira resposta é: um tem tamanho fixo, o outro tem [...]]]></description>
			<content:encoded><![CDATA[<p>Primeiro tenho que registrar que boa parte das pessoas pra quem enviei o desafio responderam corretamente. Achei interessante a interação e o clima da brincadeira; agora tá na hora de oficializar a resposta. Vamos lá:</p>
<p>Normalmente, quando questionam a diferença entre CHAR e VARCHAR a primeira resposta é: <strong>um tem tamanho fixo, o outro tem tamanho variável</strong>. Mas já que o CHAR tem tamanho fixo, o que acontece quando inserimos um dado que não ocupa todo o espaço reservado? E além disso, quando inserimos um dado num campo CHAR em qual <em>direção</em> o dado é inserido?</p>
<p>Então, ninguém melhor que o Books Online para responder:</p>
<blockquote><p>Se um valor mais curto que o comprimento da coluna for inserido em uma coluna char NOT NULL<strong>, o valor será preenchido à <span style="text-decoration: underline;">direita</span>, com espaços em branco, até atingir o tamanho da coluna</strong>. Por exemplo, se uma coluna estiver definida como char(10) e os dados a serem armazenados forem &#8220;music&#8221;, o SQL Server armazenará os dados como &#8220;music_____&#8221;, onde &#8220;_&#8221; indica um espaço em branco.</p></blockquote>
<h5 style="padding-left: 60px;"><span style="font-weight: normal;">Fonte:</span><span style="font-weight: normal;"> <a href="http://msdn.microsoft.com/pt-br/library/ms175055.aspx">http://msdn.microsoft.com/pt-br/library/ms175055.aspx</a></span></h5>
<p>Com as considerações acima, podemos resumir a consulta do desafio a isto:</p>
<pre class="brush: sql;">SELECT
RIGHT('05 ',2) as 'CHAR',
RIGHT('05' ,2) as 'VARCHAR'</pre>
<p>Como a função RIGHT está extraindo duas posições à direita (contando com o espaço em branco), o Zero (0) do CHAR é ignorado no resultado.</p>
<p>Valeu pela participação dos amigos, em especial a do amigo <strong><em><a href="http://www.blogdati.com.br/" target="_blank">Léo Lopes</a></em></strong> que contribuiu na elaboração da resposta utilizando referências do BOL :)</p>
]]></content:encoded>
			<wfw:commentRss>http://silasmendes.com/dba/resposta-desafio-char-x-varchar/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Desafio T-SQL &#8211; CHAR X VARCHAR</title>
		<link>http://silasmendes.com/dba/desafio-sql</link>
		<comments>http://silasmendes.com/dba/desafio-sql#comments</comments>
		<pubDate>Wed, 10 Mar 2010 21:47:10 +0000</pubDate>
		<dc:creator>Silas Mendes</dc:creator>
				<category><![CDATA[Bla bla bla]]></category>
		<category><![CDATA[Vida Real]]></category>
		<category><![CDATA[char]]></category>
		<category><![CDATA[desafio sql]]></category>
		<category><![CDATA[right()]]></category>
		<category><![CDATA[T-SQL]]></category>
		<category><![CDATA[varchar]]></category>

		<guid isPermaLink="false">http://silasmendes.com/dba/?p=531</guid>
		<description><![CDATA[Hoje a tarde meu amigo Adilson Pereira me mandou um desafio bem interessante, vou postar aqui exatamente do modo como ele propôs: Observem a diferença que dá no resultado de um comando usando o CHAR e o VARCHAR: declare @data datetime set @data = '20100310 05:05:05' SELECT RIGHT('0' + CONVERT(   CHAR(2), DATEPART(mi, @data)), 2) [...]]]></description>
			<content:encoded><![CDATA[<p>Hoje a tarde meu amigo <strong><em>Adilson Pereira </em></strong>me mandou um desafio bem interessante, vou postar aqui exatamente do modo como ele propôs:</p>
<p><strong>Observem a diferença que dá no resultado de um comando usando o CHAR e o VARCHAR:</strong></p>
<pre class="brush: sql;">
declare @data datetime
set @data = '20100310 05:05:05'
SELECT
RIGHT('0' + CONVERT(   CHAR(2), DATEPART(mi, @data)), 2) as 'CHAR',
RIGHT('0' + CONVERT(VARCHAR(2), DATEPART(mi, @data)), 2) as 'VARCHAR' </pre>
<p>A solução é interessante :)</p>
<p>E você? Tem um palpite do porque?</p>
]]></content:encoded>
			<wfw:commentRss>http://silasmendes.com/dba/desafio-sql/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Automatizando tarefas via script</title>
		<link>http://silasmendes.com/dba/adicionando-job-via-script</link>
		<comments>http://silasmendes.com/dba/adicionando-job-via-script#comments</comments>
		<pubDate>Tue, 02 Mar 2010 21:27:58 +0000</pubDate>
		<dc:creator>Silas Mendes</dc:creator>
				<category><![CDATA[Vida Real]]></category>
		<category><![CDATA[Backup]]></category>
		<category><![CDATA[job]]></category>
		<category><![CDATA[MSDE]]></category>
		<category><![CDATA[schedule]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[SQL Agent]]></category>
		<category><![CDATA[sysjobs]]></category>

		<guid isPermaLink="false">http://silasmendes.com/dba/?p=515</guid>
		<description><![CDATA[Na época em que o MSDE estava em alta, muitos amigos vinham pedir dicas de como criar uma rotina automática de backups e etc, o maior impasse era sempre a falta de uma interface gráfica. Ao contrário das novas versões do SQL Server Express, o MSDE possuía o serviço SQL Agent que permite agendar rotinas, [...]]]></description>
			<content:encoded><![CDATA[<p><strong><br />
</strong></p>
<p>Na época em que o MSDE estava em alta, muitos amigos vinham pedir dicas de como criar uma rotina automática de backups e etc, o maior impasse era sempre a falta de uma interface gráfica.</p>
<p>Ao contrário das novas versões do SQL Server Express, o MSDE possuía o serviço SQL Agent que permite agendar rotinas, backups, etc, e isso era ótimo, mas a barreira era saber como utilizar essa funcionalidade sem uma ferramenta.</p>
<p>Mas enfim, o foco desse texto não é o MSDE, até porque, com o tempo foram disponibilizadas algumas ferramentas para suprir algumas necessidades. A idéia principal é verificarmos como criar uma nova tarefa (job) e automatiza-la utilizando scripts no SQL Server.</p>
<p>Analisando um pouco veremos que precisamos apenas de 4 procedures para criação de um job: <strong>sp_add_job</strong>, <strong>sp_add_jobstep</strong>, <strong>sp_add_jobserver</strong> e <strong>sp_add_jobschedule</strong>. No nosso texto vamos utilizar como exemplo um cenário onde precisamos automatizar o backup da base de dados <em>Master</em>. Vamos analisar agora cada uma das procedures:</p>
<p><strong>sp_add_job</strong></p>
<p>Esta procedure adiciona um novo registro à tabela <strong>sysjobs</strong>, em linhas gerais, este registro é o nosso job, porém um job sem qualquer funcionalidade e sem agendamento. Inicialmente um job nessas condições não tem qualquer utilidade. Abaixo podemos verificar a criação de um job vazio com o título Backup MASTER:</p>
<pre class="brush: sql;">
execute sp_add_job @job_name = 'Backup MASTER'
</pre>
<p><strong>sp_add_jobstep</strong></p>
<p>Para darmos “vida” ao job criado anteriormente, precisamos adicionar funcionalidades a ele, por exemplo: um passo onde será executado o script de backup.  Para adicionar funcionalidades ao job <strong>Backup MASTER</strong> precisamos conhecer seu código gravado na <em>sysjobs</em>, para isso podemos executar o seguinte comando:</p>
<pre class="brush: sql;">
select  job_id
from  sysjobs
where name = 'Backup MASTER'
</pre>
<p>O resultado será um big código! Isso porque o código gerado é do tipo UNIQUEIDENTIFIER, popularmente conhecido como <em>Identificador Universal</em>.  O resultado da minha consulta é: <strong>7EC785F2-36D7-4BEB-B2E4-BFC38E7F4D31 </strong>(é mais prático trabalhar com conteúdos deste tipo armazenando-o numa variável, porém, neste texto iremos aborda-lo explicitamente em cada passo dos exemplos).</p>
<p>Ok. Agora vamos utilizar este big-código junto com a <strong>sp_add_jobstep</strong> para adicionarmos funcionalidade ao nosso JOB:</p>
<pre class="brush: sql;">
-- Adiciona função ao Job
execute sp_add_jobstep @job_id = '7EC785F2-36D7-4BEB-B2E4-BFC38E7F4D31',
     @step_name = 'Script Backup Master',
     @command = 'backup master to disk = ''c:\master.bak'''
</pre>
<p>Observe que utilizamos três parâmetros junto à <strong>sp_add_jobstep</strong>: o código do job (@job_id), o nome da funcionalidade (@step_name) e finalmente o script de backup no parâmetro @command.</p>
<p>É interessante esclarecer que um job pode ter inúmeros passos/tarefas, logo você poderá utilizar esta procedure quantas vezes forem necessárias para adicionar novos passos a um mesmo job.</p>
<p><strong>sp_add_jobserver</strong></p>
<p>Agora vem o passo mais “abstrato” desse processo. Após criarmos o job e definir suas funções precisamos definir em qual servidor ele irá operar. Pressupõe-se que se o job foi criado no servidor &lt;strong&gt;X&lt;/strong&gt; que ele deverá ser executado no contexto deste servidor, porém, aqui nós temos que explicitar isto, logo, precisaremos executar a procedure <strong>sp_add_jobserver </strong>e configurar o job para rodar no contexto do servidor local:</p>
<pre class="brush: sql;">
execute sp_add_jobserver
     @job_id = '7EC785F2-36D7-4BEB-B2E4-BFC38E7F4D31',
     @server_name = N'(local)'
</pre>
<p>Pronto!</p>
<p>Neste momento nosso job já tem uma forma e já pode ser executado.</p>
<p>Se quisermos testar a execução manualmente, podemos executar o seguinte comando:</p>
<pre class="brush: sql;"> sp_start_job 'Backup MASTER'</pre>
<p>Resultado:</p>
<p><strong>Job &#8216;Backup MASTER&#8217; started successfully.</strong></p>
<p>Vejam que nosso job foi executado com sucesso e que o arquivo foi criado:</p>
<p style="text-align: center;"><a href="http://silasmendes.com/dba/wp-content/uploads/2010/03/jobExecutado.png"><img class="size-medium wp-image-516 aligncenter" title="jobExecutado" src="http://silasmendes.com/dba/wp-content/uploads/2010/03/jobExecutado-300x35.png" alt="" width="300" height="35" /></a></p>
<p><strong>sp_add_jobschedule</strong></p>
<p>Considerando que a principal funcionalidade do SQL Server Agent e seus jobs é <strong>automatizar tarefas</strong>, não há muito sentindo em executar jobs manualmente, logo, precisamos criar um agendamento para nosso job e assim partimos para a última etapa deste processo onde recorremos à procedure <strong>sp_add_jobschedule</strong>:</p>
<pre class="brush: sql;">
execute sp_add_jobschedule
     @job_id = '7EC785F2-36D7-4BEB-B2E4-BFC38E7F4D31',
     @name = N'Agenda Backup',
     @freq_type = 4,
     @active_start_time = 120000,
     @freq_interval = 1
</pre>
<p>O comando pode parecer complexo, mas analisando com calma veremos que é bem tranquilo. Vamos analisar cada um dos parâmetros separadamente:</p>
<p>No <strong>@job_id</strong> definimos para qual job estamos criando o agendamento utilizando o &#8220;big-código&#8221;.</p>
<p>Em <strong>@name</strong> atribuímos um nome para o nosso agendamento.</p>
<p>Em<strong> @freq_type</strong> temos as seguintes possibilidades:</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="288" valign="top"><strong>@freq_type</strong></td>
<td width="288" valign="top"><strong>Frequência de Execução</strong></td>
</tr>
<tr>
<td width="288" valign="top">1</td>
<td width="288" valign="top">somente uma vez</td>
</tr>
<tr>
<td width="288" valign="top">4</td>
<td width="288" valign="top">Diariamente</td>
</tr>
<tr>
<td width="288" valign="top">8</td>
<td width="288" valign="top">Semanalmente</td>
</tr>
<tr>
<td width="288" valign="top">16</td>
<td width="288" valign="top">Mensalmente</td>
</tr>
</tbody>
</table>
<p>No nosso script <strong>@freq_type </strong>= 4, logo, o comando indica que o job será executado diariamente.</p>
<p>Em <strong>@active_start_time</strong> definimos o horário da execução, no nosso exemplo 12:00:00, sem os sinais de separação entre horas, minutos e segundos. Se o conteúdo desse parâmetro fosse 215600, o job seria executado às 09:56 da noite.</p>
<p>Por fim temos o parâmetro <strong>@freq_interval</strong> que está diretamente atrelado ao parâmetro <strong>@freq_type</strong> e foi definido como <strong>1</strong> porque nosso backup será executado todos os dias.</p>
<p>(Pode ser complexo definir valor para o parâmetro <em>@freq_interval</em>, mas não iremos nos aprofundar nele neste momento. Para entender sua composição consulte: <a href="http://msdn.microsoft.com/pt-br/library/ms366342.aspx">http://msdn.microsoft.com/pt-br/library/ms366342.aspx</a>)</p>
<p>Para verificar todos os parâmetros das procedures listadas acima, digite por exemplo:</p>
<pre class="brush: sql;"> sp_help sp_add_jobschedule </pre>
<p><strong>CONCLUSÃO</strong></p>
<p>Neste texto podemos notar que automatizar tarefas via script não é uma tarefa tão árdua, mas sem dúvidas, na maioria<br />
dos cenários, a utilização de uma ferramenta gráfica proporcionará maior produtividade; porém se um dia você se deparar com um MSDE ou situação semelhante, irá lembrar que com basicamente 4 passos é possível automatizar suas rotinas.</p>
]]></content:encoded>
			<wfw:commentRss>http://silasmendes.com/dba/adicionando-job-via-script/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Restaurar Backup via Script</title>
		<link>http://silasmendes.com/dba/restaurar-backup-no-sql-server-via-script</link>
		<comments>http://silasmendes.com/dba/restaurar-backup-no-sql-server-via-script#comments</comments>
		<pubDate>Thu, 11 Feb 2010 12:59:07 +0000</pubDate>
		<dc:creator>Silas Mendes</dc:creator>
				<category><![CDATA[Vida Real]]></category>
		<category><![CDATA[Backup]]></category>
		<category><![CDATA[restaurar backup]]></category>
		<category><![CDATA[Restore]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[Sql Server]]></category>

		<guid isPermaLink="false">http://silasmendes.com/dba/?p=503</guid>
		<description><![CDATA[Existem três tipos básicos de backups no SQL Server: o backup completo, o backup diferencial e o backup incremental. O dois últimos sempre trabalham em conjunto com o backup completo. Uma estratégia de backup é algo muito particular de cada negócio; em alguns ambientes críticos é inadimissível a perda de um minuto de informação, já em outros [...]]]></description>
			<content:encoded><![CDATA[<p>Existem três tipos básicos de backups no SQL Server: o backup <strong>completo</strong>, o backup <strong>diferencial </strong>e o backup <strong>incremental</strong>. O dois últimos sempre trabalham em conjunto com o backup completo.</p>
<p>Uma estratégia de backup é algo muito particular de cada negócio; em alguns ambientes críticos é inadimissível a perda de um minuto de informação, já em outros lugares, na ocasião de uma falha, um backup do dia anterior é a solução ideal; logo, a forma como mesclar os diferentes tipos de backups é uma questão a ser analisada (e testada!) com muito critério.</p>
<p>No entanto de uma coisa temos certeza: toda estratégia de backup incluirá um backup completo (comumente chamado de backup FULL) e neste texto iremos focar na recuperação (via script) de um backup completo no SQL Server; para isso utilizaremos como base dois cenários:</p>
<ul>
<li>O primeiro cenário abordará o restore de um backup FULL sobre a base original (do backup), por exemplo, sua base de dados atual sofreu alterações inadequadas e agora precisa da restauração do último backup para reaver os dados anteriores.</li>
<li>No segundo cenário iremos visualizar um DBA que recebe um backup completo de um cliente e precisa restaurá-lo em outro ambiente, por exemplo, para sua equipe de desenvolvimento.</li>
</ul>
<p><strong>CENÁRIO 1</strong></p>
<p>Temos aqui um arquivo de backup chamado AdventuresWorks_FULL.bak. Antes de restaurá-lo precisamos verificar qual o conteúdo desse arquivo físico e se o backup existente irá atender a necessidade do <em>restore</em>; para isso utilizaremos o seguinte comando:</p>
<pre class="brush: sql;">restore headeronly from disk ='C:\LabRestore\AdventuresWorks_FULL.bak'</pre>
<p>Veja o resultado:</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-504" title="01fig" src="http://silasmendes.com/dba/wp-content/uploads/2010/02/01fig.JPG" alt="01fig" width="565" height="86" /></p>
<p>No resultado da execução do comando RESTORE HEADERONLY podemos identificar que o arquivo em questão contém três backups (sim! um arquivo físico pode conter inúmeros backups de uma mesma base). Observe a posição de cada backup dentro do arquivo (campo Position), o tamanho de cada um (BackupSize)  e suas respectivas datas (BackupStartDate).</p>
<p>No nosso exemplo vamos restaurar o backup do dia <span style="text-decoration: underline;">03 de Fevereiro</span>, logo, o backup a ser restaurado será o da posição 2 (dois). Vamos ao script:</p>
<pre class="brush: sql;">
USE MASTER

GO

RESTORE DATABASE AdventureWorks

FROM DISK = 'C:\LabRestore\AdventuresWorks_FULL.bak'

WITH FILE = 2, REPLACE, STATS = 10
</pre>
<p>A base de dados a ser restaurada é a <strong>AdventureWorks</strong>, o arquivo de backup está localizado no endereço: C:\LabRestore\AdventuresWorks_FULL.bak. O backup que será restaurado está na posição 2 deste arquivo (FILE = 2). Como a base já existe é necessário sobrescrevê-la, para isto utilizamos a opção <strong>REPLACE.</strong> O <strong>STATS</strong> mostrará o progresso da restauração em intervalos de 10 em 10%.</p>
<p>Importante: Numa operação de <em>restore</em> a base não deve estar em uso por nenhum usuário (inclusive você), por isso antes de iniciar o script direcionamos a sessão para o database <strong>Master</strong>. Se a base estiver em uso, a seguinte mensagem de erro será exibida:</p>
<p><span style="color: #ff0000;">Msg 3101, Level 16, State 1, Line 1</span></p>
<p><span style="color: #ff0000;">Exclusive access could not be obtained because the database is in use.</span></p>
<p>Se tudo estiver ok, ao final da execução do script você verá uma mensagem similar a esta:</p>
<p><span style="color: #008000;">RESTORE DATABASE successfully processed 22514 pages in 10.209 seconds (18.065 MB/sec).</span></p>
<p><strong>CENÁRIO 2</strong></p>
<p>Neste cenário o DBA deverá restaurar um backup completo recebido de um cliente externo. O arquivo de backup está identificado como <strong>SistemaX_FULL.bak</strong> e será restaurado no ambiente de desenvolvimento que é composto por um servidor com um único disco (C:\).</p>
<p>Vamos analisar o conteúdo do arquivo com o RESTORE HEADERONLY:</p>
<pre class="brush: sql;">restore headeronly from disk = 'C:\LabRestore\SistemaX_FULL.bak'</pre>
<p>Veja o resultado:</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-505" title="02fig" src="http://silasmendes.com/dba/wp-content/uploads/2010/02/02fig.JPG" alt="02fig" width="525" height="57" /></p>
<p>No resultado acima verificamos que existe um único backup neste arquivo. A base do cliente (campo DatabaseName) está identificada por <strong>SistemaX</strong> e podemos verificar também outros dados como o tamanho do backup e data.</p>
<p>Até aqui tudo bem, mas neste cenário precisamos analisar novos elementos, isso porque a base em questão ainda não existe e ao efetuar a restauração o SQL Server irá trazer além dos objetos deste banco (tabelas, procedures, triggers) suas configurações originais como: endereço dos arquivos físico de dados e log, modo de recovery, etc. Para verificar o estado de algumas destas propriedades podemos utilizar o comando RESTORE FILELISTONLY:</p>
<pre class="brush: sql;">restore filelistonly from disk = 'C:\LabRestore\SistemaX_FULL.bak'</pre>
<p>Veja o resultado:</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-506" title="03fig" src="http://silasmendes.com/dba/wp-content/uploads/2010/02/03fig.JPG" alt="03fig" width="562" height="69" /></p>
<p>Observe que a base do cliente e seus respectivos arquivos de dados e log estão localizados em discos diferentes. Neste caso, se o DBA realizar um restore comum (como o script utilizado no exemplo anterior) o SQL Server tentará alocar estes arquivos em seus caminhos de origem, logo precisamos alterar este comportamento, já que neste cenário o servidor onde será realizado o restore só possui <strong>um disco</strong>. Veja o comando:</p>
<pre class="brush: sql;">
USE MASTER

GO

RESTORE DATABASE SistemaX
FROM DISK = 'C:\LabRestore\SistemaX_FULL.bak'
WITH
MOVE 'SistemaX' TO 'C:\LabRestore\SistemaX.mdf',
MOVE 'SistemaX_log' TO 'C:\LabRestore\SistemaX_log.ldf',
STATS = 10
</pre>
<p>A base de dados a ser restaurada é a <strong>SistemaX</strong> e o arquivo de backup está em: C:\LabRestore\SistemaX_FULL.bak. Observe que adicionamos a opção <strong>MOVE</strong>; esta opção direciona os arquivos de dados e log para um novo caminho. O restante não muda; continuo utilizando o STATS e desta vez não precisamos do REPLACE já que a base não existia.</p>
<p>É importante destacar que os comandos RESTORE FILELISTONLY e RESTORE HEADERONLY não são obrigatórios num processo de restauração de banco; eles são comandos que recuperam informações sobre os arquivos de backup e estas informações podem auxiliar o DBA no processo de restauração.</p>
<p>Existem outros comandos similares, como o RESTORE VERIFYONLY que verifica se o arquivo de backup está legível.</p>
<p><strong>CONCLUSÃO</strong></p>
<p>Como podemos verificar, o restore de um backup <em>full</em>, via script não é difícil, basta conhecer os comandos certos para recuperar informações sobre o conteúdo do arquivo de backup; estas informações  irão auxiliar o usuário na construção do comando de <em>restore</em>.</p>
<p>Nos próximos posts iremos abordar o restore de backups diferenciais e log. Até +</p>
<p>Bom trabalho!</p>
]]></content:encoded>
			<wfw:commentRss>http://silasmendes.com/dba/restaurar-backup-no-sql-server-via-script/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Configurar instância SQL via script</title>
		<link>http://silasmendes.com/dba/configurar-instancia-via-script</link>
		<comments>http://silasmendes.com/dba/configurar-instancia-via-script#comments</comments>
		<pubDate>Mon, 18 Jan 2010 13:35:58 +0000</pubDate>
		<dc:creator>Silas Mendes</dc:creator>
				<category><![CDATA[Vida Real]]></category>
		<category><![CDATA[allow updates]]></category>
		<category><![CDATA[database mail]]></category>
		<category><![CDATA[DBA]]></category>
		<category><![CDATA[memória]]></category>
		<category><![CDATA[OVERRIDE]]></category>
		<category><![CDATA[RECONFIGURE]]></category>
		<category><![CDATA[sp_configure]]></category>
		<category><![CDATA[sql server 2000]]></category>
		<category><![CDATA[sql server 2005]]></category>
		<category><![CDATA[SQL Server 2008]]></category>
		<category><![CDATA[sys.configurations]]></category>
		<category><![CDATA[Target Server Memory]]></category>
		<category><![CDATA[xp_cmdshell]]></category>

		<guid isPermaLink="false">http://silasmendes.com/dba/?p=486</guid>
		<description><![CDATA[Existem diferentes formas de configurar uma instância SQL Server, uma delas é através da procedure sp_configure. O interessante de utilizar a sp_configure é que o DBA não fica dependente da utilização de uma interface gráfica. Ao executar a sp_configure sem parâmetros, são exibidas as configurações atuais da instância. Cada registro representa uma configuração e no [...]]]></description>
			<content:encoded><![CDATA[<p>Existem diferentes formas de configurar uma instância SQL Server, uma delas é através da procedure <strong>sp_configure</strong>. O interessante de utilizar a sp_configure é que o DBA não fica dependente da utilização de uma interface gráfica.</p>
<p>Ao executar a <strong>sp_configure</strong> sem parâmetros, são exibidas as configurações atuais da instância. Cada registro representa uma configuração e no campo <strong>run_value</strong> é possível visualizar o valor atual de cada configuração.</p>
<p><img class="aligncenter size-full wp-image-487" title="01_sp_configure" src="http://silasmendes.com/dba/wp-content/uploads/2010/01/01_sp_configure.PNG" alt="01_sp_configure" width="447" height="181" /></p>
<p>Num cenário padrão ao executar a sp_configure o resultado só exibe algumas das inúmeras opções de configuração; isso porque por padrão o SQL Server oculta opções avançadas. Para exibir todas as opções você deve executar:</p>
<pre class="brush: sql;">
USE master
GO
EXEC sp_configure 'show advanced option', '1';
GO
RECONFIGURE;
</pre>
<div>Veja que no comando acima é possível ter uma idéia da sintaxe desta procedure. A idéia básica é a seguinte:</div>
<pre class="brush: sql;">
EXEC sp_configure ‘nome da configuração’, ‘novo valor da configuração’
</pre>
<p>Uma das configurações que podemos alterar utilizando a sp_configure é o limite de memória utilizada pelo SQL Server, vamos exemplificar a alteração desta configuração:</p>
<p>Atualmente minha instância está configurada para utilizar no máximo 500 MB de memória. Ao executar o comando sp_configure é possivel verificar que a opção <strong>max server memory (MB) </strong>está com o valor 500 nos campos <strong>config_value</strong> e <strong>run_value</strong>.</p>
<p><img class="aligncenter size-full wp-image-488" title="02_sp_configure" src="http://silasmendes.com/dba/wp-content/uploads/2010/01/02_sp_configure.PNG" alt="02_sp_configure" width="470" height="195" /></p>
<p>Para alterar a quantidade máxima de memória que a minha instância poderá utilizar executo o seguinte comando:</p>
<pre class="brush: sql;">
EXEC sp_configure 'max server memory (MB)', '300';
</pre>
<p>No comando acima configurei o máximo de memória disponível para a instância para 300 MB, no entanto se executarmos a sp_configure verificaremos que a opção run_value ainda continua com 500. Para efetivar a alteração preciso executar o comando RECONFIGURE; assim a alteração entrará em vigor.</p>
<p><img class="aligncenter size-full wp-image-489" title="RECONFIGURE" src="http://silasmendes.com/dba/wp-content/uploads/2010/01/RECONFIGURE.PNG" alt="RECONFIGURE" width="421" height="280" /></p>
<h5 style="text-align: center;"><span style="font-weight: normal;">Figura 1 – Monitorando o contador Target Server Memory durante execução do RECONFIGURE.</span></h5>
<p>É importante salientar que apesar do comando RECONFIGURE ser obrigatório, nem todas as configurações são efetivadas somente com a execução do RECONFIGURE, para estas opções a efetivação só ocorre com a reinicialização do serviço do SQL Server. Para verificar quais são estas opções basta consultar a tabela <span style="color: #008000;">sys.configurations</span> (disponível no SQL Server 2005/2008). As configurações que tiverem o campo <strong>is_dynamic</strong> igual a 0 (zero) só entrarão em vigor quando o serviço do SQL Server for reiniciado. <strong>Note que se o comando RECONFIGURE <span style="text-decoration: underline;">não</span> for executado, mesmo que a instância seja reiniciada a nova configuração não entrará em vigor</strong>.</p>
<p>Outras configurações possíveis através da sp_configure: habilitar a procedure <strong>xp_cmdshell</strong>,  procedures do <strong>Database Mail</strong>,  código gerenciado (CLR), configurar o número de processadores utilizados pela instância (paralelismo), configurar memória extendida (AWE), etc.</p>
<ul>
<li><strong>RECONFIGURE ou RECONFIGURE WITH OVERRIDE?</strong></li>
</ul>
<p>Se ao alterar uma configuração o DBA definir um valor que foge às recomendações do SQL Server, ao executar a opção RECONFIGURE o SQL Server irá rejeitar a alteração e notificar o usuário. Por exemplo, na versão 2000 era possível realizar alterações nas tabelas de sistema do SQL Server (isso mudou <em>um pouco</em> nas versões 2005 e 2008), para isso bastava executar o comando:</p>
<pre class="brush: sql;">
EXEC sp_configure 'allow updates', '1'
</pre>
<p>No entanto, por razões óbvias esta não é uma prática recomendada, então nessas situações, ao executar somente o RECONFIGURE, o SQL Server exibia a seguinte mensagem:</p>
<blockquote><p><span style="color: #ff0000;">Configuration option &#8216;allow updates&#8217; changed from 1 to 1. Run the RECONFIGURE statement to install.</span></p>
<p><span style="color: #ff0000;">Msg 5808, Level 16, State 1, Line 1</span></p>
<p><span style="color: #ff0000;">Ad hoc updates to system catalogs not recommended. Use the RECONFIGURE WITH OVERRIDE statement to force this configuration.</span></p></blockquote>
<p>Logo o DBA só poderia concretizar essa operação se utilizasse o RECONFIGURE <strong>WITH OVERRIDE</strong>, ou seja, esta é a forma do SQL Server se proteger contra ações indevidas e dizer ao DBA:  “amigo, isso é por sua conta e risco”. Portanto, o <strong>WITH OVERRIDE</strong> é uma opção a ser evitada e só é recomendada em situações pontuais.</p>
<ul>
<li><strong>Conclusão</strong></li>
</ul>
<p>Conhecer as diferentes formas de configurar uma instância SQL Server dá ao DBA maior liberdade no momento de realizar estas tarefas, neste caso, além das ferramentas gráficas o DBA também poderá utilizar a sp_configure no SQLCMD, OSQL ou agendar alterações de configurações através de jobs e etc.</p>
<p>Para ter acesso a todas as opções de configurações disponíveis na <strong>sp_configure</strong>, consulte a tabela <span style="color: #008000;">sys.configurations</span> ou acesse o <a href="http://msdn.microsoft.com/en-us/library/ms188787.aspx" target="_blank">Books Online</a>.</p>
<p>Bom trabalho, bons estudos.</p>
]]></content:encoded>
			<wfw:commentRss>http://silasmendes.com/dba/configurar-instancia-via-script/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>SQL Server Saturday Night</title>
		<link>http://silasmendes.com/dba/sql-server-saturday-night</link>
		<comments>http://silasmendes.com/dba/sql-server-saturday-night#comments</comments>
		<pubDate>Tue, 15 Dec 2009 19:32:38 +0000</pubDate>
		<dc:creator>Silas Mendes</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Sql Server]]></category>
		<category><![CDATA[SQL Server Day]]></category>
		<category><![CDATA[SQL Server Saturday Night]]></category>
		<category><![CDATA[webcast]]></category>

		<guid isPermaLink="false">http://silasmendes.com/dba/?p=482</guid>
		<description><![CDATA[No próximo sábado tem programão para a comunidade SQL Server!!! Depois do SQL Server Day que promoveu 12 horas ininterruptas de palestras sobre SQL Server, pra fechar bem o ano de 2009 alguns caras vão se unir no próximo sábado para promover mais 5 horas de SQL Server, a partir das 18h. Dá uma olhada na [...]]]></description>
			<content:encoded><![CDATA[<p>No próximo sábado tem programão para a comunidade SQL Server!!!</p>
<p>Depois do <strong>SQL Server Day</strong> que promoveu 12 horas ininterruptas de palestras sobre SQL Server, pra fechar bem o ano de 2009 alguns caras vão se unir no próximo sábado para promover mais 5 horas de SQL Server, a partir das 18h.</p>
<p>Dá uma olhada na grade:</p>
<p>- Powershell &amp; Transact-SQL (Laerte Jr) &#8211; 18:00 as 18:50 horas<br />
- Profiler  e Perfmon &#8211; (Vladimir Magalhães) &#8211; 18:50 as 19:40 horas<br />
- Alta  Disponibilidade: Mirroring (Vitor Fava) &#8211; 19:40 às 20:30 horas<br />
- Performance  &amp; Tuning &#8211; (Rodrigo Crespi) &#8211; 20:30 horas as 21:20 horas<br />
- Database  Snapshots (Alexandre Lopes) &#8211; 21:20 às 22:10 horas<br />
- SQL Server 2008 R2  (Thiago Zavaschi) &#8211; 22:10 às 23:00 horas</p>
<p><span style="background-color: #ffffff;">Para se inscrever: <a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032437130&amp;Culture=pt-BR" target="_blank">http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032437130&amp;Culture=pt-BR</a></span></p>
<p>E pra quem não pôde conferir as palestras do <strong>SQL Server Day</strong>, os arquivos já estão disponíveis para download em: <a href="http://www.sqlserverday.com.br/">http://www.sqlserverday.com.br/</a>.</p>
<p><span style="background-color: #ffffff;">Bom trabalho, bons estudos!</span></p>
<p><span style="background-color: #ffffff;"><br />
</span></p>
]]></content:encoded>
			<wfw:commentRss>http://silasmendes.com/dba/sql-server-saturday-night/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
