Material de Apoio – Agosto 2017


Boa tarde pessoal!

Salve, salve amantes de banco de dados, Tudo bem?

Este é mais um post da sessão Material de Apoio, sendo o terceiro no decorrer de 2017 e de número 153 no total desta sessão.

Já passamos da metade de 2017, que loucura isso, como a rotina do dia a dia não nos deixa perceber o quanto o tempo na para de correr. Falando justamente da correria da nossas vida, a relação de arquivos compartilhadas neste post poderá justamente lhe ajudar a economizar muito do seu tempo.

O post de hoje

Para aqueles que já acompanham o meu blog a um certo tempo, os posts dedicados a sessão Material de Apoio, possuem o objetivo de compartilhar o conhecimento de recursos, funcionalidades e procedimentos que podemos realizar no Microsoft SQL Server.

Hoje não será diferente, estou trazendo alguns dos mais recentes scripts  catalogados nos últimos meses, que atualmente estão compondo a minha galeria de códigos formada ao longo dos anos de trabalho como DBA, e hoje principalmente como Professor de Banco de Dados.

Neste post você vai encontrar arquivos relacionados com os seguintes temas:

  • Cláusula Values;
  • Comando Distinct;
  • Comando Select;
  • Comando Top;
  • CTE Recursiva para geração de sequência de datas;
  • CTE Recursiva para geração de sequência numérica de CEPs;
  • Extended Events;
  • Função Format;
  • Função PARSE;
  • Funções de Ranking – Row_Number;
  • Monitoramento de senhas;
  • Operador Cross Apply;
  • Operador Outer Appy;
  • Recursos bloqueados;
  • SPDIDs de Conexões;
  • SPIDs de usuários; e
  • User Defined Function para cálculo de anos em colunas computadas.

Tenho a certeza que este conteúdo poderá lhe ajudar muito em seus atividades profissionais e acadêmicas, fique a vontade para copiar, editar, compartilhar e distribuir estes arquivos com seus contatos.

Material de Apoio

A seguir apresento a relação de scripts selecionados:

 

 

 

 

 

 

 

 

 

Por questões de compatibilidade com a plataforma WordPress.com, todos os arquivos estão renomeados com a extensão .doc ao final do seu respectivo nome, sendo assim, após o download torna-se necessário remover esta extensão, mantendo somente a extensão padrão .sql.

Nota: Todos os arquivos disponibilizados foram obtidos ou criados com autorização de seus autores, sendo estes, passíveis de direitos autorais.

Links

Caso você queira acessar os posts anteriores da sessão, não perca tempo utilize os links listados abaixo:

Agradecimento

Quero agradecer imensamente a sua visita, espero lhe encontrar muitas vezes no decorrer deste ano em meu blog.

Não deixe de acessar os outros posts das demais sessões, e o próximo post desta sessão será publicado no mês de Novembro, até lá continue curtindo sua vida e compartilhando suas experiência.

Um forte abraço.

Dica do Mês – Utilizando a não documentada system view – SPT_Values


Buenas tardes….. Salve amantes de Banco de Dados!

Hoje terça – feira, estamos chegando ao final do mês de Fevereiro, estou aproveitando minhas férias no Flextronics Instituto de Tecnologia para descansar, renovar as minhas energias, cuidar dos meus filhos, esposas, enfim da minha vida, mas mantendo a minha missão e prazer em se aperfeiçoar cada vez mais em relação ao SQL Server e o mundo de Banco de Dados. Além disso, também tenho que manter vivo o meu blog, cuidando com carinho dos meus quase 2.000 seguidores, fazendo com eles não se sintam sozinhos ou desamparados(kkkkk).

Como eu destaquei no primeiro post desta sessão ao final de cada mês vou compartilhar com vocês uma pequena dica, levando-se em consideração os posts que sempre estou respondendo quase que diariamente nos Fóruns de SQL Server, como também, as dúvidas dos meus alunos, clientes e amigos de trabalho.

Seguindo este caminho uma das dúvidas que me chamou a atenção recentimente foi o questionamento que um aluno me fez referente a alguns recursos do Microsoft SQL Server que não estão documentados no Books On-Line, dentro eles a System View SPT_Values, isso mesmo se você nunca ouvi falar existem também alguns visões de sistemas presente no SQL Server não documentadas por parte da Microsoft.

Como costumo dizer para meus filhos, missão dada é missão cumprida! Neste caminho, lá vou eu, melhor dizendo lá eu fui….pela estrada a fora da internet pesquisando, consultando até encontrar mais informações para complementar o meu conhecimento em relação a esta system view, que sinceramente eu já tinha ouvido falar em meados de 2009, mas acredito que utilizei uma ou duas vezes sem saber exatamente como fazer uso.

Em algumas pesquisas na internet encontrei informações que indicam que esta visão de sistema é bastante antiga e esta presente no SQL Server desde as primeiras versões desenvolvidas inicialmente pela Sybase, conforme este link destaca: http://infocenter.sybase.com/archive/index.jsp?topic=/com.sybase.help.ase_15.0.sag1/html/sag1/sag126.htm

Particularmente eu já fiz isso desta visão, que possui algumas características interessantes:

  • Apresenta uma relação de 2523 linhas de registro que podem variar entre versões distintas do SQL Server;
  • Contem uma coluna denominada Number que armazena uma sequência de números de 0 até 2047;
  • Visão de sistema armazenada fisicamente no banco de dados Master; e
  • Considera como uma tabela auxiliar para geração de números ou cálculos matemáticos.

A Figura 1 apresentada abaixo ilustra a estrutura lógica da system view SPT_Values:

SystemView-SPT_Values
Figura 1 – Estrutura lógica da system view spt_valeus.

Dentre as principais formas de uso desta system view, algumas são bastante recorrentes e importantes para o profissionais de desenvolvimento:

  1. Análise de uma sequência de caracteres;
  2. Identificar falhas em sequências numéricas geradas através da proprieda Identity;
  3. Facilidade na geração de sequências de datas ou dados fictícios;
  4. Possibilidade de criação de ordenação e organização de dados de forma aleatória ou randômica.

Muito interessante todas estas possibilidades que este recurso tão escondido e presenta a anos pode oferecer e facilitar nossas vidas, desta forma, vou apresentar alguns exemplos de como podemos fazer uso desta system view.

 


Exemplos:

— 1 – Cálculando o fatorial de um número —

Declare @n int, @result float

Select @n = 4,@result=1

Select @result = @result * number From Master..spt_values

Where Type=‘p’ And Number Between 1 And @n

Select @result

Go

 

— 2 – Realizando a seperação de palavras —

DECLARE @var VARCHAR(100)

SET @var = ‘Conhecendo, cada, vez, mais, os segredos, do SQL Server…..’

SELECT

SUBSTRING (‘,’ + @var + ‘,’,Number + 1,CHARINDEX(‘,’,‘,’ + @var + ‘,’,Number + 1) Number 1) as value

FROM master..spt_values

WHERE Number >= 1

AND Number < LEN(‘,’ + @var + ‘,’) 1

AND SUBSTRING(‘,’ + @var + ‘,’, Number, 1) = ‘,’

AND type = ‘P’

ORDER BY Number

 

 Go

 

— 3 – Gerando um calendário mensal em tempo de execução, com base, no mês atual —

Select dateadd(month,datediff(month,0,getdate()),0) + number

from master..spt_values n with (nolock)

where number between 0 and day(dateadd(month,datediff(month,-1,getdate()),0) 1) 1 and type = ‘p’

Go

 

— 4 – Listando todas as horas de um dia, com base, na data atual —

Select dateadd(hour,number,dateadd(day,datediff(day,0,getdate()),0))

from master..spt_values n with (nolock)

where number between 0 and 23 and type = ‘p’

Go

 


 

 

Sensacional, quantas diversas possibilidades, maneiras e formas de utilização podem ser utilizadas com a system view SPT_Values, realmente fica complicado entender o porque a Microsoft não da suporte a documentação deste recurso, mas podemos pensar e considerar que por se tratar de recurso antigo oriundo da Sybase a Microsoft entenda que seja necessário recomendável elaborar uma documentação e ser adicionada ao Books On-Line. Mas vamos em frente, quem sabe no futuro isso possa mudar, pois existem muitas outras funcionalidades, comandos, stored procedures e recursos que a Microsoft também não esta documentando.

Deixando isso de lado, vou encerrar mais esta dica, espero e tenho a certeza que você gostou deste post, torço para que esta dica possa lhe trazer diversas possibilidades de utilizar este recurso, use sua imaginação e conhecimento com o SQL Server para encontrar outras maneiras de consumir e se aproveitar desta system view.

Mais uma vez obrigado, agradeço a sua visita, deixe sua crítica, sugestão, comentário e também contribua apresenta uma outra maneira que você já utilizou ou imagina que podemos utilizar a System Views SPT_Valeus.

Nos encontramos no próximos mês, com mais uma dica do mês.

Até lá.

Short Scripts – Janeiro – 2014


Bom dia, Comunidade….

Salve, Salve galera que gosta de Banco de Dados, mais especificamente o Microsoft SQL Server!!!!

Estamos começando mais um ano de muita expectativa com o possível lançamento do Microsoft SQL Server 2014, mas enquanto esta nova versão no chega, vamos trabalhando com as atuais versões.

Revirando o meu baú de Scripts, encontrei alguns códigos que a muitos anos eu utilizei e para falar a verdade nem se lembrava mais.

Pois bem, na relação de hoje você vai encontrar Short Scripts sobre:

  • Acessos de Usuários;
  • Conexões de Usuários;
  • Bloco de Códigos com Múltiplas CTEs;
  • Cálculo de dias úteis;
  • Cláusula values no Select;
  • Função PWDCompare;
  • Função PWDEncrypt;
  • Operador Neested Loop;
  • Operadore Merge Join; e
  • Trigger DDL.

Fique a vontade para copiar os códigos de exemplo, fazer suas alterações, propor melhorias ou mudanças, como também, suas sugestões e críticas.

Segue abaixo a relação de Short Scripts:

1 –  Exemplo – Básico – Multiplas – CTEs – Bloco de Código

;With CTE1 (Codigo, Descricao) As (Select Codigo, Descricao from Tabela1), CTE2 (Valor1, Valor2) As (Select Valor1, Valor2 From Tabela2)

Select T1.*, T2.* From Tabela1 T1, Tabela2 T2

2 – Exemplo – Básico – Trigger DDL – Criação e Exclusão Tabelas

CREATE TRIGGER safety
ON DATABASE
FOR DROP_TABLE, ALTER_TABLE
AS
PRINT ‘You must disable Trigger “safety” to drop or alter tables!’
ROLLBACK ;

3 – Exemplo – Calcular Dias Úteis

Set DateFormat dmy

Declare @DiaFinal Int,            @ContarDias Int

Set @DiaFinal = (Select DatePart(Day,GetDate())) Set @ContarDias=0

Set Datefirst 1

While @DiaFinal >= (Select DatePart(Day,GetDate())) And @DiaFinal < 28  Begin   Set @ContarDias = @ContarDias + 1   Set @DiaFinal=(Select DatePart(Day,GetDate()+@ContarDias))  End

