Arquivo
Fabiano vs Dúvidas…
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.
- Caso exista alguma coluna Identity na tabela, o Truncate irá zerar o Identity.
- Não da para fazer rollback.
- Não conseguira utilizar qualquer filtro utilizando a clausula WHERE.
- A tabela não pode ter foreign key ou views indexadas.
- 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
Posso trocar DateTime por Date?
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)
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…
My Precious conhecimento!
Meu primeiro post no novo Blog… vamos ver o que vai sair.
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
.
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
![]()
UPDATE
Galera, como alguns já perceberam esse era um post de 1 de Abril 🙂
, esse comando não existe.
Fico feliz em saber que muitos cairam, hahahha. Abraços.
Londres, aqui vou eu! T-SQL com o Itzik
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.
Tá chegando… WorldWide Online TechDay é no Sábado (30/10)
Update*
Segue o link para download dos arquivos utilizados na WebCast…
—————————————————————————————————
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.
Gostou do tema? Então vai algumas imagens do PPT que irei utilizar no sábado:
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.
T-SQL Query – NTILE()
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:
Vire isso:
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…
WebCast 08/10 – Administrando SQL Server 2008 R2 – Mirroring/Resource Governor e BackupCompression
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
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.
WebCast 30/10 – Lipoaspiração no seu Banco de Dados!
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.
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!
WebCast 15/10 – Gerenciamento da Plataforma SQL Server R2 utilizando PBM
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





