Category Archives: T-SQL

SQL Saturday 689 – Prague – Scripts and Slides

Hi Everyone,

First of all, I want to thank everyone at my session at SQL Saturday 689 in Prague this last weekend. It was a tremendous pleasure for me to present and share a bit of what I know with all of you.

I also want to say THANK YOU to the Czech BI & SQL Pass User Group for putting this amazing event to the community, I know how much work and effort has to be done to have such a great event. You treated not only myself but all the speakers so well, so thanks again for having me! You guys are great!

I also want to say THANK YOU to the Sponsors, with all your support the event was just awesome!

As I promised during my presentation, I would write this post to share the link to where you can download most of the resources used by myself during the presentation.

https://github.com/marcosfreccia/sql-saturday-689-prague

I would like to also ask you a bit of your time to fill up the session evaluation. This means a lot to all the speakers. Doing that, it helps all of us speakers to improve our presentation, subjects, demos and etc.. Please, please, please!! Do it! The link is below.

https://goo.gl/6ZTfH6

Thanks again and see you in 2018!

Regards,
Marcos Freccia
Data Platform MVP

Advertisements

How much transaction log, transactions generate?

Hi Everyone,

I wanted to share something that I am doing this week at work. One of the applications that I support is generating a lot of transaction log in the database. Just to have an idea, we run Transaction Log backups every 30 minutes and I have backups over 100GB and sometimes 200GB. The difficult part of investigating what is generating that amount of log is because the databases involved are used by at least 3 different applications and streams. So, I remember that in the past I created a simple script that looks at this information in the database and then I may have more inputs of what is really generating that amount of log. Read the rest of this entry

Deletando informações em batches –

Olá pessoal,

Quando trabalhamos bases de dados muito grandes e criticas é normal que alguma forma de purge (expurgo) seja feita no banco de dados, é melhor para a aplicação e também para o DBA. Porem uma grande preocupação quando vamos falar sobre deletar uma grande quantidade de dados é não prejudicar nosso arquivo Transaction Log para que o mesmo não estoure o espaço em disco, como também não bloqueie nossa aplicação que esta tentando inserir ou atualizar dados na base. Alem de tudo isso nos preocupamos com performance, pois uma grande operação de delete poderia impactar todo o nosso ambiente.

Pensando nisso criei um script bem simples, mas que pode te ajudar no momento de realizar esse expurgo da base de dados. Read the rest of this entry

Como visualizar o conteúdo de procedures criptografadas

Olá pessoal,

Aposto que o título deste post é de curiosidade de muitos, certo? Essa pergunta acontece muito nos fóruns de SQL Server por ai a fora. Todos querem dar aquele jeitinho de poder visualizar o conteúdo de uma procedure criptografada. Mas será que isso é possível?

Para não deixar esse post longo de mais, vamos criar uma simples procedure como demonstrado abaixo.

image

Feito a criação vamos tentar verificar o texto desta procedure com o comando abaixo.

image

A partir dessa imagem, realmente podemos ver que a procedure está criptografada.

Bom, para poder visualizar o conteúdo desta procedure você ira precisar de uma ferramenta de terceiro, chamada SQL Prompt da Red-Gate. Dentre as inumeras features que essa ferramenta possui como por exemplo a formatação de codigo T-SQL, ela nos permite visualizar o conteúdo de qualquer stored procedure.

Como a ferramenta possui essa caracteristica de visualizar o conteúdo de procedures, functions e triggers, acaba sendo possivel visualizar até mesmo aquelas que estão critografadas.

Bom, com o SQL Prompt instalado na sua maquina, você irá realizar o seguinte.

Passando o mouse no nome da Stored Procedure, você irá visualizar a seguinte imagem.

image

Como você pode ver um hyperlink foi gerado. Basta clicar no mesmo e o conteúdo da procedure poderá ser visto.

image

Espero que tenham gostado!

Abraços,
Marcos Freccia
SQL Server MVP

Procurando por não sysadmin job owners

Olá pessoal,

Na semana passada tive uma demanda para retornar uma lista de Jobs onde os owners não estavam na role sysadmin, podendo trazer assim algum risco para a execução do mesmo. Para não passar de job a job procurando pela informação, criei um script bastante simples para resolver esse problema. Espero que gostem!

select Name,SUSER_SNAME(owner_sid) as JobOwner
from msdb.dbo.sysjobs
where enabled = 1
and IS_SRVROLEMEMBER(‘sysadmin’,SUSER_SNAME(owner_sid)) <> 1

O resultado retornado é este logo abaixo. Assim, vocês podem analisar de uma maneira facil e rápida, se devemos trocar o Job Owner do job em questão ou não.

image

 

Espero que tenham gostado.

Marcos Freccia
SQL Server MVP

O ultimo backup full executado com sucesso

Olá pessoal,

Após algum tempo sem passar por aqui, venho compartilhar um pequeno script que criei para pegar o último backup full que aconteceu para cada base de dados na instancia. O script é bastante simples e com certeza, você poderá encontrar outros pela internet, mas como sempre gosto de compartilhar algo que crio, aqui estou.

O script executa a leitura na tabela backupset do banco de dados msdb procurando pelo último backup full completo. Read the rest of this entry

[Script] Obtendo tamanho das bases de dados detalhadamente

