<?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</title>
	<atom:link href="http://silasmendes.com/dba/tag/sql-server/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>Teched 2011</title>
		<link>http://silasmendes.com/dba/teched-2011</link>
		<comments>http://silasmendes.com/dba/teched-2011#comments</comments>
		<pubDate>Thu, 06 Oct 2011 02:00:45 +0000</pubDate>
		<dc:creator>Silas Mendes</dc:creator>
				<category><![CDATA[Eventos]]></category>
		<category><![CDATA[SQL SERVER 2008]]></category>
		<category><![CDATA[SQL SERVER 2008 R2]]></category>
		<category><![CDATA[Vida Real]]></category>
		<category><![CDATA[brasil]]></category>
		<category><![CDATA[denali]]></category>
		<category><![CDATA[evento]]></category>
		<category><![CDATA[Sql Server]]></category>
		<category><![CDATA[TechEd]]></category>
		<category><![CDATA[tecnologia]]></category>

		<guid isPermaLink="false">http://silasmendes.com/dba/?p=971</guid>
		<description><![CDATA[Semana passada rolou o Teched 2011 e eu estive lá durante os 2 dias do evento. Reencontrei muitos amigos e conheci outros que só conhecia da comunidade virtual. Show de bola, fortalecendo o networking :) Assisti 8 trilhas e acho interessante tecer minhas considerações: General Session Essa foi a trilha de abertura do evento e [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://silasmendes.com/dba/wp-content/uploads/2011/10/logo-teched-2011.png"><img class="alignleft size-full wp-image-979" title="logo-teched-2011" src="http://silasmendes.com/dba/wp-content/uploads/2011/10/logo-teched-2011.png" alt="" width="265" height="121" /></a>Semana passada rolou o Teched 2011 e eu estive lá durante os 2 dias do evento. Reencontrei muitos amigos e conheci outros que só conhecia da comunidade virtual. Show de bola, fortalecendo o <em>networking</em> :)</p>
<p>Assisti 8 trilhas e acho interessante tecer minhas considerações:</p>
<p><strong>General Session</strong></p>
<p>Essa foi a trilha de abertura do evento e abordou em resumo todas as novidades do mundo Microsoft para os próximos meses. Gostei. Teve um toque de show com direito a discurso do presidente da Microsoft Brasil, algumas demos apresentando o System Center 2012, Windows Phone 7, SQL Server Denali, Office 365, Cloud, Cloud, Cloud, Cloud (isso mesmo; acho que ouvi essa palavra umas 100 vezes, risos) e etc.</p>
<p>Em especial gostei:</p>
<ul>
<li> da notícia da fabricação do XBOX no Brasil;</li>
<li>da apresentação do Windows Phone e suas aplicações;</li>
<li>do System Center interagindo com dispositivos Android e iOS;</li>
<li>dos novos relatórios (super dinâmicos) do Reporting Services sendo exibidos/editados no browser (via SharePoint).</li>
</ul>
<p>Achei esta sessão um pouco longa; durou cerca de 3 horas&#8230; mas vamos falar um pouco das outras palestras:</p>
<p><strong>O que há de novo no Microsoft SQL Server Code-Named “Denali”</strong></p>
<p>Foi a segunda palestra que assisti e sinceramente, foi decepcionante. Não posso avaliar o conhecimento dos palestrantes, mas o conteúdo e a apresentação estavam muito aquém do que se espera de um evento desse porte. Sai dessa trilha na esperança de que o nível melhorasse nas próximas&#8230; e melhorou.</p>
<p><strong>Como montar um ambiente de alta disponibilidade com o Hyper-V</strong></p>
<p>O palestrante Rodrigo Immaginario mandou muito bem nessa sessão, abordando as vantagens e desvantagens das diferentes formas de implementação de um cluster + Hyper-V. O cara acessou o ambiente de produção dele no Espírito Santo e fez um <em>live migration</em> “no quente”. Gostei.</p>
<p><strong>Microsoft SQL Server Code-Named “Denali” AlwaysOn: Introduzindo a nova geração de soluções para alta disponibilidade</strong></p>
<p>Uma das melhores trilhas que assisti&#8230; Nilton Pinheiro fez uma  apresentação impecável da nova <em>feature</em> de alta disponibilidade do Denali: <strong><em>AlwaysOn</em></strong>. Foi nesta trilha que descobri algo muito interessante no Denali: agora poderemos instalar o SQL Server num Windows Server Core! Bacana!</p>
<p>No 2º dia assisti as seguintes trilhas:</p>
<p><strong>T-SQL: o que você deve saber do Microsoft SQL Server 2008 R2 e as novidades do SQL Server Code-Named “Denali”</strong></p>
<p>Excelente trilha com o Gustavo Maia. O cara apresentou com muita propriedade as novidades da linguagem T-SQL no SQL Server 2008 R2 e Denali, fazendo comparativos entre SGBDs, apresentando dados históricos, e etc. Enfim, essa palestra foi muito bacana porque eu ainda não tinha parado pra olhar as novidades do T-SQL no Denali; somou muito!</p>
<p><strong>Boas práticas para o SQL Server em ambientes virtualizados</strong></p>
<p>O palestrante Airton Leal mandou muito bem; era nítido o domínio do cara nas tecnologias de virtualização e ele deu dicas preciosíssimas para quem quer trabalhar com ambiente virtualizado. Uma informação muito interessante que ele disponibilizou: se você tem um sistema rodando numa maquina física e deseja transporta-lo para uma maquina virtual, esteja ciente que o <em>overhead </em>mínimo no desempenho será de 12%. Essa informação foi bem bacana, porque muita gente defende que não tem custo nenhum; afirmação que para mim sempre pareceu bem absurda. O único ponto que achei muito estranho nessa palestra: o título! Tudo era focado em boas práticas para ambientes virtualizados, porém, nada focado em SQL Server. Mesmo assim, somou!</p>
<p><strong>Cenários de otimização com o SQL Server “Denali” e 2008</strong></p>
<p>Trilha de alto nível técnico com o Luti e Fabiano Amorim&#8230; os caras deram dicas preciosas de otimização, todas muito bem argumentadas e demonstradas. Se eu não tivesse feito o curso de <em>internals</em> e de índices (com o Luti), diria que essa teria sido, para mim, a melhor trilha do evento, pois em 1 hora, os caras deram informações que você não encontra na maioria dos livros de <em>tunning</em>. Muito bom mesmo!</p>
<p><strong>Raio-X do SQL Server: Arquitetura interna do gerenciador de banco de dados</strong></p>
<p>Outra trilha fantástica! Inicialmente não tinha me programado para assistir essa palestra, porque fiz o curso de internals recentemente; mas mudei os planos mais na curiosidade e fui surpreendido pela apresentação do Catae e do Felipe Pimenta&#8230; em 1 hora os caras conseguiram resumir e discorrer sobre os principais pilares da arquitetura do SQL Server. Muita gente saiu dessa trilha com o cérebro fritando, mas os palestrantes foram ótimos e se esforçaram em serem o mais didático possível. Fechei o Teched com 2 trilhas nível 400 de verdade :)</p>
<p><strong>Conclusão</strong></p>
<p>O evento foi muito bom, com excelente organização e pontualidade. A maioria dos palestrantes eram “feras” e isso enriqueceu muito a experiência. Agora a pergunta que muita gente me faz: “voltaria ao evento em 2012?”. E eu respondo: o evento é muito bom, porém ainda acho que não vale o preço (principalmente quando o profissional paga do próprio bolso, risos). Enfim, poderiam dar uma melhorada no valor; ou quem sabe, no próximo ano, meu cliente resolve pagar essa conta; afinal ele é um dos principais beneficiados com esse investimento :D</p>
]]></content:encoded>
			<wfw:commentRss>http://silasmendes.com/dba/teched-2011/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>O que é SQL?</title>
		<link>http://silasmendes.com/dba/o-que-e-sql</link>
		<comments>http://silasmendes.com/dba/o-que-e-sql#comments</comments>
		<pubDate>Tue, 26 Jul 2011 14:52:09 +0000</pubDate>
		<dc:creator>Silas Mendes</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[ORACLE]]></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[SQL SERVER 7]]></category>
		<category><![CDATA[banco de dados relacional]]></category>
		<category><![CDATA[db2]]></category>
		<category><![CDATA[gerenciador de banco de dados]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[plsql]]></category>
		<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[sgbd]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[Sql Server]]></category>
		<category><![CDATA[T-SQL]]></category>

		<guid isPermaLink="false">http://silasmendes.com/dba/?p=949</guid>
		<description><![CDATA[Pra começar você precisa saber que SQL não é um banco de dados; SQL é um idioma (entre especialistas costumamos substituir o termo “idioma” por “linguagem”). A sigla SQL significa Structured Query Language; em português: linguagem de consulta estruturada. Destaquei o “consulta” porque o foco dela é justamente isso: consultar! Os bancos de dados (ou [...]]]></description>
			<content:encoded><![CDATA[<p>Pra começar você precisa saber que SQL não é um banco de dados; SQL é um idioma (entre especialistas costumamos substituir o termo “idioma” por “linguagem”). A sigla SQL significa <em><strong>Structured Query Language</strong></em>; em português: linguagem de <span style="color: #ff6600;"><strong>consulta </strong></span>estruturada. Destaquei o “consulta” porque o foco dela é justamente isso: consultar!</p>
<p><em><a href="http://silasmendes.com/dba/wp-content/uploads/2011/07/torre-de-babel.jpg"><img class="alignleft size-full wp-image-950" title="torre-de-babel" src="http://silasmendes.com/dba/wp-content/uploads/2011/07/torre-de-babel.jpg" alt="" width="260" height="401" /></a></em>Os bancos de dados (ou gerenciadores de bancos de dados) nasceram antes da linguagem SQL e cada qual tinha sua própria linguagem de consulta. Logo os usuários e fabricantes notaram que essa torre de babel não era interessante e optaram pela criação de um único idioma para consultar bancos de dados relacionais (em outra oportunidade falaremos sobre os bancos dimensionais). O órgão <em>American National</em> <em>Standards Institute </em>(ANSI) ficou responsável pela padronização desta linguagem e de tempos em tempos realiza encontros entre fabricantes para discutir a linguagem SQL e propor melhorias; no entanto esta padronização não impede que cada fabricante personalize a linguagem SQL para atender suas necessidades, e é aí que surgem os dialetos.  Por exemplo, o &#8220;dialeto&#8221; do gerenciador de banco de dados Oracle é o PL/SQL; o do SQL Server é o T-SQL (transact SQL) e etc.</p>
<p><span style="color: #ff0000;">Agora é importante que você não confunda a linguagem SQL com gerenciadores de banco de dados! Isso é um erro muito comum!</span></p>
<p><span style="color: #ff0000;"> </span></p>
<p>Por exemplo, o gerenciador de banco de dados Microsoft SQL Server (como o nome já diz), é um programa que gerencia bancos de dados. A arquitetura dos sistemas gerenciadores de bancos de dados (SGBDs) é definida de forma que os dados possam estar sempre consistentes e que sejam recuperados da forma mais rápida possível! Digamos que estes são itens de série de qualquer SGBD. Para tornar os gerenciadores de bancos de dados ainda mais atraentes, os fabricantes adicionam outras inúmeras funcionalidades para facilitar o trabalho dos DBAs, aumentar a segurança, a disponibilidade e etc.</p>
<p>Hoje existem diversos gerenciadores de <a href="http://silasmendes.com/dba/wp-content/uploads/2011/07/sgbds.png"><img class="size-medium wp-image-955 alignright" title="sgbds" src="http://silasmendes.com/dba/wp-content/uploads/2011/07/sgbds-300x205.png" alt="" width="300" height="205" /></a>bancos de dados disponíveis no mercado, como o Oracle, o Microsoft SQL Server, o PostgreSQL, entre outros. <strong>Todos utilizam a linguagem SQL para consultar dados</strong>.</p>
<p>A grande dúvida que paira na cabeça de alguns profissionais de TI é: qual o melhor banco de dados? SQL Server? Oracle?! DB2?</p>
<p>O que eu digo é o seguinte: o melhor gerenciador de banco de dados é aquele que atende adequadamente o seu negócio. É como comprar um carro: você compraria uma Ferrari para fazer <em>rally</em>?! Compraria um Fusca para fazer uma longa viagem pelo Brasil?</p>
<p><strong>Conclusão</strong></p>
<p>SQL é uma linguagem de consulta a bancos de dados relacionais. No mercado atual existem inúmeros sistemas gerenciadores de bancos de dados relacionais (comumente chamados apenas pela sigla SGBD); podemos citar como exemplo o Oracle, Microsoft SQL Server, DB2, etc. Estes gerenciadores de bancos de dados utilizam a linguagem SQL para consultar os dados; porém, adicionam à esta linguagem soluções para atender suas particularidades e aí nascem dialetos como o PL/SQL, PL/pgSQL e o T-SQL.</p>
<p>Nos próximos posts falaremos mais sobre a linguagem SQL e os gerenciadores de bancos de dados.</p>
<p>Para conhecer mais detalhes sobre a linguagem SQL, <a href="http://silasmendes.com/dba/dml-ddl-o-que-e-isso" target="_blank">dê uma olhada nesse post</a> e fique familiarizado com outras siglas populares no mundo SQL como: DDL e DML!</p>
<p>Até +</p>
]]></content:encoded>
			<wfw:commentRss>http://silasmendes.com/dba/o-que-e-sql/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Backup FULL reinicia sequência do LOG. Mito?</title>
		<link>http://silasmendes.com/dba/mito-backup-full-e-log</link>
		<comments>http://silasmendes.com/dba/mito-backup-full-e-log#comments</comments>
		<pubDate>Sat, 30 Apr 2011 15:50:46 +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[Backup]]></category>
		<category><![CDATA[copy_only]]></category>
		<category><![CDATA[internals]]></category>
		<category><![CDATA[LSN]]></category>
		<category><![CDATA[mito]]></category>
		<category><![CDATA[Restore]]></category>
		<category><![CDATA[Sql Server]]></category>

		<guid isPermaLink="false">http://silasmendes.com/dba/?p=905</guid>
		<description><![CDATA[Olá, No mês de Abril fiz o curso de SQL Server Internals com o Luciano Moreira, mais conhecido na comunidade como Luti; não vou me estender muito neste assunto, mas se você é um DBA SQL Server, recomendo fortemente que faça este curso. Excelente&#8230; Mas vamos ao foco do nosso post. Durante o curso de [...]]]></description>
			<content:encoded><![CDATA[<p>Olá,</p>
<p>No mês de Abril fiz o curso de SQL Server Internals com o <a href="http://luticm.blogspot.com/" target="_blank">Luciano Moreira</a>, mais conhecido na comunidade como Luti; não vou me estender muito neste assunto, mas se você é um DBA SQL Server, recomendo fortemente que faça este curso. Excelente&#8230;</p>
<p>Mas vamos ao foco do nosso post. Durante o curso de <em>internals </em>alguns mitos foram por água abaixo; um deles foi  “Ao realizar um backup full, perdemos a sequência do log”.</p>
<p>Verdade? Sim ou Não?</p>
<p>Bom, confesso que eu sempre tive isso como verdade absoluta e tenho certeza que outros inúmeros DBAs SQL Server pensam o mesmo; mas a verdade é que <strong>não</strong>, realizar um backup full não quebra a sequência do seu log. Mas falando assim não tem graça né, vamos testar a brincadeira:</p>
<p>Primeiro criamos um banco para nosso teste (<em>no fim do post está o script completo do nosso teste</em>):</p>
<pre class="brush: sql; title: ; notranslate">
CREATE DATABASE testeBackup
</pre>
<p>Por padrão o SQL Server criar o banco com o <em>recovery model</em> <strong>FULL</strong> (exceto na edição <em>Express</em>). Isto é importante para o nosso teste já que iremos realizar backup do log. Para confirmar:</p>
<pre class="brush: sql; title: ; notranslate">
-- Recovery Model = FULL
SELECT recovery_model_desc
FROM sys.databases
WHERE NAME LIKE 'testeBackup'
</pre>
<p>Vamos criar uma tabela para nossos testes e realizar nosso primeiro backup FULL:</p>
<pre class="brush: sql; title: ; notranslate">
USE testeBackup

-- Cria tabela
CREATE TABLE registroBackup
	(id INT IDENTITY,
	registro VARCHAR(50))

-- Realiza backup FULL
BACKUP DATABASE testeBackup
TO DISK = 'C:\testeBackupFULL.bak' WITH INIT
</pre>
<p>Agora utilizando uma estrutura de repetição inserimos 1 registro na tabela e realizamos um backup de log. Isso repetirá por 5 vezes:</p>
<pre class="brush: sql; title: ; notranslate">
DECLARE @i INT

SET @i = 1

WHILE @i &lt;= 5
BEGIN
	-- Insere registro
	INSERT INTO registroBackup
	VALUES ('Antes do '+CAST(@i AS VARCHAR(2))+'º backup de LOG')
	-- Realiza backup de log
	BACKUP LOG testeBackup
	TO DISK = 'C:\testeBackupLOG.bak'
	WITH NOINIT
	-- Incrementa contador
	SET @i = @i + 1
END
</pre>
<p>Verificamos então os registros inseridos na tabela:</p>
<pre class="brush: sql; title: ; notranslate">
SELECT * FROM registroBackup
</pre>
<p><strong>Resultado:</strong><br />
<a href="http://silasmendes.com/dba/wp-content/uploads/2011/04/01_post_backup.png"><img class="aligncenter size-full wp-image-908" title="01_post_backup" src="http://silasmendes.com/dba/wp-content/uploads/2011/04/01_post_backup.png" alt="" width="218" height="148" /></a></p>
<p>E verificamos os nossos backups de log:</p>
<pre class="brush: sql; title: ; notranslate">
RESTORE HEADERONLY FROM DISK = 'C:\testeBackupLOG.bak'
</pre>
<p><strong>Resultado:</strong><br />
<a href="http://silasmendes.com/dba/wp-content/uploads/2011/04/02_post_backup.png"><img class="aligncenter size-medium wp-image-911" title="02_post_backup" src="http://silasmendes.com/dba/wp-content/uploads/2011/04/02_post_backup-300x69.png" alt="" width="300" height="69" /></a></p>
<p>Como verificamos temos aí 5 registros e 5 backups de log.</p>
<p>Agora realizamos um novo backup FULL:</p>
<pre class="brush: sql; title: ; notranslate">
BACKUP DATABASE testeBackup
TO DISK = 'C:\testeBackupFULL_2.bak' WITH INIT
</pre>
<p>E repetimos a execução do laço:</p>
<pre class="brush: sql; title: ; notranslate">
DECLARE @i INT

SET @i = 6

WHILE @i &lt;= 10
BEGIN
	-- Insere registro
	INSERT INTO registroBackup
	VALUES ('Antes do '+CAST(@i AS VARCHAR(2))+'º backup de LOG')

-- Realiza backup de log
	BACKUP LOG testeBackup
	TO DISK = 'C:\testeBackupLOG.bak'
	WITH NOINIT

-- Incrementa contador
	SET @i = @i + 1
END
</pre>
<p>Ao fim temos 10 registros em nossa tabela, 10 backups de LOG e 2 backups FULL.</p>
<p>Agora entra a figura do estagiário que exclui o segundo arquivo de backup FULL&#8230; (sacanagem, rss)</p>
<p>Segundo a lenda, isso inválida todos os backups de log posteriores e teríamos que realizar um backup FULL imediatamente, porque ao realizar o segundo backup FULL perderíamos a seqüência do log.  Certo? Bom&#8230; vamos testar:</p>
<p>Excluímos  a base de dados:</p>
<pre class="brush: sql; title: ; notranslate">
USE MASTER
GO
DROP DATABASE testeBackup
</pre>
<p>E restauramos os backups (FULL + LOGs) <strong>ignorando o segundo backup FULL</strong>:</p>
<pre class="brush: sql; title: ; notranslate">
RESTORE DATABASE testeBackup
FROM DISK = 'C:\testeBackupFULL.bak' -- primeiro backup FULL
WITH NORECOVERY

-- Restauramos os 10 arquivos de log

DECLARE @i INT
SET @i = 1

WHILE @i &lt;= 10
BEGIN

	RESTORE LOG testeBackup
	FROM DISK = 'C:\testeBackupLOG.bak'
	WITH FILE = @i, NORECOVERY

	SET @i = @i + 1

END

	RESTORE DATABASE testeBackup
	WITH RECOVERY -- colocamos a base em operação
</pre>
<p>Verifique que restauramos os 10 registros de nossa tabela:</p>
<pre class="brush: sql; title: ; notranslate">
USE testeBackup
SELECT COUNT(*) FROM registroBackup
</pre>
<p><strong>Resultado:</strong><br />
<a href="http://silasmendes.com/dba/wp-content/uploads/2011/04/03_post_backup.png"><img class="aligncenter size-full wp-image-912" title="03_post_backup" src="http://silasmendes.com/dba/wp-content/uploads/2011/04/03_post_backup.png" alt="" width="142" height="45" /></a></p>
<p>Enfim, note que a realização do 2º backup FULL não quebrou a seqüência dos nossos backups de log!</p>
<p>Agora a pergunta que não quer calar: qual a função do parâmetro de backup <strong>COPY_ONLY</strong> lançado a partir do SQL Server 2005?!</p>
<p>Um backup diferencial tem <strong>total dependência do último backup FULL</strong>; logo, se você perder o backup FULL anterior, não será possível restaurar o diferencial, mesmo com um FULL mais antigo. Então pense numa situação que você precise de um backup FULL adicional, mas não deseja que ele afete seus próximos backups diferenciais (que deverão continuar utilizando como referência o backup FULL anterior), então aqui utilizaríamos o <strong>COPY_ONLY</strong>.</p>
<p>Resumindo: Os backups diferenciais posteriores iram ignorar um backup FULL com COPY_ONLY.</p>
<p><strong>CONCLUSÃO</strong></p>
<p>Backup FULL não altera a sequência dos backups de LOG. Se você perdeu seu último backup FULL, mas tem um do mês passado e de lá pra cá todos os seus backups de LOG estão intactos, não se desespere! Você conseguirá restaurar seu backup.</p>
<p>PS: Obrigado <a href="http://luticm.blogspot.com/" target="_blank">Luti </a>pela super dica :D</p>
<p><strong>Disponibilizei o script completo deste teste <a href="http://dl.dropbox.com/u/27222507/DiarioDBA/Script_POST_mito-backup-full-e-log.sql" target="_blank">aqui</a>.</strong></p>
<p>Até +</p>
]]></content:encoded>
			<wfw:commentRss>http://silasmendes.com/dba/mito-backup-full-e-log/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Solucionando usuários orfãos</title>
		<link>http://silasmendes.com/dba/resolvendo-usuarios-orfaos</link>
		<comments>http://silasmendes.com/dba/resolvendo-usuarios-orfaos#comments</comments>
		<pubDate>Tue, 18 Jan 2011 09:44:38 +0000</pubDate>
		<dc:creator>Silas Mendes</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Erros $#$%!]]></category>
		<category><![CDATA[Programação]]></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[duplicado]]></category>
		<category><![CDATA[login]]></category>
		<category><![CDATA[orfão]]></category>
		<category><![CDATA[sp_change_users_login]]></category>
		<category><![CDATA[Sql Server]]></category>
		<category><![CDATA[usuário]]></category>

		<guid isPermaLink="false">http://silasmendes.com/dba/?p=838</guid>
		<description><![CDATA[Um problema comum: Você restaura um backup numa nova instância e ao tentar conceder as permissões para seus usuários encontra o seguinte erro: User, group, or role &#8216;nome_do_usuario&#8216; already exists in the current database. (No fim deste post está disponível um arquivo contendo base e scripts utilizados neste cenário.) Ou seja, o login já existe na [...]]]></description>
			<content:encoded><![CDATA[<p>Um problema comum:</p>
<p>Você restaura um backup numa nova instância e ao tentar conceder as permissões para seus usuários encontra o seguinte erro:</p>
<p><span style="color: #ff0000;">User, group, or role &#8216;<em>nome_do_usuario</em>&#8216; already exists in the current database.</span></p>
<blockquote>
<h5><strong><em>(No fim deste post está disponível um arquivo contendo base e scripts utilizados neste cenário.)</em></strong></h5>
</blockquote>
<p>Ou seja, o login já existe na instância e ao tentar defini-lo como usuário da base, o SQL reclama que ele <span style="text-decoration: underline;"><em>já é</em></span> um usuário da base de dados; no entanto, ao tentar conectar no banco com este usuário o SQL Server adverte que o mesmo não tem permissões para se conectar:</p>
<div id="_mcePaste"><span style="color: #ff0000;">Msg 916, Level 14, State 1, Line 1</span></div>
<div id="_mcePaste"><span style="color: #ff0000;">The server principal &#8220;<em>nome_do_usuario</em>&#8221; is not able to access the database &#8220;<em>nome_do_banco</em>&#8221; under the current security context.</span></div>
<p>&#8230; assim não é possível conceder permissões ao usuário e nem utilizá-lo.</p>
<p><img class="alignright size-full wp-image-843" title="orfao_" src="http://silasmendes.com/dba/wp-content/uploads/2011/01/orfao_.jpg" alt="" width="186" height="285" /></p>
<p>Normalmente este problema ocorre porque o login em questão já era usuário da base de dados em sua instância de origem. Ao restaurar o backup em outra instância, onde o mesmo login existe, o SQL Server não estabele um link automático entre o login pré-existente e o usuário que veio junto com base restaurada; assim surgem os <strong>usuários órfãos</strong>.</p>
<p>Veja que é um problema muito comum, no entanto, muitas pessoas tentam resolve-lo apagando o usuário da base e recriando novamente a partir do login; no entanto, ao fazer isto, perceba que perdemos todas as configurações atribuídas àquele usuário na base determinada, como permissões e etc.</p>
<p>Para solucionar este problema adequadamente utilizamos o procedimento: <strong>sp_change_users_login</strong></p>
<p>Inicialmente podemos executar a procedure (dentro da base restaurada) com o seguinte parâmetro:</p>
<pre class="brush: sql; title: ; notranslate">
EXEC sp_change_users_login 'Report';
</pre>
<p>Com este parâmetro o procedimento irá mostrar todos os usuários órfãos da sua base; ou seja, usuários que existem na sua base de dados, mas que não possuem um login correspondente:</p>
<p><a href="http://silasmendes.com/dba/wp-content/uploads/2011/01/post_orfao.png"><img class="aligncenter size-full wp-image-852" title="post_orfao" src="http://silasmendes.com/dba/wp-content/uploads/2011/01/post_orfao.png" alt="" width="336" height="70" /></a></p>
<p>Para solucionar efetivamente o problema, executamos a procedure com diferentes parâmetros. No exemplo abaixo, executamos a procedure passando como parâmetro o nome do usuário órfão e o login correspondente. Ao executá-lo, o SQL Server estabelece uma relação entre ambos:</p>
<pre class="brush: sql; title: ; notranslate">
EXEC sp_change_users_login
	'Update_One',
	'usuario42', 'usuario42';
</pre>
<p>Note que <strong>o nome do login e do usuário não precisam ser iguais</strong>, no entanto é muito comum utilizamos o mesmo nome para logins e usuários, então para abreviar a solução podemos utilizar somente:</p>
<pre class="brush: sql; title: ; notranslate">
EXEC sp_change_users_login 'Auto_Fix', 'usuario42';
</pre>
<p>Assim o SQL Server entende que a relação deverá ocorrer entre um usuário e um login de mesmo nome.</p>
<p>Este procedimento pode ser utilizado também quando você possuir um usuário, mas ainda não possuir um login correspondente criado; assim em um único comando é possível cadastrar o novo login, atribuir sua senha  e estabeler a relação entre eles; veja o exemplo:</p>
<pre class="brush: sql; title: ; notranslate">
EXEC sp_change_users_login
	'Auto_Fix',
	'usuario42', NULL,
	'@#mochil3ir0'; -- senha
</pre>
<p><strong>Conclusão</strong></p>
<p>Neste post entendemos o que são usuários orfãos e como estabeler vínculos entre logins e usuários de banco de dados utilizando o procedimento <strong>sp_change_users_login</strong>. Este procedimento tem diferentes comportamentos de acordo com os parâmetros passados. Utilizar este procedimento simplifica a configuração da sua base de dados e mantém todas as características de seus usuários previamente configuradas.</p>
<p>Para simular este erro e sua solução, <a href="http://silasmendes.com/dba/wp-content/uploads/2011/01/EXEMPLO_usuário_orfão.zip">baixe este arquivo</a> contendo a base e script do cenário.</p>
<p>Até +</p>
]]></content:encoded>
			<wfw:commentRss>http://silasmendes.com/dba/resolvendo-usuarios-orfaos/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>BEGIN TRANSACTION 2011</title>
		<link>http://silasmendes.com/dba/begin-transaction-2011</link>
		<comments>http://silasmendes.com/dba/begin-transaction-2011#comments</comments>
		<pubDate>Thu, 13 Jan 2011 12:19:24 +0000</pubDate>
		<dc:creator>Silas Mendes</dc:creator>
				<category><![CDATA[Vida Real]]></category>
		<category><![CDATA[ano novo]]></category>
		<category><![CDATA[MCITP]]></category>
		<category><![CDATA[ocp]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Sql Server]]></category>

		<guid isPermaLink="false">http://silasmendes.com/dba/?p=773</guid>
		<description><![CDATA[Um belo ano terminou e agora 2011 começa efetivamente pra mim. E já começou em ritmo alucinante com o nascimento da minha filha (vide post anterior); sem dúvidas uma experiência marcante, sensacional e indescritível. Apesar das noites sem sono (sim, já estou passando por essa fase, risos) a sensação é de que um evento que [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://silasmendes.com/dba/wp-content/uploads/2011/01/Feliz-2011-Ano-Novo-7.jpg"><img class="alignleft size-medium wp-image-777" title="Feliz-2011" src="http://silasmendes.com/dba/wp-content/uploads/2011/01/Feliz-2011-Ano-Novo-7-300x233.jpg" alt="" width="300" height="233" /></a>Um belo ano terminou e agora 2011 começa efetivamente pra mim. E já começou em ritmo alucinante com o nascimento da minha filha (<a href="http://silasmendes.com/dba/hidaddy" target="_blank">vide <em>post</em> anterior</a>); sem dúvidas uma experiência marcante, sensacional e indescritível. Apesar das noites sem sono (sim, já estou passando por essa fase, risos) a sensação é de que um evento que foge a nossa razão está ocorrendo a cada momento&#8230; e a gente percebe que tudo irá mudar daqui pra frente, e isso é <strong><em>fantástico</em></strong>!</p>
<p>Mas enfim, falando um pouco sobre profissão e bancos de dados, posso dizer que 2010 foi um ano memorável. Adquiri muito conhecimento, tanto em SQL Server como em Oracle. O SQL Server continua a minha principal plataforma de banco de dados, mas foi interessante estender o olhar para outro gerenciador e notar as diferenças, pontos fortes e fracos de ambos&#8230; percebi que é muito importante ter referências; afinal quando temos um único ponto de vista, não podemos falar com propriedade de outros&#8230;</p>
<p>Além disso entrei num projeto onde estou rodeado de uma dezena de DBAs. Além de excelentes contatos (risos), conquistei muitos amigos. Um ambiente assim é um sonho pra qualquer pessoa que deseja se desenvolver ainda mais. Implantamos a primeira parte de um sistema em produção, o processo exigiu muito esforço mas entrou no ar e foi gratificante.</p>
<p>Aqui no blog foram aproximadamente 3000 visitas por mês, pode parecer pouco, mas pra quem começou sem qualquer pretensão é um belo número!</p>
<p>Mas 2011 promete muito mais&#8230;</p>
<p>Pretendo escrever um pouco mais por aqui, tentando manter uma freqüência de pelo menos 2 posts por mês&#8230; aqui no projeto teremos o desafio de implantar a segunda parte do sistema em produção&#8230; último semestre da faculdade, junto com apresentação do TCC&#8230; quero adquirir mais uns MCITPs (e quem sabe um OCA) e enfim&#8230;</p>
<p>Se parar pra pensar é muita coisa pra fazer em 300 e poucos dias&#8230; mas vamos lá! Saúde e entusiasmo pra todos nós!</p>
<pre class="brush: sql; title: ; notranslate">
BEGIN TRANSACTION 2011
</pre>
]]></content:encoded>
			<wfw:commentRss>http://silasmendes.com/dba/begin-transaction-2011/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ho Ho Ho!!!</title>
		<link>http://silasmendes.com/dba/ho-ho-ho</link>
		<comments>http://silasmendes.com/dba/ho-ho-ho#comments</comments>
		<pubDate>Fri, 24 Dec 2010 11:02:58 +0000</pubDate>
		<dc:creator>Silas Mendes</dc:creator>
				<category><![CDATA[Bla bla bla]]></category>
		<category><![CDATA[Vida Real]]></category>
		<category><![CDATA[boas festas]]></category>
		<category><![CDATA[felicidades]]></category>
		<category><![CDATA[feliz natal]]></category>
		<category><![CDATA[print]]></category>
		<category><![CDATA[Sql Server]]></category>

		<guid isPermaLink="false">http://silasmendes.com/dba/?p=755</guid>
		<description><![CDATA[:))))]]></description>
			<content:encoded><![CDATA[<p><span style="font-family: Consolas, Monaco, 'Courier New', Courier, monospace; line-height: 18px; font-size: 12px; white-space: pre;"> </span></p>
<pre class="brush: sql; title: ; notranslate">
USE BOAS_FESTAS
GO
PRINT 'FELIZ NATAL!!!!!!!'
GO
</pre>
<p>:))))</p>
]]></content:encoded>
			<wfw:commentRss>http://silasmendes.com/dba/ho-ho-ho/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Movimentando arquivos da base de dados</title>
		<link>http://silasmendes.com/dba/movimentando-arquivos</link>
		<comments>http://silasmendes.com/dba/movimentando-arquivos#comments</comments>
		<pubDate>Mon, 20 Dec 2010 21:15:43 +0000</pubDate>
		<dc:creator>Silas Mendes</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Vida Real]]></category>
		<category><![CDATA[ALTER DATABASE]]></category>
		<category><![CDATA[arquivo]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[datafile]]></category>
		<category><![CDATA[log]]></category>
		<category><![CDATA[move]]></category>
		<category><![CDATA[movimentar]]></category>
		<category><![CDATA[offline]]></category>
		<category><![CDATA[online]]></category>
		<category><![CDATA[Sql Server]]></category>

		<guid isPermaLink="false">http://silasmendes.com/dba/?p=743</guid>
		<description><![CDATA[Uma das atividades que pontuam a rotina de um DBA é a movimentação de arquivos de bancos de dados; normalmente resultado de falta de espaço em disco, mudança de arquitetura, otimização e etc. Nosso cenário: Os arquivos de dados e log da base de dados MoveArquivo estão no mesmo disco. Para otimizar a performance decidimos [...]]]></description>
			<content:encoded><![CDATA[<p>Uma das atividades que pontuam a rotina de um DBA é a movimentação de arquivos de bancos de dados; normalmente resultado de falta de espaço em disco, mudança de arquitetura, otimização e etc.</p>
<p><strong>Nosso cenário</strong>: Os arquivos de dados e log da base de dados <strong>MoveArquivo</strong> estão no mesmo disco. Para otimizar a performance decidimos movimentar o arquivo de log para outro disco.</p>
<p>Existem diversos meios de realizar esta tarefa, a seguir iremos analisar uma delas (e a que particularmente acho mais prática):</p>
<p><strong>“Mão na massa”</strong></p>
<p>Primeiro, precisamos ter algumas informações em mãos; por exemplo, o nome lógico do arquivo que será alterado e o local atual do arquivo de log de nossa base de dados:</p>
<p>Para isso podemos utilizar o comando <strong>sp_helpdb</strong>:</p>
<p><a href="http://silasmendes.com/dba/wp-content/uploads/2010/12/01_move_arquivo1.jpg"><img class="aligncenter size-full wp-image-745" title="01_move_arquivo" src="http://silasmendes.com/dba/wp-content/uploads/2010/12/01_move_arquivo1.jpg" alt="" width="708" height="60" /></a></p>
<p>Ok; já sabemos onde está nosso arquivo de log. Agora precisamos alterar este endereço e para isto utilizamos o seguinte comando:</p>
<pre class="brush: sql; title: ; notranslate">
USE MASTER
GO
ALTER DATABASE MoveArquivo
MODIFY FILE (NAME = 'MoveArquivo_log', FILENAME = 'E:\SQLDbs\Log\MoveArquivo_log.ldf')
GO
</pre>
<p>Após execução do comando temos a seguinte mensagem:</p>
<p><span style="color: #ff0000;">The file &#8220;MoveArquivo_log&#8221; has been modified in the system catalog. <strong>The new path will be used the next time the database is started.</strong></span><strong></strong></p>
<p>Temos então, numa tradução livre, o alerta: <em>“O novo caminho só será utilizado após reinicialização da base”</em>. Então fique atento! Este comando não alterou efetivamente o endereço físico do arquivo; para concluir a operação precisamos reiniciar a base.</p>
<p>Para não afetarmos a operação dos outros bancos da instância e para reduzirmos o tempo de parada, não vamos mexer com o serviço do SQL Server; vamos apenas alterar o estado da base de dados, deixando-a offline:</p>
<pre class="brush: sql; title: ; notranslate">
ALTER DATABASE MoveArquivo
SET offline
GO
</pre>
<p>Após execução deste comando a base fica indisponível para qualquer usuário e agora podemos copiar fisicamente o arquivo de log para seu novo endereço. Neste momento, através de um CTRL + C, CTRL+ V (ou qualquer outro meio de copiar um arquivo no Windows) copiamos o arquivo para seu novo endereço.</p>
<blockquote><p><em>Atenção: tenha certeza de copiar o arquivo para o mesmo endereço informado no primeiro comando ALTER DATABASE.</em></p></blockquote>
<p>Finalizada a cópia, podemos reiniciar nossa base de dados com o seguinte comando:</p>
<pre class="brush: sql; title: ; notranslate">
ALTER DATABASE MoveArquivo
SET online
GO
</pre>
<p>Pronto! Arquivo de log movimentado para novo endereço.</p>
<p>O mesmo procedimento pode ser utilizado para outros tipos de arquivos (como arquivos de dados). Para as bases de sistema (MASTER, TEMPDB, etc) não será possível utilizar a opção SET ONLINE/OFFLINE; neste caso teremos que reiniciar o serviço do SQL Server, afetando a disponibilidade de toda instância.</p>
<p>Até +</p>
]]></content:encoded>
			<wfw:commentRss>http://silasmendes.com/dba/movimentando-arquivos/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Livros</title>
		<link>http://silasmendes.com/dba/livros</link>
		<comments>http://silasmendes.com/dba/livros#comments</comments>
		<pubDate>Mon, 18 Oct 2010 14:30:30 +0000</pubDate>
		<dc:creator>Silas Mendes</dc:creator>
				<category><![CDATA[Bla bla bla]]></category>
		<category><![CDATA[Certificação]]></category>
		<category><![CDATA[livro]]></category>
		<category><![CDATA[MCTS]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Sql Server]]></category>
		<category><![CDATA[vender]]></category>

		<guid isPermaLink="false">http://silasmendes.com/dba/?p=714</guid>
		<description><![CDATA[Livros são ótimas companhias e se eu pudesse não me desfaria de nenhum&#8230; no entanto meu apartamento anda meio abarrotado :) Estou colocando a venda a preços bem camaradas alguns livros da minha prateleira. Os preços variam de R$ 4,00 a R$ 25,00; a maioria relacionada com bancos de dados. Se quiser dar uma olhada, clique [...]]]></description>
			<content:encoded><![CDATA[<div>
<p>Livros são ótimas companhias e se eu pudesse não me desfaria de nenhum&#8230; no entanto meu apartamento anda meio abarrotado :)</p>
<p>Estou colocando a venda a preços bem camaradas alguns livros da minha prateleira. Os preços variam de R$ 4,00 a R$ 25,00; a maioria relacionada com bancos de dados.</p>
<p>Se quiser dar uma olhada, <a href="http://lista.mercadolivre.com.br/_CustId_79309905" target="_blank">clique aqui</a> :)</p>
<p>Até +</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://silasmendes.com/dba/livros/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[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[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; title: ; notranslate">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; title: ; notranslate">
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; title: ; notranslate">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; title: ; notranslate">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; title: ; notranslate">
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>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[Eventos]]></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>

