Category Archives: TI

T-SQL Tuesday #025 – Truques

Este mês o Sr. Allen White (Blog | Twitter)  pediu para as pessoas dizerem quais truques elas utilizam para deixar o trabalho mais fácil…

Nós temos muitos códigos em powershell que ajudam a melhorar o dia, mas, powershell,,, aahh,,, se você usar o google, poderá encontrar muita gente escrevendo bons códigos que podem ajudá-lo.

Eu escrevi uma coisa legal, mas em T-SQL, para criar bases em mirror,,, Sim, eu sei, você pode encontrar um monte de blogs falando sobre como criar esse tipo de ambiente,,, mas eu vou fazer isso usando SQLCMD dentro do Management Studio,,, por quê? só pela diversão…

Eu vou pular a parte da criação dos end-poins porque você já sabe…

A parte legal está logo depois da versão em inglês,,,

Hi, i try translate all the text above, sorry if have some mistakes,,,

This month Mr. Allen White (Blog | Twitter) ask people to say what tricks we use to make our job easier…

We have a lot of code in powershell helping to improve the day, but, powershell,,, aahh,,, if you use the google will find a lot of people writing good scripts to help you.

I going to write some nice,, but in T-SQL, just to create a database mirror,,,, Yes, I know, you can find a lot of blogs talking about who to create a database mirror,,, but I will do this using the SQLCMD inside the Management Studio,, why? just for fun…

I´ll skip the creation of end-points because you already know…

The good part is here:


/* Change the principal server name and instance */
:SETVAR principal_server "SERVERNAME\INSTANCE1"
/* Change the mirror server name and instance */
:SETVAR mirror_server "SERVERNAME\INSTANCE2"
/* in this case I use the same server, but you can add one more setvar and add the other server */
:SETVAR server "SERVERNAME"
/* Database name to mirror */
:SETVAR db "DB_NAME"

:connect $(principal_server)

alter database $(db) set recovery full

backup database $(db)
to disk = 'D:\DB01\inst01\$(db).bak'
with compression, stats = 5

backup log $(db)
to disk = 'D:\DB01\inst01\$(db).trn'
with compression, stats = 5

go
:connect $(mirror_server)

restore database $(db)
from disk = 'D:\DB01\inst01\$(db).bak'
with file = 1,
move '$(db)' to 'D:\DB01\local\$(db).mdf',
move '$(db)_log' to 'D:\DB01\local\$(db).ldf',
norecovery, nounload, stats = 5

restore database $(db)
from disk = 'D:\DB01\inst01\$(db).trn'
with norecovery, nounload, stats = 5

alter database $(db)
set partner = 'TCP://$(server):5022'
go

:connect $(principal_server)

/* In this part you can change the setvar if was created other one */
alter database $(db)
set partner = 'TCP://$(server):5023'

 

The Log scan in database model is not valid

Um pouco da história antes….

Dia 08/12/2011 choveu muito aqui em sampa,,, tivemos problemas com a elétrica aqui no prédio, ocasionando diversas quedas de energia,,,

Tenho instalado no desktop um SQL Server 2008 R2 Express, onde tenho algumas bases para testes,, até ai nenhuma novidade,,,

Quando cheguei no dia seguinte (09/12/2011) percebi que um sistema que uso para testar algumas bases não estava funcionando,,, a mensagem era simples: “Não consigo acessar o SQL”

Tentei iniciar o serviço do SQL e, claro, não consegui,,, Acessei os eventos do sistema e achei a seguinte mensagem:

event model

Interessante,,, o transaction log do model foi corrompido… isso é legal…

Iniciei o SQL em modo de segurança e rodei um DBCC CHECKDB, não fez diferença…

Como a base Model não é uma das bases mais vitais do SQL e eu não tenho backup dela,,, fui no diretório de Templates e copiei a base de lá para o diretório onde estava a base de “produção”. Iniciei o SQL e ele carregou sem problemas….

Lembrando que, não é porque existem outras bases de sistema por aqui que você pode sobre-escrever a Master ou a MSDB…

Aí vem uma pergunta,,, por que o SQL não subiu com a base em suspect ou offiline? ou qualquer outro aviso? simples… a base Model, por mais simples que seja serve como base para criar o TempDB,,, sem ela,, o SQL não consegue criar o mínimo para o TempDB… eu consegui iniciar o SQL em modo de segurança porque usei a traceflag 3609 onde ele não recriou o tempdb…

