SQL GO!!!

select 'Blog focado em SQL Server' from blog where nome ='SQLGO.wordpress.com'

Arquivos da Categoria: MSSQL2008R2

Auto Refresh Reporting Services

Hoje venho trazer para vocês uma dica rápida!

Como atualizar o seu relatório automaticamente pelo SSRS, segue o passo a passo:

Clique no relatório (.rdl), e aperte F4 ou abra a aba propriedades.

Dentro do grupo “Other” existe uma opção AutoRefresh, no meu caso abaixo eu defini para 60 segundos.

Veja a imagem abaixo:

Imagem

E pronto!

Simples, fácil e extremamente útil!

 

Até a próxima!

 

MCTS SQL Server 2008, yay!

Essa semana tem sido muito bacana. Teve a Semana de SQL Server com palestras muito boas com organização da Andressa e outros membros do Virtual PASS BR.

 Além disso, eu e a Andressa passamos na prova para MCTS SQL Server 2008, sendo a minha de administração (70-432 -Implementation and Maintenance) e a dela de desenvolvimento (70-433 – Database Development). Estamos felizes pelo resultado do nosso esforço e estudo. Mas não pararemos por aí! Ainda tem MCITP Administrator, Developer e BI. Muito estudo pela frente, então vamos continuar. Está apenas começando! =D

SSIS – Entendendo os níveis de proteção do pacote

Antes de começar a escrever, gostaria de agradecer a presença das pessoas que participaram das nossas palestras sobre extração, transformação e carga de dados com SQL Server Integration Services na Semana de SQL Server, que está sendo promovida pela Virtual PASS BR.

Na palestra, eu fiz um overview do SQL Server Integration Services – SSIS e falei um pouquinho de uma propriedade de segurança chamada Nível de Proteção. Então resolvi falar um pouquinho mais, pois pode ser um problema quando for feito  o deploy do ambiente de desenvolvimento para produção.

Nível de Proteção do pacote

Como vocês podem ver na imagem acima, existem seis níveis de proteção que podem ser atribuídos para a segurança do pacote:

  • Don’t Save Sensitive: Não salva valores confidencias. Substitui os valores confidenciais do pacote por espaços em branco. Como não há criptografia, é necessário que esses valores sejam informados por outro usuário (diferente do criador do pacote) para que pacote seja executado/alterado.
  • Encrypt Sensitive With User Key: Criptografa SOMENTE os valores confidencias baseado no perfil do usuário criador do pacote. Se outro usuário abrir o pacote, esses valores confidencias precisarão ser informados para que o pacote seja executado/alterado.
  • Encrypt All With User Key: Criptografa TODO o pacote com o perfil do usuário criador do pacote. Somente esse usuário consegue modificar ou executar o pacote. Ocorrerá um erro se outro usuário tentar executar ou abrir o pacote no BIDS.
  • Encrypt Sensitive With Password: Criptografa SOMENTE os valores confidenciais do pacote  com uma senha. Para que os outros usuários possam executá-lo ou alterá-lo, é necessário saber a senha. Sem a senha, o pacote é aberto sem os dados confidencias e nada poderá ser feito.
  • Encrypt All With Password: Criptografa TODO o pacote com senha. Sem a senha, outro usuário não pode acessar ou executar o pacote.
  • Server Storage: A proteção é feita através de funções do banco de dados do SQL Server. Somente funciona se o pacote for armazenado no banco de dados msdb. Portanto, essa proteção não funciona para File System.

Por padrão, o pacote é criado com o nível de proteção Encrypt Sensitive With User Key, que pode ser utilizada para ambiente de desenvolvimento. Para fazer deploy para o ambiente de produção, é preciso alterá-lo para que não dependa da chave do usuário que desenvolveu. Nesse caso, pode-se aplicar Encrypt Sensitive With Password ou Encrypt All With Password. Como o pacote utilizará uma senha para poder executar ou dar manutenção, é FUNDAMENTAL de passar aos demais membros da sua equipe.

[]’s

Socorro Vieira

 

 

 

Como importar um ShapeFile para um banco de dados SQL Server

O que é um ShapeFile?

É um vetor digital que contem geoinformações, geralmente representado por pontos, linhas e polignos.

Um shapefile é composto principalmente por 3 arquivos:

.SHP Arquivo principal que contém os dados de referencia geográfica.

.SHX São dados de índices que apontam para a estrutura do arquivo .shp, para agilizar a navegação no shapefile.

.DBF Contém os atributos para cada shape, em formato Xbase(DBase).

Onde conseguir?

Na loja virtual do IBGE, o Cd com os dados custa R$ 50,00, no site do GisMaps ou fazendo um busca na internet você consegue, porém nem todos shapefiles são íntegros.