SELECT @@DATEFIRST AS ‘1st Day’,  DATEPART(dw,GetDate()+@ContarDias) AS ‘Today’, @ContarDias As “Total de Dias”

4 – Exemplo – Informações – Conexões e Acessos

— Quantidade de Conexões Simultâneas —

SELECT status,

client_net_address as [IP do cliente],

p.hostname as [Nome da máquina do cliente],

[text] as [Texto da consulta],

SPID,

DB_NAME(p.dbid) as [Nome do BD no qual foi executada a query],

p.[program_name] as [Programa solicitante]

FROM sys.dm_exec_connections c INNER JOIN sys.sysprocesses p

on c.session_id = p.spid

CROSS APPLY sys.dm_exec_sql_text(most_recent_sql_handle) AS ST

where STATUS IN (‘RUNNABLE’, ‘RUNNING’, ‘SUSPENDED’)

ORDER BY STATUS

— Quantidade de Conexões por banco de dados —

SELECT db_name(dbid) as Banco_de_Dados,

count(dbid) as Qtd_Conexoes

FROM sys.sysprocesses

WHERE dbid > 50

and db_name(dbid) = ‘smartgp’

GROUP BY dbid, loginame

5 – Exemplo – Relação de Usuário conectados

Select SPID As ‘Id’,
Loginame As ‘Usuário – SQL Server’,
HostName As ‘Computador’,
NT_Domain As ‘Domínio’,
NT_UserName As ‘Usuário – Domínio’
From Master..SysProcesses
Where Loginame <> ‘sa’
Order By Loginame

6 – Exemplo – Trabalhando com Operadores Neested Loop + Merge Join

— NESTED LOOP —
SELECT o.SalesOrderID, o.OrderDate, od.ProductID

FROM dbo.Orders o INNER JOIN dbo.OrderDetails od

ON o.SalesOrderID = od.SalesOrderID

WHERE o.SalesOrderID = 43659

— MERGE JOIN —
SELECT o.SalesOrderID, o.OrderDate, od.ProductID

FROM dbo.Orders o INNER JOIN dbo.OrderDetails od

ON o.SalesOrderID = od.SalesOrderID

WHERE o.SalesOrderID BETWEEN 43659 AND 44000

7 – Exemplo – Utilizando – Claúsula – Values no Select

Select * from (Values (‘Pedro’, 1),(‘FIT’, 2)) As Teste (About, Valor)

Select * from (Values (‘Valor’)) As Tabela (“Teste”)

8 – Exemplo – Utilizando a Função – PWDCompare e PWDEncrypt

— Inserindo a senha criptografada —

INSERT INTO Usuarios_novos VALUES (CONVERT(VARBINARY(255), PWDENCRYPT(‘Senha_Teste’)))

— Comparando a senha digitada com a senha criptografada —

SELECT PWDCOMPARE(‘Senha_Teste’,CONVERT(VARBINARY(255), PWDENCRYPT(‘Senha_Teste’)), 0) AS RESULTADO

Mais uma vez obrigado por sua visita, espero que esta material possa ser útil.

Nos encontramos na próxima Short Script.

Até mais.

Simulando – Desastre e Recuperação de Bancos de Dados – Microsoft SQL Server 2008 R2 e 2012 – Parte III.


Galera, bom dia.

Tudo bem?

Como prometido estou retornando com mais um post da série referente a Simulação de Desastre e Recuperação de Banco de Dados no Microsoft SQL Server 2008, R2 e 2012.

Neste post, vou destacar o uso do aplicativo Hex Editor Neo, utilizado especificamente para realizar o acesso, interpretação e leitura dos Arquivos de Dados que constitui qualquer de Banco de Dados no Microsoft SQL Server. Para saber mais sobre este editor acesse: http://www.hhdsoftware.com/

Você vai aprender e entender como podemos realizar manualmente a quebra de um banco de dados através da alteração da estrutura física e lógica da área alocação de dados no nível mais baixo,  chamada página de dados.

Figura1

Figura 1 – Estrutura do Banco de Dados MyDatabaseDesastre.

 

Ao criarmos uma tabela no Microsoft SQL Server, este objeto é alocado fisicamente em uma área de armazenamento chamada Partition (Partição, conceito que eu apresentei na primeira parte desta séria), organizado de forma lógica por pequenas unidades de armazenamento conhecidas como Allocation_Units.

 

Através das informações que podemos coletar com base na partição que o objeto esta vinculado, podemos encontrar as unidades de alocação em conseqüência identificar a primeira página de dados que este objeto está fisicamente ligado com a estrutura de armazenamento do banco de dados.

 

Para começarmos, vamos utilizar o Código 1 apresentado a seguir:

 

— Código 1 – Identificando as Partitions e Allocation_Units da Tabela Clientes –

 

SELECT P.partition_id,

 

OBJECT_NAME(P.object_id) As ObjectName,

 

U.allocation_unit_id,

 

SU.First_Page,

 

SU.Root_Page,

 

SU.First_IAM_Page

 

From Sys.Partitions As P INNER JOIN Sys.Allocation_Units As U

 

ON P.hobt_id = U.container_id

 

Inner Join Sys.system_internals_allocation_units SU

 

On u.allocation_unit_id = su.allocation_unit_id

 

Where  OBJECT_NAME(P.object_id)  = ‘Clientes’

 

 

 

Ao analisarmos este código, podemos notar que estamos fazendo uma junção entre as System Tables:

 

  • Sys.Partitions: Apresenta a relação de Partições existentes no Banco de Dados conectado.

 

 

 

  • Sys.Allocation_Units: Apresenta a relação de unidades de alocação existente no Banco de Dados conectado.

 

 

 

  • Sys.System_Internals_Allocation_Units: Apresenta a relação de unidades de alocação internas e de sistema existente no Banco de Dados conectado.

 

Dentre o conjunto de colunas retornadas pelo Código 1, devemos nos atentar para a coluna First_Page, é através do valor retornado por esta coluna que podemos identificar o número da página de dados em formato Hexadecimal, no meu exemplo o valor que obtive de retorno foi: 0x990000000100, conforme apresenta a Figura 2.

Figura2

 

Figura 2 – Retorno de dados após a execução do Código 1.

Outra possibilidade para identificar a página de dados de uma tabela é identificar os índices existentes para esta tabela, utilizando a System Table Sys.SysIndexes através da coluna First, conforme apresenta o Código 2 apresentada abaixo:

— Código 2 – Identificando a Página de Dados da Tabela Clientes com base em seus Índices –

SELECT First As ‘Área de Alocação’ FROM sys.sysindexes

Where Id = OBJECT_ID(‘Clientes’)

Podemos observar que teremos o mesmo valor 0x990000000100 retornado para a coluna First após executar o Código 2. Muito bem, já sabemos que o valor referente a página de dados da tabela Clientes é: 0x990000000100.

Acredito que alguns questionamentos após encontrarmos esta informação podem estar surgindo na sua cabeça, como por exemplo:

  1. 1.      O formato do número apresenta algum tipo de significado?

Sim, por padrão o valor retornado em hexadecimal apresenta alguns significados com base em seu conjunto de elementos, onde: 0x990000000100

  • Os quatro primeiros dígitos do valor indicam o número hexadecimal que representa a página de dados, neste caso: 0x99

 

  • Os últimos quatros dígitos identificam o número e arquivo de dados que compõem o banco, neste caso: 0100.

 

  • Os outros dígitos representam áreas de alocação internas utilizadas pelo Banco de Dados para armazenar os dados para esta tabela.

 

  1. 2.      Este valor realmente representa o número da primeira página de dados que a tabela clientes esta vinculada?

 

Na verdade para identificar qual realmente é o número de página de dados que a tabela esta vinculada devemos pegar os quatro primeiros dígitos e converter para um valor Inteiro.

 

O Código 3 apresenta como podemos converter o valor 0x990000000100, para um valor inteiro que representará o valor real da página de dados:

 

— Código 3 – Convertendo o valor Hexadecimal para encontrar a Página de Dados —

Declare @NumPagina Varbinary

 

SELECT @NumPagina=First  FROM Sys.Sysindexes

Where Id = OBJECT_ID(Clientes)

 

Select CONVERT(Int,@NumPagina)

Para o meu exemplo o valor retornado foi 153, sendo assim, o número da página de dados que a table clientes esta vinculada é 153.

 

  1. 3.      Existe algum comando especifico para trabalharmos com página de dados no Microsoft SQL Server?

 

Através do comando DBCC Page encontramos informações sobre ás páginas de dados, sendo este, comando DBCC não documento no Books On-Line.

 

  1. 4.      De que maneira os dados ficam armazenados em uma página de dados?

 

A partir do momento em que os dados são armazenados, os mesmos são distribuídos de forma seqüencial e organizada entre os conjuntos de OffSet existentes em cada página que esta armazenada fisicamente no arquivo de dados, neste caso, no arquivo .MDF. Utilizando o comando DBCC destacado anteriormente, teremos a possibilidade de visualizar os dados.

 

Legal, nosso próximo passo é chegarmos fisicamente até os dados que estão armazenados na página de dados 153, para isso vamos então utilizar o comando DBCC Page que poderá nos retornar os valores.

Por padrão o retorno apresentado por comandos DBCCs não é apresentado no SQL Server, sendo assim, temos que ativar a Trace Flag 3604 responsável em apresentar o retorno de dados para os comandos DBCC, conforme apresenta o Código 4:

— Código 4 – Ativando a Trace Flag 3604 para exibir o resultado do DBCC Page —
DBCC TRACEON(3604)

 

O próximo passo consiste em utilizar o comando DBCC Page para encontrarmos o conjunto de informações da nossa página, conforme apresenta o Código 5.

 

 

— Código 5 – Utilizando o DBCC Page + Número da Página de Dados —

DBCC PAGE (MyDatabaseDesastre, 1, 153, 2)

 

Basicamente este comando, será composto por quatro parâmetros, sendo eles:

  • Nome do Banco de Dados;
  • Número que identifica o arquivo de dados;
  • Número da página de dados;
  • Parâmetro para identificar o formato de retorno dos dados, sendo eles:

 

  • 0 – Exibir o Page Header da página de dados;
  • 1 – Exibir o Page Header com mais detalhes por linha com dumps hexadecimais e array de páginas;
  • 2 – Exibir o Page Header detalhado com todo dump em formato hexadecimal; e
  • 3 – Exibir o Page header mais detalhado para cada linha interpretada.

 

Note que após executar o Código 5, teremos o seguinte Memory Dump: @0x52AAC000

 

 

Memory Dump @0x52AAC000

 

52AAC000:   01010400 00820001 00000000 00000800 †…..‚……….

52AAC010:   00000000 00000d00 1b000000 bb1c6b03 †…………».k.

52AAC020:   99000000 01000000 55000000 10020000 †……..U…….

52AAC030:   01000000 89020000 00000000 aa7fb7d3 †….‰…….ª.·Ó

52AAC040:   00000000 00000000 00000000 00000000 †…………….

52AAC050:   00000000 00000000 00000000 00000000 †…………….

52AAC060:   3c000800 7d000000 03000002 001c0040 †<…}……….@

52AAC070:   00436c69 656e7465 20313235 436c6965 †.Cliente 125Clie

