Erro no attach do banco no Windows 7

Dica super rápida:

Há alguns dias me deparei com um problema enquanto trabalhava com o SQL Server 2008 R2 no Windows 7. Minha intenção era anexar o banco de dados à instância, processo popularmente conhecimento como “attachar” um banco :)

O problema é que ao fim do processo, depois de clicar em OK surgia a seguinte mensagem de erro:

Unable to open the physical file “C:\AdventureWorks\AdventureWorks_Data.mdf”. Operating system error 5: “5(failed to retrieve text for this error. Reason: 15105)”. (Microsoft SQL Server, Error: 5120)

Bom, inicialmente imaginei que meu arquivo estivesse com problemas físicos… ou eu estivesse sem as devidas permissões. Depois de algumas averiguações vi que minha conta tinha as permissões… portanto o problema era outro.

Pesquisando na net vi uma sugestão para executar o Management Studio como administrador e isso resolveu meu problema:

Até +

Livro: Accelerated SQL Server 2008

Coloquei mais dois livros de SQL Server para vender no Mercado Livre… 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 e Integration Services. Ou seja, é um livro excelente pra quem quer se interar rapidamente nas novidades desta versão do SQL Server.

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… 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 :)

Quem tiver interesse é só acessar este link no Mercado Livre e comprar por um preço beeemm camarada :)

Até +

Colocando um script em espera

Uma dica rápida antes do feriadão:

Como agendar um script ou executá-lo de forma recorrente sem utilizar o SQL Agent?

O SQL possui um comando de controle de fluxo que pode nos auxiliar nessas tarefas: WAITFOR.

Como utilizá-lo?

Digamos que você queira monitorar o crescimento dos logs a cada 5 minutos. Nesse caso podemos utilizar o WAITFOR DELAY junto com uma estrutura de repetição como o while. Veja o exemplo:

declare @i int

set @i = 1

while @i < 12

begin

– coleta informação sobre espaço utilizado pelo log

dbcc sqlperf(logspace)

– aguarda 05 minutos para continuar

waitfor delay ’00:05:00′

set @i = @i + 1

end

Agora imagine um cenário onde você precise “agendar” a execução de um script para as 22h. Veja o exemplo:

– espera até às 22h

waitfor time ’22:00:00′

GO

dbcc sqlperf(logspace)

GO

select getdate() horaExecucao

É importante salientar que este comando não substitui o SQL Agent! Ele normalmente é utilizado em situações pontuais. Por exemplo, para o DBA às vezes é interessante monitorar durante alguns minutos a situação dos locks e para isso não é necessário criar um job e agendá-lo no SQL Agent, é mais simples utilizar o WAITFOR DELAY. Além disso você pode acompanhar o resultado das execuções diretamente no Management Studio, Query Analyser, sqlcmd, etc.

O comando é interessante, mas não veja nele uma forma de implementar uma nova política de backup, ok?

Bom feriadão!

Dica – Copiar grid + cabeçalhos

Hoje uma dica rápida pra melhorar a produtividade:

Você está utilizando o Management Studio e acaba de executar uma consulta; agora precisa copiar o resultado para uma planilha Excel.

Sua consulta gerou um resultado com 25 colunas e ao colar o conteúdo na planilha você nota que só vieram os dados da consulta; os nomes das 25 colunas você terá que preencher a mão.

Alterar isso é bem simples. Vá no menu Options, expanda a opção Query Results e escolha a subopção Results to Grid. Agora é só marcar a opção “Include column headers when copying or saving the results” (Inclui cabeçalho das colunas quando copiar ou salvar resultados).

tela_Cabecalho

Bom trabalho!

Habilitando suporte a rede no SQL 2008

A partir da versão 2005 do SQL Server, algumas opções de configuração vem desabilitadas por padrão (e por uma questão de segurança), uma delas é o suporte a rede. Mas habilita-las é muito simples.

No menu Iniciar > Programas > Microsoft SQL Server 2008 > Configuration Tools escolha a opção SQL Server Configuration Manager (ou no menu Iniciar > Executar, digite SQLServerManager10.msc).

Na janela SQL Server Configuration Manager, expanda a opção SQL Server Network Configuration e clique na subopção que contém o nome da sua instância.

habilita_rede

No meu caso, o nome da minha instância é SQLEXPRESS2008, então selecionei a subopção Protocols for SQLEXPRESS2008.

Ao clicar, observe no lado direito os diversos protocolos de rede disponíveis. Para habilitar o suporte a sua rede TCP/IP, de um double-clique sobre esse protocolo. Na nova janela, na opção Enabled, selecione a opção Yes. Feito isto, clique em OK.

Agora é necessário reiniciar seu serviço SQL Server o que pode ser feito na mesma janela. Vá na opção SQL Server Services, escolha o serviço SQL Server e com o botão direito clique em Restart.

Propriedades do arquivo

No SQL Server 2000 existe uma procedure não documentada que traz as propriedades de um arquivo, como data de criação, data de alteração e etc; sem dúvidas um recurso bastante interessante.

Veja um exemplo da chamada:

xp_getfiledetails ‘C:\WINDOWS\EXPLORER.EXE’

Problemas? Sim… essa proc não está mais disponível a partir da versão 2005.
Esse sem dúvidas é um bom motivo para não nos apegarmos à funcionalidades não documentadas… depois dá uma dor de cabeça enorme e um monte de DBA indignado correndo atrás de uma solução similar.

