terça-feira, 5 de julho de 2011

Treinamento SQL Server em Chapecó/SC

Em parceria com o DEATEC, de Chapecó/SC, promovemos no período de 28/06 e 02/07 um treinamento em SQL Server.

O curso teve a carga horária de 22 horas, onde foram abordados em linhas gerais os seguintes tópicos: SQL Básico, Tabelas Temporárias, Stored Procedures, Triggers, Functions, SQL Dinâmico, Views, Transações, Tuning e Particionamento.

Além da ementa, todos os alunos tiveram oportunidades de trazer outros tópicos que foram abordados, e também dificuldades específicas encontradas dentro das empresas.

Também foi importante o repasse de uma metodologia baseada em um check-list, para apurar possíveis problemas que afetam a performance do banco de dados.

A ementa do curso foi formada através de uma pesquisa realizada com todos os associados que apontou dentre vários outros tópicos, informações sobre a necessidade de outros cursos técnicos, gerenciais e que envolvem o setor de TI e automação.

Foram 16 alunos de 16 empresas participantes:
- Aurora
- Auto Viação Chapecó
- Gama Tecnologia
- H & S
- H2J Soluções
- Infogen Sistemas
- Log e CIA
- Mantomaq
- Onsis Sistemas
- SGI Sistemas
- Unoesc Chapecó
- Vision System

"Formar uma turma enxuta, com um equipamento por participante, além de fazer tudo de forma prática, com a ementa baseada em pesquisa realizada anteriormente ao curso, foi importante pois impactou diretamente no nível de aprendizado dos alunos." ressalta Francis Marcel Post, presidente do DEATEC.

O aproveitamento do curso foi excepcional pois todos os participantes já tem contato com o SQL Server em suas atividades, o que oportunizou a abordagem de tópicos mais avançados.

Mais informações:
DEATEC - Polo Tecnológico de Chapecó/SC
www.deatec.org.br

quarta-feira, 15 de junho de 2011

Centro de Treinamento SQL 2008

Site com excelentes recursos para quem deseja conhecer as ferramentas do SQL Server.

http://technet.microsoft.com/pt-br/hh210186

[]s

Péricles.

domingo, 13 de março de 2011

Estudando para prova 70-433 de SQL 2008

Pessoal,

segue link interessante para aqueles que estão estudando para a prova de entrada do SQL 2008.

http://estudandopara70433.wordpress.com/

abraços,

Péricles.

sábado, 12 de março de 2011

Google Maps - Geocode pelo Endereço

Olá,

existe uma forma de retornar a Latitude/Longitude de um determinado endereço, utilizando-se a API do Google Maps, a partir do SQL Server.

No mundo real, acredito que tal aplicação não estaria dentro do banco de dados, e sim em uma aplicação CLR, porém, para ilustrar o recurso disponível no SQL, resolvi demonstrá-lo aqui.

O objeto a ser utilizado é o MSXML2.ServerXMLHttp, praticamente da mesma forma que é feito em AJAX, e é acessado através das Procedures de Automação OLE do SQL Server, e para isto, você precisa habilitar o recurso.

Testei no SQL 2005 e 2008, não sei dizer se funciona no SQL 2000.

Abstract: using the SQL Server to return the coordinates of an address at Google Maps with OLE Automation Procedures (XMLHttp GET).

Segue o código:

-- Para habilitar o uso de OLE
-- Activate OLE
sp_configure 'show advanced options', 1
go
reconfigure
go
sp_configure 'Ole Automation Procedures', 1
go
reconfigure
go

-- Variaveis
-- Variables
DECLARE @Response VARCHAR(8000)
DECLARE @XML XML
DECLARE @Obj INT
DECLARE @Result INT
DECLARE @HTTPStatus INT
DECLARE @ErrorMsg VARCHAR(MAX)
DECLARE @URL VARCHAR(MAX)
DECLARE @GPSLatitude NUMERIC(20,6)
DECLARE @GPSLongitude NUMERIC(20,6)
DECLARE @Endereco VARCHAR(100)

-- Endereco para teste
-- Test address
SELECT @Endereco = 'Av. Paulista, 500, Sao Paulo, SP'
SELECT @URL = 'http://maps.google.com/maps/api/geocode/xml?sensor=false&address=' + @Endereco