52AAC080:   6e746531 3235406d 79646174 61626173 †nte125@mydatabas

52AAC090:   65646573 61737472 652e6564 752e6272 †edesastre.edu.br

52AAC0A0:   30000800 b3dc0000 03000002 00160037 †0…³Ü………7

52AAC0B0:   00506564 726f5065 64726f47 616c7661 †.PedroPedroGalva

52AAC0C0:   6f404669 742d5465 636e6f6c 6f676961 †o@Fit-Tecnologia

52AAC0D0:   2e6f7267 2e627230 000800b4 dc000003 †.org.br0…´Ü…

52AAC0E0:   00000200 16003700 50656472 6f506564 †……7.PedroPed

52AAC0F0:   726f4761 6c76616f 40466974 2d546563 †roGalvao@Fit-Tec

52AAC100:   6e6f6c6f 6769612e 6f72672e 62723000 †nologia.org.br0.

52AAC110:   0800b5dc 00000300 00020016 00370050 †..µÜ………7.P

52AAC120:   6564726f 50656472 6f47616c 76616f40 †edroPedroGalvao@

52AAC130:   4669742d 5465636e 6f6c6f67 69612e6f †Fit-Tecnologia.o

52AAC140:   72672e62 72300008 00b6dc00 00030000 †rg.br0…¶Ü…..

52AAC150:   02001600 37005065 64726f50 6564726f †….7.PedroPedro

52AAC160:   47616c76 616f4046 69742d54 65636e6f †Galvao@Fit-Tecno

52AAC170:   6c6f6769 612e6f72 672e6272 30000800 †logia.org.br0…

52AAC180:   b7dc0000 03000002 00160037 00506564 †·Ü………7.Ped

52AAC190:   726f5065 64726f47 616c7661 6f404669 †roPedroGalvao@Fi

52AAC1A0:   742d5465 636e6f6c 6f676961 2e6f7267 †t-Tecnologia.org

52AAC1B0:   2e627230 000800b8 dc000003 00000200 †.br0…¸Ü…….

52AAC1C0:   16003700 50656472 6f506564 726f4761 †..7.PedroPedroGa

52AAC1D0:   6c76616f 40466974 2d546563 6e6f6c6f †lvao@Fit-Tecnolo

52AAC1E0:   6769612e 6f72672e 62723000 0800b9dc †gia.org.br0…¹Ü

52AAC1F0:   00000300 00020016 00370050 6564726f †………7.Pedro

52AAC200:   50656472 6f47616c 76616f40 4669742d †PedroGalvao@Fit-

52AAC210:   5465636e 6f6c6f67 69612e6f 72672e62 †Tecnologia.org.b

52AAC220:   72300008 00badc00 00030000 02001600 †r0…ºÜ………

52AAC230:   37005065 64726f50 6564726f 47616c76 †7.PedroPedroGalv

52AAC240:   616f4046 69742d54 65636e6f 6c6f6769 †ao@Fit-Tecnologi

52AAC250:   612e6f72 672e6272 30000800 bbdc0000 †a.org.br0…»Ü..

52AAC260:   03000002 00160037 00506564 726f5065 †…….7.PedroPe

52AAC270:   64726f47 616c7661 6f404669 742d5465 †droGalvao@Fit-Te

52AAC280:   636e6f6c 6f676961 2e6f7267 2e627230 †cnologia.org.br0

52AAC290:   000800bc dc000003 00000200 16003700 †…¼Ü………7.

52AAC2A0:   50656472 6f506564 726f4761 6c76616f †PedroPedroGalvao

52AAC2B0:   40466974 2d546563 6e6f6c6f 6769612e †@Fit-Tecnologia.

52AAC2C0:   6f72672e 62723000 0800bddc 00000300 †org.br0…½Ü….

52AAC2D0:   00020016 00370050 6564726f 50656472 †…..7.PedroPedr

52AAC2E0:   6f47616c 76616f40 4669742d 5465636e †oGalvao@Fit-Tecn

52AAC2F0:   6f6c6f67 69612e6f 72672e62 72300008 †ologia.org.br0..

52AAC300:   00bedc00 00030000 02001600 37005065 †.¾Ü………7.Pe

52AAC310:   64726f50 6564726f 47616c76 616f4046 †droPedroGalvao@F

52AAC320:   69742d54 65636e6f 6c6f6769 612e6f72 †it-Tecnologia.or

52AAC330:   672e6272 30000800 bfdc0000 03000002 †g.br0…¿Ü……

52AAC340:   00160037 00506564 726f5065 64726f47 †…7.PedroPedroG

52AAC350:   616c7661 6f404669 742d5465 636e6f6c †alvao@Fit-Tecnol

52AAC360:   6f676961 2e6f7267 2e627200 002e6564 †ogia.org.br…ed

52AAC370:   752e6272 3c000800 0e000000 03000002 †u.br<………..

52AAC380:   001b003e 00436c69 656e7465 20313443 †…>.Cliente 14C

52AAC390:   6c69656e 74653134 406d7964 61746162 †liente14@mydatab

52AAC3A0:   61736564 65736173 7472652e 6564752e †asedesastre.edu.

52AAC3B0:   62723c00 08000f00 00000300 0002001b †br<………….

52AAC3C0:   003e0043 6c69656e 74652031 35436c69 †.>.Cliente 15Cli

52AAC3D0:   656e7465 3135406d 79646174 61626173 †ente15@mydatabas

52AAC3E0:   65646573 61737472 652e6564 752e6272 †edesastre.edu.br

52AAC3F0:   3c000800 10000000 03000002 001b003e †<…………..>

52AAC400:   00436c69 656e7465 20313643 6c69656e †.Cliente 16Clien

52AAC410:   74653136 406d7964 61746162 61736564 †te16@mydatabased

52AAC420:   65736173 7472652e 6564752e 62723c00 †esastre.edu.br<.

52AAC430:   08001100 00000300 0002001b 003e0043 †………….>.C

52AAC440:   6c69656e 74652031 37436c69 656e7465 †liente 17Cliente

52AAC450:   3137406d 79646174 61626173 65646573 †17@mydatabasedes

52AAC460:   61737472 652e6564 752e6272 3c000800 †astre.edu.br<…

52AAC470:   12000000 03000002 001b003e 00436c69 †………..>.Cli

52AAC480:   656e7465 20313843 6c69656e 74653138 †ente 18Cliente18

52AAC490:   406d7964 61746162 61736564 65736173 †@mydatabasedesas

52AAC4A0:   7472652e 6564752e 62723c00 08001300 †tre.edu.br<…..

52AAC4B0:   00000300 0002001b 003e0043 6c69656e †………>.Clien

52AAC4C0:   74652031 39436c69 656e7465 3139406d †te 19Cliente19@m

52AAC4D0:   79646174 61626173 65646573 61737472 †ydatabasedesastr

52AAC4E0:   652e6564 752e6272 3c000800 14000000 †e.edu.br<…….

52AAC4F0:   03000002 001b003e 00436c69 656e7465 †…….>.Cliente

52AAC500:   20323043 6c69656e 74653230 406d7964 † 20Cliente20@myd

52AAC510:   61746162 61736564 65736173 7472652e †atabasedesastre.

52AAC520:   6564752e 62723c00 08001500 00000300 †edu.br<………

52AAC530:   0002001b 003e0043 6c69656e 74652032 †…..>.Cliente 2

52AAC540:   31436c69 656e7465 3231406d 79646174 †1Cliente21@mydat

52AAC550:   61626173 65646573 61737472 652e6564 †abasedesastre.ed

52AAC560:   752e6272 3c000800 16000000 03000002 †u.br<………..

52AAC570:   001b003e 00436c69 656e7465 20323243 †…>.Cliente 22C

52AAC580:   6c69656e 74653232 406d7964 61746162 †liente22@mydatab

52AAC590:   61736564 65736173 7472652e 6564752e †asedesastre.edu.

52AAC5A0:   62723c00 08001700 00000300 0002001b †br<………….

52AAC5B0:   003e0043 6c69656e 74652032 33436c69 †.>.Cliente 23Cli

52AAC5C0:   656e7465 3233406d 79646174 61626173 †ente23@mydatabas

52AAC5D0:   65646573 61737472 652e6564 752e6272 †edesastre.edu.br

52AAC5E0:   3c000800 18000000 03000002 001b003e †<…………..>

52AAC5F0:   00436c69 656e7465 20323443 6c69656e †.Cliente 24Clien

52AAC600:   74653234 406d7964 61746162 61736564 †te24@mydatabased

52AAC610:   65736173 7472652e 6564752e 62723c00 †esastre.edu.br<.

52AAC620:   08001900 00000300 0002001b 003e0043 †………….>.C

52AAC630:   6c69656e 74652032 35436c69 656e7465 †liente 25Cliente

52AAC640:   3235406d 79646174 61626173 65646573 †25@mydatabasedes

52AAC650:   61737472 652e6564 752e6272 3c000800 †astre.edu.br<…

52AAC660:   1a000000 03000002 001b003e 00436c69 †………..>.Cli

52AAC670:   656e7465 20323643 6c69656e 74653236 †ente 26Cliente26

52AAC680:   406d7964 61746162 61736564 65736173 †@mydatabasedesas

52AAC690:   7472652e 6564752e 62723c00 08001b00 †tre.edu.br<…..

52AAC6A0:   00000300 0002001b 003e0043 6c69656e †………>.Clien

52AAC6B0:   74652032 37436c69 656e7465 3237406d †te 27Cliente27@m

52AAC6C0:   79646174 61626173 65646573 61737472 †ydatabasedesastr

52AAC6D0:   652e6564 752e6272 3c000800 1c000000 †e.edu.br<…….

52AAC6E0:   03000002 001b003e 00436c69 656e7465 †…….>.Cliente

52AAC6F0:   20323843 6c69656e 74653238 406d7964 † 28Cliente28@myd

52AAC700:   61746162 61736564 65736173 7472652e †atabasedesastre.

52AAC710:   6564752e 62723c00 08001d00 00000300 †edu.br<………

52AAC720:   0002001b 003e0043 6c69656e 74652032 †…..>.Cliente 2

52AAC730:   39436c69 656e7465 3239406d 79646174 †9Cliente29@mydat

52AAC740:   61626173 65646573 61737472 652e6564 †abasedesastre.ed

52AAC750:   752e6272 3c000800 1e000000 03000002 †u.br<………..

52AAC760:   001b003e 00436c69 656e7465 20333043 †…>.Cliente 30C

52AAC770:   6c69656e 74653330 406d7964 61746162 †liente30@mydatab

52AAC780:   61736564 65736173 7472652e 6564752e †asedesastre.edu.

52AAC790:   62723c00 08001f00 00000300 0002001b †br<………….

52AAC7A0:   003e0043 6c69656e 74652033 31436c69 †.>.Cliente 31Cli

52AAC7B0:   656e7465 3331406d 79646174 61626173 †ente31@mydatabas

52AAC7C0:   65646573 61737472 652e6564 752e6272 †edesastre.edu.br

52AAC7D0:   3c000800 20000000 03000002 001b003e †<… ……….>

