Arquivo

Arquivo do Autor

Fabiano vs Dúvidas…

24 de agosto de 2011 Deixe um comentário

Hoje foi o dia das perguntas na minha caixa de e-mail… 🙂

Portanto vamos as perguntas e respostas..

1. A primeira foi perguntando sobre como fazer com que o Resource Governor direcione um usuário de um Grupo no Active Directory para um especifico Pool de Recursos.

Bom, sabemos que o gerenciamento do Resource Governor é feito por uma function de classificação. É esta function irá dizer para o Resource Governor qual pool ele deve direcionar para determinado usuário que está fazendo login no servidor.

A pergunta aqui é: Como saber se o usuário esta fazendo login é de um determinado grupo do AD ou não?

Para este questionamento respondi o seguinte e-mail:

R.: Você pode criar a function de classificação utilizando a function IS_Member()… por ex:

CREATE FUNCTION dbo.Func_Classifica()

RETURNS SYSNAME

WITH SCHEMABINDING — SCHEMA BINDING IS REQUIRED

AS

BEGIN

DECLARE @Group NVarChar(400)

SELECT @Group = CASE

WHEN ISNULL(IS_MEMBER(‘DOMINIO\Grupo_Suporte’),0) = 1 THEN ‘GrupoSuporte’

WHEN ISNULL(IS_MEMBER(‘DOMINIO\Grupo_Analistas’),0) = 1 THEN ‘GrupoAnalistas’

WHEN ISNULL(IS_MEMBER(‘DOMINIO\Grupo_Desenvolvedores’),0) = 1 THEN ‘GrupoDesenvolvedores’

WHEN ISNULL(IS_MEMBER(‘DOMINIO\Grupo_Coordenadores’),0) = 1 THEN ‘GrupoCoordenadores’

ELSE ‘Default’

END

RETURN @Group

END

GO

 

2. A segunda pergunta que recebi foi me questionando se existe alguma Stored Procedure do SQL que retorne o nível de compatibilidade de um banco de dados.

R.: Temos a sp_dbcmptlevel que retorna o nível de compatibilidade de um determinado banco.

Obs.: Esta function será removida do SQL em versões futuras, por isso evite usa-la. Uma alternativa seria ler esta informação direto nas tabelas do sistema do SQL.

select * from master.sys.sysdatabases

A coluna cmptlevel contém o nível de compatibilidade do banco.

3. Outro questionamento que recebi foi o seguinte. Tenho uma procedure que executa vários comandos de updates, deletes, inserts e selects, tem de tudo. Estes comandos são executados várias vezes dentro de um loop.

Eu quero ver o plano de execução destes comandos em modo gráfico, mas quando eu rodo a procedure no SSMS com a opção de exibir o plano atual(ctrl+m) ligada, ele não consegue me exibir todos os planos, e chega uma hora que o SSMS trava.

R.: Uma alternativa para visualizar estes planos em modo gráfico, seria utilizar o Profiler. Basta ler o evento Performance\ShowPlan XML. Ele irá exibir no Profiler o plano em modo gráfico, por sinal, muito show isso!

4. Por último, me perguntaram sobre qual a melhor forma de apagar uma tabela de auditoria que é BEM, aproximadamente 20GB.

R.: Sem dúvida a melhor forma seria dar um TRUNCATE TABLE na tabela, mas o truncate tem alguns pontos que devem ser considerados.

  1. Caso exista alguma coluna Identity na tabela, o Truncate irá zerar o Identity.
  2. Não da para fazer rollback.
  3. Não conseguira utilizar qualquer filtro utilizando a clausula WHERE.
  4. A tabela não pode ter foreign key ou views indexadas.
  5. Será necessário ter privilégio de db_ddlAdmim para rodar o Truncate.

Dito isso, com mais detalhes sobre o que o desenvolvedor queria fazer descobri que seria necessário utilizar a clausula where para excluir apenas algumas linhas. Uma alternativa para não fazer com que o LOG fique muito grande seria ir apagando os registros de pouco em pouco. Esta operação pode demorar um pouco mais do que apenas um DELETE, mas dependendo do tamanho da tabela não nos restam muitas alternativas.

Por fim enviei o seguinte comando para ele:

SET NOCOUNT ON

WHILE EXISTS(SELECT 1 FROM Auditorias_TMP)