Como importar para o Sql Server 2008?

Nesse exemplo eu vou utilizar a ferramenta SQL Server 2008 Spatial Tools.

 

Faça o download de algum ShapeFile, no exemplo eu utilizei o shapefile das meso regiões

image

 

Abra o programa Shape2Sql.exe, clique em configure e defina as propriedades de conexão.

 

image

 

Escolha o diretorio onde está armazenado o ShapeFile, escolha o tipo de que contém no shape (geometry ou geography), caso deseje altere a nomenclatura da tabela, ou os campos que serão carregados no banco de dados, após essa etapa clique em “Upload to Database”

 

image

 

ShapeFile carregado com Sucesso! Veja o resultado:

 

image

 

 

Até a próxima!

Dre

WebCast – Projetando um banco de dados com Microsoft SQL Server 2008

Pessoal,

Quero agradecer a presença dos mais de 110 participantes no webcast, foi uma experiência incrível para todas nós.

Conforme prometido segue o material usado no webcast, caso tenham perguntas podem mandar para o nosso sqlgo@hotmail.com que teremos o maior prazer em respondê-los.

CheckList diário utilizando o Reporting Services

Há algum tempo atrás eu li um artigo do Fabricio Lima (Criando um CheckList Automático do Banco de Dados ), adaptei os scripts dele as minhas necessidades e montei um relatório no Reporting Services, segue passo a passo o relatório que recebo diariamente por e-mail.

Para desenvolver um relatório é necessário ter instalado o Business Intelligence Development Studio, caso já tenha crie um projeto do tipo “Report Server Project”

clip_image002

Agora precisamos das fontes de dados compartilhadas, na aba Solution explorer clique com o botão direito em cima da pasta “Shared Data Sources” e selecione a opção “Add New Data Source”.

clip_image003

Defina as propriedades da conexão com o banco de dados.

clip_image005

Agora é necessário criar os DataSet de acordo com a sua necessidades, segue abaixo alguns

exemplos:

Para obtermos o tamanho das bases de dados da instância utilizamos a procedure abaixo.

— ============================================= 
— Author:  <Andressa> 
— Create date: <18/02/2011> 
— Description: <retorna dados do espaço utilizado pelas bases> 
— ============================================= 
CREATE PROCEDURE [dbo].[usp_Relatório_DBCheckList] 
  
AS 
BEGIN  
DECLARE @tabela TABLE (Nome  NVARCHAR(128),Tamanho float,NaoAlocado float) 
DECLARE AllDatabases CURSOR FOR  
  SELECT name
  FROM sys.databases
  WHERE STATE = 0 
   
OPEN AllDatabases 
 
   DECLARE @DBNome NVARCHAR(128),@SQL NVARCHAR(MAX) 
 
    FETCH NEXT FROM AllDatabases INTO @DBNome 
     WHILE (@@FETCH_STATUS = 0) 
      BEGIN 
        SET @SQL = N’USE ‘ + @DBNome +’ 
         declare @objname nvarchar(776), @id int   ,@type character(2)  ,@pages bigint    , 
         @dbname sysname    ,@dbsize bigint    ,@logsize bigint    ,@reservedpages  bigint    , 
         @usedpages  bigint    ,@rowCount bigint   
          
         SELECT @id = object_id, @type = type FROM sys.objects WHERE object_id = object_id(@objname)   
         if @id is null   
          begin   
            select @dbsize = sum(convert(bigint,case when status & 64 = 0 then size else 0 end))   
             ,@logsize = sum(convert(bigint,case when status & 64 <> 0 then size else 0 end))   
            from dbo.sysfiles   
          end 
          select   @reservedpages = sum(a.total_pages),   
             @usedpages = sum(a.used_pages),   
             @pages = sum(   
            CASE   
             When it.internal_type IN (202,204) Then 0   
             When a.type <> 1 Then a.used_pages   
             When p.index_id < 2 Then a.data_pages   
             Else 0   
            END   
            )   
         from sys.partitions p join sys.allocation_units a on p.partition_id = a.container_id   
           left join sys.internal_tables it on p.object_id = it.object_id   
           select database_name = db_name(),   
           database_size = ltrim(str((convert (dec (15,2),@dbsize) + convert (dec (15,2),@logsize))    
           * 8192 / 1048576,15,2)),   
           ”unallocated space” = ltrim(str((case when @dbsize >= @reservedpages then   
           (convert (dec (15,2),@dbsize) – convert (dec (15,2),@reservedpages))    
           * 8192 / 1048576 else 0 end),15,2) ) ‘  
        INSERT INTO @tabela 
        EXEC sp_executesql @SQL 
 
         FETCH NEXT FROM AllDatabases INTO @DBNome 
      END 
    SELECT Nome, Tamanho, NaoAlocado from @tabela 
  CLOSE AllDatabases 
  DEALLOCATE AllDatabases 
