E se Chuck Norris fosse DBA ?

Para distrair um pouco: recentemente eu encontrei um post muito engraçado ( para os que entendem ) sobre o famoso Chuck Norris versão DBA.

Abaixo uma prévia do que pode ser encontrado nesse blog:

[…]

  • Chuck Norris não faz DELETEs. Ele olha para os registros e eles correm de medo.
  • MSSQL Server É muito mais rápido que Oracle. Basta que o DBA seja CHUCK NORRIS.
  • SELECT SUM(FORÇA) FROM CHUCK_NORRIS;
    Internal error. Don’t call the support.
  • SELECT CHUCK_NORRIS;
    Drop database sucessful.
  • Chuck Norris instala o MSSQL Server em um Pentium 100MHZ. Rodando Solaris. A partis dos fontes.
  • Se disser ao DBA Chuck Norris que “o problema está no banco”, é melhor que esteja se referindo ao Itaú.
  • TRIGGERS tem este nome porque Chuck Norris sempre ameaçava atirar no banco quando ele não fazia algo automático.

[…]

[]s
Rodrigo Ribeiro Gomes

Advertisements

Uma imagem vale mais do que 10000000 linhas !

Olá, tudo bem ?

É no espírito de Paulo Henrique Amorim que começo ( na verdade continuo ) mais um post.

No último post eu falei sobre um recurso chamado Query Shortcut que pode facilitar a vida de desenvolvedores e DBAs na hora de debugar, criar, alterar as querys.

Existe uma outra ferramenta bastante bacana que também pode facilitar a vida[2] e muito dessa galerinha. Estou falando do SMSS Tool Pack. Não vou citar todos os recursos, até porque é uma ferramenta que começei a utilizar a pouco tempo. O que eu posso adiantar aqui é que é GRÁTIS. Claro que nao vou terminar isso sem mostrar um preview né.

Essa ferramenta é uma espécie de plug-in pro Management Studio (SMSS) que adiciona algumas novas funcionalidades. Dentre elas, a que eu mais gosto, é a de colorir a janelinha do query editor de acordo com a conexao. Por que isso é tão útil assim ? Sabe aquelas horas em que você está fazendo um teste, e vai rodar aquele DELETE inonfensivo em um servidor de teste, mas quando aperta o F5 se dá conta que estava na conexao de produção ? Pois é, talvez se tivesse uma faixa imensa vermelha na sua frente, você pensaria 3 ou 30 vezes antes de apertar o tal do F5 … tipo assim:

Colorindo a janela de acordo com a conexao

E é claro que no dia-a-dia, nessas correrias, e com o mercado querendo mais em menos tempo, estamos sujeitos a essas situações nem um pouco agradáveis …

Você configura uma cor pra um determinado texto. Toda vez que uma conexao for feita e conter exatamente aquele texto, a cor vai ser aplicada. Você também pode usar o tal texto como expressão regular, facilitando ainda mais no caso de vários servidores com um nome em comum. Além de especificar uma cor, você pode configurar  largura da faixa, entre outras opções:

SMSS Tool Pack - Opções do "Window Coloring"

Existem muito outros recursos como gerar INSERTs, modelos de querys ( que serao adicionados toda vez que a conexao abrir ), manter um histórico das últimas querys executadas, mesmo que você não tenha salvo ( esse é ótimo, descobrir alguns dias atrás ), etc… Prefiro que você descubra, afinal, é simples e rápido !

Essa ferramenta é um pouco fresca, ela exige que se tenha o SQL Server 2005 Service Pack 2 ou posterior (Não instale sem atualizar, porque além do plugin nao funcionar, vai ficar uma janelinha chata , enchendo o saco toda vez que você abrir o SMSS). Disponibilizo alguns links pra atualização ( fica a seu critério escolher, mas recomendo sempre o mais atualizado, nesse caso o Service Pack 3 ):

Versão Express:
SQL Server Management Studio Express Service Pack 2
SQL Server Management Studio Express Service Pack 3

Outras Versões:
SQL Server Service Pack 2
SQL Server Service Pack 3

A versão SP4 foi lançada recentemente, só que está em versão RTM, que é somente para testes, quem quiser pode encontrar aqui (versão não express). Para Outras Versões (as pagas $$) o instalador é o mesmo, tanto pro Management Studio, quando pro próprio SQL Server, o instalador irá procurar os produtos do SQL Server 2005 instalados e irá atualizar o que for necessário.

Bom espero que isso sirva pra alguém algum dia !

[]s
Rodrigo Ribeiro Gomes

Query Shortcuts

Salve povo !
Expediente acabou, estou indo embora e queria deixar uma dica.

As vezes a gente nao se importa com algumas ferramentas que agilizam nossas vidas quando o assunto é programação. Principalmente quando você tem que ficar repetindo várias vezes as mesmas ações.

Uma coisa comum que a maioria dos desenvolvedores de SQL Server faz é usar SPs ( Stored Procedures ) para retornar informações do servidor, definição de outras procedures, triggers, etc. Um exemplo comum é o uso de sp_helptext. Qual desenvolvedor nunca usou isso ? Ou sp_lock, ou sp_who2 ? Qual DBA nunca usou ?

