terça-feira, 1 de dezembro de 2009

Erro no SQL Server "Cannot open backup device 'F:\foldername'. Operating system error 5(Access is denied)"

     Quando ao executar um backup do SQL Server ocorrer o erro "Cannot open backup device 'F:\foldername'. Operating system error 5(Access is denied" verifique se a pasta onde está sendo gravado o backup tem permissão de gravação para o usuário utilizado para iniciar o serviço do SQL Server no servidor.

quinta-feira, 26 de novembro de 2009

Erro no SQL Server "The BackupDirectory registry key is not configured correctly"

Quando ocorrer o erro "The BackupDirectory registry key is not configured correctly" ao restaurar um banco de dados no SQL Server, altere o valor da chave: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\\MSSQLServer

para um caminho válido do servidor.
Caso a chave não exista, basta incluir ela com um caminho válido.

domingo, 1 de novembro de 2009

Numeração Sequencial no Oracle e SQL Server

Algumas vezes precisamos numerar sequencialmente o resultado de uma consulta, e tanto o Oracle como SQL Server tem soluções parecidas para ter esta necessidade, a função Row_Number().
O uso desta função com a cláusula OVER nos possibilita resultados interessantes.

Sintaxe: Over Partition by Colunas Order by Colunas

Exemplo: Considerando uma tabela de funcionários com três colunas Empresa, IDFuncionario e Nome, queremos gerar uma coluna com a posição do funcionário em uma consulta ordenada pelo nome, onde a cada empresa o número deve ser reiniciado:

SELECT Empresa, IdFuncionario, Nome, Row_Number() Over (Partition by Empresa Order By Nome)
From Funcionarios

quinta-feira, 22 de outubro de 2009

Consulta do Espaço Livre das Tablespace no Oracle

Abaixo a consulta que lista o espaço livre em cada tablespace existente no banco de dados Oracle:

Select tablespace_name, sum(bytes)/1024/1024 as "TAMANHO(MB)"
From dba_free_space
Group by tablespace_name
Order by sum(bytes)

segunda-feira, 19 de outubro de 2009

SQL Server Erro Communication Link Failure

Hoje estava aparecendo a mensagem Communication Link Failure em uma base SQL Server 2005.
Pela mensagem parece algum problema de comunicação com o servidor.
O erro ocorria tanto no servidor do banco de dados como nas estações sempre que era executada determinada consulta.
Entretanto o problema era que a base de dados tinha um objeto corrompido, neste caso era um índice. Para descobrir isto executei o comando DBCC CheckDB ('nomebancodados'), e depois tive que reconstruir o índice indicado no resultado desta instrução.

quinta-feira, 1 de outubro de 2009

Consultando as sessões ativas no SQL Server e Oracle

No Sql Server e no Oracle são disponibilizados objetos que permitem visualizar as sessões (conexões) ativas com o banco de dados.
É importante consultar estes objetos para identificar sessões que estão consumindo muitos recursos ou quem está "logado" nela.

SQL Server :
Select * From sys.sysprocesses


Oracle:
Select * from V$Session

terça-feira, 15 de setembro de 2009

Consulta de Bloqueios no Oracle (Locks)

Para consultarmos as transações que estão bloqueadas no Oracle, podemos fazer uma simples consulta nas views do banco de dados:


Select l1.sid, ' esta bloqueando ', l2.sid
From v$lock l1, v$lock l2
Where l1.block = 1
And l2.request > 0
And l1.id1=l2.id1
And l1.id2=l2.id2

Depois para ter maiores informações sobre as sessões bloqueadas consulte a view V$Session.

quarta-feira, 2 de setembro de 2009

SQL Azure


A Microsoft disponibilizou o CTP para testes do ambiente do SQL Azure. Tem como ter o primeiro contato com o banco de dados na nuvem, basta criar um login e aguardar um retorno por email para começar a trabalhar.
É possível criarmos um novo banco de dados, tabelas e dados diretamente das ferramentas do SQL Server 2008, como o Management Studio.
Apesar disto ainda não é possível ver os objetos do banco de dados no Object Explorer da ferramenta e tem alguns "macetes" para conectar no servidor. Acredito que na versão oficial tais limitações não continuem.
Existem também situações a serem observadas no desenvolvimento de soluções como limitações no uso de recursos da versão 2008 do SQL Server e tratamentos para transações de operações no banco de dados.

Mais informações em www.azure.com

sábado, 29 de agosto de 2009

Teched 2009