-- Criacao do objeto XMLHttp
-- Object XMLHttp creation
EXEC @Result = sp_OACreate 'MSXML2.ServerXMLHttp', @Obj OUT

-- Envio do comando GET
-- GET command
BEGIN TRY
EXEC @Result = sp_OAMethod @Obj, 'open', NULL, 'GET', @URL, false
EXEC @Result = sp_OAMethod @Obj, 'setRequestHeader', NULL,
'Content-Type', 'application/x-www-form-urlencoded'

EXEC @Result = sp_OAMethod @Obj, send, NULL, ''
EXEC @Result = sp_OAGetProperty @Obj, 'status', @HTTPStatus OUT
EXEC @Result = sp_OAGetProperty @Obj, 'responseXML.xml', @Response OUT
END TRY
BEGIN CATCH
-- Controle de Erro com bloco Try/Catch
-- Error Control
SELECT @ErrorMsg = ERROR_MESSAGE()
END CATCH

-- Destruicao do objeto
-- Object free
EXEC @Result = sp_OADestroy @Obj

-- Transformacao do resultado em XML
-- Convert result in XML Datatype
SELECT @XML = CAST(@Response AS XML)

-- Leitura dos valores desejados (latitude/longitude)
-- Gathering coordinates from XML
SELECT @GPSLatitude = @XML.value('(/GeocodeResponse/result/geometry/location/lat) [1]', 'numeric(10,6)')
SELECT @GPSLongitude = @XML.value('(/GeocodeResponse/result/geometry/location/lng) [1]', 'numeric(10,6)')

-- Exibicao dos resultados
-- Results
SELECT @GPSLatitude AS [Latitude], @GPSLongitude AS [Longitude], @XML AS [XML]
go

[]s

Péricles.

sexta-feira, 4 de março de 2011

Five Classic Videos Every DBA Should Watch

Brent Ozar made a series of interviews and presentations that we should watch carefully.

It's actually Four videos...

http://www.brentozar.com/archive/2011/03/five-videos-every-dba-should-watch/

Péricles.

quarta-feira, 2 de março de 2011

Check DB

Olá a todos !

Só pra lembrar, comando básico para fazer uma checagem no database...
De vez em quando é bom !

ALTER DATABASE Pubs SET SINGLE_USER
go
DBCC CHECKDB (Pubs, REPAIR_ALLOW_DATA_LOSS)
go
ALTER DATABASE Pubs SET MULTI_USER
go

Troque "Pubs" pelo nome do database em questão.

O database deve estar em SINGLE_USER MODE.

O parâmetro importante do CHECKDB tem 3 opções:
- REPAIR_ALLOW_DATA_LOSS: esta forma de reparo pode causar a perda de dados.
- REPAIR_FAST: mantido por questões de compatibilidade, não faz nada estrutural.
- REPAIR_REBUILD: corrige estruturas que não irão causar perda de dados.

Abraços.

sábado, 19 de fevereiro de 2011

SQLRockstar - English SQL Bloggers

I found a very nice SQL Blog today from Thomas LaRock.

He made a special list of SQL Bloggers grouping them like the database names: Master, ResourceDB, MSDB, Model and TempDB.

He couldn't be more nerd...

It worths the look:
http://thomaslarock.com/rankings/#axzz1DIObJzHY

See ya.

terça-feira, 21 de dezembro de 2010

Qual versão do SQL estou rodando ?

SELECT @@version

Tabela mais completa, impossível:

SQL Server Builds


Abracos,

Pericles.

segunda-feira, 6 de dezembro de 2010

Compêndio XML

Olá a todos,

estava estudando para a prova 70-433 do SQL 2008, e segundo o descritivo da prova, caem várias questões sobre XML, então saí em busca de mais informações sobre o assunto.

Encontrei na revista Plugmasters, vários artigos do nosso colega Gustavo Maia Aguiar, inclusive cito o blog dele nos posts anteriores.

Fiz uma compilação dos artigos sobre XML que ele escreveu naquele site, e cheguei a um documento com 75 páginas !

São artigos sobre SQL 2005, porém servem muito bem de base para o 2008.