52AAC7E0:   00436c69 656e7465 20333243 6c69656e †.Cliente 32Clien

52AAC7F0:   74653332 406d7964 61746162 61736564 †te32@mydatabased

52AAC800:   65736173 7472652e 6564752e 62723c00 †esastre.edu.br<.

52AAC810:   08002100 00000300 0002001b 003e0043 †..!……….>.C

52AAC820:   6c69656e 74652033 33436c69 656e7465 †liente 33Cliente

52AAC830:   3333406d 79646174 61626173 65646573 †33@mydatabasedes

52AAC840:   61737472 652e6564 752e6272 3c000800 †astre.edu.br<…

52AAC850:   22000000 03000002 001b003e 00436c69 †”……….>.Cli

52AAC860:   656e7465 20333443 6c69656e 74653334 †ente 34Cliente34

52AAC870:   406d7964 61746162 61736564 65736173 †@mydatabasedesas

52AAC880:   7472652e 6564752e 62723c00 08002300 †tre.edu.br<…#.

52AAC890:   00000300 0002001b 003e0043 6c69656e †………>.Clien

52AAC8A0:   74652033 35436c69 656e7465 3335406d †te 35Cliente35@m

52AAC8B0:   79646174 61626173 65646573 61737472 †ydatabasedesastr

52AAC8C0:   652e6564 752e6272 3c000800 24000000 †e.edu.br<…$…

52AAC8D0:   03000002 001b003e 00436c69 656e7465 †…….>.Cliente

52AAC8E0:   20333643 6c69656e 74653336 406d7964 † 36Cliente36@myd

52AAC8F0:   61746162 61736564 65736173 7472652e †atabasedesastre.

52AAC900:   6564752e 62723c00 08002500 00000300 †edu.br<…%…..

52AAC910:   0002001b 003e0043 6c69656e 74652033 †…..>.Cliente 3

52AAC920:   37436c69 656e7465 3337406d 79646174 †7Cliente37@mydat

52AAC930:   61626173 65646573 61737472 652e6564 †abasedesastre.ed

52AAC940:   752e6272 3c000800 26000000 03000002 †u.br<…&…….

52AAC950:   001b003e 00436c69 656e7465 20333843 †…>.Cliente 38C

52AAC960:   6c69656e 74653338 406d7964 61746162 †liente38@mydatab

52AAC970:   61736564 65736173 7472652e 6564752e †asedesastre.edu.

52AAC980:   62723c00 08002700 00000300 0002001b †br<…’………

52AAC990:   003e0043 6c69656e 74652033 39436c69 †.>.Cliente 39Cli

52AAC9A0:   656e7465 3339406d 79646174 61626173 †ente39@mydatabas

52AAC9B0:   65646573 61737472 652e6564 752e6272 †edesastre.edu.br

52AAC9C0:   3c000800 28000000 03000002 001b003e †<…(……….>

52AAC9D0:   00436c69 656e7465 20343043 6c69656e †.Cliente 40Clien

52AAC9E0:   74653430 406d7964 61746162 61736564 †te40@mydatabased

52AAC9F0:   65736173 7472652e 6564752e 62723c00 †esastre.edu.br<.

52AACA00:   08002900 00000300 0002001b 003e0043 †..)……….>.C

52AACA10:   6c69656e 74652034 31436c69 656e7465 †liente 41Cliente

52AACA20:   3431406d 79646174 61626173 65646573 †41@mydatabasedes

52AACA30:   61737472 652e6564 752e6272 3c000800 †astre.edu.br<…

52AACA40:   2a000000 03000002 001b003e 00436c69 †*……….>.Cli

52AACA50:   656e7465 20343243 6c69656e 74653432 †ente 42Cliente42

52AACA60:   406d7964 61746162 61736564 65736173 †@mydatabasedesas

52AACA70:   7472652e 6564752e 62723c00 08002b00 †tre.edu.br<…+.

52AACA80:   00000300 0002001b 003e0043 6c69656e †………>.Clien

52AACA90:   74652034 33436c69 656e7465 3433406d †te 43Cliente43@m

52AACAA0:   79646174 61626173 65646573 61737472 †ydatabasedesastr

52AACAB0:   652e6564 752e6272 3c000800 2c000000 †e.edu.br<…,…

52AACAC0:   03000002 001b003e 00436c69 656e7465 †…….>.Cliente

52AACAD0:   20343443 6c69656e 74653434 406d7964 † 44Cliente44@myd

52AACAE0:   61746162 61736564 65736173 7472652e †atabasedesastre.

52AACAF0:   6564752e 62723c00 08002d00 00000300 †edu.br<…-…..

52AACB00:   0002001b 003e0043 6c69656e 74652034 †…..>.Cliente 4

52AACB10:   35436c69 656e7465 3435406d 79646174 †5Cliente45@mydat

52AACB20:   61626173 65646573 61737472 652e6564 †abasedesastre.ed

52AACB30:   752e6272 3c000800 2e000000 03000002 †u.br<………..

52AACB40:   001b003e 00436c69 656e7465 20343643 †…>.Cliente 46C

52AACB50:   6c69656e 74653436 406d7964 61746162 †liente46@mydatab

52AACB60:   61736564 65736173 7472652e 6564752e †asedesastre.edu.

52AACB70:   62723c00 08002f00 00000300 0002001b †br<…/………

52AACB80:   003e0043 6c69656e 74652034 37436c69 †.>.Cliente 47Cli

52AACB90:   656e7465 3437406d 79646174 61626173 †ente47@mydatabas

52AACBA0:   65646573 61737472 652e6564 752e6272 †edesastre.edu.br

52AACBB0:   3c000800 30000000 03000002 001b003e †<…0……….>

52AACBC0:   00436c69 656e7465 20343843 6c69656e †.Cliente 48Clien

52AACBD0:   74653438 406d7964 61746162 61736564 †te48@mydatabased

52AACBE0:   65736173 7472652e 6564752e 62723c00 †esastre.edu.br<.

52AACBF0:   08003100 00000300 0002001b 003e0043 †..1……….>.C

52AACC00:   6c69656e 74652034 39436c69 656e7465 †liente 49Cliente

52AACC10:   3439406d 79646174 61626173 65646573 †49@mydatabasedes

52AACC20:   61737472 652e6564 752e6272 3c000800 †astre.edu.br<…

52AACC30:   32000000 03000002 001b003e 00436c69 †2……….>.Cli

52AACC40:   656e7465 20353043 6c69656e 74653530 †ente 50Cliente50

52AACC50:   406d7964 61746162 61736564 65736173 †@mydatabasedesas

52AACC60:   7472652e 6564752e 62723c00 08003300 †tre.edu.br<…3.

52AACC70:   00000300 0002001b 003e0043 6c69656e †………>.Clien

52AACC80:   74652035 31436c69 656e7465 3531406d †te 51Cliente51@m

52AACC90:   79646174 61626173 65646573 61737472 †ydatabasedesastr

52AACCA0:   652e6564 752e6272 3c000800 34000000 †e.edu.br<…4…

52AACCB0:   03000002 001b003e 00436c69 656e7465 †…….>.Cliente

52AACCC0:   20353243 6c69656e 74653532 406d7964 † 52Cliente52@myd

52AACCD0:   61746162 61736564 65736173 7472652e †atabasedesastre.

52AACCE0:   6564752e 62723c00 08003500 00000300 †edu.br<…5…..

52AACCF0:   0002001b 003e0043 6c69656e 74652035 †…..>.Cliente 5

52AACD00:   33436c69 656e7465 3533406d 79646174 †3Cliente53@mydat

52AACD10:   61626173 65646573 61737472 652e6564 †abasedesastre.ed

52AACD20:   752e6272 3c000800 36000000 03000002 †u.br<…6…….

52AACD30:   001b003e 00436c69 656e7465 20353443 †…>.Cliente 54C

52AACD40:   6c69656e 74653534 406d7964 61746162 †liente54@mydatab

52AACD50:   61736564 65736173 7472652e 6564752e †asedesastre.edu.

52AACD60:   62723c00 08003700 00000300 0002001b †br<…7………

52AACD70:   003e0043 6c69656e 74652035 35436c69 †.>.Cliente 55Cli

52AACD80:   656e7465 3535406d 79646174 61626173 †ente55@mydatabas

52AACD90:   65646573 61737472 652e6564 752e6272 †edesastre.edu.br

52AACDA0:   3c000800 38000000 03000002 001b003e †<…8……….>

52AACDB0:   00436c69 656e7465 20353643 6c69656e †.Cliente 56Clien

52AACDC0:   74653536 406d7964 61746162 61736564 †te56@mydatabased

52AACDD0:   65736173 7472652e 6564752e 62723c00 †esastre.edu.br<.

52AACDE0:   08003900 00000300 0002001b 003e0043 †..9……….>.C

52AACDF0:   6c69656e 74652035 37436c69 656e7465 †liente 57Cliente

52AACE00:   3537406d 79646174 61626173 65646573 †57@mydatabasedes

52AACE10:   61737472 652e6564 752e6272 3c000800 †astre.edu.br<…

52AACE20:   3a000000 03000002 001b003e 00436c69 †:……….>.Cli

52AACE30:   656e7465 20353843 6c69656e 74653538 †ente 58Cliente58

52AACE40:   406d7964 61746162 61736564 65736173 †@mydatabasedesas

52AACE50:   7472652e 6564752e 62723c00 08003b00 †tre.edu.br<…;.

52AACE60:   00000300 0002001b 003e0043 6c69656e †………>.Clien

52AACE70:   74652035 39436c69 656e7465 3539406d †te 59Cliente59@m

52AACE80:   79646174 61626173 65646573 61737472 †ydatabasedesastr

52AACE90:   652e6564 752e6272 3c000800 3c000000 †e.edu.br<…<…

52AACEA0:   03000002 001b003e 00436c69 656e7465 †…….>.Cliente

52AACEB0:   20363043 6c69656e 74653630 406d7964 † 60Cliente60@myd

52AACEC0:   61746162 61736564 65736173 7472652e †atabasedesastre.

52AACED0:   6564752e 62723c00 08003d00 00000300 †edu.br<…=…..

52AACEE0:   0002001b 003e0043 6c69656e 74652036 †…..>.Cliente 6

52AACEF0:   31436c69 656e7465 3631406d 79646174 †1Cliente61@mydat

52AACF00:   61626173 65646573 61737472 652e6564 †abasedesastre.ed

52AACF10:   752e6272 3c000800 3e000000 03000002 †u.br<…>…….

52AACF20:   001b003e 00436c69 656e7465 20363243 †…>.Cliente 62C

52AACF30:   6c69656e 74653632 406d7964 61746162 †liente62@mydatab

52AACF40:   61736564 65736173 7472652e 6564752e †asedesastre.edu.

52AACF50:   62723c00 08003f00 00000300 0002001b †br<…?………

52AACF60:   003e0043 6c69656e 74652036 33436c69 †.>.Cliente 63Cli

52AACF70:   656e7465 3633406d 79646174 61626173 †ente63@mydatabas

52AACF80:   65646573 61737472 652e6564 752e6272 †edesastre.edu.br

52AACF90:   3c000800 40000000 03000002 001b003e †<…@……….>