Olá pessoal,

Mais uma vez aqui compartilhando scripts com vocês. Dessa vez o script que vou passar é para vocês pegarem o tamanho de suas bases de dados, porem com algumas outras informações como: Tamanho total, espaço utilizado, espaço disponivel e disco de localização dos arquivos (mdf e ldf). Vale lembrar que esse script apenas pega o tamanho do arquivo .mdf e .ndf, caso você desejar pegar a informação também para o arquivo .ldf, você precisa retirar a clausula “WHERE   df.type = 0”. Abaixo segue o script, espero que todos gostem. Read the rest of this entry

Clean-up the Database

Olá Pessoal,

Alguém aqui já precisou realizar a limpeza de um banco de dados, não precisava exclui-lo e cria-lo novamente? Recentemente precisei realizar esse procedimento em alguns servidores e para não perder tempo criei um script que faz a limpeza dos objetos do banco de dados. Nesse primeiro esboço do script ele já realiza o drop das constraints primeiro para não dar erro e também tudo precisa estar no schema dbo. Futuramente pretendo melhorar o script para realizar o drop independente do schema a qual o objeto pertence. Espero que gostem. Read the rest of this entry

T-SQL no SQL Server 2012 – Parte 1

Olá pessoal,

O intuito dessa serie de posts que vou  iniciar agora é mostrar tudo de novo que temos na parte de T-SQL no SQL Server 2012. Antes de iniciarmos é bom deixar frisado que o intuito aqui não é mostrar nada mirabolante, mas sim o SIMPLES! Então esqueçam de ver algo avançado, o que vocês irão ver aqui é o básico.

Para não criar posts extensos que nos cansam de ler, vou faze-lo por partes. Hoje vamos falar de:

  • Execute WITH RESULT SETS
  • Sequence

1) Execute WITH RESULT SETS.

Esse novo recurso surgiu no SQL Server 2012 como uma necessidade de formatação de nossos conjuntos de dados, provenientes de uma stored procedure. Então sua explicação e demonstração é bastante simples. Pegamos um result set que está vindo como saída de uma procedure e mostramos para o usuário da maneira que necessitamos através desse result set personalizado.

Vamos ver como funciona?

Tenho aqui uma simples procedure.

use AdventureWorksDW2012
go

create procedure spGetSalesAmout
as
select FirstName,SalesAmount from FactInternetSales as fact
join DimCustomer as cust
on fact.CustomerKey = cust.CustomerKey

Temos aqui duas possibilidades de deixar nosso result set mais amigavel.

1) Mudar diretamente no codigo T-SQL

2) Utilizar o recurso WITH RESULT SETS.

Vamos ver como funciona?

execute spGetSalesAmout
WITH RESULT SETS
(
([Primeiro Nome] varchar(20),
[Total de Vendas] money)
);

Como vemos aqui, podemos até trocar o tipo de dados que será retornado. Vamos agora ver o resultado.

image

Em questões de usabilidade esse recurso seria interessante onde não podemos mudar o código da consulta T-SQL, por muitas vezes estar capturando dados de outros sistemas.

Como podemos ver um recurso muito simples e que pode nos ajudar bastante.

2) Sequence

Recurso esse muito conhecido no Oracle é a sequence, um objeto responsável por gerar números sequencias. Ai você me pergunta: Mas já temos o identity. Correto, porem o objeto Sequence vem para abrir mais possibilidades de utilização  e como a mesma é um objeto permite outros tipos de gerenciamento que não temos no campo identity.

Como utilizar?

Passo 1: Criação da Sequence.

A criação da sequence é muito simples e com apenas alguns comandos já conseguimos criar.

create sequence DemoSequence
START WITH 1
INCREMENT BY 1;

Até ai também podemos utilizar o identity no campo, já que conseguimos ter o inicio e realizar incrementos personalizados.

Como utilizamos a sequence?

create table Demo1 (id int primary key, nome varchar(100))
go
insert into Demo1
values
(NEXT VALUE FOR dbo.DemoSequence,’Marcos Freccia’)

O comando NEXT VALUE FOR dbo.DemoSequence é o que faz o numero ser gerado e automaticamente incrementado.

image

Se realizarmos mais uma inserção teremos.

image

Como eu disse anteriormente, a Sequence é um objeto então a possibilidade de gerenciamento e de usabilidade é maior por exemplo.

insert into Demo1
values
(NEXT VALUE FOR dbo.DemoSequence +2 ,’Marcos Freccia’)

Resultado.

image

Podemos criar também sequences que possuem um limite máximo de números a serem gerados.

create sequence DemoSequence2
START WITH 1
INCREMENT BY 1
MAXVALUE 5;

Vamos realizar apenas uma demonstração.

create table Demo2 (id int, nome varchar(100))
go
insert into Demo2
values
(NEXT VALUE FOR dbo.DemoSequence2 ,’Marcos Freccia’)
GO 5

select * from Demo2

image

Vamos realizar apenas mais uma inserção.

image

Como puderam ver, a nossa sequence não deixou que realizássemos mais inserções de dados no campo.

Bom pessoal por hoje era isso, espero que tenham gostado e no decorrer do tempo estarei mostrando mais funcionalidades em T-SQL no SQL Server 2012