Achei que o resultado ficou interessante, e seria de muita importância que outras pessoas pudessem ter acesso a este material, então consultei o Gustavo, para obter uma autorização de publicação deste material no meu blog, e fiquei muito feliz em saber que ele gostou da idéia.

Bem, sem mais explicações, segue o link do material.
Na primeira página, estão listados os artigos que fazem parte do documento.

Arquivo:
Compendio XML -Gustavo Maia.pdf

São artigos muito bem ilustrados, inclusive com vários exemplos !

Blog do Gustavo:
http://gustavomaiaaguiar.spaces.live.com/

Revista Plugmasters:
http://www.plugmasters.com.br

abraços e até mais.
Péricles.

domingo, 8 de agosto de 2010

Ferramentas Úteis

Olá galera,

gostaria de citar duas ferramentas muito interessantes que utilizei recentemente.

A primeira me ajudou a recuperar uma base corrompida.
Depois de tentar todo tipo de comando DBCC no SQL Server, pesquisei e baixei algumas ferramentas de Recovery, e a única que resolveu o problema foi esta:

RECOVERY FOR SQL SERVER
http://www.officerecovery.com/mssql/index.htm


A segunda, como todos sabem, na versão Express do SQL 2005/2008, não está incluído o SQL Profiler, ferramenta essencial para detectar problemas de performance... encontrei esta aí, com uma interface muito parecida com o original inclusive:

ANJLAB SQL PROFILER

http://sites.google.com/site/sqlprofiler/

Vale a pena conferir.

abraços,

Péricles Sevegnani.

quinta-feira, 10 de junho de 2010

Performance Tuning no SQL Server

Olá,

gostaria de abordar um tema que está começando a gerar interesse de muitos administradores de banco de dados: "performance tuning" ou melhoria de desempenho.

Seu banco de dados está crescendo, o servidor fica cada dia mais lento, você começa a procurar as possíveis causas da lentidão, e se pergunta: onde está o problema ?

Raramente, a resposta é simples.
Encontrar um serviço/processo rodando no servidor que está tomando muito tempo de CPU; anti-virus; baixar a última atualização; são alguns exemplos... mas convenhamos, é praticamente uma loteria.

Na maioria dos casos, o problema está relacionado a vários fatores.

Sem olhar seu sistema, eu diria que 90% dos problemas relacionados a performance estão na sua aplicação.

Portanto, faça sua lição de casa, e revise seu código, seu modelo de dados, sua metodologia de acesso aos dados, a forma de exibição, etc.

No mais, segue abaixo uma lista de boas práticas para manter seu servidor com uma boa performance.

As primeiras dicas são as que estão ao seu alcance, e não há necessidade de desembolso... em seguida, outras dicas que exigem um pouco de investimento.

1) Básicas:
- mantenha seu Windows com o último Service Pack disponível;
- mantenha seu SQL Server com o último Service Pack disponível + pacotes acumulativos (CUs);
- disponha de uma janela de manutenção mensal, onde você vai reindexar sua base de dados, com base no índice de fragmentação das tabelas mais críticas;
- desfragmente seu disco rígido também, com o serviço SQL Server desligado;
- se o seu database é grande (acima de 10Gb por exemplo), separe as tabelas por Filegroups, e distribua quando possível, estes Filegroups em discos rígidos diferentes;
- configure o anti-virus do servidor SQL Server para não escanear as pastas onde estão os arquivos MDF/NDF e LDF dos databases, tampouco as pastas dos System Databases;
- não instale impressoras no servidor SQL Server;
- evite compartilhamento com outras aplicações, isole seu servidor única e exclusivamente para o serviço SQL Server;
- coloque os Filegroups em outro disco rígido, assim como o TempDB;
- desligue as opções de Auto-Close e Auto-Shrink de cada database;
- revise as tabelas, de forma que as mesmas tenham Primary e Foreign Keys bem definidas, índices que estejam sendo utilizados;
- centralize o código, utilizando Stored Procedures - esta prática também evita tráfego de rede, deixando o processamento no servidor e retornando somente o resultado para aplicação;
- evite o uso de Cursores, prefira operações baseadas em blocos (set-based);
- faça backups completos diariamente.

