<?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 &#187; SQL Server 2008</title>
	<atom:link href="http://silasmendes.com/dba/tag/sql-server-2008/feed" rel="self" type="application/rss+xml" />
	<link>http://silasmendes.com/dba</link>
	<description>Tecnologia &#38; Banco de Dados</description>
	<lastBuildDate>Tue, 27 Dec 2011 12:53:39 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Livro: Accelerated SQL Server 2008</title>
		<link>http://silasmendes.com/dba/livro-accelerated-sql-server-2008</link>
		<comments>http://silasmendes.com/dba/livro-accelerated-sql-server-2008#comments</comments>
		<pubDate>Sun, 06 Feb 2011 13:57:40 +0000</pubDate>
		<dc:creator>Silas Mendes</dc:creator>
				<category><![CDATA[Dica rápida]]></category>
		<category><![CDATA[Livro]]></category>
		<category><![CDATA[SQL SERVER 2008]]></category>
		<category><![CDATA[SQL SERVER 2008 R2]]></category>
		<category><![CDATA[livro]]></category>
		<category><![CDATA[mercado livre]]></category>
		<category><![CDATA[SQL Server 2008]]></category>

		<guid isPermaLink="false">http://silasmendes.com/dba/?p=886</guid>
		<description><![CDATA[Coloquei mais dois livros de SQL Server para vender no Mercado Livre&#8230; a diferença é que estes estão NOVOS! O livro é o Accelerated SQL Server 2008, um livro que aborda as novas funcionalidades no T-SQL, alta disponibilidade, segurança, desenvolvimento (incluindo as CLRs .NET), LINQ e uma breve abordagem no mundo de BI: Reporting, Analysis [...]]]></description>
			<content:encoded><![CDATA[<p>Coloquei mais dois livros de SQL Server para <a href="http://produto.mercadolivre.com.br/MLB-179362242-livro-accelerated-sql-server-2008-dba-_JM" target="_blank">vender no Mercado Livre</a>&#8230; a diferença é que estes estão <strong>NOVOS</strong>!</p>
<p>O livro é o <strong>Accelerated SQL Server 2008</strong>, um livro que aborda as novas funcionalidades no T-SQL, alta disponibilidade, segurança, desenvolvimento (incluindo as CLRs .NET), LINQ e uma breve abordagem no mundo de BI: Reporting, Analysis e Integration Services. Ou seja, é um livro excelente pra quem quer se interar rapidamente nas novidades desta versão do SQL Server.</p>
<p>Pra quem está começando a conhecer o SQL Server o livro também é um excelente ponto de partida, porque tem uma linguagem simples e parte desde a instalação do SQL Server, passando pela administração, desenvolvimento e relatórios&#8230; ou seja; nada como uma visão geral e resumida pra se ter uma idéia do grande potencial deste gerenciador de banco de dados :)</p>
<p>Quem tiver interesse é só <a href="http://produto.mercadolivre.com.br/MLB-179362242-livro-accelerated-sql-server-2008-dba-_JM" target="_blank">acessar este link no Mercado Livre</a> e comprar por um preço beeemm camarada :)</p>
<p>Até +</p>
]]></content:encoded>
			<wfw:commentRss>http://silasmendes.com/dba/livro-accelerated-sql-server-2008/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>70-450 &amp; MCITP DBA</title>
		<link>http://silasmendes.com/dba/70-450-mcitp-dba</link>
		<comments>http://silasmendes.com/dba/70-450-mcitp-dba#comments</comments>
		<pubDate>Thu, 27 Jan 2011 17:25:43 +0000</pubDate>
		<dc:creator>Silas Mendes</dc:creator>
				<category><![CDATA[Certificação]]></category>
		<category><![CDATA[70-432]]></category>
		<category><![CDATA[70-450]]></category>
		<category><![CDATA[DBA]]></category>
		<category><![CDATA[MCITP]]></category>
		<category><![CDATA[MCTS]]></category>
		<category><![CDATA[sql server 2005]]></category>
		<category><![CDATA[SQL Server 2008]]></category>
		<category><![CDATA[SQL Server 2008 R2]]></category>
		<category><![CDATA[training kit]]></category>

		<guid isPermaLink="false">http://silasmendes.com/dba/?p=870</guid>
		<description><![CDATA[Ontem fechei uma das minhas metas de 2011: atualizar o MCITP de administração para o SQL Server 2008. A prova foi a 70-450. Bom, a verdade é que alguns dias após minha aprovação na 70-432 fui fazer o exame 70-450 na “cara e coragem” e reprovei alcançando somente 660 pontos dos 700 necessários para a [...]]]></description>
			<content:encoded><![CDATA[<p>Ontem fechei uma das minhas metas de 2011: <strong>atualizar o MCITP de administração para o SQL Server 2008</strong>. A prova foi a 70-450.</p>
<p>Bom, a verdade é que alguns dias após <a href="http://silasmendes.com/dba/mcts-sql-server-2008" target="_blank">minha aprovação na 70-432</a> fui fazer o exame 70-450 na “cara e coragem” e reprovei alcançando somente 660 pontos dos 700 necessários para a aprovação.</p>
<p>Normalmente ninguém relata sua reprovação num exame de certificação, né? Mas a verdade é que isso é bem comum; principalmente quando você não estuda o suficiente <strong>*<em>risos*</em></strong>. Enfim, deixei passar as festas de fim de ano e ontem tentei novamente (aproveitando a <a href="http://www.prometric.com/microsoft/certpacks?utm_source=Microsoft_Landing_Page&amp;utm_medium=banner&amp;utm_campaign=CertPacks_Banner" target="_blank">promoção da segunda chance</a>) e fechei  o exame com 880 pontos.</p>
<p>A verdade é que, quem tirou o <a href="http://silasmendes.com/dba/mcitp" target="_blank">MCITP de administração no SQL Server 2005</a> deve achar o MCITP do SQL Server 2008 muito mais fácil (ou simples). Primeiro porque tiraram uma prova; antes eram 3 exames (agora são somente as 70-432 e 70-450); e tiraram justamente a prova mais difícil (em minha opinião) que era a 70-443. Tiraram também a parte “prática” que tinha no exame 70-431.</p>
<p>Achei estranho porque não vi nada de <em>Service Broker</em>, <em>Endpoints </em>e etc&#8230; temas que foram abordados intensamente no exame 70-443 (ouvi dizer que essa parte foi transferida para o exame 70-451, que concede o MCITP de desenvolvedor em SQL Server 2008).</p>
<p>Pra quem gosta de estudar utilizando os <strong>Training Kits</strong>, ainda não foi lançado nenhum para este exame; mas enfim, pra quem se dedicar um pouco nos estudos, focando no <a href="http://www.microsoft.com/learning/en/us/exam.aspx?ID=70-450#tab2" target="_blank">roteiro sugerido</a> pela própria Microsoft, com certeza não terá dificuldades para alcançar este MCITP.</p>
<p>Dicas para estudo? Vamos lá:</p>
<ul>
<li>Estude sobre compressão (linha e página); não dei a devida atenção a este tema e creio que pesou muito na minha primeira tentativa;</li>
<li>Dê uma olhada na administração de múltiplas instâncias SQL Server;</li>
<li>Alta-disponibilidade (<em>cluster</em>, <em>database mirroring</em>, <em>log shipping</em>, etc);</li>
<li>Backup (sempre!);</li>
<li>Replicação (topologias);</li>
<li>E não deixe de olhar alguma coisa sobre pacotes <em>SSIS </em>(a grande surpresa pra mim)&#8230;</li>
</ul>
<p>Bom, agora tenho que correr contra o tempo, porque o pacote de 03 exames que comprei na promoção de segunda chance tem que ser utilizado até o fim deste semestre; isso sem dúvidas será um grande motivador para que eu tire mais duas certificações Microsoft nos próximos meses&#8230;</p>
<p>Enfim, bom estudo e boa sorte na sua hora :)</p>
<p>Até +</p>
]]></content:encoded>
			<wfw:commentRss>http://silasmendes.com/dba/70-450-mcitp-dba/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Registrando modificações com o CDC</title>
		<link>http://silasmendes.com/dba/cdc-change-data-capture</link>
		<comments>http://silasmendes.com/dba/cdc-change-data-capture#comments</comments>
		<pubDate>Sun, 07 Nov 2010 12:03:26 +0000</pubDate>
		<dc:creator>Silas Mendes</dc:creator>
				<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Vida Real]]></category>
		<category><![CDATA[capturar]]></category>
		<category><![CDATA[cdc]]></category>
		<category><![CDATA[change data capture]]></category>
		<category><![CDATA[enterprise]]></category>
		<category><![CDATA[log]]></category>
		<category><![CDATA[logar]]></category>
		<category><![CDATA[SQL Server 2008]]></category>
		<category><![CDATA[trigger]]></category>

		<guid isPermaLink="false">http://silasmendes.com/dba/?p=725</guid>
		<description><![CDATA[A edição Enterprise do SQL Server 2008 veio com uma funcionalidade nova e bastante interessante conhecida como CDC, abreviação de Change Data Capture. Esta função permite que o DBA capture e registre todas as mudanças feitas numa determinada tabela, de forma bastante simples. Em versões anteriores do SQL Server, poderíamos utilizar triggers DML para suprir [...]]]></description>
			<content:encoded><![CDATA[<p>A edição Enterprise do SQL Server 2008 veio com uma funcionalidade nova e bastante interessante conhecida como CDC, abreviação de <strong>Change Data Capture</strong>. Esta função permite que o DBA capture e registre todas as mudanças feitas numa determinada tabela, de forma bastante simples.</p>
<p>Em versões anteriores do SQL Server, poderíamos utilizar <em>triggers</em> DML para suprir necessidades similares, e para isso tínhamos que programar a <em>trigger</em> que seria disparada e que gravaria a alteração em outra tabela; no entanto, este processo demandava esforço e exigia um controle na manutenção das <em>triggers </em>e tabelas de apoio. Com o CDC, a partir do momento que o DBA habilita-o em determinada tabela, o SQL Server se responsabiliza por toda a estrutura necessária para capturar e registrar as mudanças.</p>
<p><strong>Como funciona?</strong></p>
<p>O CDC captura e registra alterações baseado no log do SQL Server; basicamente ele utiliza o mesmo mecanismo da replicação transacional: o CDC lê o log do SQL Server e registra as alterações em suas tabelas. Note que este processo é assíncrono, ou seja, um dado é alterado e a alteração fica registrada no log; periodicamente é feita uma leitura no log e as alterações são registradas nas tabelas do CDC (criadas pelo SQL Server no <em>schema</em> CDC).</p>
<p><strong>&#8220;Mão na massa&#8221;</strong></p>
<p>Agora vamos exemplificar um cenário simples utilizando o CDC, monitorando uma única tabela.</p>
<p>No primeiro passo iremos criar a tabela que será utilizada em nossos testes:</p>
<pre class="brush: sql; title: ; notranslate">
-- Cria tabelas para teste

CREATE TABLE Funcionario (
codigoFuncionario INT NOT NULL,
nome VARCHAR(60),
idade INT,
numeroCPF CHAR(11)
);
GO
ALTER TABLE Funcionario
ADD CONSTRAINT PK_CodFunc
PRIMARY KEY (codigoFuncionario);
</pre>
<p>Agora ativamos o CDC na base de dados e na tabela Funcionario:</p>
<pre class="brush: sql; title: ; notranslate">
-- Habilita CDC banco

EXEC sys.sp_cdc_enable_db;
GO
-- Habilita CDC na tabela Funcionario

EXECUTE sys.sp_cdc_enable_table
@source_schema = 'dbo',
@source_name = 'Funcionario',
@role_name = 'roleCDC';
</pre>
<p>Ao habilitar o CDC, o SQL Server cria <em>jobs</em> que serão executados pelo SQL Server Agent. Estes <em>jobs</em> serão os responsáveis pelo registro das alterações nas tabelas do CDC; logo, para o CDC funcionar corretamente, lembre-se que o SQL Server Agent deve estar em execução.</p>
<p>Com o CDC habilitado, vamos popular a tabela Funcionario:</p>
<pre class="brush: sql; title: ; notranslate">
-- Carga de dados

INSERT INTO Funcionario (codigoFuncionario, nome, idade, numeroCPF)
VALUES
(1, 'Silas Mendes', 29, '08643238736'),
(2, 'Antonio Robberto', 36, '04686398765'),
(3, 'Joana Maxado', 45, '52341369844'),
(4, 'Roberto',null, null),
(5, 'Armando Filo', null, '41397601223');
</pre>
<p>Agora já podemos consultar a tabela do CDC que armazena as alterações na tabela Funcionario:</p>
<blockquote><p><em>Observe que a tabela do CDC está no esquema CDC.</em></p></blockquote>
<p><strong><em> </em></strong></p>
<blockquote><p><em>Lembre-se que este é um processo assíncrono, portanto ao executar o comando abaixo, pode ser que a tabela ainda não tenha sido atualizada; neste caso, repita a execução do comando.</em></p></blockquote>
<pre class="brush: sql; title: ; notranslate">

SELECT * FROM cdc.dbo_Funcionario_CT;
</pre>
<p style="text-align: center;"><a href="http://silasmendes.com/dba/wp-content/uploads/2010/11/CDC_insert2.jpg"><img class="aligncenter size-full wp-image-731" title="CDC_insert" src="http://silasmendes.com/dba/wp-content/uploads/2010/11/CDC_insert2.jpg" alt="" width="730" height="46" /></a></p>
<p>No resultado são retornadas 9 colunas. Neste momento atente-se à coluna <strong>__$operation</strong>. Note que ela está com o valor: <strong>2</strong>. O valor 2 significa que estes registros foram resultado de inserções.</p>
<p>Vamos continuar manipulando os dados para verificar os reflexos das alterações nas tabelas do CDC:</p>
<pre class="brush: sql; title: ; notranslate">
-- UPDATEs na tabela Funcionario

UPDATE Funcionario
SET Nome = 'Antonio Roberto'
WHERE codigoFuncionario = 2;

UPDATE Funcionario
SET Nome = 'Joana Machado'
WHERE codigoFuncionario = 3 ;

UPDATE Funcionario
SET Nome = 'Roberto Nespolitano',
Idade = 18, NumeroCPF = '08468354173'
WHERE codigoFuncionario = 3;
</pre>
<p>Observe o registro das alterações na tabela do CDC:</p>
<pre class="brush: sql; title: ; notranslate">
SELECT * FROM cdc.dbo_Funcionario_CT;
</pre>
<p style="text-align: center;"><a href="http://silasmendes.com/dba/wp-content/uploads/2010/11/CDC_update.jpg"><img class="aligncenter size-full wp-image-733" title="CDC_update" src="http://silasmendes.com/dba/wp-content/uploads/2010/11/CDC_update.jpg" alt="" width="731" height="47" /></a></p>
<p>Agora observe que aumentou a quantidade de registros da tabela do CDC. Além das inserções (__$operation = 2) temos também o ANTES e DEPOIS nas operações de UPDATE. Observe agora que, onde o campo <strong>__$operation </strong>é igual a <strong>3</strong> o registro contém o estado antes do UPDATE, e onde o campo <strong>__$operation = 4</strong> temos o estado do registro após o UPDATE.</p>
<p>Para finalizar nosso exemplo, vamos realizar uma exclusão e verificar como essa alteração é registrada:</p>
<pre class="brush: sql; title: ; notranslate">
DELETE FROM Funcionario
WHERE codigoFuncionario IN (2,3);
</pre>
<p>Execute novamente a consulta na tabela do CDC:</p>
<pre class="brush: sql; title: ; notranslate">
SELECT * FROM cdc.dbo_Funcionario_CT;
</pre>
<p style="text-align: center;"><a href="http://silasmendes.com/dba/wp-content/uploads/2010/11/CDC_delete.jpg"><img class="aligncenter size-full wp-image-734" title="CDC_delete" src="http://silasmendes.com/dba/wp-content/uploads/2010/11/CDC_delete.jpg" alt="" width="731" height="46" /></a></p>
<p>Agora notamos: onde o campo <strong>__$operation = 1 </strong>temos os registros que foram excluídos da tabela Funcionario.</p>
<p><strong>CONCLUSÃO</strong></p>
<p>Como observamos, basicamente são necessários 4 passos para utilizar o CDC:</p>
<ul>
<li>Utilizar a versão Enterprise (ou superior) do SQL Server 2008;</li>
<li>O serviço SQL Server Agent deve estar ativo;</li>
<li>Ativar o CDC no banco de dados utilizando a procedure <strong>sp_cdc_enable_db</strong>;</li>
<li>Ativar o CDC nas tabelas que serão monitoradas utilizando a procedure <strong>sp_cdc_enable_table</strong>.</li>
</ul>
<p>Vimos também que na tabela de registro do CDC temos diversos valores para o campo <strong>__$operation</strong>, sendo: <strong> </strong></p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="139" valign="top"><strong>Comando DML</strong></td>
<td width="107" valign="top"><strong>__$operation</strong></td>
</tr>
<tr>
<td width="139" valign="top">DELETE</td>
<td width="107" valign="top">1</td>
</tr>
<tr>
<td width="139" valign="top">INSERT</td>
<td width="107" valign="top">2</td>
</tr>
<tr>
<td width="139" valign="top">Antes do UPDATE</td>
<td width="107" valign="top">3</td>
</tr>
<tr>
<td width="139" valign="top">Depois do UPDATE</td>
<td width="107" valign="top">4</td>
</tr>
</tbody>
</table>
<p>Hoje abordamos somente os processos básicos do CDC. Irei estender este assunto em outros  posts, onde pretendo abordar alguns detalhes interessantes desta nova <em>feature </em>do SQL Server 2008.</p>
<p>Até +</p>
]]></content:encoded>
			<wfw:commentRss>http://silasmendes.com/dba/cdc-change-data-capture/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Backup compactado</title>
		<link>http://silasmendes.com/dba/backup-compactado</link>
		<comments>http://silasmendes.com/dba/backup-compactado#comments</comments>
		<pubDate>Tue, 14 Sep 2010 14:47:42 +0000</pubDate>
		<dc:creator>Silas Mendes</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Vida Real]]></category>
		<category><![CDATA[adventureWorks]]></category>
		<category><![CDATA[Backup]]></category>
		<category><![CDATA[compactar]]></category>
		<category><![CDATA[comprimir]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[sp_configure]]></category>
		<category><![CDATA[sql backup]]></category>
		<category><![CDATA[SQL Server 2008]]></category>
		<category><![CDATA[SQL Server 2008 R2]]></category>

		<guid isPermaLink="false">http://silasmendes.com/dba/?p=677</guid>
		<description><![CDATA[A compressão de backups sempre foi um dilema para quem lida com grandes bases de dados no SQL Server. Muitos DBAs criaram rotinas para compactar arquivos de backup utilizando o bom e velho RAR, outros utilizavam soluções mais interessantes como o SQL Backup da RedGate. Finalmente na versão 2008 a Microsoft adicionou uma solução nativa [...]]]></description>
			<content:encoded><![CDATA[<p>A compressão de backups sempre foi um dilema para quem lida com grandes bases de dados no SQL Server. Muitos DBAs criaram rotinas para compactar arquivos de backup utilizando o bom e velho RAR, outros utilizavam soluções mais interessantes como o <a href="http://www.red-gate.com/products/SQL_Backup/" target="_blank">SQL Backup</a> da RedGate.</p>
<p>Finalmente na versão 2008 a Microsoft adicionou uma solução nativa para compactação de backups, no entanto esta opção só estava disponível na edição Enterprise.</p>
<p>Com a chegada do 2008 R2 a Microsoft estendeu a funcionalidade para a edição Standard; ou seja, a coisa tá ficando mais acessível.</p>
<p><strong>“Mão na massa”</strong></p>
<p>Para compactar o backup o processo é bem simples, basicamente precisamos adicionar a opção <strong>WITH COMPRESSION</strong> no comando de backup:</p>
<pre class="brush: sql; title: ; notranslate">
BACKUP DATABASE AdventureWorks
TO DISK = 'C:\AdventureWorks_compactado.BAK'
WITH COMPRESSION;
</pre>
<p>Agora o mais interessante: comparando backups da base AdventureWorks, um compactado e outro sem compactação, temos os seguintes números:</p>
<p><img class="aligncenter size-full wp-image-679" title="compactaBKP" src="http://silasmendes.com/dba/wp-content/uploads/2010/09/compactaBKP1.png" alt="" width="442" height="36" /></p>
<p>Vemos que o arquivo compactado tem cerca de 25% do tamanho do arquivo sem compactação. Bem bacana, não é?</p>
<p>Se você deseja que a compactação de backup seja <em>Default</em> na sua instância, altere a configuração <strong>backup compression default</strong> para 1:</p>
<pre class="brush: sql; title: ; notranslate">
EXEC sp_configure 'backup compression default', '1';
RECONFIGURE;
</pre>
<p class="MsoNormal">Assim, quando você realizar um backup, mesmo que não utilize explicitamente a opção <strong>WITH COMPRESSION</strong> (ou esqueça de utilizá-la) seus backups serão compactados.</p>
<p><span style="font-size: 12.0pt; font-family: &amp;amp;amp; mso-fareast-font-family: &amp;amp;amp; mso-ansi-language: PT-BR; mso-fareast-language: PT-BR; mso-bidi-language: AR-SA;">Bom trabalho!</span></p>
]]></content:encoded>
			<wfw:commentRss>http://silasmendes.com/dba/backup-compactado/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>T-SQL &#8211; Mesclando dados</title>
		<link>http://silasmendes.com/dba/t-sql-mesclando-dados</link>
		<comments>http://silasmendes.com/dba/t-sql-mesclando-dados#comments</comments>
		<pubDate>Fri, 10 Sep 2010 15:01:51 +0000</pubDate>
		<dc:creator>Silas Mendes</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Vida Real]]></category>
		<category><![CDATA[comparar]]></category>
		<category><![CDATA[Juntar]]></category>
		<category><![CDATA[MERGE]]></category>
		<category><![CDATA[Mesclar]]></category>
		<category><![CDATA[Sincronizar]]></category>
		<category><![CDATA[SQL Server 2008]]></category>
		<category><![CDATA[T-SQL]]></category>

		<guid isPermaLink="false">http://silasmendes.com/dba/?p=660</guid>
		<description><![CDATA[O SQL Server 2008 trouxe para o T-SQL um comando brilhante que realmente facilita a vida de muita gente; o comando em questão é o MERGE. A idéia deste comando é mesclar dados, logo você pode comparar duas tabelas e utilizar o comando MERGE para sincronizá-las. Vamos a um exemplo simples: Primeiro criamos duas tabelas [...]]]></description>
			<content:encoded><![CDATA[<p>O SQL Server 2008 trouxe para o T-SQL um comando brilhante que realmente facilita a vida de muita gente; o comando em questão é o MERGE. A idéia deste comando é mesclar dados, logo você pode comparar duas tabelas e utilizar o comando MERGE para sincronizá-las.</p>
<p>Vamos a um exemplo simples:</p>
<p>Primeiro criamos duas tabelas com estrutura idêntica. A chave primária destas tabelas é o campo CPF:</p>
<pre class="brush: sql; title: ; notranslate">
create table Tabela1 (
Nome varchar(50),
Idade int,
CPF char(11) primary key);

create table Tabela2 (
Nome varchar(50),
Idade int,
CPF char(11) primary key);
</pre>
<p>Agora inserimos dados nas tabelas. Observe que os dados estão diferentes, alguns tem diferença no nome, outros registros estão sobrando ou faltando em ambas tabelas:</p>
<pre class="brush: sql; title: ; notranslate">
insert into Tabela1 values
('Silas Mendes' , 29, '08148338716'),
('Maria José'   , 49, '55978913269'),
('Pedro Ribeiro', 53, '05899714732'),
('Joana Silva'  , 18, '74105689623');

insert into Tabela2 values
('SILAS Mendes'       , 29, '08148338716'),
('Maria Jose'         , 49, '55978913269'),
('Pedro Ribeiro Souza', 53, '05899714732'),
('Carlos Mania'       , 19, '12345678999');
</pre>
<p>Agora precisamos sincronizar as tabelas, vamos analisar passo-a-passo a construção do comando MERGE (o comando completo está disponível no fim do texto) .</p>
<p>A tabela de destino (target) é a <strong>tabela2</strong>; a tabela de origem (source) é a <strong>tabela1. </strong>A chave primária das tabelas será utilizada na comparação:</p>
<pre class="brush: sql; title: ; notranslate">
merge into tabela2 as target
using (select nome, idade, cpf from tabela1)
  as source (nome, idade, cpf)
  on (target.cpf = source.cpf)
</pre>
<p>Quando os números dos CPFs forem encontrados em ambas tabelas então atualizamos os dados na tabela alvo (target):</p>
<pre class="brush: sql; title: ; notranslate">
when matched then
		 update set target.nome = source.nome,
					target.idade = source.idade,
					target.cpf = source.cpf
</pre>
<p>Quando os números dos CPFs não forem encontrados na tabela de destino, então inserimos os dados da tabela de origem:</p>
<pre class="brush: sql; title: ; notranslate">
when not matched by target then
		 insert (nome, idade, cpf) values (nome, idade, cpf)
</pre>
<p>E finalmente, quando existirem números de CPFs no destino que não existem na origem, apagamos os registros que sobram:</p>
<pre class="brush: sql; title: ; notranslate">
when not matched by source then
		 delete;
</pre>
<p>Veja o código completo do comando MERGE:</p>
<pre class="brush: sql; title: ; notranslate">
merge into tabela2 as target
using (select nome, idade, cpf from tabela1)
  as source (nome, idade, cpf)
  on (target.cpf = source.cpf)

-- Atualiza registros diferentes
when matched then
		 update set target.nome = source.nome,
					target.idade = source.idade,
					target.cpf = source.cpf

-- Insere registros que não existem no destino
when not matched by target then
		 insert (nome, idade, cpf) values (nome, idade, cpf)

-- Se existir no destino e não existir na origem é apagado
when not matched by source then
		 delete;
</pre>
<p>Por fim realizamos o SELECT nas duas tabelas para verificar o resultado após a sincronização:</p>
<pre class="brush: sql; title: ; notranslate">

select * from Tabela1;
select * from Tabela2;
</pre>
<p><a href="http://silasmendes.com/dba/wp-content/uploads/2010/09/MERGE_Resultado.png"><img class="aligncenter size-full wp-image-673" title="MERGE_Resultado" src="http://silasmendes.com/dba/wp-content/uploads/2010/09/MERGE_Resultado.png" alt="" width="246" height="247" /></a></p>
<div>Bom trabalho, bom estudo!</div>
<div><span style="font-size: 12.0pt; font-family: &amp;amp;amp; mso-fareast-font-family: &amp;amp;amp; mso-ansi-language: PT-BR; mso-fareast-language: PT-BR; mso-bidi-language: AR-SA;"><br />
</span></div>
]]></content:encoded>
			<wfw:commentRss>http://silasmendes.com/dba/t-sql-mesclando-dados/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>5</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[Dicas]]></category>
		<category><![CDATA[SQL SERVER 2000]]></category>
		<category><![CDATA[SQL SERVER 2005]]></category>
		<category><![CDATA[SQL SERVER 2008]]></category>
		<category><![CDATA[SQL SERVER 2008 R2]]></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; title: ; notranslate">
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; title: ; notranslate">
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; title: ; notranslate">
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; title: ; notranslate">
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>Base de dados virtual</title>
		<link>http://silasmendes.com/dba/base-de-dados-virtual</link>
		<comments>http://silasmendes.com/dba/base-de-dados-virtual#comments</comments>
		<pubDate>Thu, 22 Oct 2009 18:12:38 +0000</pubDate>
		<dc:creator>Silas Mendes</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[SQL SERVER 2000]]></category>
		<category><![CDATA[SQL SERVER 2005]]></category>
		<category><![CDATA[SQL SERVER 2008]]></category>
		<category><![CDATA[SQL SERVER 2008 R2]]></category>
		<category><![CDATA[attach]]></category>
		<category><![CDATA[Backup]]></category>
		<category><![CDATA[database snapshot]]></category>
		<category><![CDATA[download]]></category>
		<category><![CDATA[GB]]></category>
		<category><![CDATA[Restore]]></category>
		<category><![CDATA[sql server 2005]]></category>
		<category><![CDATA[SQL Server 2008]]></category>
		<category><![CDATA[SQL Virtual Database]]></category>
		<category><![CDATA[Trial]]></category>

		<guid isPermaLink="false">http://silasmendes.com/dba/?p=423</guid>
		<description><![CDATA[Hoje cedo recebi um e-mail da SQL Server Magazine, com a seguinte propaganda: SQL Virtual Database: It&#8217;s As Easy As 1, 2, 3. O anúncio chamou atenção e resolvi dar uma verificada. Imagine o seguinte cenário: você tem um backup de uma base de dados SQL Server e precisa restaurá-lo pra trabalhar em cima dele. [...]]]></description>
			<content:encoded><![CDATA[<p>Hoje cedo recebi um e-mail da SQL Server Magazine, com a seguinte propaganda:</p>
<p><strong>SQL Virtual Database: It&#8217;s As Easy As 1, 2, 3.</strong></p>
<p>O anúncio chamou atenção e resolvi dar uma verificada.</p>
<p>Imagine o seguinte cenário: você tem um backup de uma base de dados SQL Server e precisa restaurá-lo pra trabalhar em cima dele. O backup tem aproximadamente <strong>180 GB</strong> e você vai precisar de algumas <em>horas </em>pra restaurá-lo.</p>
<p>Imagine agora que você tenha uma forma de “restaurar” esse backup em <strong>10 minutos</strong> e trabalhar em cima dele normalmente, como qualquer outra base de dados do SQL Server, executando consultas, procedures, realizando updates, etc. Essa é a idéia da ferramenta <em>SQL Virtual Database</em> desenvolvida pela <a href="https://www.idera.com/" target="_blank">Idera</a>.</p>
<p>Algumas pessoas poderão dizer, “ah, mas o SQL Server já tem o <strong>Database Snapshot</strong>”. Sim, a idéia é parecida, mas o Database Snapshot só pode ser gerado na mesma instância da base de origem e só está disponível a partir do SQL Server 2005 em edições Enterprise. O <strong>SQL Virtual Database</strong> gera uma base de dados virtual em <em>qualquer </em>instância (inclusive SQL Server 2000) a partir de um arquivo de backup.</p>
<p>Achei a idéia inicial muito boa (o programa está na versão beta) e de certa forma fiquei impressionado com os 9 minutos que esperei para ter uma base virtual, baseada num backup de 180 GB, que estava em outra estação da rede. Particularmente achei uma saída muito interessante pra ambientes de desenvolvimento e homologação.</p>
<p>Vou testá-la repetidamente durante os próximos 14 dias (que é o período do Trial) e se tiver mais considerações posto aqui.</p>
<p>Abaixo algumas telas da ferramenta:</p>
<p><img class="aligncenter size-full wp-image-424" title="Tela de instalação" src="http://silasmendes.com/dba/wp-content/uploads/2009/10/01sqlVirtual.PNG" alt="Tela de instalação" width="499" height="385" /></p>
<h5 style="text-align: center;"><span style="font-weight: normal;">1. Tela de instalação</span></h5>
<p style="text-align: center;"><img class="size-full wp-image-426 aligncenter" title="Attach do backup" src="http://silasmendes.com/dba/wp-content/uploads/2009/10/04sqlVirtual.PNG" alt="Attach do backup" width="503" height="305" /></p>
<h5 style="font-size: 0.83em; text-align: center;"><span style="font-weight: normal;">2. Attach do backup na instância MENDES\SQL05</span></h5>
<p style="text-align: center;">
<p style="text-align: center;"><img class="size-full wp-image-427 aligncenter" style="border: 1px solid black;" title="Base de dados anexada à instância" src="http://silasmendes.com/dba/wp-content/uploads/2009/10/05sqlVirtual.PNG" alt="Base de dados anexada à instância" width="290" height="283" /></p>
<h5 style="font-size: 0.83em; text-align: center;"><span style="font-weight: normal;">3. Base virtual anexada à instância </span></h5>
<p><span style="font-weight: normal;">Link para <a href="http://www.idera.com/Products/SQL-Server/SQL-virtual-database/" target="_blank">download</a>.</span></p>
<p><span style="font-weight: normal;">Bom trabalho!</span></p>
<p><span style="font-weight: normal;"><br />
</span></p>
]]></content:encoded>
			<wfw:commentRss>http://silasmendes.com/dba/base-de-dados-virtual/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>SQL Server via prompt de comando?</title>
		<link>http://silasmendes.com/dba/sql-server-via-prompt</link>
		<comments>http://silasmendes.com/dba/sql-server-via-prompt#comments</comments>
		<pubDate>Tue, 20 Oct 2009 20:30:02 +0000</pubDate>
		<dc:creator>Silas Mendes</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[SQL SERVER 2005]]></category>
		<category><![CDATA[SQL SERVER 2008]]></category>
		<category><![CDATA[SQL SERVER 2008 R2]]></category>
		<category><![CDATA[cmd]]></category>
		<category><![CDATA[consulta metadados]]></category>
		<category><![CDATA[DOS]]></category>
		<category><![CDATA[information_schema]]></category>
		<category><![CDATA[isql]]></category>
		<category><![CDATA[localhost]]></category>
		<category><![CDATA[Management Studio]]></category>
		<category><![CDATA[osql]]></category>
		<category><![CDATA[prompt DOS]]></category>
		<category><![CDATA[Query Analyser]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[sp_readerrorlog]]></category>
		<category><![CDATA[sp_who]]></category>
		<category><![CDATA[sql server 2005]]></category>
		<category><![CDATA[SQL Server 2008]]></category>
		<category><![CDATA[sqlcmd]]></category>

		<guid isPermaLink="false">http://silasmendes.com/dba/?p=404</guid>
		<description><![CDATA[Em minha experiência pessoal já vivi uma situação onde durante a atualização do principal sistema da empresa, nosso contato no datacenter reclamou dizendo que não conseguia abrir o Management Studio para executar nossos scripts. A solução mais rápida? Enviei para o datacenter o procedimento de execução dos scripts via SQLCMD. Mas o que é isso? [...]]]></description>
			<content:encoded><![CDATA[<p>Em minha experiência pessoal já vivi uma situação onde durante a atualização do principal sistema da empresa, nosso contato no datacenter reclamou dizendo que não conseguia abrir o <strong>Management Studio</strong> para executar nossos scripts.</p>
<p>A solução mais rápida? Enviei para o datacenter o procedimento de execução dos scripts via <strong>SQLCMD</strong>.</p>
<p>Mas o que é isso?</p>
<p>O SQLCMD é uma ferramenta que você utiliza para acessar instâncias SQL Server via prompt de comando (vulgo DOS). Não existem segredos, uma vez conectado, através de scripts você pode fazer tudo o que faria utilizando o <em>Query Analyser</em> ou o <em>Management Studio</em>. Apesar de ser uma excelente ferramenta, o SQLCMD tem suas limitações &#8220;gráficas&#8221;, no entanto em alguns cenários é a ferramenta ideal!</p>
<p>Os exemplos que vou apresentar foram executados na minha estação de trabalho. Nela tenho instalado um SQL Server 2005. Minha instância é uma instância nomeada e é identificada como SQL05.</p>
<p>Pra começar a conversa vamos ao prompt de comando (menu Iniciar &gt; Executar &gt; cmd).</p>
<p>No prompt de comando, para conectar no meu SQL local (localhost), utilizando o SQLCMD, devo digitar o seguinte comando:</p>
<blockquote><p>sqlcmd –E  –S  LOCALHOST\SQL05</p>
</blockquote>
<p>No comando acima estou conectando no SQL Server utilizando a autenticação Windows (<strong>-E</strong>) na instância SQL05 (<strong>-S</strong>), mas se for necessário conectar utilizando a autenticação do SQL Server, ficaria assim:</p>
<blockquote><p>sqlcmd  –U SA –P senhateste –S  LOCALHOST\SQL05</p>
</blockquote>
<p>No exemplo acima, estou conectando no SQL utilizando o login SA  do SQL Server (<strong>-U</strong>) com a senha  <em>senhateste </em>(<strong>-P</strong>).</p>
<p>Se a conexão for realizada com <strong>sucesso</strong> o prompt do SQLCMD ficará similar à imagem abaixo:</p>
<p><img class="aligncenter size-full wp-image-405" title="01sqlcmd" src="http://silasmendes.com/dba/wp-content/uploads/2009/10/01sqlcmd.PNG" alt="01sqlcmd" width="344" height="99" /></p>
<p>Se o seu SQL Server foi instalado como uma instância padrão a conexão é ainda mais simples, pois você não precisa especificar o nome da instância. No exemplo abaixo estamos conectando numa instância padrão do SQL Server, utilizando autenticação Windows.</p>
<blockquote><p>sqlcmd –E</p>
</blockquote>
<p>Uma vez conectado, para sair do SQLCMD podemos utilizar os clássicos <strong>EXIT </strong>ou <strong>CTRL + C</strong>.</p>
<p>Dentro do SQLCMD é importante saber que suas instruções sql só serão executadas quando você digitar um <strong>GO </strong>e confirmar com um ENTER. No exemplo abaixo eu mudei o contexto para a base de dados Northwind e logo depois executei uma consulta. Veja que ao fim de cada instrução eu adicionei um GO.</p>
<h5><img class="aligncenter size-full wp-image-406" title="02sqlcmd" src="http://silasmendes.com/dba/wp-content/uploads/2009/10/02sqlcmd.PNG" alt="02sqlcmd" width="577" height="414" /><span style="font-weight: normal;">Note que a cada GO a numeração das linhas recomeça.</span></h5>
<p>Uma vez conectado, como já citado, você poderá executar qualquer instrução SQL desde <em>selects</em>, <em>updates</em>, até a criação de bancos e tabelas ou a execução de procedures do sistema que te auxiliem a monitorar seu SQL Server, como:</p>
<p>Ler log do SQL Server</p>
<blockquote><p>sp_readerrorlog</p>
<p>go</p>
</blockquote>
<p>Verificar conexões na instância:</p>
<blockquote><p>sp_who</p>
<p>go</p>
</blockquote>
<p>Etc…</p>
<p>Combinado a isto, é possível também <strong>executar comandos do DOS</strong> <strong>dentro do SQLCMD</strong>. Para listar o C:\ basta digitar</p>
<blockquote><p>!!dir C:\</p>
</blockquote>
<p>Se quiser dar uma limpada na tela, digite:</p>
<blockquote><p>!!cls</p>
</blockquote>
<p>Como você pode notar todos os comandos do prompt DOS são precedidos por dois pontos de exclamação (<strong>!!</strong>).</p>
<p>Ok&#8230;</p>
<p>Mas digamos agora que você tenha aí um script pronto e deseja executá-lo no SQLCMD, além disso deseja gravar o resultado da execução deste script num arquivo txt. Vamos exemplificar esta situação utilizando o script abaixo que será salvo na unidade c:\ num arquivo identificado como <strong>teste.sql</strong>.</p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 2126px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">USE northwind</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 2126px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">SELECT</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 2126px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;"><span style="white-space: pre;"> </span>table_name nomeTabela,</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 2126px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;"><span style="white-space: pre;"> </span>column_name nomeColuna,</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 2126px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;"><span style="white-space: pre;"> </span>data_type tipoDaColuna,</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 2126px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;"><span style="white-space: pre;"> </span>isnull(character_set_name, &#8216;NoUnicode&#8217;) campoUnicode</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 2126px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">FROM</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 2126px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;"><span style="white-space: pre;"> </span>information_schema.columns</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 2126px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">WHERE</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 2126px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;"><span style="white-space: pre;"> </span>table_name = &#8216;Categories&#8217;</div>
<blockquote><p>USE northwind</p>
<p>&#8211; lista todas as colunas da tabela Categories da base Northwind</p>
<p>SELECT</p>
<p><span style="white-space: pre;"> </span>table_name nomeTabela,</p>
<p><span style="white-space: pre;"> </span>column_name nomeColuna,</p>
<p><span style="white-space: pre;"> </span>data_type tipoDaColuna,</p>
<p><span style="white-space: pre;"> </span>isnull(character_set_name, &#8216;NoUnicode&#8217;) campoUnicode</p>
<p>FROM</p>
<p><span style="white-space: pre;"> </span>information_schema.columns</p>
<p>WHERE</p>
<p><span style="white-space: pre;"> </span>table_name = &#8216;Categories&#8217;</p>
</blockquote>
<p>Veja como fica a linha dessa chamada utilizando o SQLCMD:</p>
<p><img class="aligncenter size-full wp-image-407" title="03sqlcmd" src="http://silasmendes.com/dba/wp-content/uploads/2009/10/03sqlcmd.PNG" alt="03sqlcmd" width="687" height="23" /></p>
<h5><span style="font-weight: normal;"><span style="color: #999999;">sqlcmd -E -S LOCALHOST\SQL05 -i&#8221;c:\teste.sql&#8221; -o&#8221;resultado.txt&#8221;</span></span></h5>
<p class="MsoNormal">O parâmetro <strong>–i</strong> indica o arquivo de entrada (INPUT),  que contém o script que será executado. O parâmetro <strong>–o</strong> indica qual será o arquivo de saída (OUTPUT), que conterá o resultado da execução.</p>
<p class="MsoNormal"> </p>
<p class="MsoNormal">Como qualquer assunto no SQL Server, este é mais um que poderíamos discorrer por páginas e mais páginas&#8230; mas por enquanto ficamos por aqui. Creio que essa introdução é o suficiente pra entendemos o potencial <span style="mso-spacerun: yes;"> </span>desta ferramenta.</p>
<p class="MsoNormal">Para obter mais informações sobre os parâmetros do <strong>SQLCMD</strong>, no prompt do DOS digite <strong>sqlcmd -?</strong> Se esse help parecer um pouco confuso você poderá acessar este <a href="http://msdn.microsoft.com/pt-br/library/ms165702.aspx" target="_blank">link </a>e ter informações mais detalhadas.</p>
<p class="MsoNormal"> </p>
<blockquote><p class="MsoNormal">É importante lembrar que o SQLCMD está disponível para o SQL Server 2005 e 2008. Para versões anteriores utilize o <em>OSQL </em>ou <em>ISQL</em>.</p>
</blockquote>
<p class="MsoNormal">Bom trabalho, bons estudos!</p>
<p class="MsoNormal"> </p>
<p class="MsoNormal">Mendes</p>
]]></content:encoded>
			<wfw:commentRss>http://silasmendes.com/dba/sql-server-via-prompt/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>70-432 em português</title>
		<link>http://silasmendes.com/dba/70-432-em-portugues</link>
		<comments>http://silasmendes.com/dba/70-432-em-portugues#comments</comments>
		<pubDate>Thu, 24 Sep 2009 14:35:19 +0000</pubDate>
		<dc:creator>Silas Mendes</dc:creator>
				<category><![CDATA[Certificação]]></category>
		<category><![CDATA[70-432]]></category>
		<category><![CDATA[books online]]></category>
		<category><![CDATA[MCTS]]></category>
		<category><![CDATA[MOC]]></category>
		<category><![CDATA[Prometric]]></category>
		<category><![CDATA[SQL Server 2008]]></category>
		<category><![CDATA[tradução]]></category>

		<guid isPermaLink="false">http://silasmendes.com/dba/?p=372</guid>
		<description><![CDATA[Hoje cedo estava olhando o site da Prometric e vi que o exame 70-432 está disponível em português. É interessante ver a Microsoft se esforçando em produzir mais conteúdo em português, acho que o maior sinal desse esforço foi a disponibilização do Books Online 2008 em nosso idioma. Sem dúvidas um grande passo. Muitos profissionais [...]]]></description>
			<content:encoded><![CDATA[<p>Hoje cedo estava olhando o site da <a href="http://www.prometric.com/" target="_blank">Prometric </a>e vi que o exame <strong>70-432</strong> está disponível em <strong>português</strong>.</p>
<p style="text-align: center;"><img class="size-full wp-image-373 aligncenter" title="70432 em português" src="http://silasmendes.com/dba/wp-content/uploads/2009/09/portugues70432.PNG" alt="70432 em português" width="257" height="247" /></p>
<p>É interessante ver a Microsoft se esforçando em produzir mais conteúdo em português, acho que o maior sinal desse esforço foi a disponibilização do <strong><a href="http://msdn.microsoft.com/pt-br/library/ms130214.aspx" target="_blank">Books Online 2008</a></strong> em nosso idioma. Sem dúvidas um grande passo.</p>
<p>Muitos profissionais não acham interessante essas provas em português e com razão, afinal a poucos anos víamos umas traduções horríveis no MOC, parecia que o trabalho não passava por uma revisão e era decepcionante ver alguns termos técnicos traduzidos.</p>
<p>Mesmo assim, se você estiver interessado em realizar a prova em português, a minha dica é: estude tudo em português, porque se você estudou <strong>&#8220;snapshot&#8221;</strong>, pode ser que na prova você encontre um <strong>&#8220;instantâneo&#8221;</strong> e se confunda. O duro é que os materiais em português são escassos, aí é outro dilema&#8230; mas fica a dica.</p>
<p>Lembrando que ao ser aprovado na 70-432 você obtém a certificação <strong>MCTS </strong>em SQL Server 2008 e este é um exame obrigatório para você chegar ao <strong>MCITP</strong>.</p>
<p>Bom trabalho e bons estudos :)</p>
]]></content:encoded>
			<wfw:commentRss>http://silasmendes.com/dba/70-432-em-portugues/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