The Current SKU is invalid ?!?! WhataHELL ?!?!

Estou montando um ambiente para fazer uns testes de migração de versão de cluster e me deparei com um erro no mínimo grotesco,,,

Antes de falar do erro, meu ambiente de testes é formado por:

  • 1 Windows Server 2008 Std sem Hyper-V (para AD)
  • 2 Windows Server 2008 Ent sem Hyper-V (para cluster)
  • E duas instâncias do SQL Server 2008 Enterprise. (Não são R2)
  • Nenhum desses ambientes tem SP ou qualquer atualização

1º erro grotesco, alguém já tentou fazer um cluster com o Windows Server 2008 sem Hyper-V ? se sim, já se deparou com um erro informando que as versões do Windows são incompatíveis com o SKU? tem um KB que disponibiliza um path para resolver esse problema…

2º erro grotesco, depois de instalar as 2 instâncias, cada qual em sua maquina, fui fazer o processo de adicionar o segundo nó nesse cluster. Depois de confirmar o serial recebi a seguinte mensagem de erro:

Existe esse KB indicando que esse erro é conhecido e que precisa ser instalado o CU1 do SQL Server 2008.

Mas tem uma forma mais fácil de resolver o problema,,,

Na tela onde você escolhe a licença, coloque a opção de versão Trial, clique em avançar, você vai para a tela de aceitar a licença, clique em voltar e selecione a opção que contém a chave de ativação.

Pronto, sua instalação vai prosseguir sem problemas…

5 Motivos para ir ao SQL Saturday #100

  1. Os tópicos – basicamente dividido em três categorias: BI, DBA e DEV, será como estar em uma banca de pasteis,,, tem pra todo o gosto,,, tópicos interessante sendo apresentados por pessoas que conhecem do assunto,,,, falando do mundo real…
  2. Contatos – vamos aumentar o número de conhecidos no face? – também conhecido como networking,,, prepare uns cartões de visita, tenha uma conta no twitter e não tenha vergonha de falar com as pessoas (isso server mais pra mim, vcs não tem noção do quanto acho complicado lidar com unidades de carbono…)
  3. É barato,,, é de graça !!!  
  4. Mas e se meu chefe não liberar? Ah! É sábado não tem o que ele reclamar,,, Vai ser mais difícil você convencer dona patroa em deixar você ficar um sábado inteiro longe dela em um lugar com um monte de gente esquisita falando sobre SQL do que falar com o chefe…
  5. é o de número 100 e é no Brasil !!!!Vamos lá mostrar que vale a pena promover eventos aqui !!

Já escolhi o que vou assistir,,, espero ver vocês lá…

Quais planos de execução estão na memória?

Em sua maioria, a memória utilizada pelo SQL Server é utilizada para armazenar dados (buffer) e planos de execução (cache de procedure). Nesse post vou mostrar quanta memória está alocada para cache de procedures

O SQL Server armazena o cache usando 8kb por página de dados. Usando a dynamic view sys.dm_os_memory_cache_counters podemos ver um resumo do que está alocado:

SELECT TOP 6
LEFT([name], 20) as [NOME],
LEFT(]TYPE], 20) as [TIPO],
[single_pages_kb] + [multi_pages_kb] as [cache_kb],
[entries_count]
FROM sys.dm_os_memory_cache_counters
order by single_pages_kb + multi_pages_kb DESC

Vou focar nos 3 principais resultados dessa query:

  • CACHESTORE_OBJCP – Esse são planos compilados para stored procedures, triggers e functions
  • CACHESTORE_SQLCP – São os planos que não fazem parte de procedures, functions e triggers, inclui basicamente SQL dinâmico.
  • CACHESTORE_PHDR – Esse é responsável por verificar a sintaxe de views, constrains, também resolve o nome de tabelas e colunas

Você pode monitorar o numero de páginas no cache usando o Performance Monitor usando SQLServer:Plan Cache que armazena os contadores de Páginas de Cache. SQL Plans (CACHESTORE_SQLCP), Object Plans (CACHESTORE_OBJCP) e Bound Trees (CACHESTORE_PHDR).