2) Avançadas ($$$):
- adquira mais discos rígidos, você vai precisar para RAID e também para separar os arquivos;
- prefira RAID nível 10 (espelhamento e distribuição);
- disco rápido é SAS (antigo SCSI) - fuja de IDE e SATA;
- se puder, adquira uma unidade Storage (SAN, EVA, etc);
- compre memória RAM: o ideal é que o SQL Server trabalhe sempre utilizando o "cache", portanto, quanto mais memória melhor;
- não há uma recomendação padrão, pois os ambientes podem variar muito (OLTP e OLAP), mas sempre faço uma conta básica: 2GB de RAM para o sistema operacional; e o restante, pelo menos 25% da soma do tamanho dos databases para Buffer Pool do SQL Server, isto evita paginação;
- ou seja, se a soma dos seus databases for de aproximadamente 100GB, seu servidor SQL deveria ter em torno de 24GB de RAM (mínimo de 16GB, e ideal 32GB);
- particione as tabelas "gigantes", utilizando o recurso do próprio SQL Server, "partitioned tables"; para isto você vai precisar da versão Enterprise.

É claro que os tópicos apresentados são muito superficiais, e necessitam de um estudo adequado para cada caso, a idéia aqui foi dar uma "pincelada" nos principais.

Sinta-se à vontade para entrar em contato, e expor suas dúvidas, ou contribuir com mais alguma dica, terei maior prazer em publicar.

Obrigado, abraços e até a próxima!
Péricles Sevegnani.

segunda-feira, 4 de janeiro de 2010

Certificação Microsoft 5 Estrelas

olá a todos, feliz 2010 !

Que seja um ano de muitas conquistas e realizações a todos nós !

Abro este ano com um post sobre certificação Microsoft, mais especificamente sobre:

- certificação Microsoft 5 Estrelas
http://www.technetbrasil.com.br/cincoestrelas/

- prova 70-441 (2005 Designer).
http://www.microsoft.com/learning/en/us/Exam.aspx?ID=70-441&locale=en-us

O programa profissional 5 Estrelas (SQL) é uma iniciativa da Microsoft para preparar os usuários para a prova 70-431 e levar conhecimento a todos que gostam do assunto.

Obtive a 5a. estrela neste programa há alguns dias, porém... nem tudo são flores, como explico abaixo.

Recentemente, me preparei para a prova 70-441 (Designing Database Solutions with SQL 2005) e não obtive a pontuação necessária (score = 634, needed = 700), o que me frustrou muito, de certa forma, neste final de ano.

Porém, eu prefiro ser reprovado por falta de capacidade do que aprovado por sorte.

Digo isso, porque às vezes a experiência, que nos dá uma certa dose de confiança, que aliada a um estudo autodidata, garante um bom conhecimento, porém não é credencial para sucesso na prova.

Percebo que preciso estudar (muito) e aprender mais sobre: Service Broker, Integration Services e Reporting Services. Aliás, deixo como dica para aquele que decide fazer a 70-441.

Já vi em alguns fóruns que a 70-441 é a mais difícil, em comparação a 70-442. De qualquer forma, acredito que isto depende do perfil do profissional.

Enfim... meu planejamento para este ano é obter o MCITP Developer e Administrator, e para isto são 4 provas... extremamente difíceis... mas, vamos lá!

abraços,

Péricles.

domingo, 8 de novembro de 2009

Blogs de SQL Server

Compartilho aqui com vocês, a lista de alguns blogs sobre SQL Server e IT que costumo visitar e apreciar:

- Blog do Luti:
http://luticm.blogspot.com/

- Fabiano Neves Amorim:

- Blog do Miranda:
http://www.rmiranda.com.br/

- Alex Rosa - Database Specialist:
http://alexrosadba.wordpress.com/

- $hell Your Experience - Laerte Junior:
http://laertejuniordba.spaces.live.com/blog/

- Thiago Zavaschi:
http://www.zavaschi.com/

- PFE Brasil - SQL Server:
http://blogs.msdn.com/pfebrasilsql/default.aspx

- Conor vs. SQL:
http://blogs.msdn.com/conor_cunningham_msft/default.aspx

- Felipe Ferreira:
http://blogs.solidq.com/fferreira/Home.aspx

- Diego Nogare:
http://www.diegonogare.net/

- Gustavo Maia:
http://gustavomaiaaguiar.wordpress.com/

- Roberto Fonseca:
http://rffonseca.wordpress.com/