A questão aqui é quando o uso é constante, como no caso de sp_helptext (e das outras também, hehe). É bastante chato, pelo menos eu acho, quando a gente quer mccher mexer em alguma procedure e tem que ficar escrevendo sp_helptext ‘NOME_DE_UMA_PROCEDURE’. E pra quem copia e cola, é chato do mesmo jeito.

Não, chega disso. Para os usuários do SMSS, ele oferece um recurso “Query Shortcurts”, onde você configura um atalho para uma procedure, isto mesmo, uma combinação de teclas, e quando essa combinação de teclas é pressionada, ele executa a procedure na conexao atual !!!!!!!!! E detalhe, se a procedure tiver parâmetros, basta você selecionar os parâmetros, e usar o atalho, que ele vai pegar o texto que está selecionado e enviar como parâmetro.

Pra demonstrar isso,  eu vou criar uma procedure qualquer aqui…

USE master
GO

CREATE PROCEDURE prcQualquer
AS
print 'SQL Server'

Bom, uma SP simples, que apenas imprime algo na tela. Se eu quisesse ver a definicao dela, eu faria algo assim:

sp_helptext 'prcQualquer'

Executando sp_helptext

Usando o Query Shortcut, bastaria apenas usar o atalho com o nome “prcQualquer” selecionado,e apertar a combinação de teclas. Legal né ? Eu nao vou entrar em detalhes aqui o quanto isso pode ser útil, vou deixar você descbrir. Se não achar útil, tudo bem, mas eu vou continuar achando. 😉

Ahh, e onde configura isso ? Simples, sabe o menuzinho onde tem “File”,”Edit” ? Procura um chamado “Tools”:

Tools->Options

Tools->Options-

Dái vai abrir essa janelinha aqui:

Environment->Keyboard

Configurando as Query shortcuts

Algumas já vem configuradas por padrão, como sp_lock.Nesse caso eu coloquei sp_helptext em CTRL + F1. Agora toda vez que eu apertar CTRL + F1 dentro do editor de query, ele vai executar a procedure sp_helptext. Como a procedure necessita de alguns parâmetros, você precisa selecionar algo, se não dá erro.

Usando o queryshortcut

Se estiver algum aba de query aberta, o atalho nao funcionará, somente para as novas abertas. Você também nao fica limitado a stored procedures, você pode colocar um SELECT, INSERT, isto é, qualquer T-SQL válido.

Bom pessoal, é isso, num próximo post eu falo sobre algumas outras ferrmentas, té a próxima.

Ahhh, pra quem viu o post anterior, eu disse :

[…]”quando acabar a merda de algum teste lembra de desfazer as coisas que fez”[…]

Então …

USE master
GO

DROP PROCEDURE prcQualquer
GO

[]s
Rodrigo Ribeiro Gomes

Quando uma sys.algo pode te ajudar

Bom galera, resolvi passar por aki, aproveitando que estou na hora do rango!

Aqui onde trabalho, estava acontecendo um erro em um dos servidores de teste quando alguem tentava logar no site que temos, tudo em ambiente de teste. A página era(é) uma página ASP.
O erro era esse:

Microsoft OLE DB Provider for ODBC Drivers error ‘80004005’

[Microsoft][ODBC SQL Server Driver][SQL Server]Logon failed for login ‘XXXX\YYYYYYY’ due to trigger execution.[…]

XXXX\YYYYYYY é o login que o IIS se usa pra se conectar no SQL Server. Se olharmos para o final vemos a frase “due to trigger execution”, em outras palavras ( literalmente ), “devido a execucao de uma trigger”. Na minha longa vida de SQL, eu vi que esse tipo de erro acontence quando temos triggers de Logon ( que sao na verdade DDL Trigers ) definidas no servidor.

Qual a solução ? Procurar pela danada e ver o porquê ela estava impedindo do IIS usar o SQL Server… e o problema começou aqui. Eu precisava de uma forma para encontrar as DDL triggers definidas no servidor.

A primeira tentativa foi em:

SELECT * FROM sys.triggers

Rodei no banco master ( que era o banco default do login ) e nada lá …
Por que ? Uma rápida olhada aqui no nesse artigo do BOL que tem a documentação dessa VIEW e vemos a descricao ali no começinho:

[…]”DML trigger names are schema-scoped and, therefore, are visible in sys.objects. DDL triggers names are scoped by the parent entity and are only visible in this view.”[…]

Isto é,em uma tradução vagabunda feita por mim mesmo:

“Triggers DML são definidas no escopo do esquema e portanto podem estar disponiveis em sys.objects.  Triggers DDL estão no escopo da entidade pai e são visíveis somente nesta view.”