BEGIN

BEGIN TRAN

DELETE Auditorias_TMP

FROM Auditorias_TMP

WHERE <Algum Filtro>

TABLESAMPLE(10000 ROWS)

PRINT ‘Linhas apagadas – ‘ + CONVERT(VarChar, @@ROWCOUNT )

COMMIT TRAN

END

Espero que as respostas sejam úteis para vocês…

Abraços

Categorias:Não categorizado

Posso trocar DateTime por Date?

24 de agosto de 2011 Deixe um comentário

Galera, dica rápida.

Essa semana estou revisando meus arquivos que uso no treinamento de SQL Server que ministro, e tem um tópico onde falo da importancia de escolher os datatypes corretos para as colunas de nossas tabelas.

Isso é, quando possível, trocar BigInt por Integer, Integer por SmallInt, SmallInt por TinyInt e por ai vai…

Foi ai que cheguei na seguinte situação:

Muitas vezes podemos trocar DateTime por SmallDateTime, pois raramente precisamos dos segundos na data, e muitas vezes precisamos apenas da data, nem precisamos da hora. Isso me leva a dizer o seguinte, podemos trocar DateTime por Date, certo?…

Desta forma ganhariamos 5 bytes de espaço para cada valor gravado na coluna, pois o DateTime ocupa 8 bytes contra apenas 3 do Date. Bom dito isso chegamos onde eu queria, me diga uma coisa.

Veja que a consulta abaixo retorna:

DECLARE @Data DateTime
SET @Data = NULL
SELECT ISNULL(@Data, 0)

 

clip_image002

Ou seja, o SQL Server entende que 0 significa 1900-01-01… interessante.

Agora vamos ver o que acontece quando trocamos a variavél para Date:

DECLARE @Data Date
SET @Data = NULL
SELECT ISNULL(@Data, 0)

Msg 206, Level 16, State 2, Line 3

Operand type clash: int is incompatible with date

Conclusão, se você estiver fazendo uma conversão implicita de 0 para datetime e trocar os datatype de sua tabela de DateTime para Date, pode ser que alguns erros comecem a acontecer no seu aplicativo.

Portanto fica ai a dica, cuidado…

Categorias:Não categorizado

My Precious conhecimento!

24 de agosto de 2011 9 comentários

Meu primeiro post no novo Blog… vamos ver o que vai sair.

clip_image002[7]

My Precious conhecimento!

Nos últimos anos/meses tenho dedicado uma boa parte de meu tempo mais valioso (quando estou em casa) escrevendo artigos, blogs posts e me preparando para eventos ou webcasts. Por que isso?

Bom vamos começar do começo.

  • Dia 11 de Dezembro de 2006 fiz minha primeira prova de certificação em SQL Server, o exame 70-431. Eu já estava apaixonado pelo SQL Server há algum tempo, a partir deste colocamos a aliança.
  • Em 30 de Novembro de 2007 eu escrevi meu primeiro Post de Blog. Viciei, e desde lá já se foram 189 posts.
  • Dia 07 de Abril de 2008 recebi o seguinte e-mail do Luciano Caixeta Moreira, que na época estava trabalhando na Microsoft:

Cara, está rolando uma coisa bacana de SQL Server nesse momento e acho que podemos tentar te colocar”.

O e-mail era pra me convidar para fazer uns vídeos para a Microsoft, os vídeos seriam publicados no programa MSDN Experience. No final acabou que não deu certo de eu ir para São Paulo para gravar os Vídeos, e fiquei só na expectativa.

  • Dia 14 de Maio de 2008 para minha alegria recebi um e-mail do Daniel Ferreira da Microsoft, me convidando para fazer uma WebCast para o MSDN, falando sobre Upgrade para SQL Server 2008.

Depois disso definitivamente eu já sabia que quanto mais eu compartilhava meu precioso conhecimento, mais precioso ele se tornava.

Após minha primeira WebCast, varias outras oportunidades surgiram, mais WebCasts, eventos em Faculdades, eventos Microsoft, artigos para o Simple-Talk, artigos para Revistas e por ai vai… Oportunidade de compartilhar meu conhecimento é o que não faltava…

O que me faz continuar nessa vida loca (agora são 01:17 da madruga)?… Eu adoro isso tudo. Fico honrado em saber que o que escrevo pode ajudar alguém, seja pra resolver um problema, ou para aprimorar seus conhecimentos. Quando estou ministrando um treinamento de SQL Server e um aluno realmente interessado faz uma pergunta que tem tudo a ver com o que estou falando, me sinto realizado.

Eu adoro escrever, amo ensinar as pessoas porque eu aprendo com elas, uma vez ouvi uma pessoa dizer, “- Eu entendi que você só aprende mesmo uma coisa, quando tem que ensinar para alguém.” Isso é a mais pura verdade.

Aonde esse meu prazer em escrever e ensinar me levou?… Para maior empresa de consultoria de SQL Server do mundo.

Contrato assinado com a SolidQ e perspectivas surreais para os próximos meses.

Obrigado a todos que acreditaram em mim, e aos que me ajudaram a chegar até aqui. Comunidade SQL, conte comigo. SolidQ I’m yours, count on me and all my hard work to build a big company here in Brazil .

Obrigado Deus, porque sei que não sou digno de nada disso. Sua graça me constrange.

Removendo todas limitações do SQL Express

Galera, notícia quente.

Todos sabemos que o SQL tem varias versões e que as versões Standard/Express contêm várias limitações de recursos que só funcionam na versão Enterprise como Compression, Rebuild Online, Auto Page Recovery e etc…

A boa noticia é que existe um comando não documentado que habilita todas estas opções na versão Standard, e pasme, até na versão Express. Isso mesmo! baixe a versão express e use SEM NENHUMA RESTRIÇÃO de recursos Winking smile.

Para isso basta rodar o comando abaixo:

   1: DBCC SQLPERF('Enterprise', ON)

Voilà, depois de rodar este comando você habilita todos os recursos.

Use por seu próprio risco, pois isso irá fazer com que sua licença fique ilegal!

Abraços

Smile with tongue out

UPDATE

Galera, como alguns já perceberam esse era um post de 1 de Abril 🙂 Smile with tongue out, esse comando não existe.

Fico feliz em saber que muitos cairam, hahahha. Abraços.

Categorias:Não categorizado

Londres, aqui vou eu! T-SQL com o Itzik

26 de novembro de 2010 Deixe um comentário

clip_image001

Nos últimos 60 dias eu tenho passado os melhores dias de minha vida pois muitas coisas maravilhosas aconteceram na minha vida pessoal e profissional. O nascimento do meu filho (Felipe) com certeza foi um dos dias mais felizes de minha vida, já no âmbito profissional, eu tenho conseguido fazer tudo aquilo que sempre desejei.

Sou extremamente grato a Deus por ser um privilegiado, pois consigo trabalhar com aquilo que gosto e (sei que nem todos tem este privilégio), trabalho na empresa que considero a melhor empresa de nosso ramo (Plataforma de Dados Microsoft), a mentalidade da SolidQ realmente é diferenciada, totalmente diferente da realidade das empresas brasileiras. Cada vez que converso com um americano ou europeu vejo porque nosso país ainda é conhecido como país de terceiro mundo, precisamos mudar nossa mentalidade e investir mais em pessoas, não em processos, estudar mais para fazer melhor, com mais qualidade, mais rápido, investir para ter retorno, priorizar qualidade de vida e a família, criar um ambiente de camaradagem (isso é raro no Brasil), dar o devido valor ao conhecimento, abominar o jeitinho Brasileiro, resolver problemas não criar, “responder, não encaminhar”…

Bom outra coisa que sempre desejei desde que me conheço por pessoa foi conhecer outro país, especialmente um que sempre tive uma grande admiração, a Inglaterra, a história da Europa antiga sempre me fascinou.

Bom, terminado o meu lado pessoal do post, vamos a novidade.

Semana que vem estou indo para Inglaterra para participar e ajudar o Itzik Ben-Gan a ministrar um treinamento de T-SQL Advanced em Londres. Isso vem de encontro com nossa demanda de treinamentos de T-SQL no Brasil. Assim que eu voltar você pode esperar novidades para o Primeiro Trimestre de 2011, pois já terei aprendido com o God-Mestre, ministrado alguns treinamentos In-Company (já agendados para Dezembro), então, finalmente abriremos uma turma aberta ao publico.