(Bom, mas pra quem continua com o SQL Server 2000, ainda é uma ótima opção! :D )

Problemas no Database Mail

Você configurou o Database Mail, criou operadores, foi na propriedade Notifications do job e definiu um operador pra receber e-mail na ocorrência de uma falha; no entanto o e-mail não é enviado.

Você resolve dar uma olhada no log pra entender o que está acontecendo e então encontra a seguinte mensagem:

NOTE: Failed to notify ‘nome_do_operador’ via email.

Pra acertar isso va na propriedade Alert System do Sql Server Agent e marque a opção Enable mail profile. Pronto. Agora é só reiniciar o agent e seguir em frente :)

(Não esqueça de reiniciar o agent!)

Bom trabalho!

Verificando espaço em disco

 

Para verificar o espaço livre nos discos do seu servidor de banco de dados, dentro do Query Analyser ou Management Studio execute esta procedure:

xp_fixeddrives

O resultado será algo parecido com este aí:

drive    MB free
C        38177
D        130733
X        138790
Y        8140
Z        57013

(5 row(s) affected)

Até +

Erro na instalação do SQL 2008 (Parte II)

Depois de mais um tempo ausente volto pra falar sobre o erro da instalação do SQL Server 2008 no Windows XP (veja link do post aqui). Claro que esse não é o cenário ideal para instalação do SQL Server, mas se você quer instalá-lo no seu notebook ou PC, pra conhecer, estudar ou etc, então pode se deparar com o seguinte erro:

The Windows Installer service cannot update the system file C:\WINDOWS\system32\msxml6r.dll because the file is protected by Windows.  You may need to update your operating system for this program to work correctly.

Isso aconteceu comigo e depois de muitas pesquisas, agora em Outubro a Microsoft liberou um artigo falando sobre este erro.

Segundo o artigo, o erro ocorre quando tentamos instalar uma versão inglês do SQL Server (2005 ou 2008) num Windows XP SP3 não-inglês.

Solução? Não existe uma propriamente dita até o momento, mas se ao verificar o arquivo de log da instalação do SQL Server (na busca do Windows procure por SQLSetup*MSXML6*) você encontrar uma mensagem como está: “MSXML 6.0 Parser — Installation completed successfully.”, você poderá ignorar este erro.

Para ler o artigo na integra, acesse este link: http://support.microsoft.com/kb/958897

Bom trabalho, bons estudos!

Tutorial: Instalando o SQL Server 2008 Express.

DTS no SQL 2005

Muitas pessoas ao migrarem para o SQL Server 2005 encontram dificuldades para trabalhar com pacotes DTS do SQL 2000. Inicialmente posso dizer que SIM, é possível importar seus pacotes DTS do 2000 para o 2005, e o processo é até bem simples:

Dentro do Management Studio, já conectado à sua instância SQL, no Object Explorer clique na opção Management, subopção Legacy. Dentro dessa ramificação clique com o botão direito em Data Transformation Services e escolha a opção Import Package File (conforme imagem abaixo).

Importar DTS para SQL Server 2005

Importar DTS para SQL Server 2005

Daí pra frente o processo é bem intuitivo.

Depois que o DTS é importado, surgem novas perguntas e uma delas é:

É possível realizar modificações no DTS importado?

Sim. Para isso é preciso instalar o package da Microsoft: SQLServer2005_DTS.

Esse package está disponível para download aqui (link inclui outros packages para o SQL Server 2005)

Depois de instalado, basta escolher a opção Open clicando com o botão direito no DTS importado, e realizar as alterações necessárias.

Trarei mais informações sobre DTS em outros posts.

Bom trabalho!

Convertendo dados

Já ouvi diversas pessoas perguntarem a diferença entre o CAST e CONVERT e as vezes coisas comuns passam despercebidas. A idéia é a mesma: as duas funções permitem converter um tipo de dado em outro, no entanto a função CAST é padrão ANSI, então teoricamente ela pode ser usada em qualquer SGBD. Já a função CONVERT é uma função T-SQL, ou seja, específica do Microsoft SQL Server. Além desta diferença, a função CONVERT tem um opcional que permite a conversão do dado e a possibilidade de formatar o resultado, é o que chamamos de estilo, e isso pode ser bem útil, principalmente quando você está trabalhando com datatypes datetime e money/float.

Então, por exemplo,  se você quiser converter uma data e deixá-la no formato dd/mm/aaaa, deve usar o CONVERT:

select CONVERT(varchar(60), current_timestamp, 103)

No exemplo acima estamos convertendo a data atual para VARCHAR e formatando a data como dd/mm/aaaa. A formatação neste caso está utilizando o estilo 103.

Uma tabela completa com os estilos disponíves pode ser acessada neste link: http://msdn.microsoft.com/en-us/library/ms187928.aspx

Bom trabalho :)

Pequenos detalhes: SET NOCOUNT ON

Uma dica:

Ao executar uma procedure o SQL Server retorna para a aplicação o total de linhas afetadas.

Ex: (1 row(s) affected)

Para evitar esse tráfego (que custa no seu tempo de resposta) coloque no início de suas procedures a cláusula SET NOCOUNT ON.

Na maioria das vezes esse número é irrelevante,  mas imagine sua aplicação executando dezenas de procedures, que realizam centenas ou milhares de operações (INSERT, UPDATE, etc)  num dia.

Como dizem os mais velhos, de grão em grão a galinha enche o papo, na nossa realidade, de mili em milisegundos o seu banco também :)

Bom trabalho!