END

Agora referencie a procedure no dataset.

clip_image007

Tamanho das unidades de Disco do servidor (DataSet_Disco)

 
XP_FIXEDDRIVES
 

 

Tamanho dos arquivos de log de toda a instância (DataSet_LogSpace)

DBCC SQLPERF(LOGSPACE)
 

 

 

Listagem de Jobs que estão em execução (DataSet_JobsExecucao)

SELECT Name AS Nome

,run_Requested_Date AS DataExecucao

,DATEDIFF(mi,run_Requested_Date

,GETDATE()) AS Duracao_Minutos

FROM msdb..sysjobactivity A INNER JOIN

msdb..sysjobs B ON A.job_id = B.job_id

WHERE start_Execution_Date IS NOT NULL AND stop_execution_date IS NULL

Listagem dos Jobs que não foram executados com sucesso (DataSet_JobFailed)

DECLARE @Ontem INT

DECLARE @OntemHorario INT

SET @OntemHorario= CAST((RIGHT(‘0’+CONVERT(VARCHAR(2), (DATEPART(HOUR,DATEADD(HOUR,-1, GETDATE())))), 2) +RIGHT(‘0’+CONVERT(VARCHAR(2), (DATEPART(MINUTE,GETDATE()))), 2)+RIGHT(‘0’+CONVERT(VARCHAR(2), (DATEPART(SECOND,GETDATE()))), 2)) AS INT)

SET @Ontem = CAST(CONVERT (VARCHAR(8),(DATEADD (DAY, -1, GETDATE())),112) AS INT)

CREATE TABLE #HistoricoJobs( Cod INT identity(1,1)

,IDInstancia INT

,IDJob VARCHAR(255)

,NomeJob VARCHAR(255)

,IDStep INT

,NomeStep VARCHAR(255)

,IDSqlMensagem INT

,SqlSeverity INT

,SqlMensangem VARCHAR(3990)

,IDStatusExecucao INT

,DataExecucao VARCHAR(20)

,HorarioExecucao VARCHAR(20)

,DuracaoExecucao INT

,EmailOperador VARCHAR(100)

,NetSenderOperador VARCHAR(100)

,PagerOperador VARCHAR(100)

,TentativasRealizadAS INT

,NomeServidor VARCHAR(100))

INSERT INTO #HistoricoJobs

EXEC Msdb.dbo.SP_HELP_JOBHISTORY NULL,NULL,NULL,NULL,NULL,@Ontem,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,’FULL’

SELECT NomeJob

,CASE

WHEN IDStatusExecucao = 0 THEN ‘Failed’

WHEN IDStatusExecucao = 1 THEN ‘Succeeded’

WHEN IDStatusExecucao = 2 THEN ‘Retry (step only)’

WHEN IDStatusExecucao = 3 THEN ‘Canceled’

WHEN IDStatusExecucao = 4 THEN ‘In-progress message’

WHEN IDStatusExecucao = 5 THEN ‘Unknown’ END Status

,CAST(DataExecucao + ‘ ‘ + RIGHT(’00’ + SUBSTRING(HorarioExecucao,(LEN(HorarioExecucao)-5),2) ,2)+ ‘:’ +

RIGHT(’00’ + SUBSTRING(HorarioExecucao,(LEN(HorarioExecucao)-3),2) ,2)+ ‘:’ +

RIGHT(’00’ + SUBSTRING(HorarioExecucao,(LEN(HorarioExecucao)-1),2) ,2) AS VARCHAR) Dt_Execucao

,RIGHT(’00’ + SUBSTRING(cast(DuracaoExecucao AS VARCHAR),(LEN(DuracaoExecucao)-5),2) ,2)+ ‘:’ +

RIGHT(’00’ + SUBSTRING(cast(DuracaoExecucao AS VARCHAR),(LEN(DuracaoExecucao)-3),2) ,2)+ ‘:’ +

RIGHT(’00’ + SUBSTRING(cast(DuracaoExecucao AS VARCHAR),(LEN(DuracaoExecucao)-1),2) ,2) DuracaoExecucao

,SqlMensangem

FROM #HistoricoJobs

WHERE ((DataExecucao >=@Ontem AND HorarioExecucao >= @OntemHorario) OR DataExecucao >@Ontem)

AND IDStep = 0

AND IDStatusExecucao <> 1

ORDER BY Dt_Execucao

DROP TABLE #HistoricoJobs