Estive nos dias 25 a 27 de agosto de 2009 no Teched 2009 Brasil que foi realizado em São Paulo.
Foram apresentadas diversas novidades sobre o Windows 7 e Windows 2008 R2, como também foram apresentada a versão SQL Server 2008 R2.
Um dos principais focos das palestras foi a plataforma Azure da Microsoft, que em breve deverá ser disponibilizada no Brasil também.
Uma das melhores palestras apresentadas sobre SQL Server 2008 foi a de Luciano Moreira sobre Dicas para Tornar as Queries mais Rápidas e Eficientes (blog: luticm.blogspot.com), onde foram apresentadas dicas para resolver problemas de desempenho no SQL Server 2008.
Nos próximos posts colocarei algumas informações sobre o Azure e outras novidades vistas no evento.

sexta-feira, 31 de julho de 2009

Teched 2009

De 25 a 27 de agosto em São Paulo haverá a edição 2009 do Teched, maior evento sobre as tecnologias Microsoft para desenvolvedores e profissionais de TI.
Serão apresentadas diversas palestras sobre o SQL Server 2008, inclusive as novidades previstas para o SQL Server 2008 R2.
Vale a pena.
Maiores informações em www.teched.com.br

sexta-feira, 17 de julho de 2009

domingo, 21 de junho de 2009

Conexão TCP IP no osql sem a porta padrão

Quando a porta TCP/IP utilizada no servidor SQL Server não for a 1433 (porta padrão do SQL Server) e precisarmos conectar no servidor com a ferramenta osql, precisamos especificar a porta no comando de conexão com a ferramenta.

Sintaxe: osql -S tcp:nomeservidor,porta.

Exemplo: Servidor do SQL Server com o nome producao utilizando a porta 1500.
osql -S tcp:producao,1500

quinta-feira, 30 de abril de 2009

Tabelas do sistema no SQL Server 2005/2008

A partir do SQL Server 2005 as consultas aos objetos do banco de dados tiveram algumas alterações, abaixo estão algumas destas tabelas:


Tabela.........................................Descrição
sys.databases..............................Bancos de dados do SQL Server
sys.tables.....................................Tabelas
sys.columns................................Colunas das tabelas
sys.objects...................................Objetos do banco de dados corrente
sys.triggers..................................Triggers
sys.indexes..................................Índices
sys.index_columns....................Colunas dos índices
sys.foreign_keys.........................Chaves estrangeiras
sys.foreign_key_columns.........Colunas das chaves estrangeiras

quarta-feira, 4 de fevereiro de 2009

Ativando estatísticas do SQL Server

Para analisar o desempenho das instruções SQL executadas no SQL Server, existe uma ferramenta simples de utilizar que são as estatísticas:

Set Statistics IO ON - Apresenta a quantidade de atividade em disco para a execução da instrução.

Set Statistics Time ON - Quantidade de tempo para analisar, compilar e executar cada instrução.

Para avaliar corretamento as estatíticas de IO é interessante executar a instrução DBCC DropCleanBuffers para tirar as páginas de cache de leitura.

Exemplo:
DBCC DropCleanBuffers

Set Statistics Time on
Set Statistics IO on

Select * From HumanResources.Employee

Resultado:

A execução do DBCC foi concluída. Se o DBCC imprimiu mensagens de erro, entre em contato com o administrador do sistema.

Tempos de Execução do SQL Server:
Tempo de CPU = 0 ms, tempo decorrido = 1 ms.

(290 linha(s) afetadas)
Tabela 'Employee'. Número de verificações 1, leituras lógicas 9, leituras físicas 2, leituras read-ahead 7, leituras lógicas lob 0, leituras físicas lob 0, leituras read-ahead lob 0.

Tempos de Execução do SQL Server:
Tempo de CPU = 20 ms, tempo decorrido = 874 ms.

quarta-feira, 28 de janeiro de 2009

Escrever o nome do mês em Oracle

Muitas vezes é necessário escrever o mês por extenso. Para tanto, no Oracle basta especificar a formatação adequada:

SQL> select to_char(sysdate, 'Month') from dual;

TO_CHAR(SYSDATE,'MONTH')
------------------------------------
January

Se o mês não estiver em uma data, mas em um campo numérico separado do dia e ano (má escolha, mas as vezes acontece), primeiro é necessário transformar em um valor do tipo Date.

SQL> select to_char(to_date(10, 'mm'), 'Month') from dual;

TO_CHAR(TO_DATE(10,'MM'),'MONTH')
------------------------------------
October


E se precisar do nome dos meses em português, basta trocar o atributo da sessão:

ALTER SESSION
SET NLS_DATE_LANGUAGE = Portuguese;


SQL> select to_char(sysdate, 'Month') from dual;


TO_CHAR(SYSDATE,'MONTH')
------------------------------------
Janeiro