Nos podemos ver individualmente as entradas no cache usando a dynamic view sys.dm_exec_cached_plans

SELECT usercounts, cacheobjtype, objtype, plan_handle
FROM sys.dm_exec_cached_plans

A query lista os planos de execução mais utilizados. Ela inclui os planos para stored procedures, adhoc ou SQL dinâmico, triggers, views. Se você quiser ver o SQL associado ao plano (que no final das contas é o que realmente queremos) será necessário usar o sys.dm_exec_sql_text:

SELECT TOP 100
objtype,
p.size_in_bytes
LEFT(., 150) as [SQL]
from sys.dm_exec_cached_plans p
outer apply sys.dm_exec_sql_text (p.plan_handle) sql
order by usercount desc

Review – Lenovo w520

Aproveitado a viagem para o SQLPASS 2011, encomendei no site da lenovo meu novo monstrinho… um ThinkPad w520,,,

Alguns de vocês devem estar pensando,,, “Lenovo?!?!? eca,,, zuado,,,,” e realmente, esteticamente falando ele é feio,,,

A principio eu queria comprar o AlienWare,,, mas haviam alguns empecilhos:

  1. Nas configurações que eu queria só tinha pelo site;
  2. Não entregam em hotel;
  3. Não aceitam cartão pré-pago.
  4. Cartão de crédito apenas com endereço no EUA;
  5. e o principal problema,,, a fonte de alimentação é apenas 220w

Isso dificultou a escolha dele…

Ai lembrei do Asus,,, não era a mesma coisa,,, mas o hardware era interessante,,, ai tinha alguns problemas…

  1. Não tem loja online;
  2. Tem que comprar através de revenda, nenhuma delas tinha a configuração que eu queria;
  3. Mesmos problemas com o cartão.

Tá lá mais um pra minha lista de difícil pra comprar…

Já meio chateado,,, olhei no site da HP e não achei nada de bom por lá,,, fui para o site do amazon já pensando em comprar um alienware menor, talvez um m11x,,,

Enquanto estava lendo os reviews das outras pessoas sobre o m17x, um deles comentou que trocou o dele por um lenovo w520 e que havia ficado feliz…

Fui pesquisar,,, eles faziam a configuração que eu queria,,, aceitavam pagamento através do amazon (e o amazon aceita o VTM), fazem entrega no hotel e mesmo com as modificações eles entregavam em um prazo bem aceitável…

O meu quitute ficou assim:

Processador Intel Core i7 2a. geração 2820QM
Memória 16GB 1033MHz (vai até 32GB)
Disco 2x 500GB RAID 1
Monitor 15.6” 900p
Câmera onboard 720p
Rede 10/100/1000GB
Wireless G/N e Wimax
Resto HDMI, leitor de cartão, biometria, usb 3.0

A maquina é muito potente,,, estou fazendo uns testes rodando 4 maquinas virtuais com Windows 2008 R2, 1 com SQL Server 2012 (Denali), 1 com AD, 1 com Exchange server Std 2010 e a última com Sharepoint 2010 e ainda tenho recurso na maquina tranquilo,,,,

Claro que nem tudo são flores,,, eu gosto muito de achar problemas,,, e principalmente de reclamar…

As coisas que não gostei desse note:

  1. O teclado não ilumina, se você conhece a nova linha DELL Latitude ou até uns HP’s zuadinhos sabe que eles tem um sistema muito legal de iluminação do teclado, a luz vem por dentro da tecla. No w520 você pode habilitar um pequeno LED do lado da câmera, que por sinal não ajuda muita coisa e é feio d+.
  2. O teclado é muito bom, eles não usam aqueles plásticos lisos que ficam engordurados por qualquer coisa,,, mas o formato do teclado é ruim,,, mas é muito ruim,,, a falta do Ç até pode ser aceitável,, mas não tem o nem o 0  para primeira e primeiro é muita sacanagem,,, Não, não tem um esquema de pressionar o ALT da esquerda e alguma outra tecla,,,
  3. O tampão do monitor é de fibra de carbono, ótimo material,,, mas tem um grande arque-inimigo: os dedos. Qualquer colocada de mão na tampa fica uma mancha.
  4. Ele é pesado.
  5. A fonte de alimentação é enorme,,, quase do tamanho do Netbook da dona patroa…
  6. Ele tem um problema interessante,,, enquanto estávamos no evento, fiquei conversando com dona patroa através do skype. Em muitas conversas usei a webcam,,, em uma dessas conversas, percebemos que havia uma pequena mancha arredondada verde do lado direito superior da minha janela, ai percebi que o led verde, que indica a utilização da câmera interna, reflete no vidro de proteção na câmera,,, não é uma coisa que pode incomodar algumas pessoas, mas é um saco quando você repara nos detalhes…
  7. Tem a cara de um IBM,,, é feio,, muito feio,,,