Listagem dos últimos backups (DataSet_Backup)

SELECT database_name as NomeDataBase

, name as Nome

,Backup_start_date as DataInicio

, datediff(mi,Backup_start_date,Backup_finish_date) Duracao_Min

, server_name as NomeServidor

,recovery_model as RecoveryModel

, cast(backup_size/1024/1024 as numeric(15,2)) As Tamanho

,type as Tipo

FROM msdb.dbo.backupset B

INNER JOIN msdb.dbo.backupmediafamily BF ON

B.media_set_id = BF.media_set_id

WHERE Backup_start_date >= DATEADD(HH, 18 ,@Dt_Referencia – 1 ) –backups realizados a partir das 18h de ontem

and Backup_start_date < DATEADD (DAY, 1, @Dt_Referencia)

order by database_name, Backup_start_date

/

Após criar os DataSets você terá uma lista semelhante a imagem abaixo:

clip_image018

Para criar um relatório clique com o botão direito em cima da pasta report e “New Item”, selecione “report”, nomeie o arquivo e clique em “Add”. Feito isso você precisa  criar os DataSources/DataSets utilizando o DataSource/DataSet reference correspondente.

image

Com a parte de acesso a dados já finalizada, precisamos criar a parte gráfica do relatório, montei umas tabelas simples e sem formatação apenas para o melhor entendimento.

Para adicionar um campo à uma tabela é simples, somente arrastar o campo do dataset para a tabela desejada.

clip_image020

Abaixo eu apliquei uma formatação simples apenas para diferenciar os dados do nosso relatório (job, bkp, log…)

Utilizei um recurso opcional de alterar a cor da célula de acordo com o valor da linha, assim quando um banco de dados estiver com pouco espaço alocado eu posso visualizar de maneira mais rápida facilitando a tomada de decisão, segue o comando que eu montei.

image

=IIF(
((Fields!Tamanho.Value-Fields!NaoAlocado.Value)/Fields!Tamanho.Value)>0.9,
    "#f28989",
    IIF((((Fields!Tamanho.Value-Fields!NaoAlocado.Value)/Fields!Tamanho.Value)>0.8
            and ((Fields!Tamanho.Value-Fields!NaoAlocado.Value)/Fields!Tamanho.Value) < 0.9),
    "#ffff80",
    "#c0ffc0"))

Você pode adaptar a expressão acima para toda as tabelas.

Interpretação  do código:

Quando o espaço alocado do meu banco de dados for…

  • maior que 90% a linha fica vermelha.
  • maior que 80% e menor que 90% a linha fica amarela.
  • menor que 80% a linha fica verde.

Vejam como ficou o relatório depois de renderizado.

image



 
O projeto de relatórios está disponível pra download.
 
Espero que tenham gostado da dica.
 
Andressa

Tipo de dados numéricos, qual usar?

O SQL Server nos oferece muitas opções de dados dos tipos numéricos mas que raramente são utilizados. Quando projetamos um banco de dados devemos nos atentar ao tamanho dos campos pois isso certamente irá causar um crescimento desnecessário na base de dados.

 

 INT, SMALLINT, TINYINT, BIGINT

 

Tipo de dados

Range

Tamanho

BIGINT

-9.223.372.036.854.775.808 a 9.223.372.036.854.775.808

8 bytes

INT

-2.147.483.648 a 2.147.483.647

4 bytes

SMALLINT

-32,768 a 32,367

2 bytes

TINYINT

0 a 255

1 byte

 

MONEY,SMALLMONEY

Tipo de dados

Range

Tamanho

MONEY

-922.337.203.685.477,5808 a 922.337.203.685.477,5807

8 bytes

SMALLMONEY

– 214.748,3648 to 214.748,3649

4 bytes

FLOAT, REAL

Tipo de dados

Range

Tamanho

FLOAT (N)

– 1,79E+308 a -2,23E-308, 0 e 2,23E-308 a 1,79E+308

Depende do valor de n

SMALLMONEY

– 3,40E + 38 a -1,18E – 38, 0 e 1,18E – 38 a 3,40E + 38

4 bytes

Valor n

Precisão

Tamanho

1-24

7 dígitos

4 bytes

25-53

15 dígitos

8 bytes

NUMERIC, DECIMAL

Tipo de dados

Range

Tamanho

NUMERIC

– 10^38 +1 a 10^38 – 1

8 bytes

DECIMAL

– 10^38 +1 a 10^38 – 1

4 bytes

Precisão

Tamanho

1-9 dígitos

5 bytes

10-19 dígitos

9 bytes

20-28 dígitos

13 bytes

29-38 dígitos

17 bytes

Saiba mais em:

Numeric Types