52AACFA0:   00436c69 656e7465 20363443 6c69656e †.Cliente 64Clien

52AACFB0:   74653634 406d7964 61746162 61736564 †te64@mydatabased

52AACFC0:   65736173 7472652e 6564752e 62723c00 †esastre.edu.br<.

52AACFD0:   08004100 00000300 0002001b 003e0043 †..A……….>.C

52AACFE0:   6c69656e 74652036 35436c69 656e7465 †liente 65Cliente

52AACFF0:   3635406d 79646174 61626173 65646573 †65@mydatabasedes

52AAD000:   61737472 652e6564 752e6272 3c000800 †astre.edu.br<…

52AAD010:   42000000 03000002 001b003e 00436c69 †B……….>.Cli

52AAD020:   656e7465 20363643 6c69656e 74653636 †ente 66Cliente66

52AAD030:   406d7964 61746162 61736564 65736173 †@mydatabasedesas

52AAD040:   7472652e 6564752e 62723c00 08004300 †tre.edu.br<…C.

52AAD050:   00000300 0002001b 003e0043 6c69656e †………>.Clien

52AAD060:   74652036 37436c69 656e7465 3637406d †te 67Cliente67@m

52AAD070:   79646174 61626173 65646573 61737472 †ydatabasedesastr

52AAD080:   652e6564 752e6272 3c000800 44000000 †e.edu.br<…D…

52AAD090:   03000002 001b003e 00436c69 656e7465 †…….>.Cliente

52AAD0A0:   20363843 6c69656e 74653638 406d7964 † 68Cliente68@myd

52AAD0B0:   61746162 61736564 65736173 7472652e †atabasedesastre.

52AAD0C0:   6564752e 62723c00 08004500 00000300 †edu.br<…E…..

52AAD0D0:   0002001b 003e0043 6c69656e 74652036 †…..>.Cliente 6

52AAD0E0:   39436c69 656e7465 3639406d 79646174 †9Cliente69@mydat

52AAD0F0:   61626173 65646573 61737472 652e6564 †abasedesastre.ed

52AAD100:   752e6272 3c000800 46000000 03000002 †u.br<…F…….

52AAD110:   001b003e 00436c69 656e7465 20373043 †…>.Cliente 70C

52AAD120:   6c69656e 74653730 406d7964 61746162 †liente70@mydatab

52AAD130:   61736564 65736173 7472652e 6564752e †asedesastre.edu.

52AAD140:   62723c00 08004700 00000300 0002001b †br<…G………

52AAD150:   003e0043 6c69656e 74652037 31436c69 †.>.Cliente 71Cli

52AAD160:   656e7465 3731406d 79646174 61626173 †ente71@mydatabas

52AAD170:   65646573 61737472 652e6564 752e6272 †edesastre.edu.br

52AAD180:   3c000800 48000000 03000002 001b003e †<…H……….>

52AAD190:   00436c69 656e7465 20373243 6c69656e †.Cliente 72Clien

52AAD1A0:   74653732 406d7964 61746162 61736564 †te72@mydatabased

52AAD1B0:   65736173 7472652e 6564752e 62723c00 †esastre.edu.br<.

52AAD1C0:   08004900 00000300 0002001b 003e0043 †..I……….>.C

52AAD1D0:   6c69656e 74652037 33436c69 656e7465 †liente 73Cliente

52AAD1E0:   3733406d 79646174 61626173 65646573 †73@mydatabasedes

52AAD1F0:   61737472 652e6564 752e6272 3c000800 †astre.edu.br<…

52AAD200:   4a000000 03000002 001b003e 00436c69 †J……….>.Cli

52AAD210:   656e7465 20373443 6c69656e 74653734 †ente 74Cliente74

52AAD220:   406d7964 61746162 61736564 65736173 †@mydatabasedesas

52AAD230:   7472652e 6564752e 62723c00 08004b00 †tre.edu.br<…K.

52AAD240:   00000300 0002001b 003e0043 6c69656e †………>.Clien

52AAD250:   74652037 35436c69 656e7465 3735406d †te 75Cliente75@m

52AAD260:   79646174 61626173 65646573 61737472 †ydatabasedesastr

52AAD270:   652e6564 752e6272 3c000800 4c000000 †e.edu.br<…L…

52AAD280:   03000002 001b003e 00436c69 656e7465 †…….>.Cliente

52AAD290:   20373643 6c69656e 74653736 406d7964 † 76Cliente76@myd

52AAD2A0:   61746162 61736564 65736173 7472652e †atabasedesastre.

52AAD2B0:   6564752e 62723c00 08004d00 00000300 †edu.br<…M…..

52AAD2C0:   0002001b 003e0043 6c69656e 74652037 †…..>.Cliente 7

52AAD2D0:   37436c69 656e7465 3737406d 79646174 †7Cliente77@mydat

52AAD2E0:   61626173 65646573 61737472 652e6564 †abasedesastre.ed

52AAD2F0:   752e6272 3c000800 4e000000 03000002 †u.br<…N…….

52AAD300:   001b003e 00436c69 656e7465 20373843 †…>.Cliente 78C

52AAD310:   6c69656e 74653738 406d7964 61746162 †liente78@mydatab

52AAD320:   61736564 65736173 7472652e 6564752e †asedesastre.edu.

52AAD330:   62723c00 08004f00 00000300 0002001b †br<…O………

52AAD340:   003e0043 6c69656e 74652037 39436c69 †.>.Cliente 79Cli

52AAD350:   656e7465 3739406d 79646174 61626173 †ente79@mydatabas

52AAD360:   65646573 61737472 652e6564 752e6272 †edesastre.edu.br

52AAD370:   3c000800 50000000 03000002 001b003e †<…P……….>

52AAD380:   00436c69 656e7465 20383043 6c69656e †.Cliente 80Clien

52AAD390:   74653830 406d7964 61746162 61736564 †te80@mydatabased

52AAD3A0:   65736173 7472652e 6564752e 62723c00 †esastre.edu.br<.

52AAD3B0:   08005100 00000300 0002001b 003e0043 †..Q……….>.C

52AAD3C0:   6c69656e 74652038 31436c69 656e7465 †liente 81Cliente

52AAD3D0:   3831406d 79646174 61626173 65646573 †81@mydatabasedes

52AAD3E0:   61737472 652e6564 752e6272 3c000800 †astre.edu.br<…

52AAD3F0:   52000000 03000002 001b003e 00436c69 †R……….>.Cli

52AAD400:   656e7465 20383243 6c69656e 74653832 †ente 82Cliente82

52AAD410:   406d7964 61746162 61736564 65736173 †@mydatabasedesas

52AAD420:   7472652e 6564752e 62723c00 08005300 †tre.edu.br<…S.

52AAD430:   00000300 0002001b 003e0043 6c69656e †………>.Clien

52AAD440:   74652038 33436c69 656e7465 3833406d †te 83Cliente83@m

52AAD450:   79646174 61626173 65646573 61737472 †ydatabasedesastr

52AAD460:   652e6564 752e6272 3c000800 54000000 †e.edu.br<…T…

52AAD470:   03000002 001b003e 00436c69 656e7465 †…….>.Cliente

52AAD480:   20383443 6c69656e 74653834 406d7964 † 84Cliente84@myd

52AAD490:   61746162 61736564 65736173 7472652e †atabasedesastre.

52AAD4A0:   6564752e 62723c00 08005500 00000300 †edu.br<…U…..

52AAD4B0:   0002001b 003e0043 6c69656e 74652038 †…..>.Cliente 8

52AAD4C0:   35436c69 656e7465 3835406d 79646174 †5Cliente85@mydat

52AAD4D0:   61626173 65646573 61737472 652e6564 †abasedesastre.ed

52AAD4E0:   752e6272 3c000800 56000000 03000002 †u.br<…V…….

52AAD4F0:   001b003e 00436c69 656e7465 20383643 †…>.Cliente 86C

52AAD500:   6c69656e 74653836 406d7964 61746162 †liente86@mydatab

52AAD510:   61736564 65736173 7472652e 6564752e †asedesastre.edu.

52AAD520:   62723c00 08005700 00000300 0002001b †br<…W………

52AAD530:   003e0043 6c69656e 74652038 37436c69 †.>.Cliente 87Cli

52AAD540:   656e7465 3837406d 79646174 61626173 †ente87@mydatabas

52AAD550:   65646573 61737472 652e6564 752e6272 †edesastre.edu.br

52AAD560:   3c000800 58000000 03000002 001b003e †<…X……….>

52AAD570:   00436c69 656e7465 20383843 6c69656e †.Cliente 88Clien

52AAD580:   74653838 406d7964 61746162 61736564 †te88@mydatabased

52AAD590:   65736173 7472652e 6564752e 62723c00 †esastre.edu.br<.

52AAD5A0:   08005900 00000300 0002001b 003e0043 †..Y……….>.C

52AAD5B0:   6c69656e 74652038 39436c69 656e7465 †liente 89Cliente

52AAD5C0:   3839406d 79646174 61626173 65646573 †89@mydatabasedes

52AAD5D0:   61737472 652e6564 752e6272 3c000800 †astre.edu.br<…

52AAD5E0:   5a000000 03000002 001b003e 00436c69 †Z……….>.Cli

52AAD5F0:   656e7465 20393043 6c69656e 74653930 †ente 90Cliente90

52AAD600:   406d7964 61746162 61736564 65736173 †@mydatabasedesas

52AAD610:   7472652e 6564752e 62723c00 08005b00 †tre.edu.br<…[.

52AAD620:   00000300 0002001b 003e0043 6c69656e †………>.Clien

52AAD630:   74652039 31436c69 656e7465 3931406d †te 91Cliente91@m

52AAD640:   79646174 61626173 65646573 61737472 †ydatabasedesastr

52AAD650:   652e6564 752e6272 3c000800 5c000000 †e.edu.br<…\…

52AAD660:   03000002 001b003e 00436c69 656e7465 †…….>.Cliente

52AAD670:   20393243 6c69656e 74653932 406d7964 † 92Cliente92@myd

52AAD680:   61746162 61736564 65736173 7472652e †atabasedesastre.

52AAD690:   6564752e 62723c00 08005d00 00000300 †edu.br<…]…..

52AAD6A0:   0002001b 003e0043 6c69656e 74652039 †…..>.Cliente 9

52AAD6B0:   33436c69 656e7465 3933406d 79646174 †3Cliente93@mydat

52AAD6C0:   61626173 65646573 61737472 652e6564 †abasedesastre.ed

52AAD6D0:   752e6272 3c000800 5e000000 03000002 †u.br<…^…….

52AAD6E0:   001b003e 00436c69 656e7465 20393443 †…>.Cliente 94C

52AAD6F0:   6c69656e 74653934 406d7964 61746162 †liente94@mydatab

52AAD700:   61736564 65736173 7472652e 6564752e †asedesastre.edu.

52AAD710:   62723c00 08005f00 00000300 0002001b †br<…_………

52AAD720:   003e0043 6c69656e 74652039 35436c69 †.>.Cliente 95Cli

52AAD730:   656e7465 3935406d 79646174 61626173 †ente95@mydatabas

52AAD740:   65646573 61737472 652e6564 752e6272 †edesastre.edu.br

