quarta-feira, 18 de março de 2015

Encontrando usuários e suas sessões no SQL

Vamos descobrir quais usuários estão conectados e quantas sessões cada um possui no momento?

Esta informação é muito útil quando vamos iniciar uma janela de manutenção ou quando queremos saber se há um aumento na quantidade de sessões por usuário. Podemos verificar quem está conectado no momento, avisar que o SQL vai parar e então iniciar aquela manutenção agendada.

De onde vem estas informações?

Estas informações são armazenadas nas DMVs (Dynamic Management Views), novidade na versão 2005 do SQL e mantida até as versões atuais.

Uma DMV é como uma View onde podemos armazenar o resultado de um Select. Neste caso, estamos trazendo as informações da DMV chamada sys.dm_exec_sessions:

 

Conhecimentos basicos sobre Storage

O que é

Uma storage nada mais é do que um dispositivo com um ou mais discos capaz de se conectar aos servidores o prover espaço em disco da mesma forma que um disco local. É um hardware (pode ser um servidor comum ou equipamento dedicado à função de storage) com um sistema operacional (exclusivo ou adaptado como Linux, CentOS, Windows, etc.) que, através de conexões como Ethernet ou Fibra óptica, podemos conectar a um ou mais servidores. Podemos por exemplo, pegar um servidor com 6 discos, utilizarmos dois discos em RAID1 para o sistema operacional e os outros quatro discos em RAID5, para dividirmos em volumes que serão utilizados por nossos servidores. Podemos comprar uma caixa com encaixes para discos que faz exatamente a mesma coisa mas não possui monitor, teclado nem acesso via RDP ou SSH. Em ambos os casos, utilizamos apenas um navegador para nos conectarmos e configurarmos os volumes que serão apresentados aos servidores.

 

Principais tipos

Vamos estudar os três principais tipos encontrados no mercado, que provavelmente você vai se deparar ou vão te oferecer quando pretender adquirir uma storage. É muito importante para um analista saber orientar seu gestor que tem o controle dos investimentos sobre as características de cada tipo, ou ainda melhor, para os gestores desta nova geração em que na maioria das vezes possuem um excelente passado técnico.

DAS

DAS significa Direct Attached Storage, são dispositivos diretamente conectados ao servidor através de USB, e-SATA ou até mesmo Ethernet. É o tipo mais simples, normalmente não oferecem técnicas de proteção a dados exceto alguns modelos que oferecem até RAID mas que geralmente são configurados em RAID0 para oferecerem uma performace melhor pois seu hardware é focado em baixo custo e por isso o desempenho é fraco. Sua aparência na maioria das vezes é como a de um disco externo, um pouco maior de acordo com a quantidade de discos mas existem storages DAS maiores, como storages para racks com 16 ou até mais discos. A comunicação é em nível de arquivo, ou seja, os outros servidores enxergam como um compartilhamento comum na rede.

Para ficar mais claro, veja a topologia abaixo. Repare que as storages DAS estão conectadas diretamente a um servidor ou desktop:

NAS

A storage NAS ou Network Attached Storage é um servidor com a mesma finalidade da DAS conectado a rede ao invés de se conectar diretamente nos servidores. Estes servidores não são desenvolvidos para tarefas computacionais em geral, apesar de tecnicamente ser possível executar outros softwares neles. Geralmente não possuem teclado ou monitor, e são configuradas através de um browser. Os protocolos utilizados pelo NAS são o NFS (popular em sistemas UNIX), ou CIFS/SMB (Common Internet File System/Server Message Block) em ambientes Windows, além do tradicional FTP. Existem alternativas open source para implementações caseiras de NAS, como o FreeNAS, o Openfiler e o NASLite. Apesar de serem soluções caseiras, é comum vermos este tipo de equipamento em empresas e datacenters. Assim como a DAS, a storage NAS também é acessada a nível de arquivo, com a diferença de ser conectada a um switch ao invés de estar conectada diretamente a um servidor como acontece com a DAS e, em algumas vezes, você encontrará um dispositivo desses conectado através de fibra. Neste caso, o hardware todo é mais robusto e a performance bem maior.

SAN

Storage Attached Network é o melhor dos mundos para escalabilidade, disponibilidade, proteção de dados e performance. Utiliza uma rede específica para armazenamento, de fibra ótica (protocolo Fiber Channel) ou par trançado (protocolo iSCSI). A comunicação com os servidores não é mais a nível de arquivo mas sim a nível de blocos (como um HD), o que possibilita que os servidores enxerguem estes volumes como unidades de disco locais, idêntico a um HD interno, por exemplo. Por possuírem uma série de redundâncias (fontes de alimentação, discos, controladoras, etc.) e pelo investimento necessário são utilizadas em ambientes de missão crítica onde a disponibilidade deve ser de 24x7. Existem SAN atualmente que fazem coisas fantásticas com os dados, provendo segurança e performance confiáveis. Estas storages geralmente possuem o tamanho de um rack (embaladas até parecem um rack) ou de vários racks lado a lado.

 

Continuando um restore de onde parou

Durante um processo de restore de uma grande base um outro alguém reiniciou os serviços do SQL. Como resultado, a base ficou em "restoring":

Veja como continuar o restore.

 

Como o restore era de uma base muito grande e portanto demorado, ao invés de iniciar novamente pude continuar de onde parou com a cláusula WITH RESTART. Com isso, conseguimos manter o tempo de restore e deixamos a base online novamente, pronta para receber as conexões:

Segue a query:

RESTORE DATABASE TESTE FROM DISK = 'c:\Backup\teste.bak'
WITH RESTART

 

Quando esta instância foi instalada?

Precisando saber quando o Sqlserver foi instalado, o script abaixo pode ajudar

 

 

SELECT createdate AS [SQL Server Install Date]
FROM sys.syslogins
WHERE [sid] = 0x010100000000000512000000;
Resultado:

Com este pequeno select da tabela sys.syslogins você consegue saber quando o SQL foi instalado no servidor, informação útil muitas vezes.

 

Mostrando o número das linhas no SQL

Quando o SQL exibe uma mensagem de erro dizendo que a sintaxe de uma query está errada na linha 123, como você faz para encontrar esta linha?

Bem simples. Abra o MSSQL Server Management Studio, clique em Tools (ou Ferramentas) e depois em Options:

 

 

Diversas opções podem ser alteradas aqui. Vamos encontrar a que exibe o número das linhas em uma query.

 

 

Veja na figura acima como é fácil. Expanda Text Editor, Transact-SQL e clique em General. No painel do lado direito marque a opção Line numbers e clique em OK. Pronto, era só isso mesmo.

 

 

Além disso, imagine que sua query ou procedure tenha muitas linhas e o erro está na linha 972. Você não vai querer rolar a tela até chegar na linha 972. Utilize o mesmo atalho do Bloco de Notas que te direciona direto pra linha solicitada. Pressione Ctrl+G e veja: