Eu eu eu , Julian Assange se deu mal!

Leitores amigos, cuidado com o que você sabe.

Nos ultimos dias o site WikiLeaks , uma pagina dedicada a publicar documentos governamentais secretos, colocou a diplomacia americana em uma saia justa. A revelação de 250.000 documentos confidenciais que entre outras afirmações classificava o governo russo como mafioso e o presidente argentino Nestor Kirchner como doidão e marido de uma doida causou polemica internacional.

Mas quem se lascou mesmo foi o fundador do site Julian Assange, que depois da revelação dos documentos foi acusado de "crimes sexuais" na Suécia, recebeu ordem de prisão e teve sua fiança negada. Além de empresas como Visa e Paypal decidirem se desligar do WikiLeaks cortando assim as fontes de doações ao sitio. Será que é retaliação?

Observando as agruras de Julian da pra refletir um pouco sobre nosso pequeno mas valioso latifundio. Os dados. E o quão confidenciais eles são.

Recomendo que todo e qualquer DBA em primeiro lugar seja sigiloso. Na maioria das empresas o DBA é o "cara com acesso full", geralmente accessando informações financeiras da companhia, dados de clientes e outras coisitas mais. Por isso o melhor que fazemos é fechar o bico!

Caro colega de dados, as vezes não conseguimos ligar nossa conversa no cafezinho com crimes federais mas é ai que mora o perigo. Fale pouco sobre ou nada sobre o resultado das suas queries. Conheça bem a politica da sua companhia para dados sobre clientes, salarios e faturamentos. Um vazamento pode causar um belo estrago em sua carreira , para não dizer na sua vida. Por isso quando o dado confidencial aparecer lembre-se de Julian Assange e sua condenação por cometer crimes sexuais com suecas!

Comunidade!

Pois é caro leitor (já posso falar assim pois descobri que uma pessoa leu o blog), eu voltei!

Está chegando o fim do ano e junto com ele uma série de promessas. Entre elas, fazer esportes , ir menos no McDonalds e Participar mais da Comunidade! Vou tentar blogar um pouco mais e tentar extrair desse pequeno espaço alguma coisa útil, para quem lê e para quem escreve!