Ficou interessado em conhecer o treinamento? Clique aqui para ver mais detalhes. Quer contratar o treinamento In-Company? Entre em contato comigo para conversarmos melhor sobre isso… você pode me enviar um e-mail no famorim arroba solidq ponto com

Eu agradeço novamente a Deus, porque sei que não sou merecedor de nada disso, se não fosse por Ele eu com certeza não faria parte deste projeto. Thanks Fernando, Eladio, Itzik, Diego, Felipe, Laerte, Nilton, Arnaldo, galera da CNP (Luciana (Luxo), Sandro, João, Thiago, Fernandinho, Edvaldo, Cláudio…) e todos meus amigos da comunidade SQL Server, sei que vocês ficam felizes por mim e torcem pelo sucesso da SolidQ Brazil, let’s make it happens.

Categorias:Não categorizado

Tá chegando… WorldWide Online TechDay é no Sábado (30/10)

28 de outubro de 2010 Deixe um comentário

Update*

Segue o link para download dos arquivos utilizados na WebCast…

http://cid-52eff7477e74caa6.office.live.com/self.aspx/Publica/Lipoaspira%c3%a7%c3%a3o%20no%20seu%20Banco%20de%20Dados/Lipoaspira%c3%a7%c3%a3o%20no%20seu%20Banco%20de%20Dados.pptx

http://cid-52eff7477e74caa6.office.live.com/self.aspx/Publica/Lipoaspira%c3%a7%c3%a3o%20no%20seu%20Banco%20de%20Dados/Demo%20-%20Lipoaspira%c3%a7%c3%a3o%20no%20seu%20Banco%20de%20Dados.sql

—————————————————————————————————

Pessoal está chegando o WorldWide Online TechDay, os PPTs estão indo para o Forno, alguns já estão prontos… alguns estão sendo revisados… Muita coisa acontecendo pelos bastidores do evento que promete ser o maior evento online que o Brasil já viu.

Como vocês já sabem, minha sessão será no Sábado dia 30 as 10:00 horas da manhã, e vou falar sobre como cortar a gordura do seu banco de dados.

Segue o link para a inscrição do evento.

https://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032464230&EventCategory=4&culture=pt-BR&CountryCode=BR

Gostou do tema? Então vai algumas imagens do PPT que irei utilizar no sábado:

image

image

Ficou interessado?

Não deixe de participar da minha sessão, e das outras sessões que irão acontecer no evento… Clique aqui para ver todos os links para inscrição dos eventos…

Abraços e até sábado.

Categorias:Não categorizado

T-SQL Query – NTILE()

7 de outubro de 2010 1 comentário

Hoje recebi no e-mail uma pergunta bem interessante sobre T-SQL…

O desenvolvedor tem um processo bem lento que é executado de acordo com uma faixa inicial e final que são recebidas como parâmetro de entrada para uma procedure.

Ex:

EXEC dbo.st_Process @ID_Inicio = ‘1’, @ID_Fim = ‘10000’

Ou seja, na query acima, o processo irá rodar para os ids 1 até 10000.

Mas o desenvolvedor quer rodar o processo em aproximadamente 50 em 50 ids.

Por exemplo:

EXEC dbo.st_Process @ID_Inicio = ‘1’, @ID_Fim = ’50’

EXEC dbo.st_Process @ID_Inicio = ’51’, @ID_Fim = ‘100’

EXEC dbo.st_Process @ID_Inicio = ‘101’, @ID_Fim = ‘150’

Agora eis a questão. Como fazer para criar uma consulta que pega a tabela, #Tab1 e gera uma lista com os grupos a serem executados?

SET NOCOUNT ON