52AAD750:   3c000800 60000000 03000002 001b003e †<…`……….>

52AAD760:   00436c69 656e7465 20393643 6c69656e †.Cliente 96Clien

52AAD770:   74653936 406d7964 61746162 61736564 †te96@mydatabased

52AAD780:   65736173 7472652e 6564752e 62723c00 †esastre.edu.br<.

52AAD790:   08006100 00000300 0002001b 003e0043 †..a……….>.C

52AAD7A0:   6c69656e 74652039 37436c69 656e7465 †liente 97Cliente

52AAD7B0:   3937406d 79646174 61626173 65646573 †97@mydatabasedes

52AAD7C0:   61737472 652e6564 752e6272 3c000800 †astre.edu.br<…

52AAD7D0:   62000000 03000002 001b003e 00436c69 †b……….>.Cli

52AAD7E0:   656e7465 20393843 6c69656e 74653938 †ente 98Cliente98

52AAD7F0:   406d7964 61746162 61736564 65736173 †@mydatabasedesas

52AAD800:   7472652e 6564752e 62723c00 08006300 †tre.edu.br<…c.

52AAD810:   00000300 0002001b 003e0043 6c69656e †………>.Clien

52AAD820:   74652039 39436c69 656e7465 3939406d †te 99Cliente99@m

52AAD830:   79646174 61626173 65646573 61737472 †ydatabasedesastr

52AAD840:   652e6564 752e6272 3c000800 64000000 †e.edu.br<…d…

52AAD850:   03000002 001c0040 00436c69 656e7465 †…….@.Cliente

52AAD860:   20313030 436c6965 6e746531 3030406d † 100Cliente100@m

52AAD870:   79646174 61626173 65646573 61737472 †ydatabasedesastr

52AAD880:   652e6564 752e6272 3c000800 65000000 †e.edu.br<…e…

52AAD890:   03000002 001c0040 00436c69 656e7465 †…….@.Cliente

52AAD8A0:   20313031 436c6965 6e746531 3031406d † 101Cliente101@m

52AAD8B0:   79646174 61626173 65646573 61737472 †ydatabasedesastr

52AAD8C0:   652e6564 752e6272 3c000800 66000000 †e.edu.br<…f…

52AAD8D0:   03000002 001c0040 00436c69 656e7465 †…….@.Cliente

52AAD8E0:   20313032 436c6965 6e746531 3032406d † 102Cliente102@m

52AAD8F0:   79646174 61626173 65646573 61737472 †ydatabasedesastr

52AAD900:   652e6564 752e6272 3c000800 67000000 †e.edu.br<…g…

52AAD910:   03000002 001c0040 00436c69 656e7465 †…….@.Cliente

52AAD920:   20313033 436c6965 6e746531 3033406d † 103Cliente103@m

52AAD930:   79646174 61626173 65646573 61737472 †ydatabasedesastr

52AAD940:   652e6564 752e6272 3c000800 68000000 †e.edu.br<…h…

52AAD950:   03000002 001c0040 00436c69 656e7465 †…….@.Cliente

52AAD960:   20313034 436c6965 6e746531 3034406d † 104Cliente104@m

52AAD970:   79646174 61626173 65646573 61737472 †ydatabasedesastr

52AAD980:   652e6564 752e6272 3c000800 69000000 †e.edu.br<…i…

52AAD990:   03000002 001c0040 00436c69 656e7465 †…….@.Cliente

52AAD9A0:   20313035 436c6965 6e746531 3035406d † 105Cliente105@m

52AAD9B0:   79646174 61626173 65646573 61737472 †ydatabasedesastr

52AAD9C0:   652e6564 752e6272 3c000800 6a000000 †e.edu.br<…j…

52AAD9D0:   03000002 001c0040 00436c69 656e7465 †…….@.Cliente

52AAD9E0:   20313036 436c6965 6e746531 3036406d † 106Cliente106@m

52AAD9F0:   79646174 61626173 65646573 61737472 †ydatabasedesastr

52AADA00:   652e6564 752e6272 3c000800 6b000000 †e.edu.br<…k…

52AADA10:   03000002 001c0040 00436c69 656e7465 †…….@.Cliente

52AADA20:   20313037 436c6965 6e746531 3037406d † 107Cliente107@m

52AADA30:   79646174 61626173 65646573 61737472 †ydatabasedesastr

52AADA40:   652e6564 752e6272 3c000800 6c000000 †e.edu.br<…l…

52AADA50:   03000002 001c0040 00436c69 656e7465 †…….@.Cliente

52AADA60:   20313038 436c6965 6e746531 3038406d † 108Cliente108@m

52AADA70:   79646174 61626173 65646573 61737472 †ydatabasedesastr

52AADA80:   652e6564 752e6272 3c000800 6d000000 †e.edu.br<…m…

52AADA90:   03000002 001c0040 00436c69 656e7465 †…….@.Cliente

52AADAA0:   20313039 436c6965 6e746531 3039406d † 109Cliente109@m

52AADAB0:   79646174 61626173 65646573 61737472 †ydatabasedesastr

52AADAC0:   652e6564 752e6272 3c000800 6e000000 †e.edu.br<…n…

52AADAD0:   03000002 001c0040 00436c69 656e7465 †…….@.Cliente

52AADAE0:   20313130 436c6965 6e746531 3130406d † 110Cliente110@m

52AADAF0:   79646174 61626173 65646573 61737472 †ydatabasedesastr

52AADB00:   652e6564 752e6272 3c000800 6f000000 †e.edu.br<…o…

52AADB10:   03000002 001c0040 00436c69 656e7465 †…….@.Cliente

52AADB20:   20313131 436c6965 6e746531 3131406d † 111Cliente111@m

52AADB30:   79646174 61626173 65646573 61737472 †ydatabasedesastr

52AADB40:   652e6564 752e6272 3c000800 70000000 †e.edu.br<…p…

52AADB50:   03000002 001c0040 00436c69 656e7465 †…….@.Cliente

52AADB60:   20313132 436c6965 6e746531 3132406d † 112Cliente112@m

52AADB70:   79646174 61626173 65646573 61737472 †ydatabasedesastr

52AADB80:   652e6564 752e6272 3c000800 71000000 †e.edu.br<…q…

52AADB90:   03000002 001c0040 00436c69 656e7465 †…….@.Cliente

52AADBA0:   20313133 436c6965 6e746531 3133406d † 113Cliente113@m

52AADBB0:   79646174 61626173 65646573 61737472 †ydatabasedesastr

52AADBC0:   652e6564 752e6272 3c000800 72000000 †e.edu.br<…r…

52AADBD0:   03000002 001c0040 00436c69 656e7465 †…….@.Cliente

52AADBE0:   20313134 436c6965 6e746531 3134406d † 114Cliente114@m

52AADBF0:   79646174 61626173 65646573 61737472 †ydatabasedesastr

52AADC00:   652e6564 752e6272 3c000800 73000000 †e.edu.br<…s…

52AADC10:   03000002 001c0040 00436c69 656e7465 †…….@.Cliente

52AADC20:   20313135 436c6965 6e746531 3135406d † 115Cliente115@m

52AADC30:   79646174 61626173 65646573 61737472 †ydatabasedesastr

52AADC40:   652e6564 752e6272 3c000800 74000000 †e.edu.br<…t…

52AADC50:   03000002 001c0040 00436c69 656e7465 †…….@.Cliente

52AADC60:   20313136 436c6965 6e746531 3136406d † 116Cliente116@m

52AADC70:   79646174 61626173 65646573 61737472 †ydatabasedesastr

52AADC80:   652e6564 752e6272 3c000800 75000000 †e.edu.br<…u…

52AADC90:   03000002 001c0040 00436c69 656e7465 †…….@.Cliente

52AADCA0:   20313137 436c6965 6e746531 3137406d † 117Cliente117@m

52AADCB0:   79646174 61626173 65646573 61737472 †ydatabasedesastr

52AADCC0:   652e6564 752e6272 3c000800 76000000 †e.edu.br<…v…

52AADCD0:   03000002 001c0040 00436c69 656e7465 †…….@.Cliente

52AADCE0:   20313138 436c6965 6e746531 3138406d † 118Cliente118@m

52AADCF0:   79646174 61626173 65646573 61737472 †ydatabasedesastr

52AADD00:   652e6564 752e6272 3c000800 77000000 †e.edu.br<…w…

52AADD10:   03000002 001c0040 00436c69 656e7465 †…….@.Cliente

52AADD20:   20313139 436c6965 6e746531 3139406d † 119Cliente119@m

52AADD30:   79646174 61626173 65646573 61737472 †ydatabasedesastr

52AADD40:   652e6564 752e6272 3c000800 78000000 †e.edu.br<…x…

52AADD50:   03000002 001c0040 00436c69 656e7465 †…….@.Cliente

52AADD60:   20313230 436c6965 6e746531 3230406d † 120Cliente120@m

52AADD70:   79646174 61626173 65646573 61737472 †ydatabasedesastr

52AADD80:   652e6564 752e6272 3c000800 79000000 †e.edu.br<…y…

52AADD90:   03000002 001c0040 00436c69 656e7465 †…….@.Cliente

52AADDA0:   20313231 436c6965 6e746531 3231406d † 121Cliente121@m

52AADDB0:   79646174 61626173 65646573 61737472 †ydatabasedesastr

52AADDC0:   652e6564 752e6272 3c000800 7a000000 †e.edu.br<…z…

52AADDD0:   03000002 001c0040 00436c69 656e7465 †…….@.Cliente

52AADDE0:   20313232 436c6965 6e746531 3232406d † 122Cliente122@m

52AADDF0:   79646174 61626173 65646573 61737472 †ydatabasedesastr

52AADE00:   652e6564 752e6272 3c000800 7b000000 †e.edu.br<…{…

52AADE10:   03000002 001c0040 00436c69 656e7465 †…….@.Cliente

52AADE20:   20313233 436c6965 6e746531 3233406d † 123Cliente123@m

52AADE30:   79646174 61626173 65646573 61737472 †ydatabasedesastr

52AADE40:   652e6564 752e6272 3c000800 7c000000 †e.edu.br<…|…

52AADE50:   03000002 001c0040 00436c69 656e7465 †…….@.Cliente

52AADE60:   20313234 436c6965 6e746531 3234406d † 124Cliente124@m

52AADE70:   79646174 61626173 65646573 61737472 †ydatabasedesastr

52AADE80:   652e6564 752e6272 3c000800 7d000000 †e.edu.br<…}…

52AADE90:   03000002 001c0040 00436c69 656e7465 †…….@.Cliente

52AADEA0:   20313235 436c6965 6e746531 3235406d † 125Cliente125@m

52AADEB0:   79646174 61626173 65646573 61737472 †ydatabasedesastr

52AADEC0:   652e6564 752e6272 30000800 b3dc0000 †e.edu.br0…³Ü..

52AADED0:   03000002 00160037 00506564 726f5065 †…….7.PedroPe

52AADEE0:   64726f47 616c7661 6f404669 742d5465 †droGalvao@Fit-Te

52AADEF0:   636e6f6c 6f676961 2e6f7267 2e627230 †cnologia.org.br0

52AADF00:   000800b4 dc000003 00000200 16003700 †…´Ü………7.

52AADF10:   50656472 6f506564 726f4761 6c76616f †PedroPedroGalvao

52AADF20:   40466974 2d546563 6e6f6c6f 6769612e †@Fit-Tecnologia.

52AADF30:   6f72672e 62723000 0800b5dc 00000300 †org.br0…µÜ….

52AADF40:   00020016 00370050 6564726f 50656472 †…..7.PedroPedr

52AADF50:   6f47616c 76616f40 4669742d 5465636e †oGalvao@Fit-Tecn

52AADF60:   6f6c6f67 69612e6f 72672e62 72300008 †ologia.org.br0..

52AADF70:   00b6dc00 00030000 02001600 37005065 †.¶Ü………7.Pe

52AADF80:   64726f50 6564726f 47616c76 616f4046 †droPedroGalvao@F

52AADF90:   69742d54 65636e6f 6c6f6769 612e6f72 †it-Tecnologia.or

52AADFA0:   672e6272 30000800 b7dc0000 03000002 †g.br0…·Ü……

52AADFB0:   00160037 00506564 726f5065 64726f47 †…7.PedroPedroG

52AADFC0:   616c7661 6f404669 742d5465 636e6f6c †alvao@Fit-Tecnol

52AADFD0:   6f676961 2e6f7267 2e627200 001e881e †ogia.org.br…..

52AADFE0:   881e881e 34033403 fd02c602 8f025802 †….4.4.ý.Æ…X.

52AADFF0:   2102ea01 b3017c01 45010e01 d700a000 †!.ê.³.|.E…×. .

 

Observe que é justamente esta estrutura de dados que podemos encontrar os dados inseridos na Tabela Clientes, neste caso, a última coluna a direita do nosso Dump apresenta os dados. Além disso, a primeira coluna representa os OffSets existentes em cada neste página de dados, e ao final o comando DBCC Page apresenta o conjunto OffSet Table Row que a tabela Clientes esta associada para cada linha de registro que forma este objeto.

OFFSET TABLE:

 

Row – Offset

12 (0xc) – 820 (0x334)

11 (0xb) – 765 (0x2fd)

10 (0xa) – 710 (0x2c6)

9 (0x9) – 655 (0x28f)

8 (0x8) – 600 (0x258)

7 (0x7) – 545 (0x221)

6 (0x6) – 490 (0x1ea)

5 (0x5) – 435 (0x1b3)

4 (0x4) – 380 (0x17c)

3 (0x3) – 325 (0x145)

2 (0x2) – 270 (0x10e)

1 (0x1) – 215 (0xd7)

0 (0x0) – 160 (0xa0)

 

Fantástico, acabamos de fazer uma consulta a estrutura física e lógica do nosso banco de dados, em especialmente a tabela Cliente e seus dados, armazenados na página 153.

Nosso próximo passo será utilizar o Hex Editor Neo, para realizar o acesso ao arquivo de dados que compõe o Banco de Dados MyDatabaseDesastre e dentro deste arquivo encontrar qualquer dado e realizar a alteração deste dados, seguindo os passos abaixo:

  1. Encerrar o Serviço do SQL Server;
  2. Acessar a pasta ao qual o arquivo de dados MyDatabaseDesastre.mdf esta armazenado;
  3. Editar o arquivo MyDatabaseDesastre.mdf no Hex Editor Neo, conforme a apresenta Figura 3.

Figura3

Figura 3 – Arquivo MyDatabaseDesastre.mdf sendo editado no Hex Editor Neo.

Agora com o arquivo aberto temos que encontrar em qual OffSet os nossos dados começam a ser apresentados, para isso, basta realizar um simples cálculo informando o número da página de dados e multiplicar por 8192, sendo assim, teremos:

  • 153 * 8192 = 1253376 em seguida converter este valor para Binário teremos: 0x00132000.

Pronto é apartir do Offset 0x00132000 que nossos dados começam a aparecer no arquivo MyDatabaseDesastre.mdf, com isso, realize qualquer alteração que você deseja na coluna que representa a parte dos dados inseridos na tabela Clientes, salve sua alterações e reinicialize o serviço do SQL Server.

E agora ao retornamos para o Management Studio e consultarmos a relação de Banco de Dados, poderemos notar que o banco MyDatabaseDesastre neste momento esta apresentando normalmente a sua estrutura de objetos, mas por conseqüência da alteração que realizamos a tabela Clientes esta inacessível, e apresentando erro ao tentar realizar um simples Select. conforme apresenta a Figura 4:

Figura 4

Figura 4 – Estrutura do Banco de Dados MyDatabaseDesastre acessível mas com erros ao tentar consultar a Tabela Clientes.

 

E agora o que vamos fazer?

 

Pois bem, vou deixar você com água na boca, pensando, imaginando, refletindo como podemos resolver este problema em nosso banco de dados, como também, se existe uma forma para contornar a apresentação da mensagem de erro mesmo após a estrutura física e lógica de uma tabela ter sido alterada.

Espero que você tenha gostado, estamos quase no final desta série, retorno em breve apresentando como podemos restaurar a estrutura da nossa tabela clientes e demonstrando como podemos realizar a quebra do arquivo de log do banco de dados MyDatabaseDesastre.

Mais uma vez obrigado.

Até mais.

 

Obtendo informações sobre Permissões de Logins e Usuários no Microsoft SQL Server 2008 e R2.


Galera, boa tarde, tudo em paz?

Estive um pouco ausente nos últimos dias devido aos meus compromissos profissionais e acadêmicos, o que acabou impossibilitando manter o mesmo ritmo de posts em meu blog. Mesmo assim, consegui um tempinho para elaborar mais este artigo, que a meu ver poderá ajudar muito.

Então vamos lá, espero que você goste.

Pois bem, acredito que normalmente em suas atividades diárias você deve ter se deparado com a necessidade de identificar permissões relacionadas:

  • Database Roles;
  • Logins;
  • Usuários; e
  • Server Roles.

Pensando justamente neste tipo de necessidade, coletei alguns Scripts que utilizo para compor a estrutura deste artigo, a fim de ilustrar e demonstrar como podemos através de linha de comando no Management Studio encontrar valiosas informações.

Antes de começar a demonstrar como estes Scripts podem ser utilizados e quais suas respectivas funcionalidades, quero destacar a relação de Catalog Views que iremos trabalhar.

Segue abaixo a relação de Catalog Views:

  • sys.database_permissions: Retorna uma linha para cada permissão ou permissão de exceção de coluna no banco de dados. Para colunas, há uma linha para cada permissão que é diferente da permissão de nível de objeto correspondente.
  • sys.database_principals: Retorna uma linha com o conjunto de permissões para cada Banco de Dados existente na Instância SQL Server.
  • sys.database_role_members: Retorna uma linha para cada membro existente nas Database Roles vinculadas aos Bancos de Dados existentes na Instância SQL Server.
  • sys.schemas: Apresenta uma linha para cada Database Schema vinculadas aos Bancos de Dados existentes na Instância SQL Server.
  • sys.server_principals: Contém uma linha para cada entidade (Usuário do Windows, Login SQL, Grupo de Usuário do Windows, Server Role, etc) de nível de servidor.
  • sys.server_role_members: Apresenta uma linha para cada membro existente nas Server Roles vinculadas ao Servidor ou Instância SQL Server.
  • sys.syslogins: Contém uma linha para cada conta de Login existente no Servidor ou Instância SQL Server.
  • sys.sysobjects: Contém uma linha para cada objeto existente em Banco de Dados, como: Constraints, Rule, Stored Procedures, etc.

Observações:

Importante destacar que todas estas Catalog Views, foram introduzidas a partir da versão do Microsoft SLQ Server 2005, com base, nas antigas System Views existentes no Microsoft SQL Server 2000.

Além disso, algumas destas Catalog Views, como por exemplo: Sys.Server_Principals requer um nível de permissão mais elevado dentro da Instância SQL Server que você se encontra conectado.

Muito bem, agora que já sabemos os objetos que vamos utilizar como mecanismos para obtenção das informações que necessitamos, vamos começar a trabalhar um pouco com os Scripts.

Para este artigo separei três Scripts denominados:

  1. Script – User Role List and Login Type;
  2. Script – Database Login and User Role List; e
  3. Script – User Role Permissions – Grantor, Object Permissions and Permissions Type.

Vou começar seguindo a seqüência que destaquei acima, apresentando o Script que lista ás Roles de Usuários e Tipos de Logins, vinculados a instância ou servidor SQL Server que você esta conectado.

1 – Script – User Role List and Login Type:

SELECT

          CASE

           WHEN SSPs2.name IS NULL THEN ‘Public’

           ELSE SSPs2.name

          END AS ‘Role Name’,

          SSPs.name AS ‘Login Name’,

          Case SSPs.is_disabled

           When 0 Then ‘0 – Habilitado’

           When 1 Then ‘1 – Desabilitado’

          End AS ‘Login Status’,

          SSPs.type_desc AS ‘Login Type’

FROM sys.server_principals SSPs LEFT JOIN sys.server_role_members SSRM

                                                       ON SSPs.principal_id  = SSRM.member_principal_id

                                                      LEFT JOIN sys.server_principals SSPs2

                                                       ON SSRM.role_principal_id = SSPs2.principal_id

WHERE SSPs2.name IS NOT NULL

OR SSPs.type_desc <> ‘CERTIFICATE_MAPPED_LOGIN’

AND SSPs.type_desc <> ‘SERVER_ROLE’

AND SSPs2.name IS NULL

ORDER BY SSPs2.name DESC, SSPs.name

Vale ressaltar que o ponto principal deste código, encontra-se na Junção entre as Catalog Views apresentando acima, onde estamos, realizando a junção, entre a Sys.Server_Principals e Sys.Server_Role_Members, tendo como condição as Colunas Principal_ID e Member_Principal_ID respectivamente.

Além disso, outro fator importante relaciona-se a cláusula Where, responsável em realizar o filtro de dados, através da coluna Type_Desc pertencente a Sys.Server_Principals, garantindo assim o retorno das principals relacionadas somente aos: Logins, Server Roles, Windows Group e Windows Login. Sendo assim, após executar o Script, temos o resultado apresentado abaixo pela Figura 1:

Figura 1 – Relação de Roles, Logins, Status e Tipos de Logins.

Agora, vamos trabalhar com o Script – Database Login and User Role List, responsável em apresentar a relação de Roles, Login e Usuário, vinculados ao Banco de Dados ao qual você esta executando este Script.

2.      Script – Database Login and User Role List:

With Roles (Role, Login, [User])

As

(SELECT SDPs2.name AS Role,

               SDPs1.name AS  [User],

               SL.name AS Login

FROM [Master].sys.database_principals SDPs1

                                              Inner JOIN [Master].sys.syslogins SL

                                                  ON SDPs1.sid = SL.sid  

                                              Inner JOIN [Master].sys.database_role_members SRM

                                                  ON SRM.member_principal_id = SDPs1.principal_id

                                                Inner JOIN [Master].sys.database_principals p2

                                                  ON SRM.role_principal_id = SDPs2.principal_id

                                                  AND SDPs2.type IN (‘R’)

WHERE SDPs1.type IN (‘S’,’U’,’G’))

Select * from Roles

ORDER BY Role, Login

Se compararmos o tamanho deste segundo script em relação ao primeiro, podemos observar que o nível de complexidade é maior, devido à quantidade de junções realizadas, entre as Catalog Views:

  • Sys.Database_Principals e Sys.SysLogin;
  • Sys.Database_Principals e Sys.Database_Role_Members; e
  • Sys.Database_Role_Members e Sys.Database_Principals.

Outro detalhe importante no último Join está sendo utilizado o operador And na coluna Type forçando o filtro de dados, retornando somente a Database Role. Em contra partida a cláusula Where declarada abaixo esta filtrando as Databases Roles do Tipo: SQL User, Windows User e Windows Group.

Além disso, podemos também notar a utilização de uma CTE (Common Table Expression) como um mecanismo que poderá nos possibilitar a reutilização do código de forma mais elegante.

Ao realizarmos a execução deste teremos um resultado similar ao apresentado pela Figura 2:

Figura 2 – Role, Login e Usuário.

Bem, estamos quase no final, esta faltando apresentar o último Script, denominado Script – User Role Permissions – Grantor, Object Permissions and Permissions Type. Neste último Script teremos o retorno do Nome do Usuário, Conjunto de Permissões, Permissões por Objeto, Grantor e o Tipo da Permissão.

3.      Script – User Role Permissions – Grantor, Object Permissions and Permissions Type.

SELECT SDPs1.name AS [User],

            SDBPs.permission_name AS [Permissions],

             ISNULL(SDBPs.class_desc,”) COLLATE latin1_general_cs_as +     

 ISNULL(‘:’+SO.name,”) COLLATE latin1_general_cs_as   +  ISNULL(‘:’+SC.name,”) COLLATE latin1_general_cs_as As PermissionObjetct,

            SDPs.name as Grantor,

            SDBPs.state_desc AS PermissionType

FROM [Master].sys.database_permissions SDBPs

                                                INNER JOIN  [Master].sys.database_principals  SDPs

                                                on SDBPs.grantor_principal_id=SDPs.principal_id

 INNER JOIN  [Master].sys.database_principals SDPs1

  on SDBPs.grantee_principal_id=SDPs1.principal_id

                                              LEFT OUTER JOIN [Master].sys.sysobjects SO

                                               on SDBPs.major_id=SO.id and SDBPs.class =1

                                              LEFT OUTER JOIN [Master].sys.schemas  SC

                                               on SDBPs.major_id=SC.[schema_id]

WHERE SDPs1.name IN (‘public’)

And SDBPs.permission_name NOT IN(‘CONNECT’)

ORDER BY User, Permissions, PermissionObjetct

Boa parte das Catalog Views apresentadas como começo do artigo é utilizada neste terceiro script no processo de junção, onde podemos identificar as seguintes junções:

  • Sys.Database_Permissions e Sys.Database_Principals;
  • Sys.Database_Principals e Sys.Database_Principals;
  • Sys.Database_Principals e Sys.SysObjects; e
  • Sys.Database_Principals e Sys.Schemas.

Da mesma forma que os outros Scripts, também podemos notar a utilizar da cláusula Where e outros operadores lógicos e condicionais como mecanismos de filtragem de dados. Se observarmos na cláusula Where está sendo filtrada as permissões pelo nome do usuário, neste caso, o Public em conjunto com o nome da permissão neste tipo Connect.

Ao executarmos este Script poderemos receber um retorno similar ao apresentado na Figura 3:

Figura 3 – Relação de Usuários e suas Permissões.

Neste momento, chegamos ao final de mais um artigo. Espero que as informações e exemplos apresentados aqui possam te ajudar.

Fique a vontade para deixar seu comentário e compartilhar este material com seus contatos.

Mais uma vez obrigado.

Até mais.

Dica – Encontrando Estatísticas de Tabelas e Índices desatualizadas através da função Stats_date() e Visão de Catálogo Sys.Stats.

Dica – Encontrando Estatísticas de Tabelas e Índices desatualizadas através da função Stats_date() e Visão de Catálogo Sys.Stats.


Olá galera, boa tarde.

Seguindo o ritmo dos últimos posts, estou de volta com mais uma dica. Hoje vou apresentar como podemos de forma fácil obter informações sobre Estatísticas de Tabelas e Índices no SQL Server, através da System Function Stats_Date() em conjunto com Visão de Catálogo Sys.Stats.

Alias, este é um dos meus assuntos prediletos relacionados à Performance no SQL Server, algo que pouquíssimos profissionais se preocupam em um momento de migração, manutenção ou até mesmo disponibilidade do ambiente.

E mais uma vez, eu me surpreendi com a quantidade de recursos que o SQL Server nos oferece, estou me referindo à função Stats_Date(), que eu particularmente não conhecia, como também, a visão de catálogo Sys.stats, ambos os recursos introduzidos a partir do SQL Server 2005.

Vou começar destacando a função Stats_Date(), criada especialmente para trabalhar com informações de Tabelas e Índices, mais especificamente no que diz respeito a valores estatísticos.

Em sua finalidade a Stats_Date(), trabalha como se fosse um coletor de dados, utilizando dois parâmetros de entrada:

  • Object_id: Id de identificação da tabela que será feita a coleta de dados estatísticos;
  • Stats_Id ou Index_ID: Id de identificação de estatísticas ou índice que será feita a coleta de dados estatísticos.

Com base nos valores repassados a função Stats_Date(), realiza o seu processo de coleta de dados, tendo como prioridade identificar o conjunto de estatísticas que apresentam a data mais recente. Nesta mesma linha de raciocínio, podemos também destacar a possibilidade deste conjunto de valores serem interpretados como valores atualizados ou desatualizados.

Outro elemento importante neste processo é a visão de catálogo Sys.Stats, recurso que possui a finalidade de apresentar uma linha de dados estatísticos para Tabelas, Visões ou Funções do Tipo Tabela.

Em resumo, o uso combinado da Stats_Date() e Sys.Stats, nos apresenta uma ótima ferramenta no processo de monitoramento, gerenciamento e ciclo de nossos ambientes de bancos de dados.

Muito bem, vamos então apresentar este código que pode nos ajudar em muito, como de costume foi dar nome aos bois, chamando este código de Relação de Estatísticas Desatualizadas. Segue abaixo o código:

— Relação de Estatísticas Desatualizadas —

SELECT name AS Estatística, STATS_DATE(object_id, stats_id) AS ‘Data’

FROM sys.stats

Where STATS_DATE(object_id, stats_id) >= Dateadd(M,-3, GetDate())

Order by Data Desc

 

Realizando uma simples análise, podemos observar que o código é bastante simples, na cláusula Where estamos realizando um filtro com base nos valores de Data, solicitando ao SQL Server retornar os registros referentes aos últimos três meses.

Além disso, como destacado anteriormente passamos dois valores de entrada para a função Stats_Date(), que realiza análise dos valores com base na visão de catálogo Sys.stats. Tanto a coluna object_id e stats_id são pertencentes à visão e seus valores interpretados pela função. Após o processamento deste código, o SQL Server apresentou o seguinte resultado, conforme apresenta a Figura 1:

Figura 1 – Relação de Estatísticas.

 

Legal, agora que já conhecemos este código, acredito que a minha dica se encerra aqui. Fica a vontade para personalizar este recurso e transformá-lo da forma que mais se aproxima da sua necessidade.

Espero que você tenha gostado e que as informações e exemplos possam ser úteis.

Um grande abraço.

Nos encontramos em breve.

Tempo restante para finalizar execução do Backup no Microsoft SQL Server 2008 e R2.


Pessoal, bom dia.

Quais as novidades?

Estou de volta com mais uma dica para vocês. Hoje vou falar um pouco sobre o tempo de execução de um processo de Backup.

Introdução

Uma das principais atividades de qualquer profissional da área de TI é manter seu ambiente em funcionamento, pois bem, para que isso possa acontecer nada como realizar o bom e velho processo de backup.

Acredito que você leitor já deve ter passado pela necessidade de realizar um backup de seu ambiente, máquina, banco de dados, arquivos, etc.

Existem diversos mitos sobre as técnicas de backup, mas na verdade o problema normalmente não esta relacionado ao processo de backup, muito pelo contrário, o problema na verdade é o processo de Restore(Restauração ou Recuperação dos Dados). Sendo o processo de restauração, atividade crucial para funcionamento e disponibilidade de todo e qualquer tipo de ambiente.

Para Microsoft esta preocupação é a mesma de todos, manter sempre o ambiente seguro, o administrador tranqüilo e o usuário feliz. Pensando nisso, a Microsoft introduziu a partir do SQL Server 2008 alguns atributos que possibilitam consultar e obter informações sobre o tempo de execução de um backup, como também, seu indicador de execução e até mesmo o tempo restante para sua conclusão.

Como obter informações sobre o Backup

O processo de backup normalmente apresenta um conjunto específico de informações que nos ajudam a identificar o quanto esta atividade demanda de processamento de hardware, como também, a sua importância.

Para que possamos obter estas informações durante o seu tempo de execução, foi introduzido a partir do Microsoft SQL Server 2008, a DMV(Dynamic Management View / Visão de Gerenciamento Dinâmico) chamada: sys.dm_exec_requests.

É com base nesta nova DMV, que temos a possibilidade de encontrar as informações todas as transações em execução em nosso Servidor ou Instância SQL Server. Esta DMV possui um conjunto específico de dados utilizados em tempo real e de forma dinâmica, o que possibilitam a sua obtenção de informação no tempo de execução da transação.

A seguir apresento algumas das colunas existentes na sys.dm_exec_requests, utilizadas para retorno de dados sobre o Backup:

  • Command: Apresenta o time do comando transacional em execução;
  • Estimated_Completion_Time: Apresenta uma estimativa de tempo para conclusão da transação;
  • Start_Time: Apresenta a data e hora de inicialização da transação; e
  • Percent_Complete: Apresenta a porcentagem de execução concluída para esta transação.

Através da combinação de uso destas quatro colunas, foi possível desenvolver o código de permite identificar e apresentar as informações sobre o tempo de execução e conclusão do Backup.

A seguir apresento o Código 1, utilizado como método de transação para obtenção de dados sobre a execução de um backup:

— Exemplo: Código 1 – Obtendo informações sobre o Backup —

SELECT command,

               ‘EstimatedEndTime’ = Dateadd(ms,estimated_completion_time,Getdate()),

               ‘EstimatedSecondsToEnd’ = estimated_completion_time / 1000,

               ‘EstimatedMinutesToEnd’ = estimated_completion_time / 1000 / 60,

               ‘BackupStartTime’ = start_time,

               ‘TimeExecution’=  DateDiff(minute,Getdate(),Start_time),

               ‘PercentComplete’ = percent_complete

FROM sys.dm_exec_requests

 WHERE session_id = @@SPID

De posse deste código, agora fica mais fácil conseguir encontrar as informações sobre o tempo de execução, estimativas de encerramento e porcentagem já concluída do nosso backup.

 Espero que todos tenham gostado nos encontramos em breve.

 Até mais.