Esse sábado estive no DNAD 2010 um evento promovido pela comunidade de arquitetos .Net (http://dotnetarchitects.net/) . E eles com certeza me motivaram nessa ultima promessa de fim de ano. Incrível como um par de anos longe da codificação faz você se sentir um tanto estúpido perto da gama gigante de siglas que surgiram.


Para você que perdeu o evento o pessoal do grupo prometeu postar os vídeos da palestras. (algumas extremamente interessantes).

Seguem abaixo minhas impressões











Abertura do Evento
Emmanuel Brandão / Felipe Rodrigues
Ok. Se você já tem esposa e filhos você até pode me entender. Eu
juro que queria ter assistidos as palestras da manhã,
mas sabadão é o dia de por a casa em ordem e alimentar o ninho. Nessa hora eu
tava fazendo a feira, comprando pão e leite e assistindo pela décima quinta
vez "As Canções de Cocoricó" com minha filha
Entenda porque ASP.NET MVC pode te
ajudar a ter uma arquitetura melhor
Victor Cavalcante
Integração Contínua: Muito Além do Build
Juan Lopes
Essa era a palestra que eu não queria perder, na minha empresa
temos um processo novinho de BUILDs e esse assunto está no TOP 10 do meu
interessa, mas nessa hora eu estava descobrindo como fazer a travessia
Guarulhos - Cidade Universitária e tentando descobrir qual é a portaria da
USP que estava aberta. Emmanuel libera o vídeo!!!
Almoço
Salada e bolo de chocolate
Enfim cheguei na hora do almoço. Bom porque eu estava com fome.
Nessa hora reencontrei o Emmanuel Brandão e o João Tales. Duas figuras bem
importantes que merecerão o devido destaques nesse blog
Projetando Aplicativos para a Escalabilidade – Tirando o melhor
da Plataforma Windows Azure
Otavio CoelhoRetornando do almoço, veio o Otavio Coelho e o Azure. Mil CPUs
de 1 Ghz por US$ 0,05 a hora, isso só para começar a
brincar. A apresentação foi fantástica, não ficaram duvidas com relação ao
potencial monstruoso da plataforma., mas fiquei com
uma duvida. Qual cliente aceitaria seus dados corporativos privados na
nuvem? Talvez a maior barreira do
Azure seja cultural
AOP: Desenvolvimento de aplicações usando aspectos
Fábio Falavinha
Essa para mim foi um desafio. Programador enferrujado e com
pouca pratica no C#, desfoquei do código e me esforcei para entender o
conceito. A idéia de AOP me pareceu bem valida, mas não simples. Pelo que
entendi, validações que normalmente ficam no método passam a pertencer ao
Aspecto da classe. Um método do tipo Apagar da
classe NotaFiscal fica exclusivamente na ação de apagar e checagens do tipo
"A Nota foi paga?" vão para o Aspecto. O argumento foi de preservar
no método apenas a regra de negócio. E me ficou mais uma duvida..... Essas validações não fazem parte da regra?
Coffee Break
Café com Leite e bolachas
Mais um momento gostoso.
TDD e sua influência no design
Mauricio Aniche
Essa foi ótima. Um palestrante bom e um tema muito interessante.
Anotei no caderno, vale a pena estudar.
Gerenciando dependências com NuPack
Vinicius QuaiatoOutro bom palestrante. Como era sobre uma ferramenta que
facilita a vida dos programadores valeu pelo conhecimento. Mas o mesmo
Vinicius fez uma Lighting Talk sobre Stubs e Mocks que ficou muito boa.
OData: REST com qualidade
Elemar Jr.
O Elemar me motivou. Ele abriu a palestra falando sobre a
promessa dele para 2010 de participar mais da comunidade. Vou seguir exemplo.
Sua palestra foi bem sensata e conseguiu segurar a atenção, mesmo com o
pessoal já cansado de tanta informação. Ficou uma impressão de "Keep it simple" , e eu concordo com isso.
Lightning Talk
VariosAs Lightning Talks foram ótimas, uma imersão em vários conceitos
novos. A idéia é uma palestra curta com slides que fiquem no máximo 15
segundos na tela, apresentando um conceito ou ferramenta. Modelo ideal para
cair em um youtube. Da pra assistir uma por dia na hora do almoço.

Poupe tempo com MERGE

Atualmente trabalho em uma empresa de GED onde cada documento é identificado com uma porção de campos que chamamos de indexadores. É pratica comum a nossos clientes reduzirem o custo de digitação enviando uma base de dados com todos os indexadores. Infelizmente, também é pratica comum que a base venha repetida ou então ela seja uma mescla de dados já carregados anteriormente, registros novos e até atualizações da informação.
Tudo isso é chato de carregar. Ou melhor, era!! Quem tem o prazer de lidar com o SQL 2008 já pode utilizar o MERGE.
Se você perguntar ao Google o que significa MERGE em português, nosso pastor te responderá:
verbo fundir,amalgamar,misturar,diluir,desaparecer,imergir

Portanto, a idéia do MERGE é juntar duas tabelas e realizar operações de INSERT,UPDATE e DELETE para obter um resultado final .

Para dar um exemplo pratico , vamos iniciar criando duas tabelas, a TabelaAlvo (no caso cima é minha tabela com os dados dos documentos) e a TabelaFonte (a base que o cliente mandou com atualizações)

CREATE TABLE TabelaAlvo
(
ChavePrimaria int NOT NULL PRIMARY KEY,
CampoTexto varchar(50) NULL
)
CREATE TABLE TabelaFonte
(
ChavePrimaria int NOT NULL PRIMARY KEY,
CampoTexto varchar(50) NULL
)
GO

INSERT INTO TabelaFonte VALUES (1,'Texto 1')
INSERT INTO TabelaFonte VALUES (2,'Texto 2')
INSERT INTO TabelaFonte VALUES (3,'Texto 3')
INSERT INTO TabelaFonte VALUES (4,'Texto 4')
INSERT INTO TabelaFonte VALUES (5,'Texto 5')

INSERT INTO TabelaAlvo VALUES (4,NULL)
INSERT INTO TabelaAlvo VALUES (5,NULL)
INSERT INTO TabelaAlvo VALUES (6,'Texto 6')
INSERT INTO TabelaAlvo VALUES (7,'Texto 7')


Portanto temos 5 registros na TabelaFonte sendo que dois deles já existem na tabela TabelaAlvo ( note que o campo CampoTexto está nulo, simulando um dado desatualizado)
Para regularizarmos a situação teríamos que executar duas operações.

Primeiro um INSERT com SELECT para incluirmos só o que é novo

INSERT INTO TabelaAlvo (ChavePrimaria,CampoTexto)
SELECT
F.ChavePrimaria,F.CampoTexto
FROM
TabelaFonte F
LEFT JOIN TabelaAlvo A ON F.ChavePrimaria = A.ChavePrimaria
WHERE
D.ChavePrimaria IS NULL
Depois UPDATE para atualizarmos o que já existe.
UPDATE A
SET A.CampoTexto = F.CampoTexto
FROM
TabelaAlvo A
INNER JOIN TabelaFonte F ON A.ChavePrimaria = F.ChavePrimaria


Agora veja a syntaxe do Merge para a mesma operação

MERGE TabelaAlvo A
USING TabelaFonte F
ON A.ChavePrimaria = F.ChavePrimaria
WHEN MATCHED
THEN UPDATE SET A.CampoTexto = F.CampoTexto
WHEN NOT MATCHED
THEN INSERT (ChavePrimaria,CampoTexto) VALUES (ChavePrimaria,CampoTexto);



Vamos a Syntaxe.

Após o Merge coloque a tabela alvo, aquela que você vai realizar as operações de insert/update/
O USING é a tabela origem, onde você buscara as informações
Após o ON coloque a condição de igualdade das duas tabelas
WHEN MATCHED é a clausula executada onde a condição for satisfeita. (o INNER JOIN do UPDATE)
WHEN NOT MATCHED é o que será executado quando existirem dados na fonte que não existem no alvo. (o INSERT..SELECT)
Existe também uma terceira opção a WHEN NOT MATCHED BY SOURCE que realiza uma operação na tabela alvo para registros que existam nela e não existam na origem.
Exemplo: Quero deixar as duas tabelas exatamente iguais.

MERGE TabelaAlvo A
USING TabelaFonte F
ON A.ChavePrimaria = F.ChavePrimaria
WHEN MATCHED
THEN UPDATE SET A.CampoTexto = F.CampoTexto
WHEN NOT MATCHED
THEN INSERT (ChavePrimaria,CampoTexto) VALUES (ChavePrimaria,CampoTexto)
WHEN NOT MATCHED BY SOURCE
THEN DELETE;


Isso é o basico depois disso existem n alternativas dentro do MERGE, sugiro uma leitura no BOL http://technet.microsoft.com/en-us/library/bb510625.aspx


Agradeço a você pela sua atenção e espero que isso ajude em algo!

E agora DBA?

No inicio de 2009 meu diretor entrou na sala de reuniões e ordenou "Precisamos de um DBA!"

Depois disso meus dias profisionais nunca mais foram os mesmos.

Até então eu era um programador VB6 ja experimentado e um pouco iniciante em .Net, mas alguma coisa me impulsionou a entrar na sala do gerente e perguntar : "Será que eu posso ser o DBA?"
Então depois de aproximadamente 9 anos de experiencia como programador eis que volto a condição de Junior!
Algum tempo ja passou desde que isso aconteceu e ja consegui aprender alguma coisa, só que eu quero bem mais.
Se um dia eu chegar perto do que esse cara aqui eu ja vou ficar bem feliz.

Mas chega de lero lero. Tenho dois objetivos com esse blog.

O primeiro é publicar informações sobre o SQL Server 2008 que ficam escondidas nos recantos dos manuais e da web e que muitos DBAs brasileiros perdem por não termos uma tradução ou mesmo o tempo para ir atrás das perolas.
O segundo é mais complicado. Atualmente ando um pouco chateado com treinamentos oficiais da Microsoft, acho que custam caro demais, desprezam os alunos e muitas vezes o conteudo é pura leitura de apostila. E como eu ando um pouco sem grana, resolvi conseguir uma certificação sem fazer curso nenhum. Só por mim mesmo.

Bem, espero que esse espaço seja util para alguem. (pelo menos para mim) e que passe desse primeiro post. (ja tive muitos blogs de um post só)

Um abraço comunidade!