Acho que de todos esses empecilhos os que mais me incomodam são a luz do teclado e o layout do teclado,,,

Tirando todos esses detalhes chatos, gostei do note. É um bom hardware,,, ele tem que durar 6 anos como seu antecessor o Acer Aspire 5050.

AAhh,, como pedi com 2 HD’s tive que comprar uma unidade externa para leitura de mídia,,, já que o segundo HD vai no slot da unidade de DVD.

29/05/2012 – Atualização

Fiz um upgrade nesse pequeno monstro… Troquei o disco 0 de um 500GB a 7500 rpm por um SSD de 120GB da OWC…

Ta certo que perdir um RAID 0 com quase 970GB,,, mas valeu pela velocidade,,, agora são 120GB para o SO e o outro HD ainda está na unidade de DVD tem 500GB,,, da pro gasto….

Antes:

E agora:

Quem pode fazer o que?

Administro um ambiente que tem +/- 120 usuários de SQL,,, e dentro de uma das bases do ambiente tem uns 70 usuários, com permissões diferentes em objetos diferentes…

Eu precisava de algum script para mapear aquelas peculiaridades de alguém ter permissão de execute em uma proc,,, e select em outra tabela,,, ou quando alguém tem deny em uma view… mais por questão de documentação e ter uma baseline quando alguém faz alguma alteração de proc apagando e criando ao invés de dar alter com isso perdendo as permissões…

ai saiu um scrip mais ou menos assim:

SELECT
prmssn.permission_name AS [Permission],
sp.type_desc,
sp.name,
grantor_principal.name AS [Grantor],
grantee_principal.name AS [Grantee]
FROM
sys.all_objects AS sp
INNER JOIN sys.database_permissions AS prmssn ON prmssn.major_id=sp.object_id AND prmssn.minor_id=0 AND prmssn.class=1
INNER JOIN sys.database_principals AS grantor_principal ON grantor_principal.principal_id = prmssn.grantor_principal_id
INNER JOIN sys.database_principals AS grantee_principal ON grantee_principal.principal_id = prmssn.grantee_principal_id
WHERE
(SCHEMA_NAME(sp.schema_id)='dbo')
ORDER BY sp.type
go

ATUALIZAÇÃO – 06/12/2011

Existe também o sp_helprotect, ele faz basicamente a mesma coisa que o script acima. Você pode colocar o objeto na frente da proc e vai ter a lista de usuários com permissão naquele objeto, ou, apenas executar a proc e ela vai trazer a lista de permissões de todos os usuários em todos os objetos.

SQLPASS – Keynote D2

08h10 – Hoje é o kilt day,,,,

08h18 – Hoje tem um monte de agradecimento para as pessoas que ajudam o evento a ser realizado

08h25 – O Pessoal apresentou um vídeo sobre as qualidades mais interessante para as pessoas sobre o sql,,, muitas das pessoas são de instituições bancárias,,,,

08h30 – O VP está falando sobre as novidades do SQL Server 2012, começou falando sobre as novidades de alta disponibilidade, que por sinal realmente é bem interessante

Agora o VP da MSC está falando sobre a utilização deles do SQL, comentando a necessidades deles de nunca poder parar de acessar os dados.

08h40 – O pessoal esta mostrando como configurar o modo Always-On do SQL 2012,,, isso é simplesmente muito bom,,,,

08h53 – Até que enfim alguém está fazendo exemplos sem usar Excel,,, e pra ajudar a mina vira e manda uma: “Da pra fazer pelo GUI, mas sou da velha guarda, então olhem o código aqui,,,”