- SQL Blog Ninja - Fabricio Catae:
http://blogs.msdn.com/fcatae/

- Tulio Rosa:
http://tuliorosa.blogspot.com/

- Sql From Hell.com:
http://sqlfromhell.wordpress.com/

- Blog 50 minutos:
http://www.50minutos.com.br/blog/

- Rodrigo Crespi:
http://www.blog.crespidb.com.br/

- Diário de um DBA:
http://silasmendes.com/dba/

- TSQL Master:
http://tsqlmaster.blogspot.com/

- Glenn Berry's:
http://sqlserverperformance.wordpress.com/

- Fabricio Lima:
http://fabriciolima.net/blog/

- Midnight DBA - Sean and Jennifer McCown - DBA Rant:
http://midnightdba.itbookworm.com/
http://www.midnightdba.com/DBARant/

- Pinal Dave - SQLAuthority:
http://blog.sqlauthority.com/

- SQL Server Central:
http://www.sqlservercentral.com/

- SQL GO !!! - Andressa:
http://sqlgo.wordpress.com/

- SQL Server e BI:
http://www.sqlserverbh.com.br/

- Luciano Palma:
http://lpalma.com/

- SQLInsiders.Net:
http://www.sqlinsiders.net/

- Viviane Ribeiro:
http://vivianeribeiro1.wordpress.com/

- Evandro Junqueira Ramos:
http://www.sqlserverdicas.com/

abraços e até a próxima!
Péricles.

terça-feira, 22 de setembro de 2009

Removendo Braviax (cru629)

Esta semana me deparei com o insistente Braviax.

Seu ícone é uma bolinha vermelha no canto direito, ao lado do relógio do Windows XP.