IF OBJECT_ID(‘tempdb.dbo.#Tab1’) IS NOT NULL

DROP TABLE #Tab1

GO

CREATE TABLE #Tab1 (ID Int IDENTITY(1,1))

GO

INSERT INTO #Tab1 DEFAULT VALUES

GO 10000

SELECT * FROM #Tab1

GO

Preciso que isso:

clip_image002

Vire isso:

clip_image004

Para resolver esta consulta, fiz uma query utilizando o NTILE para quebrar os grupos.

DECLARE @i Int

SELECT @i = COUNT(*) / 50

FROM #Tab1

SELECT Groups, MIN(ID) AS ID_Inicio, MAX(ID) AS ID_Fim

FROM (SELECT NTILE(@i) OVER(ORDER BY ID) AS Groups, ID

FROM #Tab1) AS Tab

GROUP BY Groups

E você? Teria outra solução mais simples? Abraços…

Categorias:Não categorizado

WebCast 08/10 – Administrando SQL Server 2008 R2 – Mirroring/Resource Governor e BackupCompression

7 de outubro de 2010 Deixe um comentário

Minha gente, ontem fui pego de surpresa com um convite para fazer uma WebCast amanhã 🙂

Conclusão, este mês vou fazer 3 WebCasts :-).

Amanhã vou falar sobre as ferramentas de gerenciamento do SQL Server 2008, e finalmente vou conseguir fazer uma demo que faz tempo que eu quero fazer sobre Auto Repair no DataBase Mirroring.

Portanto, amanhã é dia de almoçar mais tarde e assistir uma WebCast do TechNet…

Conto com a sua presença, te vejo lá… segue mais detalhes sobre a WebCast.

Link para inscrição

https://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032465729&EventCategory=4&culture=pt-BR&CountryCode=BR

Título

Administrando SQL Server 2008 R2 – Mirroring/Resource Governor e BackupCompression

Visão Geral do Evento

Conheça os novos recursos de Administração do SQL Server 2008 R2. Nesta sessão você entenderá porque gerenciar um banco de dados SQL Server ficou mais fácil com as ferramentas de Resource Governor e Compressão de Backup. Bem como manter um ambiente de alta disponibilidade e tolerância a falhas utilizando o espelhamento de banco de dados.

Categorias:Não categorizado

WebCast 30/10 – Lipoaspiração no seu Banco de Dados!

2 de outubro de 2010 1 comentário

Galera, aproveitando o embalo… dia 30 irei apresentar uma das Sessões do WorldWide Online TechDay.

Quer saber como deixar seu banco de dados com barriga tanquinho? … Não perca esta sessão.

https://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032464230&EventCategory=4&culture=pt-BR&CountryCode=BR

Visão Geral do Evento

Lipoaspiração no seu Banco de Dados!
Veja nesta sessão como cortar a gordura que impede que seu banco de dados tenha uma vida saudavel. Entenda porque esta gordura impede que seu banco de dados responda de forma performática. Após o termino desta sessão você estará apto a operar seu banco de dados. Veremos alguns itens muito importantes tais como: Bad Cluster Index, Unused NonClustered Index, Duplicated Index, DataTypes, Page Compression, Row Compression, VarDecimal, Sparse Columns, Filtered Index, Include, Fillfactor e mais…

Sábado, 30 de outubro de 2010 10:00 Brasília

Minha sessão será as 10:00 da manhã, mas o evento começará as 09:00.

See you there!

Categorias:Não categorizado

WebCast 15/10 – Gerenciamento da Plataforma SQL Server R2 utilizando PBM

2 de outubro de 2010 Deixe um comentário

Galera, vou apresentar uma WebCast para o TechNet falando sobre PBM(Policy-Based Management) e como utilizar este poderoso recurso para gerenciar seu ambiente de servidores.

Segue mais detalhes abaixo, e conto com a presença de vocês… Abraços!

https://msevents.microsoft.com/CUI/EventDetail.aspx?culture=PT-BR&EventID=1032459532

Webcast TechNet: SQL Server 2008 R2: Simplifique o Gerenciamento da Plataforma de Dados do SQL Server

Visão Geral do Evento

Descubra como o PBM (Policy-Based Management – Gerenciamento Baseado em Diretivas), um sistema de gerenciamento de uma ou mais instâncias do Microsoft SQL Server 2008, pode melhorar sua capacidade de gerenciar servidores, bancos de dados e outros objetos.   Neste webcast, discutiremos os três componentes do PBM: gerenciamento de diretivas, administração explícita e modos de avaliação. Mostraremos os objetos usados na configuração do gerenciamento de diretivas: facetas, condições, diretivas, destinos e categorias. Vamos examinar esses componentes diversos, explicar como eles trabalham juntos e demonstrar como as diretivas definidas através do recurso PBM são usadas para monitorar e gerenciar servidores, bancos de dados e outros objetos.

Data de Início:

sexta-feira, 15 de outubro de 2010 12:00 Brasília

Categorias:Não categorizado