sexta-feira, 5 de agosto de 2011

Transferência do blog

Amigos,


Por um bom tempo usei o excelente serviço blogger, mas por alguns motivos, preferi migrar o conteúdo para o wordpress, além de direcionar os posts apenas para a área profissional, ou seja, muita coisa de TI e claro SQL Server, Aguardo vocês.
Até lá,


Bruno Santos

segunda-feira, 25 de julho de 2011

Twitter e sua importância no uso profissional

Você usa o twitter para uso particular e profissional? Imagino que a maioria diz que apenas para uso particular. Imagino também que muitos não usam profissionalmente pois parte das organizações “proibem” a sua utilização, particularmente entendo os motivos, mas acredito que o profissional perde muito não utilizando o twitter.
Confesso que inicialmente o que me motivou a utilizar o twitter foi a possibilidade de seguir e ter informações breve de amigos, familiares e celebridades, mas hoje isto não existe mais, o twitter para mim é uma excelente ferramenta profissional.
Hoje sou super contemplado com informações importantes de especialistas da área de tecnologia da informação, como: artigos técnicos, webcasts, seminários presenciais ou online, cursos presenciais ou online, dicas, etc.
Nestes últimos meses consegui participar de dois(2) eventos super importantes da área que atuo graças ao twitter, outros dois(2) eventos estão na minha agenda também graças ao twitter.
O mais importante é conhecer as comunidades e quem são os especialistas na sua área de atuação, e seguir estes profissionais, que tem como maior característica à boa vontade de compartilhar aquilo que sabem sobre a sua área de atuação, exemplificando, o especialista Luciano Caixeta Moreira no último dia de inscrição postou um tweet informando sobre um excelente treinamento online sobre indexação avançada no SQL Server 2008, se não sigo o @luti (Luciano) no twitter teria perdido esta oportunidade. Outro dia o especialista Diego Nogare (@DiegoNogare) escreveu um tweet comunicando sobre uma série de vídeocast sobre SQL Server, também não perdi a oportunidade.
Aproveitando este post, quero compartilhar com os amigos DBAs SQL Server, as comunidades e especialistas que conheço e sigo no twitter, tem sido muito importante para minha carreira, espero que este post o ajude a entender a importância do twitter para uso profissional.


Especialistas: @DiegoNogare, @Pinaldave, @PaulRandal, @luticm, @nilton_pinheiro, @Pichiliane
Comunidades: @SolidQBR, @SQLPass, @SQLServerBrasil, @SQLServerMag, @SQLServerCentrl, @SQLskills

quinta-feira, 14 de julho de 2011

SQL Server: Script para particionar conteúdo de arquivo

Companheiros DBAs, boa tarde

Hoje vou compartilhar mais um script com vocês.
Um amigo me perguntou esta semana sobre a possibilidade de criar um script para automatizar uma atividade diária. Basicamente ele queria particionar o conteúdo de um arquivo em vários arquivos, como profissional da área da ‘arte’ (TI), prontamente disse que seria possível, a partir daí abri o meu SSMS (SQL Server Management Studio) para quebrar a cabeça.

Exemplo:
Original.txt
1111111111
2222222222

Arquivo1.txt
1111111111

Arquivo2.txt
2222222222

Após algumas poucas horas de ‘queima neurônios’ e simulações consegui criar uma stored procedure automatizando a atividade do meu amigo, possibilitando passar como parâmetros o caminho do arquivo fonte, o nome do arquivo com sua extensão, o caminho de destino dos arquivos particionados e o número de linhas para cada arquivo.
Para usar a procedure será necessário criar uma table que será o repositório das informações do arquivo fonte, eis abaixo o script:

CREATE TABLE [dbo].[Particiona]([Informacao] [varchar](10) NULL, [Contador] [int] IDENTITY(1,1) NOT NULL) ON [PRIMARY]

Na criação da stored procedure considere modificar as informações marcadas, database e servidor para os nomes utilizados no seu ambiente, abaixo a stored procedure:

CREATE PROCEDURE [dbo].[spParticionaArquivo]
@Fonte   VARCHAR(500), --Caminho UNC (\\host\compartilhamento\) do arquivo original
@Arquivo VARCHAR(500), --Nome do arquivo (com extensão)
@Destino VARCHAR(500), --Caminho (\\host\compartilhamento\) onde os arquivos particionados serão armazenado
@Corte INT                  --Quantidade de linhas por arquivo
AS

TRUNCATE TABLE Particiona --Limpa objeto repositório das informações

DECLARE @Total INT, @Contador INT, @Parte INT, @BCPQUERY VARCHAR(8000), @SQL VARCHAR(8000)

SET @BCPQUERY = 'bcp "database.dbo.Particiona" IN "'+@Fonte+''+@Arquivo+'" -T -S"servidor" -T -f"'+@Fonte+'Format.FMT"' --Importa
SET @SQL = 'xp_cmdshell '''+@BCPQUERY+''''                         
EXEC(@SQL) --Executa

SELECT @Total = COUNT(0) FROM Particiona
SET @Contador = 1
SET @Parte = 1

WHILE @Contador < @total
BEGIN
           
SET @BCPQUERY = 'bcp "SELECT MSISDN FROM database.dbo.ParticionaBroadcast WHERE Contador >= '+CAST(@contador AS VARCHAR(10))+' AND Contador <= '+CAST(@contador + (@Corte - 1) AS VARCHAR(10))+'" QUERYOUT "'+CAST(@Destino AS VARCHAR(500))+'\'+CAST(@Parte AS VARCHAR(10))+'.TXT" -T -S"servidor" -c'
SET @SQL = 'xp_cmdshell '''+@BCPQUERY+''''                         
EXEC(@SQL) --Executa
SET @Contador = @Contador + @Corte
SET @Parte = @Parte + 1

END

Observações: A stored procedure só executa se a feature cmdshell estiver habilitada na sua instância, e o usuário faz parte da server role sysadmin. O bcp de importação usa um arquivo com o layout do arquivo fonte, assim, também é necessário criar no mesmo diretório informado para o parâmetro @Fonte um arquivo com o conteúdo abaixo:
8.0
1
1 SQLCHAR 0 1 "\r\n" 1 col1 Latin1_General_CI_AI

terça-feira, 14 de junho de 2011

SQL Server: Queries com piores performance (TOP 10)

Hoje concluí mais um script bastante útil para o dia a dia de um DBA, o objetivo é identificar (em tempo real) as queries (TOP 10) com as piores performance de execução para uma instância do SQL Server.
O script

--O Objetivo do script é analisar quais as queries com os maiores tempos de execução


SELECT [Row], [Name], [Query], [Compilacao], [Execucao], [Execucoes], [TempoCPU]/1000000 AS 'TempoCPU',
[TempoCPUMaximo]/1000000 AS 'TempoCPUMaximo', [LeituraFisica], [LeituraFisicaMaxima], [GravacaoLogica], [GravacaoLogicaMaxima],
[LeituraLogica], [LeituraLogicaMaxima], [Tempo]/1000000 AS 'Tempo', [TempoMaximo]/1000000 AS 'TempoMaximo'
FROM sys.databases AS Databases
INNER JOIN
--Este resultset é usado para classificar as queries com maiores tempo para cada base de dados
(
SELECT ROW_NUMBER() OVER(PARTITION BY [databases].name ORDER BY [stats].max_elapsed_time DESC) AS 'Row',
[databases].name AS 'Base', [stats].creation_time AS 'Compilacao', [stats].last_execution_time AS 'Execucao',
[stats].execution_count AS 'Execucoes', ltrim(rtrim([plan].text)) AS 'Query',
[stats].last_worker_time AS 'TempoCPU',
[stats].max_worker_time AS 'TempoCPUMaximo', [stats].last_physical_reads AS 'LeituraFisica',
[stats].max_physical_reads AS 'LeituraFisicaMaxima', [stats].last_logical_writes AS 'GravacaoLogica',
[stats].max_logical_writes AS 'GravacaoLogicaMaxima', [stats].last_logical_reads AS 'LeituraLogica',
[stats].max_logical_reads AS 'LeituraLogicaMaxima', [stats].last_elapsed_time AS 'Tempo',
[stats].max_elapsed_time AS 'TempoMaximo'
FROM sys.dm_exec_query_stats [stats](NOLOCK)
CROSS APPLY sys.dm_exec_sql_text([stats].plan_handle) [plan]
INNER JOIN sys.databases [databases](NOLOCK)
ON [plan].dbid = [databases].database_id
WHERE [databases].name NOT IN ('Master', 'MSDB', 'TempDB', 'Distribution')
) [TOP]
ON Databases.[Name] = [TOP].Base
--O filtro abaixo é usado para permitir que apenas as 10 execuções com maiores tempos sejam exibidas por base
WHERE [TOP].[Row] <= 10 AND [TempoMaximo]/1000000 >= 3
ORDER BY 1, 15 DESC

Para o script foram utilizadas as seguintes referências:
sys.dm_exec_sql_text
http://msdn.microsoft.com/pt-br/library/ms181929.aspx

Aproveitei o
 script e criei um report dinâmico, possibilitando escolher a instância que será analisada.

Espero que o script seja útil para você amigo(a) DBA.

Até mais,

Bruno Santos

quarta-feira, 8 de junho de 2011

SQL Server: Identificando índices "inúteis"

Após 2 meses sem novas postagens, hoje vou mostrar um script muito útil para nós DBAs SQL Server. Usei como “base” o script do artigo Unused Indexes in your databases (Portal SQL Server Central)

O Script
/*
Parte(A) identifica índices sem entrada na DMV 'dm_db_index_usage_stats',
isto indica que o índice nunca foi utilizado desde a inicialização do SQL Server
*/
SELECT DB_NAME(), OBJECT_NAME(i.object_id) AS 'Table', ISNULL(i.name, 'heap') AS 'Index', x.used_page_count AS 'SizeKB'
FROM sys.objects o
INNER JOIN sys.indexes i
ON i.[object_id] = o.[object_id]
LEFT JOIN sys.dm_db_index_usage_stats s
ON i.index_id = s.index_id and s.object_id = i.object_id
LEFT JOIN sys.dm_db_partition_stats x
ON i.[object_id] = x.[object_id] AND i.index_id = x.index_id
WHERE OBJECT_NAME(o.object_id) IS NOT NULL AND OBJECT_NAME(s.object_id) IS NULL
AND o.[type] = 'U' AND ISNULL(i.name, 'heap') <> 'heap'

UNION ALL

/*
Parte(B) identifica índices que não são mais utilizados desde a inicialização
da instância do SQL Server
*/
SELECT DB_NAME(), OBJECT_NAME(i.object_id) AS 'Table', ISNULL(i.name, 'heap') AS 'Index', x.used_page_count AS 'SizeKB'
FROM sys.objects o
INNER JOIN sys.indexes i
ON i.[object_id] = o.[object_id]
LEFT JOIN sys.dm_db_index_usage_stats s
ON i.index_id = s.index_id and s.object_id = i.object_id
LEFT JOIN sys.dm_db_partition_stats x
ON i.[object_id] = x.[object_id] AND i.index_id = x.index_id
WHERE user_seeks = 0 AND user_scans = 0 AND user_lookups = 0
AND o.[type] = 'U' AND ISNULL(i.name, 'heap') <> 'heap'
ORDER BY 2 ASC

Para o script foram utilizadas as seguintes referências:
Aproveitei o script e criei um report dinâmico, possibilitando escolher a instância e databases que serão analisados. Na próxima semana crio um post com o passo a passo de como criar este report.

Espero que o script seja útil para você amigo(a) DBA.

Até mais,

Bruno Santos

terça-feira, 12 de abril de 2011

SQL Server: O SSMS fechou inesperadamente? Cadê as queries?

O expediente inicia às 08h, você sai de casa feliz por ter conseguido solucionar uma query complexa que um amigo te pediu, ao chegar no escritório tem a infeliz notícia que o condomínio estava sem energia elétrica, e agora? Aquela query que você levou várias horas para concluir (e que não foi salva) foi para o 'lixo', argh.
Calma, sem pânico.

Existem três(3) possibilidades: 

A primeira é que ao abrir novamente o SSMS (SQL Server Management Studio) o mesmo pode recuperar automaticamente as queries que estavam abertas antes do incidente.
A segunda é ir até o diretório "c:\Users\seu.usuario\Documents\SQL Server Management Studio\Backup Files" e encontrar os arquivos temporários, 'ufa', provavelmente nada foi pedido.
A terceira é começar tudo do zero, afinal, se você fez uma vez, conseguirá fazer novamente, rsrs.
Esta segunda possibilidade foi passada pelo amigo Daniel Pimenta (Twitter @dtavaresp)

Abraços


terça-feira, 22 de março de 2011

Pessoal: Jogadores aposentados, quais foram os melhores?

Isto causa uma polêmica, rsrs. Mas vamos ver.
Como amante do mundo da bola, por algum tempo penso na criação de uma escalação dos jogadores aposentados que para mim foram os melhores, e hoje é o dia.
Meu critério foi identificar o melhor momento de cada um nos seus clubes e/ou seleção, e também jogadores que brilharam a partir de 1990, assim, vocês verão ausente da minha 'convocação', nomes como Romário, Lothar Matthaus, Maldini, Bebeto e outros 'monstros'.
Também por estar na sua última temporada, considerei o super goleiro Marcos do Palmeiras como aposentado.
Então chega de justificativas, abaixo os maiores de todos os tempos: 1-Marcos; 2-Cafu; 3-Mauro Galvão; 4-Gamarra; 6-Sorin; 5-Fred Rincon; 8-Zinedine Zidane; 11-Romário; 10-Diego Maradona; 7-Edmundo; 9-Ronaldo


Abraços


Bruno Santos


segunda-feira, 7 de fevereiro de 2011

Pessoal: Direito Autoral (Lei 10.695/03)

Por alguns meses me pergunto, e já abri longas discussões sobre a lei de direitos autorais (ou anti-pirataria) com amigos e familiares, e vi como é complicado interpretar as leis do nosso país.
Resolvi pesquisar, não apenas para orientar amigos, mas também me corrigir se entender que estou praticando algo que segundo a nossa legislação é incorreto.

A lei anti-pirataria é a de n.º 10.695, de 1º de julho de 2003.

E os parágrafos(§) mais importantes estão à seguir:



"Art. 184. Violar direitos de autor e os que lhe são conexos:
Pena – detenção, de 3 (três) meses a 1 (um) ano, ou multa.

§ 1o Se a violação consistir em reprodução total ou parcial, com intuito de lucro direto ou indireto, por qualquer meio ou processo, de obra intelectual, interpretação, execução ou fonograma, sem autorização expressa do autor, do artista intérprete ou executante, do produtor, conforme o caso, ou de quem os represente:

Pena – reclusão, de 2 (dois) a 4 (quatro) anos, e multa.

§ 2o Na mesma pena do § 1o incorre quem, com o intuito de lucro direto ou indireto, distribui, vende, expõe à venda, aluga, introduz no País, adquire, oculta, tem em depósito, original ou cópia de obra intelectual ou fonograma reproduzido com violação do direito de autor, do direito de artista intérprete ou executante ou do direito do produtor de fonograma, ou, ainda, aluga original ou cópia de obra intelectual ou fonograma, sem a expressa autorização dos titulares dos direitos ou de quem os represente.

§ 3o Se a violação consistir no oferecimento ao público, mediante cabo, fibra ótica, satélite, ondas ou qualquer outro sistema que permita ao usuário realizar a seleção da obra ou produção para recebê-la em um tempo e lugar previamente determinados por quem formula a demanda, com intuito de lucro, direto ou indireto, sem autorização expressa, conforme o caso, do autor, do artista intérprete ou executante, do produtor de fonograma, ou de quem os represente:

Pena – reclusão, de 2 (dois) a 4 (quatro) anos, e multa.


O que mais chamou a nossa atenção foi o parágrafo (§) 4º, leiam a seguir:


§ 4o O disposto nos §§ 1o, 2o e 3o não se aplica quando se tratar de exceção ou limitação ao direito de autor ou os que lhe são conexos, em conformidade com o previsto na Lei nº 9.610, de 19 de fevereiro de 1998, nem a cópia de obra intelectual ou fonograma, em um só exemplar, para uso privado do copista, sem intuito de lucro direto ou indireto." (NR)


Os três(3) primeiros parágrafos(§) na minha opinião são claros, se você vai até o local XYZ e vende um produto sem autorização prévia do autor, estará cometendo um ato ilícito, assim como permitir o download de softwares a outros, mas encontramos no parágrafo (§) 4º a ‘grande’ polêmica, pois permite-nos entender que copiar uma música para uso particular não estaríamos infrigindo a lei. 
E agora? As discussões com os familiares aumentaram, rs. No fim, não chegamos a um ‘entendimento’ comum, apenas uma coisa era visível, todos na verdade queriam encontrar o caminho certo, rsrs.Ontem, ocorreu mais uma discussão sobre o assunto, e agora meu pai, sabiamente indicou a leitura de um versículo bíblico que pode ajudar, que é:

Todas as coisas me são lícitas, mas nem todas as coisas convêm; todas as coisas me são lícitas, mas nem todas as coisas edificam.
(1 Coríntios 10:23)

Pronto, isto me fez pensar o seguinte: se o parágrafo (§) 4º diz que para uso privado posso, pergunto, o cantor, a gravadora, a software house que na maioria das vezes fizeram altos investimentos, estariam contentes ao saber que alguém faz uso de seus produtos sem a sua compra? 
Pronto, olha eu abrindo discussão novamente, rsrs. E você meu amigo(a), qual a sua opinião? Aconselho a leitura completa da lei n.º 10.695, não é tão grande, além de conhecer outros detalhes poderão tirar também as suas conclusões.

Forte Abraço,


Bruno Santos

terça-feira, 1 de fevereiro de 2011

Pessoal: Férias? Descanso? Como assim?

Este ano(2011), completo 12 anos como profissional da área de tecnologia da informação, e neste período pude gozar férias em apenas 3 anos, pela matemática é algo como sair de férias a cada 4 anos.
Meu último gozo ocorreu entre 31/12/2010 e 23/01/2011, pude sair um pouco da correria do dia a dia, e isto foi muito bom, dormi mais, fugi do trânsito caótico, vi a família com mais frequência, viajei, etc, mas...


Mas poucos dias após o retorno ao ambiente profissional, ao dia a dia, ao calor, ao trânsito, a rotina, vi que os 23 dias na verdade não foram suficiente.
E agora? Agora é usar a experiência, montar uma estratégia, utilizar a nossa energia com mais inteligência, como:
  • Solucionar um problema por vez;
  • Diante de problemas urgentes não ligar o 'turbo', pode ser pior;
  • Nada de abraçar o mundo, primeiro solucione os problemas que fazem parte de suas atividades, se houver tempo as outras;
  • Manter a tranqüilidade diante dos problemas 'complexos', eles não serão solucionados mais rapidamente se forem vistos como 'monstros';
  • Se você já pesquisou e não conseguiu solucionar um problema, outro profissional irá solucionar, o mundo não vai acabar por isto.
Quem sou eu para indicar 'pílulas' para o nosso dia a dia profissional, até mesmo porque 'corro' para que estas dicas façam parte da minha vida, mas como senti na pele recentemente e entendi a importância de não viver ansioso, estressado e a mercê da cruel rotina diária, é que escrevi este post.


Recentemente, meu pai comentou comigo sobre uma reportagem com um assunto correlacionado, que ratifica ainda mais os cuidados necessarios com o nosso dia a dia, leiam http://migre.me/3N8JW


Aproveito para indicar a leitura de três(3) versículos bíblicos acerca de tudo o que comentei acima. 


Pois, se nem ainda podeis as coisas mínimas, por que estais ansiosos pelas outras? (Lucas 12:26)
Não estejais inquietos por coisa alguma; antes as vossas petições sejam em tudo conhecidas diante de Deus pela oração e súplica, com ação de graças. (Filipenses 4:6)
Não vos inquieteis, pois, pelo dia amanhã, porque o dia de amanhã cuidará de si mesmo. Basta a cada dia o seu mal.(Mateus 6:34)


Então vamos em busca da qualidade de vida, FUI.


Abraços

Bruno Santos