Passei CCleaner (http://www.ccleaner.com), meu preferido, porém sem sucesso.

Tentei passar o HijackThis (http://www.hijackthis.de/), mas ele não deixava nem executar o utilitário.

Consegui executar o HijackThis renomeando o arquivo executável, tipo 123.exe. Ele executou mas não conseguiu remover o Bravia.

Pesquisei na net e encontrei algumas dicas, tipo entrar em modo de segurança e apagar os seus arquivos principais, que são (c:\windows\braviax.exe, c:\windows\cru629.dat, c:\windows\system32\braviax.exe, c:\windows\system32\cru629.dat), pois eles não se deixam excluir normalmente.

O Braviax também não aparece no Task Manager (Gerenciador de Tarefas).

Resumo da ópera: entrar em modo de segurança e apagar os arquivos não resolveu.

O que resolveu mesmo, foi o Malware Bytes (http://www.malwarebytes.org/), rodou uma vez, reiniciei e... assunto resolvido. Fica a dica.

Até a próxima!

Migrando logins entre servidores SQL 2005

Há um certo tempo, postei o link para script de migração de logins de SQL 2000 para 2005.

Segue agora link para script de migração de logins entre servidores SQL 2005, bastante útil quando você quer dar uma melhorada no seu servidor...

http://support.microsoft.com/kb/918992/

Dica: não acho interessante migrar aquelas contas estranhas, tipo "authority", "autoridade", "nt service", "builtin", "##ms_...".

Abraços.

quarta-feira, 19 de novembro de 2008

Teste de Perfomance em Inserts via Aplicação x Stored Procedures

Olá!

Gostaria de compartilhar com os amigos um pequeno, porém significante teste feito com inserções de registros.

Meu objetivo é provar por A+B que o insert via Stored Procedure é mais rápido que o insert via aplicação.

Foram utilizados nestes testes os componentes da paleta dbGo/ADO do Delphi 7.

O banco de dados utilizado foi SQL 2005 Express SP3, rodando num laptop.

Abaixo, segue os links para você baixar a aplicação teste, bem como o script utilizado para criação de um database, uma tabela, e uma stored procedure, a serem utilizadas no seu teste.

Fiz um laço no Delphi, inserindo 10.000 registros na tabela de testes.

No primeiro teste, utilizando componente TADOQuery para fazer a inserção, levou 28 segundos.

No segundo teste, utilizando componente TADOStoredProc, levou 20 segundos.

Uma redução aí na faixa dos 30%.

Baixe a aplicação, faça o teste, e chegue as suas próprias conclusões.

Aplicação
Script

Por isso, recomendo veementemente o uso de Stored Procedures para Inserir, Excluir, Consultar, enfim, para fazer qualquer tipo de processamento que requer algum requinte de performance.

Além disto, Stored Procedures possuem as seguintes vantagens em relação a T-SQL via aplicação:

- elas permitem programação modular, ou seja, a lógica de negócio fica centralizada em um ponto, ao invés de vários pontos nas aplicações;

- elas permitem execuções mais rápidas, porque o "engine" do SQL Server otimiza sua execução e guarda no seu "cache" para futura utilização;

- elas reduzem tráfego de rede, justamente porque sua execução fica a nível de servidor, e somente o retorno é devolvido à aplicação "client";

- elas podem ser usadas como mecanismo de segurança;

- elas evitam "lock" de tabela, uma vez que o "engine" enfileira todas as chamadas que são feitas às SPs e controla sua execução.

Abraços e até a próxima.

Pericles.

sexta-feira, 8 de agosto de 2008

Problemas e Soluções para SQL 2005 no Vista

Estou instalando meus sistemas em alguns clientes com o Windows Vista, e minha intenção aqui é compartilhar algumas dicas sobre as dificuldades encontradas.

O caso que serviu de inspiração para este post foi com a versão Home Basic.

O serviço do SQL foi instalado nesta máquina e ela é utilizada como "servidor", onde outra estação com Windows XP a acessava.

Após instalação e liberação das devidas portas no firewall, ativação do serviço "Navegador/Browser" do SQL, o sistema entrava, localmente e remotamente.

Porém, localmente, algumas telas do sistema apresentavam uma lentidão inaceitável. Remotamente estava a 100%.

Puxei minha "cartilha" e comecei:

- atualizei o SQL Server, com o SP2:
- não resolveu.

- atualizei o Service Pack do Vista para SP1, pois era original:
não resolveu.

- revisei as configurações do Firewall, liberando a 1433 TCP e 1434 UDP e compartilhamento de impressoras (por teimosia, pois na estação remota não havia problema de acesso):
não resolveu.

- desliguei o Serviço de Indexação do Vista:
nada.

Fui embora, levei o backup da base e fui revisar minha aplicação (Delphi), na tentativa de pegar algum problema, porém... sem sucesso.

Contatei meu "brother", Microsoft MCSE, e ele deu uma dica: RSS (receive-side scaling), que é uma nova função do sistema operacional (Vista e Server 2003), que tem gerado alguns problemas.

Voltei ao cliente, decidido a desligar o tal "autotuning", aí vai o comando:

netsh interface tcp set global autotuning=disabled

Legal, mas... reiniciei e... nada, o problema continua.

Já quase desistindo, resolvi brincar com os protocolos de rede do SQL.
Fui desligando um-a-um, até chegar num denominador comum... e bingo... achei.

A única combinação que funcionou, e resolveu o problema, foi o protocolo "Named Pipes/Pipes Nomeados".

Deixei somente este protocolo ativo, e funcionou 100%, localmente e remotamente.

Fiquem à vontade para comentar o assunto, e abraços, até a próxima !

domingo, 29 de junho de 2008

Certificação Microsoft

É com muita alegria que compartilho mais esta conquista pessoal: aprovação na prova 70-431, que dá a certificação MCTS em SQL Server 2005.

Não foi fácil... eu já estava há alguns anos postergando a realização da prova, mas este mês fui inspirado pela minha esposa, e decidi fazê-la. Marquei a prova num ato de impulso, com menos de 15 dias pra estudar. Era agora ou nunca.

Para os que quiserem se aventurar nesta, a prova é em inglês. A minha teve 47 questões, 35 de múltipla escolha e 12 simulados.

Experiência é imprescindível, uma vez que caíram algumas questões que você não encontra resposta em livro algum, só quem já escreveu um SELECT pra "sacar" a pergunta.

Obrigado a todos que me apoiaram.

Até a próxima!

quarta-feira, 28 de maio de 2008

Migrando logins entre instâncias SQL 2000

Algumas vezes precisamos migrar um ambiente para um novo servidor.

Após os procedimentos padrão:
- instalação do SQL Server no novo servidor;
- restauração do backup ou "attach" do database.

Surge então o problema: os logins e suas respectivas senhas.

A Microsoft disponibiliza no link abaixo, "receita de bolo" para a solução do problema.

Basicamente, trata-se de rodar o script mencionado no Servidor1, capturar o "result", e rodar no Servidor2.

Vale lembrar que esta solução funciona somente entre servidores 7.0 e 2000.

Link: http://support.microsoft.com/kb/246133/en-us

Abraços e até a próxima!

segunda-feira, 12 de novembro de 2007

Trabalhando com Datas no SQL Server

Um assunto muito recorrente nos fóruns de discussão, é o tratamento de campos de data/hora no SQL Server.

O problema basicamente se resume a dois pontos:
- passagem de parâmetros para um comando SQL;
- exibição de data/hora em algum formato específico.

Sobre a passagem de parâmetros, o formato padrão do SQL Server é o americano (USA): mm/dd/yyyy. Desta forma, 10/04/2007 seria dia 04 de Outubro de 2007.

Ainda sobre a passagem de parâmetros, ela se dá em 2 momentos:
- através da aplicação (Delphi, VB, etc.);
- via T-SQL, em stored procedures, triggers, por exemplo.

Eu diria que na passagem de parâmetros via aplicação - utilizando os recursos normais dos componentes de acesso a dados - não há com o que se preocupar, uma vez que o componente de acesso a dados vai se encarregar de fazê-lo, e informar o parâmetro no formato devido.

E por último, quando houver necessidade de informar uma data manualmente, "na unha", eu sugeriria fazê-lo da seguinte forma, utilizando o exemplo acima: "dd-mes-yyyy".

Ex.:

SELECT *
FROM Pedidos
WHERE DataPedido BETWEEN '01-oct-2007' AND '31-dec-2007'

Percebam que eu coloquei o nome do mês, de forma abreviada (em inglês). É isto mesmo !
Faz 10 anos que esta fórmula tem dado certo para mim... por isso a recomendo.

Não preciso me preocupar com barras ou se a primeira parte é o mês ou dia... passo desta forma e está resolvido.

Ok, uma vez que a passagem de parâmetros está esclarecida, vamos a segunda parte: a exibição.

Em primeiro lugar, gostaria de colocar que se tem alguém que deve se preocupar com exibição de datas, o responsável é a aplicação front-end.

Banco de dados não foi feito pra formatar datas e/ou números. Banco de dados foi feito pra armazenar dados, e retornar, da forma mais rápida possível e confiável.

Porém, às vezes, desejamos efetuar um SELECT e imprimir o resultado, precisamos formatar as datas.

Aí vai a dica: converta o campo data/hora para texto.

Ex.:

SELECT CONVERT(VARCHAR(20), GETDATE(), 101) AS Data

Notem o 3o. parâmetro - código 101.

No BOL (Books OnLine) existe uma tabela de códigos para este parâmetro, que vai de 101 até 130.

O padrão britânico/francês, por exemplo, que possui o formato mais próximo do nosso (dd/mm/yy), é o código 103.

Teste os formatos e encontre o mais apropriado para sua necessidade.

Abraços e até a próxima!

quinta-feira, 1 de novembro de 2007

SQL 2005 Cumulative Update Package #4

A Microsoft liberou em 17 de outubro de 2007, um novo pacote de atualizações acumuladas para o banco de dados SQL 2005 (após o Service Pack 2).

A maioria dos bugs corrigidos estão relacionados a ferramentas auxiliares do SQL, tais como Integration Services, Analysis Services, ou ainda, recursos menos utilizados, como replicação e database mirroring.

Porém, um bug em particular chamou a atenção, foi o de 50001716, que foi identificado por deixar as queries mais lentas do que na versão 2000, quando utilizado o operador LIKE. Segundo a Microsoft, o engine escolhe a versão sub-otimizada do plano de execução quando encontra este operador.

Segue link para mais detalhes.

http://support.microsoft.com/kb/941450/LN/

segunda-feira, 22 de outubro de 2007

Versão do SQL e Service-Pack aplicado

Ok, você executou o comando SELECT @@VERSION e o resultado não foi muito claro...

Segue link para uma tabela/lista das versões e service-packs do SQL Server (todas as versões).

http://www.sqlsecurity.com/FAQs/SQLServerVersionDatabase/tabid/63/Default.aspx

domingo, 21 de outubro de 2007

SQL Server 2005

Você ainda não migrou seu banco de dados para a última versão do Microsoft SQL Server ?

Não sabe o que está perdendo...

O SQL Server 2005 está mais robusto, mais confiável, mais seguro, e ainda mais fácil de usar !

Para pequenos negócios (databases até 4Gb), a versão SQL 2005 Express Edition é gratuita.

Para quem está achando que estou ganhando comissão da Microsoft para vender seu produto, está enganado, somente gostaria de comentar que não precisei modificar uma única linha sequer das minhas aplicações Delphi (com ADO) para rodar a nova versão.

Apenas tive que padronizar os JOINS dos comandos SELECT para se adequar ao SQL ANSI 92, porque a versão 2005 não aceita mais o comando "*=" para designar um LEFT OUTER JOIN. Agora você deve especificar a cláusula FROM corretamente.

No mais, nenhuma dificuldade.

Consulte as TOP 30 Features do produto no site da Microsoft.
http://www.microsoft.com/sql/prodinfo/features/top30features.mspx

Script para Reindexar Tabelas e Liberar Espaço

Utilizo o script abaixo para verificar o status de todas as tabelas de um database, reindexar os índices das mesmas, e atualizar o espaço utilizado pelos índices.

Na primeira parte, identifico o nome do database e salvo em uma variável, para uso mais adiante.

O conceito do script baseia-se num cursor, criado a partir da lista de tabelas, armazenadas na tabela do sistema SysObjects (se preferir, utilize as tabelas do Information_Schema).

O comando para verificar a tabela, é o "dbcc checktable".
Detalhe importante: o database precisa estar em modo SINGLE_USER para este comando ser executado com sucesso.

O comando para reindexar a tabela é o "dbcc dbreindex".

O comando para atualizar o espaço utilizado é o "dbcc updateusage".

Consulte o BOL para sintaxe dos parâmetros.

Para usá-lo, abra o Query Analyzer, e posicione no database desejado.
Ou acrescente na primeira linha, o comando USE, para selecionar o database, caso necessite executar a partir do utilitário O-SQL.

-- Inicio
DECLARE @DsDatabase SYSNAME
SELECT @DsDatabase = D.Name
FROM Master..SysProcesses P, Master..SysDatabases D
WHERE P.Dbid = D.Dbid
AND P.Spid = @@Spid

DECLARE @NomeTabela VARCHAR(80)
DECLARE CursorTabelas CURSOR FAST_FORWARD
FOR
SELECT DISTINCT CONVERT(VARCHAR(80), T.Name) AS Objeto
FROM SysObjects T, SysIndexes I
WHERE T.Type = 'U'
AND I.Id = T.Id
ORDER BY Objeto
OPEN CursorTabelas
FETCH NEXT FROM CursorTabelas INTO @NomeTabela
WHILE @@fetch_status = 0
BEGIN
PRINT 'Reindexando tabela ' + @NomeTabela + '...'
IF (SELECT DATABASEPROPERTYEX (@DsDatabase, 'UserAccess')) = 'SINGLE_USER'
DBCC CHECKTABLE (@NomeTabela, REPAIR_ALLOW_DATA_LOSS)
DBCC DBREINDEX (@NomeTabela)
DBCC UPDATEUSAGE (@DsDatabase, @NomeTabela)
FETCH NEXT FROM CursorTabelas INTO @NomeTabela
END
CLOSE CursorTabelas
DEALLOCATE CursorTabelas
-- Fim

Início

Olá a todos!
Sou programador SQL Server e Delphi há 10 anos e a internet sempre foi uma fonte riquíssima de recursos - leia-se Google ;)
Portanto, decidi criar este espaço para compartilhar meu humilde conhecimento em desenvolvimento de software, e ouvir novas opiniões.

Espero que gostem, comentem por favor!

Atualmente, dirijo uma empresa de desenvolvimento de software sob medida, ou seja, no jargão da área, uma fábrica de software. Fazemos o sistema conforme as necessidades do cliente, "pacote" aqui nem pensar...

Visite: http://www.mdssistemas.inf.br/

Entre em contato: periclessevegnani@yahoo.com.br