Ou seja, podemos encontrar aqui tanto triggers DML quanto DDL. Mas as triggers DML também podem estar em sys.objects. Entidade pai é o tipo do objeto para o qual a trigger foi criada. Olhando na tabelinha um pouco abaixo desse trecho baixo vemos os seguintes valores para as colunas que informam qual a entidade pai: parent_class e parent_class_desc.

  • Parent_class pode ser 0 OU 1. Se for 0, significa que a trigger tem a Entidade DATABASE, e veremos exatamente esse nome na coluna parent_class_desc. Isto é, a trigger foi definida para eventos do Banco em que foi criada. Se for 1, significa que a trigger tem a Entidade OBJECT_OR_COLUMN, e veremos exatamente esse nome na coluna parent_class. Isto significa que a trigger foi criada para eventos em algum objeto .

Bom o importante aqui é que temos apenas dois valores possíveis pra parent_class e parent_class_desc… E nehum desses valores é igual a SERVER, ou algo do tipo, isto é, não irei ver triggers definidas para o servidor nessa view, já que Triggers de Logon são definidas para ALL SERVER e não somente DATABASE.

E lá vai eu tentar advinhar onde achar qual o nome da bendita trigger de logon… Quando googlando muito, eu encontro a bendita página. Olhando lá em baixo, no tópico “Getting Information About Logon Triggers”, eu encontro isso:

” You can view metadata about logon triggers by querying the sys.server_triggers catalog view. “

Vendo o nome sys.server_triggers, eu nao pensei em mais nada, nem cliquei no link, fui direito pro SSMS e executei a query:

SELECT * FROM sys.server_triggers

E lá estava ela, só tinha ela criada… quando vi o nome da trigger lá, lembrei que eu tinha criado a trigger pra alguns testes e que a mesma nao era importante. Dentro dela havia um insert em uma tabela, onde o login que estava se conectando pelo IIS nao tinha permissao de insert, gerando um erro e falhando o login. Dropei a danada, e como esperado, o IIS consegiu e o tudo funcionou sem problemas.

Bom, o que eu posso concluir com isso é:

  • Guarde as querys que te dao meta informações do servidor.
  • E guarde bem organizado para que você possa buscar isso facilmente depois.
  • E o mais importante: quando acabar a merda de algum teste lembra de desfazer as coisas que fez 🙂 !

Antes de terminar, creio eu que alguns podem se estar perguntando: Por que esse idiota nao usou o SSMS, foi lá em “Server Objects” e depois em “Triggers” ? ( Lá tem todas as triggers DDL definidas para o servidor )

  • Primeiro: Eu tinha me esquecido na hora e lembrei quando começei a escrever esse post.
  • Segundo: Mesmo se eu tivesse lembrando eu iria querer saber de todo jeito como eu faria pra consultar isso via T-SQL, pois se não tivesse o SSMS, e apenas um sqlcmd da vida, eu iria conseguir achar ela. 😉

Agora que eu tive que procurar, “sofrer” passando por alguns links e páginas, eu não esquecerei disso tão cedo.

Me desculpem erros de português, palavrões, etc … té a próxima !

[]s
Rodrigo Ribeiro Gomes

Apresentação

Galera, esse é meu primeiro post oficial como blogueiro ( se escreve assim mesmo !? ). Como a maioria faz, eu resolvi começar me apresentando, pra que ninguém venha a ter surpresas posteriomente, rs !.

Quem é Rodrigo Ribeiro Gomes ? Resposta: sei lá. Essa talvez seja a pergunta mais difícil que eu possa responder, e acredite, não tenho uma resposta. O que posso dizer com toda certeza é que eu gosto de aprender, buscas novos conhecimentos, em suma, entender os porquês. E, com alguma minúscula experiencia, eu tenho visto que a gente aprende muito mais quando a gente ensina ( ou pelo menos tenta).

Não sei se vocês perceberam, mas eu gosto de conversar com os leitores. Vão ter momentos que eu vo encher um post de palavrões, abreviações, blá blá blá … Se alguem se incomodar com isso, por favor, então pare aqui mesmo. Sempre quando escrevo algo na internet, tentando passar algo, compartilhar algum conhecimento, quero passar a impressão de que eu e vocês estamos frente a frente, conversando livre, pra deixar algo mais natural. Eu sou fâ de autores que fazem isso nos seus blogs, e sempre aprendi mais com esses !!! \o/

E do que irei falar em meus Post’s ????
Resposta: Não irei falar, irei compartilhar conhecimentos e experiências. Pode ser que apareçam mais assuntos ligados a informática, (programação, banco de dados, etc…, essas coisas de doido). E é pelo fato de entender querer compreender os porquês, e não apenas de contentar que aquilo é daquele jeito porque tem que ser, que eu pretendo escrever para o mundo. Irei errar muito,  mas com esses erros, pretendo acertar muito também.

E depois dessa “frescuraiada” toda, eu termino meu primeiro post para mundo. Desculpem os erros de português ( irão ver muitos  ainda .. hahaha! ). É o meu primeiro post e vocês podem me dar um desconto. kkkkkkkk.

Eu vou fazer uma legenda, pra algumas expressões que eu achar que alguém possa nao ter entendido.

Legenda:

  • Frescuraida = Frescuraiada.
  • blogueiro = blogueiro
  • \o/ = \o/
  • hahaha!

[]s
Rodrigo Ribeiro Gomes