Foi um dos melhores momentos no keynote do 3o. dia,,,
[youtube=http://www.youtube.com/watch?v=ST-JmMc7R9U]
pra quem quer acompanhar a música com a letra:
[youtube=http://www.youtube.com/watch?v=vsafOonKs8I]
Foi um dos melhores momentos no keynote do 3o. dia,,,
[youtube=http://www.youtube.com/watch?v=ST-JmMc7R9U]
pra quem quer acompanhar a música com a letra:
[youtube=http://www.youtube.com/watch?v=vsafOonKs8I]
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,,,
Estava revirando uns arquivos no meu HD externo e achei um programa muito legal para
conexão ODBC.
Antes de falar do programa,,, a historinha…
Conheci uma vez uma empresa que o pessoal não deixava acessar o servidor com SQL por TS nem SSMS,,,
Perguntei pra eles como eu iria ajudar a identificar os problemas se não podia fazer muita coisa… me explicaram que era política da empresa, eu poderia acessar de qualquer outra forma, mas não poderia conectar meu note da rede nem instalar qualquer aplicativo na estação…
Foi com essa necessidade que conheci o ODBC QueryTool,,, ele é um programinha bem legal… de graça e funciona sem precisar instalar nada…
Você pode usar uma conexão existente de ODBC ou criar uma na hora…
Como um quebra-galho para esse tipo de situação,,, acho que ele server para dar uma ajuda…
Você pode usar ele também para testar as conexões das estações cliente, com as restrições de usuário, restrições do SQL,,,
configurando o ODBC com as devidas informações, eu mostrei para um cliente como a aplicação iria se comportar com o fail-over das bases mirror.
Você pode baixar no site do SourceForge, ou no meu Skydrive, esse é um dos programas que vale a pena ter no pendrive.
Para o pessoal não ficar corrido entre escrever uns posts meia boca e se preocupar com
Este mês ele é hospedado por Stuart Ainsworth (Blog | Twitter) e fala sobre joins..
Quer saber mais sobre Joins?
Vamos lá,,,
meu exemplo é bem simples,,, mostra os waits que estão acontecendo no SQL…
select |
Ele vai tentar associar a requisição ao wait.
Estava em um cliente montando uma estratégia para migração de 2 instâncias de SQL 2000 para uma única instância de SQL 2005… até aí tranquilo,,, certo?
Listamos os linked servers, jobs, usuários e senhas, bases, collation,,, etc,,, tudo quase pronto pra migração….
Ai, lembrei de um detalhe… algumas bases estavam em uma instância default do SQL,,, e vamos migrar todas para um SQL em uma instância,,, ai vem o problema:
Legal,,, iai? Só criar o SQL Aliases (Iniciar>Executar>Cliconfg)? boa,,, pena que tem que criar em maquina a maquina,,, Redirecionar DNS? até funcionaria se o outro SQL não tivesse instância. Poderíamos alterar o DNS e “adicionar o servidor” com o sp_addserver (sp_addserver ‘nome_do_host’, local, duplicate_ok) o problema é que a instância tem que escutar a 1433, até ai nenhum grande problema, adiciona como porta secundária.
como fazer o deploy de aliases rápido? Policy… cria uma chave de registro e adiciona o aliases…
Outra forma, utilizar um “proxy” de SQL,,, tipo F5, Green SQL,,,
Esse código faz parte daquele tipo de código para gerar documentação.
Não faz nada muito complexo, apenas mostra o objeto, quem é dono, que tipo e quando foi criado.
SELECT [NAME] AS OBJECT_NAME, USER_NAME(UID) AS OWNER, TYPE = CASE WHEN XTYPE = 'u' THEN 'table' WHEN XTYPE = 'c' THEN 'check constraint' WHEN XTYPE = 'd' THEN 'default constraint' WHEN XTYPE = 'f' THEN 'foreign key constraint' WHEN XTYPE = 'fn' THEN 'scalar function' WHEN XTYPE = 'if' THEN 'inline table function' WHEN XTYPE = 'p' THEN 'stored procedure' WHEN XTYPE = 'pk' THEN 'primary key' WHEN XTYPE = 'tf' THEN 'table function' WHEN XTYPE = 'tr' THEN 'trigger' WHEN XTYPE = 'uq' THEN 'unique constraint' WHEN XTYPE = 'v' THEN 'view' END, CRDATE AS CREATION_DATE FROM SYSOBJECTS WHERE XTYPE IN ('u','c','d','f', 'fn','if','p','pk', 'tf','tr','u','uq', 'v') ORDER BY XTYPE
Complementando o Post Procurando por conversão implícita sobre a apresentação do Marcos Freccia (Blog | Twitter) “10 coisas que todo desenvolvedor deveria saber sobre SQL Server”
Um dos grandes problemas dessa conversão é o SQL utilizar index scan ao invés de index seek.
Esse código mostra consultas que estão executado Index Scan por motivos de Conversões Implícitas.
with XMLNAMESPACES ('http://schemas.microsoft.com/sqlserver/2004/07/showplan' as sql) select total_worker_time/execution_count AS AvgCPU , total_elapsed_time/execution_count AS AvgDuration , (total_logical_reads+total_physical_reads)/execution_count AS AvgReads , execution_count , SUBSTRING(st.TEXT, (qs.statement_start_offset/2)+1 , ((CASE qs.statement_end_offset WHEN -1 THEN datalength(st.TEXT) ELSE qs.statement_end_offset END - qs.statement_start_offset)/2) + 1) AS txt , qs.max_elapsed_time , db_name(qp.dbid) as database_name , quotename(object_schema_name(qp.objectid, qp.dbid)) + N'.' + quotename(object_name(qp.objectid, qp.dbid)) as obj_name , qp.query_plan.value( N'(/sql:ShowPlanXML/sql:BatchSequence/sql:Batch/sql:Statements/sql:StmtSimple[@StatementType = "SELECT"]/sql:QueryPlan/sql:RelOp/descendant::*/sql:ScalarOperator[contains(@ScalarString, "CONVERT_IMPLICIT")])[1]/@ScalarString', 'nvarchar(4000)' ) as scalar_string , qp.query_plan from sys.dm_exec_query_stats as qs cross apply sys.dm_exec_query_plan(qs.plan_handle) as qp cross apply sys.dm_exec_sql_text(qs.sql_handle) st where qp.query_plan.exist( N'/sql:ShowPlanXML/sql:BatchSequence/sql:Batch/sql:Statements/sql:StmtSimple[@StatementType = "SELECT"]/sql:QueryPlan/sql:RelOp/sql:IndexScan/descendant::*/sql:ScalarOperator[contains(@ScalarString, "CONVERT_IMPLICIT")]' ) = 1;
Esse é um código antigo que estava escondido no HD.
Bem simples e usual.
/* Versao: 1.0 Data: 20100302 Por: Ricardo Leka Site: https://leka.com.br email: ricardo@leka.com.br twitter: @bigleka */ /* Gerador de Senhas Pode gerar senhas com quantidades minima e maxima de caracteres com numeros ou complexidade */ DECLARE @complex tinyint , @minlen tinyint , @maxlen tinyint SET @minlen = 4 --tamanho minimo da senha SET @maxlen = 8 --tamanho maximo da senha SET @complex = 4 -- 1 todas as letras minusculas -- 2 inclui letras maiusculas -- 3 inclui numeos -- 4 inclui caracteres especiais DECLARE @password varchar(12) , @len tinyint , @type tinyint , @type2 tinyint SET @len = 0 SET @password = '' WHILE @len NOT BETWEEN @minlen and @maxlen BEGIN SET @len = ROUND(1 + (RAND(CHECKSUM(NEWID())) * @maxlen), 0) + 1 END WHILE @len > 0 BEGIN DECLARE @newchar CHAR(1) SET @type = ROUND(1 + (RAND(CHECKSUM(NEWID())) * (@complex - 1)), 0) IF @type = 1 SET @newchar = CHAR(ROUND(97 + (RAND(CHECKSUM(NEWID())) * 25), 0)) IF @type = 2 SET @newchar = CHAR(ROUND(65 + (RAND(CHECKSUM(NEWID())) * 25), 0)) IF @type = 3 SET @newchar = CHAR(ROUND(48 + (RAND(CHECKSUM(NEWID())) * 9), 0)) IF @type = 4 BEGIN SET @type2 = ROUND(1 + (RAND(CHECKSUM(NEWID())) * 3), 0) IF @type2 = 1 SET @newchar = CHAR(ROUND(33 + (RAND(CHECKSUM(NEWID())) * 14), 0)) IF @type2 = 2 SET @newchar = CHAR(ROUND(58 + (RAND(CHECKSUM(NEWID())) * 6), 0)) IF @type2 = 3 SET @newchar = CHAR(ROUND(91 + (RAND(CHECKSUM(NEWID())) * 5), 0)) IF @type2 = 4 SET @newchar = CHAR(ROUND(123 + (RAND(CHECKSUM(NEWID())) * 3), 0)) END -- remove caracteres que podem ser confundidos com outros IF @newchar NOT IN ('b', 'l', 'o', 's', 'I', 'O', 'S', '0', '1', '!', '''', '.', ',', '/', '`', '\', '|') BEGIN SET @password = @password + @newchar SET @len = @len - 1 END END SELECT @password as Senha
Já vou logo avisando:
Se, depois de tudo isso, clicar em Play não me responsabilizo por absolutamente nada,,,
[vimeo http://www.vimeo.com/27824432 w=701&h=438]
Instant file initialization from Ricardo Leka on Vimeo.
Dessa vez o anfitrião do T-SQL Tuesday é o próprio idealizador Adam Machanic (Blog | Twitter).
E de uma forma diferente, não é na Terça-feira,,, por quê?
Porque não importa, desde que funcione pode ser zuado mesmo,,, o tópico desse mês é sobre “mostrar seu código lixo para o mundo”,,,
Todo mundo já escreveu um código uma vez ou outra,,,, todo o DBA tem aquele conjunto de scripts que o ajudam a identificar alguns problemas, fazer um tunning, arrumar alguma coisa,,, E com certeza todo mundo tem aquele código que hoje, pega para olha e começa a dar risada de como é que teve coragem de fazer uma coisa como aquela…
Meu exemplo é bem simples, O código é horrível, demora demais mas, funciona,,,
Ele troca os dados de posição de uma coluna específica.
WITH cteTableTel AS ( SELECT ROW_NUMBER() OVER (ORDER BY NEWID()) AS n, SOBRENOME FROM CLIENTES ) UPDATE CLIENTES SET ENDERECO = ( SELECT ENDERECO FROM cteTableTel WHERE cteTableTel.n = CLIENTES.ID)
;WITH cte AS ( SELECT ROW_NUMBER() OVER (ORDER BY NEWID()) AS n1, ROW_NUMBER() OVER (order by SOBRENOME) AS n2, SOBRENOME FROM CLIENTES ) UPDATE c1 SET SOBRENOME = c2.SOBRENOME from cte as c1 inner join cte as c2 on c1.n1 = c2.n2
Dessa vez não tem problema com o usuário sem o dado alterado, performance melhorada em quase 90% e pouco importa se a tabela em algum registro para referencia,,,
Eu comparei a execução dos 2 códigos em uma tabela com um pouco mais de 3 milhões de linhas e o segundo código demorou quase 4 horas para finalizar,,, já o primeiro código eu parei a execução dele depois de 2 SEMANAS executando.
Tenho códigos piores no meu repositório? claro que sim. Esse é apenas um exemplo de um dos piores que já fiz…
Qual é o seu? tem coragem mostrar?