09h00 – Agora vamos ver o appliance com SQL,,, um hardware tunado para rodar banco,,,, só banco,,,, e mais nada além de banco,,,, isso é um sonho? SQL Server Parallel Data warehouse,,,, agora não é só HP,,, a DELL também tem hardware pra isso,,, é uma pena que isso, se um dia chegar ao Brasil, vai ser muito caro,,,,

09h16 – Anuncio do driver de ODBC para linux,,,, já que tem um monte de gente desenvolvendo para linux, pelo menos acessem uma base decente sem usar a droga do jdbc,,,

09h30 – trouxemos a chuva para Seattle,,, afinal,,, muito SQL Azure  da nisso,,,,

09h40 – O pessoal anunciou que o SQL Azure vai aceitar bases até 150gb,,, e em qualquer collation,,, vamos ver se ele começa a fazer alguma sombra no Brasil,,,

SQLPASS – Chegamos no esquema

11/10/11 – Fizemos o checkin do evento,,, como começo a ficar de costume, nos meus brindes veio faltando alguma coisa,,, no voo foi o fone de ouvido,,, daqui foi a cordinha para o crachá.

12/10/11 – Chegamos no evento,,, um monte de gente,,, já na escada rolante escuramos alguns brasileiros,,,

08h13 – muita gente no salão para o keynote,,, esse pessoal é muito estranho,,, só sabem falar inglês,,, q coisa chata,,, uahuahauhauha e nada de começar….

08h17 – começa com um video de pessoas falando sobre o significado do evento,,,

08h19 – apareceu o presidente do SQLPASS (Rushabh Mehta),,, ele está falando sobre a comunidade,,, mostrando quem faz parte do border,,, ele disse que o twitter está acima da capacidade,,, alguém precisa dizer pra ele que o wireless daqui não está aguentando a quantidade de gente,,,

08h27 – 189 seções, 204 palestrantes,,, e muita gente,,, no folheto dentro da mala mostra onde estão as salas interessantes,,, e qual o nível do treinamento,,,,

08h36 – basicamente uma explicação do evento,,, até que foi legal…

08h37 – Agora o Sr. vice presidente de produtos MS, Ted Kummert,,,

08h39 – The New World of Data, Ted Kummert está falando sobre que a menina dos olhos é Cloud,,, até aí,,, qual a novidade?,,

08h42 – 400k horas, 79k membros, 300 mvps,,, é coisa de gente grande,,,,

08h45 – Ted Kummert, está falando sobre os 3 pilares do SQL Server Denali.

08h50 – Agora o SQL Server Denali tem um nome oficial,,, SQL Server 2012 (esse pessoal é muito criativo,,,) e pelo que ele disse vai ser lançado no começo do ano que vem (isso vai ser uma grande novidade)

08h57 – Vamos ter outra versão do Azure até o final do ano,,, com novos tipos de dados….

09h07 – Denny Lee está demonstrando algumas novas consultas usando como exemplo o excel…

09h13 – Agora tem um pouco de SQL Azure labs…. vamos ver que zona vai sair disso,,,

09h18 – Mais exemplos com excel,,,, nós já sabemos que podemos extrair muitos dados, gerar relatórios e fazer uma festa com o excel acessando SQL,,, mas poxa, não viemos até aqui pra brincar com Excel,,, quero ver SQL,,,

09h26 – Agora pra que estudar para BI? qualquer criança que conheça um pouquinho de excel vai conseguir fazer qualquer coisa com acesso aos dados,,, até que não é ruim,,, o problema é que essa liberdade para o usuário, que na maior parte das vezes toma piau pra conseguir mandar um email, pode gerar mais dificuldades do que facilidades… O usuário tem que aprender a saber o que quer antes de ter a liberdade de acessar o que ele quer,,,, sem treinamento isso pode se tornar mais em problema do que liberdade,,,

09h37 – Amir Nets faz umas apresentações muito boas…. as apresentações de BI dele são muito boas…

09h55 bem no final da apresentação do Amir Netz, o tablet não consegue conectar na internet,,, e para tora a apresentação,,, uhauhauhaua, vir em uma apresentação com produtos MS e ela não ter problema? não tem graça,,,

09h57 – fim do keynote,,, agora vamos ver as outras coisas,,,