Início > Não categorizado > Fabiano vs Dúvidas…

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.

  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

Anúncios
Categorias:Não categorizado
  1. Nenhum comentário ainda.
  1. No trackbacks yet.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: