Dica do Mês – Conhecendo a Álgebra Relacional e seus operadores


Olá, boa noite, tudo bem comunidade?

Como é bom poder curtir alguns dias de descanso que mais um feriadão, aproveitar para recarregar as baterias, renovar as ideias e se preparar para mais um mês que esta chegando, e se estamos chegando ao final de mais um mês é hora de compartilhar e postar mais um post dedicado a dica do mês. Falando nisso, a dica do mês de hoje será um pouco diferente das últimas postados aqui no meu blog.

Atendendo aos pedidos de alguns internautas que me enviaram e-mails nos últimos dias, como também, para alegrar os meus alunos, vou postar um pouco de conteúdo acadêmico, algo mais conceitual relacionado a teoria de banco de dados. Neste post vou falar um pouco sobre um dos assuntos mais importantes relacionadas a teoria geral de banco de dados, estou me referindo a Álgebra Relacional, ou como eu gosto de dizer a matemática do relacionamento de banco de dados.

Então lá nessa, espero que você goste e também aprenda um pouco sobre este conceito extremamente importante para qualquer profissional da área de banco de dados.


Introdução

A álgebra relacional é uma linguagem de consulta procedural. Ela consiste em um conjunto de operações que tornam uma ou duas tabelas como entradas e produzem uma nova tabela como resultado. Essas operações baseiam-se na teoria dos conjuntos (as tabelas correspondem a conjuntos). Linguagem procedural: linguagem que requer sempre a existência de definição quanto à ordem em que as operações serão realizadas.

 

Operadores

São definidas nove operações ou operadores para se trabalhar com álgebra relacional, eles podem ser classificados da seguinte maneira:

Fundamentais: Através dela qualquer expressão de consulta de dados é permitida:

¤ 1. Projeção

¤ 2. Seleção

¤ 3. Produto Cartesiano

¤ 4.União

¤ 5. Diferença, Subtração

Derivados: Derivam dos operadores fundamentais, são definidos para facilitar a especificação de certos procedimentos:

¤ 6. Intersecção

¤ 7. Junção (normal e natural)

¤ 8. Divisão

Especiais: Operadores que não se enquadram nos itens anteriores:

¤ 9.Renomeação e alteração

 

Quanto ao número de relações (tabelas) operandas:

¤ Unários – operam em uma única tabela .

São eles: seleção, projeção, renomeação e alteração;

¤ Binários – operam em duas tabelas.

São eles: união, intersecção, diferença, produto cartesiano, junção e divisão.

 

Quanto à origem da área da matemática:

¤ Teoria dos Conjuntos – operadores usuais da teoria de conjuntos da matemática. São eles: união, intersecção, diferença e produto cartesiano;

¤ Especiais – operadores adicionais, definidos pela álgebra relacional para manipulação de dados. São eles: seleção, projeção, junção, divisão, renomeação e alteração.

Além desses operadores, é definido também o operador de atribuição que permite atribuir o resultado de uma expressão de álgebra a uma tabela.

 

Símbolos que representam os operadores

Cada um dos noves operadores apresenta um símbolo que identifica sua função e operação dentro da expressão relacional, ou melhor dizendo dentro da fórmula que identifica e apresenta a operação relacional que esta sendo realizada, a Tabela 1 apresentada abaixo ilustra os símbolos representativos de cada operador:

Operadores

Tabela 1 – Relação de símbolos representativos de cada operador.

Vamos agora conhecer um pouco sobre cada operador, sua forma de utilização, após a apresentação de todos os operadores, disponibilizarei um código de exemplo para que você posso praticar e conhecer de maneira operacional como cada operador pode ser utilizado, vamos conhecer pelo primeiro operador conhecido como Projeção.

 

Projeção

Pode ser entendida como uma operação que filtra as colunas de uma tabela de nosso banco de dados ou uma tabela resultante de uma outra operação relacional executada. Por operar em apenas um conjunto de entrada, a projeção é classificada como uma operação unária.

Sintaxe:       coluna1, coluna2,…, colunaN (Tabela)

 

Seleção / Restrição

Pode ser entendida como a operação que filtra, seleciona as linhas de uma tabela, realizando também uma projeção, e opera em um conjunto de dados, sendo portando uma operação unária.

Sintaxe:         <condição de seleção ou predicado> (Tabela)

 

Produto Cartesiano

Utiliza a mesma notação de operação matemática de dois conjuntos, tendo como resultado do produto cartesiano de duas tabelas uma terceira tabela contendo as cominações possíveis entre os elementos das tabelas originais.

Essa tabela resultante possui um número de colunas que é igual à soma do número de colunas das tabelas iniciais e um número de linhas igual ao produto do número de linhas das duas tabelas.

Sintaxe: (Tabela 1) X (Tabela 2)

 

União

É uma operação binária, ou seja cria uma tabela a partir de duas outras tabelas união compatíveis levando as linhas comuns e não comuns a ambas. As informações duplicadas aparecerão somente uma vez no resultado. Tabelas União Compatíveis: tabelas cuja quantidade, disposição e domínio dos atributos/ campos sejam os mesmos.

Sintaxe: (Tabela 1)     (Tabela 2)

 

Intersecção

É uma operação binária, ou seja cria uma tabela a partir de duas outras tabelas levando sem repetição as linhas, que pertençam a ambas as tabelas presentes na operação.

Sintaxe: (Tabela 1)     (Tabela 2)

 

Diferença

Essa operação permite encontrarmos linhas que estão em uma tabela mas não estão em outra. A expressão Tabela 1 Tabela 2 resulta em uma tabela que contém todas as linhas que estão na tabela 1 e não estão na Tabela 2. Observamos que Tabela 1 – Tabela 2 (Exemplo1) é diferente de Tabela 2 – Tabela 1 (Exemplo2).

Sintaxe: (Tabela 1) – (Tabela 2)

 

Junção

Essa operação interage com o modelo relacional, ou seja trabalha com o modelo de relações entre tabelas realizando um produto cartesiano, combinando as linhas e somando as colunas de duas tabelas, só que partindo de campos comuns de ambas para realizar essa “seleção relacional. Essa operação possui uma condição onde se colocam os campos das tabelas que estão sendo usados para se efetivar a junção. Chamamos essa junção de junção com predicado.

(Sintaxe 1): (Junção com Predicado): (Tabela 1) |x| <condição de junção> (Tabela 2)

Outro tipo de junção é a junção natural:

Sintaxe : (Junção Natural): (Tabela 1) |x| (Tabela 2)

Nela não há especificação de condição sendo usado para isso todas as colunas comuns às duas tabelas. As colunas resultantes são a soma das colunas das duas tabelas sem a repetição das colunas idênticas (aparecerão uma vez somente). Não deve ser empregada quando se deseja associar duas tabelas apenas por um ou alguns dos seus atributos idênticos, caso isso seja feito os resultados são imprevisíveis.

 

Divisão

Essa operação produz como resultado a projeção de todos os elementos da primeira tabela que se relacionam com todos os elementos da segunda tabela. Essa operação também pode ser obtida através de outras operações de álgebra relacional.

Sintaxe: (Tabela 1) ÷ (Tabela 2)

 

Renomeação / Atribuição

Renomeação ( p ): É a operação que renomeia uma tabela.

Sintaxe: p Nome(Tabela)

Atribuição ( ß ): É utilizada para simplificar comandos muito extensos definindo então passos de comando.

Sintaxe: Variável ß Tabela


 

Colocando a mão na massa

Agora que já conhecemos um pouco sobre cada operador, suas sintaxes e formas de utilização, vamos colocar a mão na massão e utilizar nosso código de exemplo apresentado a seguir:

— Criando o Banco de Dados – AlgebraRelacional —

Create Database AlgebraRelacional

Go

 

— Acessando o Banco de Dados – AlgebraRelacional —

Use AlgebraRelacional

Go

 

— Criando a Tabela Cargos —

Create Table Cargos

(CodigoCargo Char(2) Primary Key Not Null,

DescricaoCargo Varchar(50) Not Null,

VlrSalario Numeric(6,2) Not Null)

Go

 

— Criando a Tabela Departamentos —

Create Table Departamentos

(CodigoDepartamento Char(2) Primary Key Not Null,

DescricaoDepartamento Varchar(30) Not Null,

RamalTel SmallInt Not Null)

Go

 

— Criando a Tabela Funcionarios —

Create Table Funcionarios

(NumeroRegistro Int Primary Key Not Null,

NomeFuncionario Varchar(80) Not Null,

DtAdmissao Date Default GetDate(),

Sexo Char(1) Not Null Default ‘M’,

CodigoCargo Char(2) Not Null,

CodigoDepartamento Char(2) Not Null)

Go

 

— Criando os relacionamentos —

Alter Table Funcionarios

Add Constraint [FK_Funcionarios_Cargos] Foreign Key (CodigoCargo)

References Cargos(CodigoCargo)

Go

 

Alter Table Funcionarios

Add Constraint [FK_Funcionarios_Departamentos] Foreign Key (CodigoDepartamento)

References Departamentos(CodigoDepartamento)

Go

 

— Inserindo os Dados —

Insert Into Cargos (CodigoCargo, DescricaoCargo, VlrSalario)

Values (‘C1’, ‘Aux.Vendas’, 1350.00),

(‘C2’, ‘Vigia’, 600.00),

(‘C3’, ‘Vendedor’, 1200.00),

(‘C4’, ‘Aux.Cobrança’, 1550.00),

(‘C5’, ‘Gerente’, 1200.00),

(‘C6’, ‘Diretor’, 2500.00),

(‘C7’, ‘Presidente’,5500.00)

Go

 

Insert Into Departamentos (CodigoDepartamento,DescricaoDepartamento,RamalTel)

Values (‘D1’, ‘Assist.Técnica’, 246),

(‘D2’, ‘Estoque’, 589),

(‘D3’, ‘Administração’, 772),

(‘D4’, ‘Segurança’, 810),

(‘D5’, ‘Vendas’, 512),

(‘D6’, ‘Cobrança’, 683)

Go

 

Insert Into Funcionarios (NumeroRegistro, NomeFuncionario, DtAdmissao, Sexo, CodigoCargo, CodigoDepartamento)

Values (1, ‘Cezar Sampaio’, ‘2013-08-10’, ‘M’, ‘C3’, ‘D5’),

(4, ‘Luis Alves Pereira’, ‘2014-03-02’, ‘M’, ‘C4’, ‘D6’),

(34, ‘Pedro Luiz Alves’, ‘2012-05-03’, ‘M’, ‘C5’, ‘D1’),

(21, ‘Silva Souza’, ‘2011-12-10’, ‘M’, ‘C3’, ‘D5’),

(95, ‘Eduardo Oliveira Silveira’, ‘2012-01-05’, ‘F’, ‘C1’, ‘D5’),

(39, ‘Ana Marta Silva’, ‘2013-01-12’, ‘F’, ‘C4’, ‘D6’),

(23, ‘Sergio Mota’, ‘2013-06-29’, ‘M’, ‘C7’, ‘D3’),

(48, ‘Larissa Roberto Aleluia’, ‘2012-06-01’, ‘F’, ‘C4’, ‘D6’),

(5, ‘Ricardo Martins’, ‘2013-10-15’, ‘M’, ‘C3’, ‘D5’),

(2, ‘Simone Gasparini Tune’, ‘2010-02-10’, ‘M’, ‘C2’, ‘D4’)

Go

 

— Exemplo – Operador – Projeção — Qual o nome e data de admissão dos funcionários? —

Select NomeFuncionario, DtAdmissao From Funcionarios

Go

 

— Exemplo – Operador – Seleção/Restrição — Quais os funcionários de sexo masculino? —

Select NumeroRegistro, NomeFuncionario, DtAdmissao,

Sexo, CodigoCargo, CodigoDepartamento

From Funcionarios

Where Sexo = ‘M’

Go

 

— Exemplo – Operadores – Projeção e Seleção — Quais os nomes e data de admissão dos funcionários de sexo masculino? —

Select NomeFuncionario, DtAdmissao From Funcionarios

Where Sexo = ‘M’

Go

 

— Exemplo – Operador – Produto Cartesiano – Trazer as informações dos funcionários e de seus cargos: Linhas de Funcionarios X Linhas de Cargos —

Select F.NumeroRegistro,

F.NomeFuncionario,

F.DtAdmissao,

F.Sexo,

F.CodigoCargo,

F.CodigoDepartamento

From Funcionarios F Cross Join Cargos C

Order By F.NumeroRegistro Desc

Go

 

— Exemplo – Operador – União — Combinação de Tabelas e Linhas entre selects distintos —

Select CodigoCargo, DescricaoCargo, VlrSalario

From Cargos

Where CodigoCargo In (‘C1’,‘C3’,‘C5’,‘C7’)

Union

Select CodigoCargo, DescricaoCargo, VlrSalario

From Cargos

Where CodigoCargo In (‘C2’,‘C4’,‘C6’)

Go

 

Select CodigoCargo, DescricaoCargo, VlrSalario

From Cargos

Where CodigoCargo In (‘C1’,‘C3’,‘C5’,‘C7’)

Union All

Select CodigoCargo, DescricaoCargo, VlrSalario

From Cargos

Where CodigoCargo In (‘C2’,‘C4’,‘C6’)

Union All

Select CodigoCargo, DescricaoCargo, VlrSalario

From Cargos

Where CodigoCargo In (‘C2’,‘C4’,‘C6’)

Go

 

— Exemplo – Operador – Intersecção — Combinação de Tabelas e Linhas entre selects distintos sem repetição de dados no resultado —

Select CodigoCargo, DescricaoCargo, VlrSalario

From Cargos

Where CodigoCargo In (‘C2’,‘C4’,‘C6’)

Intersect

Select CodigoCargo, DescricaoCargo, VlrSalario

From Cargos

Where CodigoCargo In (‘C2’,‘C3’,‘C6’,‘C7’)

Go

 

— Exemplo – Operador – Diferença – Linhas existentes em uma Tabela que não existem em outra —

Insert Into Cargos (CodigoCargo, DescricaoCargo, VlrSalario)

Values (‘C8’, ‘Aux.Vendas II’, 550.00)

Go

Select F.NumeroRegistro,

F.NomeFuncionario,

F.DtAdmissao,

F.Sexo,

F.CodigoCargo,

F.CodigoDepartamento

From Funcionarios F

Where Exists (Select CodigoCargo From Cargos)

Go

 

— Exemplo – Operador – Junção – Combinação de Linhas e Colunas entre tabelas que possuem algum tipo de vínculo relacional —

Select F.NumeroRegistro,

F.NomeFuncionario,

F.DtAdmissao,

F.Sexo,

F.CodigoCargo,

F.CodigoDepartamento

From Funcionarios F Inner Join Cargos C

On F.CodigoCargo = C.CodigoCargo

Order By F.NomeFuncionario, F.CodigoCargo Asc

Go

 

— Exemplo – Operador – Divisão – Relação Completa de todos os dados da Tabela da Esquerda com todos os dados da Tabela da Direita —

Create Table Projetos

(CodigoProjeto Char(8) Primary Key Not Null,

DescricaoProjeto Varchar(50) Not Null)

Go

 

Create Table Equipe

(Codigo Int Primary Key Identity(1,1) Not Null,

NumeroRegistroFuncionario Int Not Null,

CodigoProjeto Char(8) Not Null)

Go

 

— Criando os relacionamentos —

Alter Table Equipe

Add Constraint [FK_Equipe_Funcionarios] Foreign Key (NumeroRegistroFuncionario)

References Funcionarios(NumeroRegistro)

Go

 

Alter Table Equipe

Add Constraint [FK_Equipe_Projetos] Foreign Key (CodigoProjeto)

References Projetos(CodigoProjeto)

Go

 

— Inserindos os Dados —

Insert Into Projetos (CodigoProjeto, DescricaoProjeto)

Values (‘Projeto1’, ‘Suporte’),

(‘Projeto2’, ‘Manutenção’),

(‘Projeto3’, ‘Desenvolvimento’)

Go

 

Insert Into Equipe (NumeroRegistroFuncionario, CodigoProjeto)

Values (‘101’, ‘Projeto1’),

(‘104’, ‘Projeto1’),

(‘134’, ‘Projeto1’),

(‘101’, ‘Projeto2’),

(‘104’, ‘Projeto2’),

(‘101’, ‘Projeto3’)

Go

 

Select E.NumeroRegistroFuncionario,

E.CodigoProjeto,

P.DescricaoProjeto

From Equipe E Inner Join Projetos P

On E.CodigoProjeto = P.CodigoProjeto

Where E.CodigoProjeto = ‘Projeto1’

Go

 

— Exemplo – Operador – Renomeação —

sp_rename ‘Cargos’,‘NovosCargos’

Go

Select * from NovosCargos

 

— Exemplo – Operador – Atribuição —

Select F.NumeroRegistro As ‘Número de Registro’,

F.NomeFuncionario,

F.DtAdmissao As ‘Data de Admissão’,

F.Sexo,

F.CodigoCargo,

F.CodigoDepartamento,

Data=(Select GetDate()) — Atribuindo um valor para uma coluna

From Funcionarios F Inner Join NovosCargos C

On F.CodigoCargo = C.CodigoCargo

Order By F.NomeFuncionario, F.CodigoCargo Asc

Go

 

Legal, legal, você pode reparar que este código de exemplo é bastante simples e abrangente, demonstrando como podemos trabalhar com cada operador e de que forma o SQL Server se enquadra perfeitamente neste conceitos, algo muito comum para qualquer banco de dados ou sistema gerenciador de banco de dados, mas que pode variar a sua forma de análise e utilização.


Sendo assim chegamos ao final de mais uma dica do mês.

Espero que você tenha gostado, que as informações e exemplos publicados aqui possam de alguma maneira ajudar e colaborar com suas atividades diárias sejam elas: profissionais ou acadêmicas.

O conhecimento técnico é muito importante para qualquer profissional, mas o conceito é algo que sempre devemos valorizar e conhecer, a diferença entre um bom profissional e um profissional reconhecido e respeitado no mercado de trabalho é saber aliar o conhecimento teórico com o conhecimento prática, como muitos costumam dizer aliar a téoria a prática, sendo este o objetivo deste post.

Desejo um forte abraço, agradeço mais uma vez a sua visita.

Até mais.

Participe do evento online Live Migration na Nuvem


A Microsoft realizará no próximo dia 31 de maio o evento online Live Migration na Nuvem, que trará palestras relevantes de especialistas em cloud, containers e soluções Open Source do mercado mundial e nacional.

Entenda como movimentar dinamicamente seus ambientes entre diferentes provedores de nuvem sem downtime e perda de dados, além de aprender como solucionar os principais problemas de DevOps utilizando Live Migration por meio de exemplos práticos de implementação de soluções.

O evento será realizado no dia 31 de maio e das 19:30 às 22:30. Mais detalhes podem ser encontrados aqui.

Participe do evento online  Live Migration na Nuvem Participe do evento online Live Migration na Nuvem - {focus keyword}

A Microsoft realizará no próximo dia 31 de maio o evento online Live Migration na Nuvem, que trará palestras relevantes de especialistas em cloud, containers e soluções Open Source do mercado mundial e nacional

Agenda do evento Live Migration na Nuvem

19h30 – Abertura

O novo mundo dos containers – Osvaldo Daibert
Especialista em desenvolvimento de aplicações para nuvem na Microsoft abordará a mudança radical pela qual a forma de desenvolvimento de software está passando. Seja em aplicações hospedadas em nuvens PaaS ou IaaS, os containers e microservices são os alicerces dessa mudança, ajudando a movimentar o novo modelo de integração entre Profissionais de IT e Desenvolvedores.

Containers as a Service (CaaS) – Alessandro Jannuzzi
Gerente de inovações e novas tecnologias da Microsoft Brasil explanará o assunto Container como Serviço, mostrando como o Azure Container Service otimiza a configuração de tecnologias e ferramentas Open Source, como Mesosphere DCOS na plataforma de nuvem. Abordará algumas features deste, como a portabilidade para recipientes e configuração de aplicativo.

Live Migration com Jelastic – Ruslan Synytsky
CEO e fundador da Jelastic, empresa que entrega DevOps com orquestração de containers apresentará como algumas das principais questões DevOps podem ser resolvidas utilizando a opção de Live Migration, e como implementar esta solução, de forma que sua migração seja tranquila e altamente automatizada. Veremos como mover uma aplicação da nuvem AWS para o Microsoft Azure, sem paradas e sem perda de dados!

Q&A
Tire suas dúvidas com os palestrantes do evento Live Migration na Nuvem.

Fontes e Direitos Autorais: Baboo.com

Novidade – SQL Server 2016 – Comando Truncate Table agora com With Partitions


Boa tarde, boa tarde, pessoal!!!

Boa tarde, amantes do SQL Server e Comunidade de Banco de Dados.

Nos últimos dias a Microsoft confirmou a data de lançamento da nova versão do SQL Server, estou se referindo ao Microsoft SQL Server 2016 que será lançado oficial no dia 01 de Junho com toda força de um produto mais que consolidado na área de tecnologia, na verdade o líder no seguimento de banco de dados mundia, segundo as informações do Gartners.

Lógicamente com este lançamento se aproximando todas as possíveis novidades, segredos e melhorias criadas pelos times de engenheiros e desenvolvimento do SQL Server estão sendo divulgadas massisamente nos principais blogs e sites de bancos de dados, como de costume eu também vou tentando surfar nesta onda de lançamento e trazendo aos poucos algumas coisinhas que eu venho conhecendo e utilizando nas últimas CTPs e posteriormente as RCs liberadas pela Microsoft em relação ao SQL Server 2016.

Vale ressaltar que a última RC nomeada RC 3 esta disponível para download através do link: https://www.microsoft.com/en-us/evalcenter/evaluate-sql-server-2016. Aproveitando-se desta onda de lançamento do SQL Server 2016. No artigo de hoje quero destacar uma novidade que a anos a Microsoft estava devendo principalmente para os administradores de banco de dados, estou fazendo referência ao comando Truncate Table e a partir de agora a sua capacidade de remover todas as linhas de uma determinada tabela alocadas em uma partição específica.

Introdução

Qual foi a última vez que você utilizou o comando Truncate Table? Você começa a pensar e se lembra que pode ter sido ontem, antes de ontem, uma semana atrás, um mês atrás, um anos atrás, nossa você para, pensa, observa e chega a seguinte conclusão, meu deus como tempo esta passando e um ainda uso este comando que por aproximadamente mais de 16 anos não passou por nenhuma mudança, é realmente isso aconteceu e por incrível que parece aconteceu justamente com o comando Truncate Table que na minha opinião é um dos mais básicos e não menos importante comandos existentes dentro da linguagem Transact-SQL.

Como sabemos, nem tudo é um mar de rosas, nem sempre todos os itens listados pela comunidade no website Microsoft Connect é bem recebido ou acabam fazendo parte do backlog de itens que devem ou deveriam ser implementados em novas versões ou atualizações do produto, ainda mais se pensarmos que o comando Truncate Table esta presente no SQL Server desde as suas primeiras versões, isso em consideração as versões 6.5 e 7 do SQL Server lançadas antes do anos 2000, lá se vão mais de 16 anos que este produto esta presente na linguagem Transact-SQL e não havia passou por mudanças tão consideráveis.

Por muitos anos a comunidade de banco de dados, profissionais de banco de dados e desenvolvedores por diversas vezes questionavam a Microsoft em relação a quando o seria possível trabalhar com particionamento de tabela, o tempo passou e em 2008 foi introduzida esta capacidade a partir da versão 2008 do SQL Server, muito bem, depois disso era possível imaginar que a capacidade para remover uma parte, pedaço ou melhor dizendo partição de uma tabela seria rápidamente adicionada ao SQL Server, mas não foi bem assim que aconteceu, o tempo foi passando, novas versões e edições foram lançadas e a equipe de engenheiros do SQL Server não se manifestou em relação a esta capacidade, mas como a esperança é a última que supostamente morre, e graças a deus ela nunca vai morrer a Microsoft e seu time ouviu os pedidos da comunidade.

 

Demorou mas ela chegou…

Realmente demorou muito no meu ponto de vista, mas este demora tem algumas explicações e considerações, dentre elas, algumas limitações internas existente no SQL Server até a versão 2008 que não permitiam este tipo de implementação, dentre as quais a principal delas era a falta de capacidade de se trabalhar com particionamento de tabela divididas fisicamente em filegroups, limitação que foi contornada e adicionada como um das maiores novidades do Microsoft SQL Server 2008 em seu lançamento e posteriormente melhorada na versão 2008 R2.

 

Opção With Partition

A primeira aparição da opção With Partition relacionada ao Truncate Table ocorreu no CTP 2.1 lançado em meados de Maio/Junho de 2015, apresentando uma sintaxe bastante comum:

TRUNCATE TABLE 
    [ { database_name .[ schema_name ] . | schema_name . } ]
    table_name
    [ WITH ( PARTITIONS ( { <partition_number_expression> | <range> } 
    [ , ...n ] ) ) ]
[ ; ]

<range> ::=
<partition_number_expression> TO <partition_number_expression>

Importante: Desde então manteve-se presente nas demais CTPs(Community Technical Preview), posteriormente nas RCs (Release Candidate) e por fim na RC3 lançado recentimente como a versão mais próxima da versão final do SQL Server 2016.

Cenário

Como de costume o cenário que vamos utilizar para trabalhar com este recurso é algo bastante simples, estou utilizando em meu ambiente de testes o Microsoft Windows Server 2016 CTP 5 em conjunto com o Microsoft SQL Server 2016 RC3, caso você deseja fazer download de um destes produtos utilize os links listados abaixo:

Em nosso ambiente de testes não vou necessariamente criar uma tabela particionada em diversos filegroups, na verdade vamos similar um particionamento através de partition function criando os ranges de dados no mesmo filegroup, o objetivo deste código não é mostrar como podemos criar um particionamento de tabelas, mas sim como a opção With Partition pode e deve ser utilizada em um ambiente neste caso uma tabela particionada mesmo que seja com um único filegroup.


Utilizando o Truncate Table With Partition

Vamos então colocar a mão na massa, criando nosso ambiente de testes, para isso começamos criando um novo banco de dados chamado NewSQLServer 2016, conforme o exemplo abaixo:

— Criando o Banco de Dados —

Create Database NewSQLServer2016

Go

 

— Acessando o Banco de Dados —

Use NewSQLServer2016

Go

Agora realmente vamos começar a estruturar nosso ambiente para poder utilizar a opção With Partition, a primeiro passo é criar uma nova partition function, recurso extremamente importante e essencial para a distribuição das faixas de alocação dos dados que serão posteriormente inseridos em nossa tabela particionada.

— Passo 1 – Criando uma nova Partition Function —

CREATE PARTITION FUNCTION [PFRegistro] (int)

AS RANGE RIGHT FOR VALUES

 (10000, 30000,

  50000, 70000, 90000);

Go

 

Depois da partition function criada, outro elemente importante e obrigatório que devemos criar é o partition schema, sendo este, utilizado em conjunto com nossa function para repassar o dado identificado na partition function e armazenar dentro da área física determinada para este valor dentro da sua respectiva faixa. Note que neste exemplo não criamos novos filegroups, estamos utilizando o filegroup padrão primary para armazenar todas as faixas de valores que serão distribuídas nas partições que vamos utilizar.

Outro detalhe muito importante, que nosso partition schema terá 6(seis) áreas de armazenamento de dados, você talvez pode ficar na dúvida em relação a isso, mas na verdade sempre que estamos trabalhando com particionamento de dados, devemos criar a quantidade de partições para alocar nossas faixas e mais uma partição para trabalhar sempre com os valores acima da última faixa que vamos armazenar, neste caso, teremos então as seis partições de armazenamento, sendo elas:

  • Partição 1 – entre 0 até 10000;
  • Partição 2 – entre 10001 até 30000;
  • Partição 3 – entre 30001 até 50000;
  • Partição 4 – entre 50001 até 70000;
  • Partição 5 – entre 70001 até 90000; e
  • Partição 6 – Acima de 90001.

 

Segue abaixo o passo 2:

— Passo 2 – Criando um novo Partition Schema —
CREATE PARTITION SCHEME [PSRegistro]

 AS PARTITION [PFRegistro]

 TO ([PRIMARY], [PRIMARY], [PRIMARY], [PRIMARY], [PRIMARY], [PRIMARY]);

 

No passo 3 realizaremos a criação da nossa tabela particionada, direcionando sua área de alocação de dados para nosso partition schema denominado PSRegistro, conforme o bloco de código abaixo apresenta:

— Passo 3 – Criando a tabela TabelaParticionada —

CREATE TABLE dbo.TabelaParticionada

  (NumRegistro INT NOT NULL,

  Dados char(1000) NULL,

  DataCadastro datetime NOT NULL)

ON [PSRegistro](NumRegistro)

GO

 

Agora podemos inserir as linhas de registros que serão distribuídos de acordo com seu respectivo valor dentro de cada faixa e partição de dados, conforme apresenta o passo 4 listado abaixo:

– Passo 4 – Populando a Tabela – TabelaParticionada —

INSERT dbo.TabelaParticionada

SELECT TOP 10000

       s1.number * 1000 + s2.number * 100 + s1.number As NumRegistro,

       Replicate(‘SQL Server 2016 ‘,S2.number+1) As Dados,

       GETDATE()+S2.number As DataCadastro

FROM master..spt_values s1 CROSS JOIN master..spt_values s2

WHERE s1.number BETWEEN 0 AND 999 AND s1.type = ‘P’

AND s2.number BETWEEN 0 AND 99 AND s2.type = ‘P’

 

Ufa, esta chegando no final, agora todo nosso cenário será melhor entendido, graças o passo 5 que nos permite identificar a relação de partições de dados, seus limites de valores e quantidade de valores dentro de cada faixa, com isso, poderemos identificar quais ou qual partição queremos remover de acordo com seus valores apresentados, para isso utilizamos a seguir o passo 5:

— Passo 5 – Obtendo a lista de Partitions criadas para TabelaParticionada —

SELECT $PARTITION.[PFRegistro] (NumRegistro) AS ‘Partition’,

         COUNT(*) AS TotalRegistros,

         MIN(NumRegistro) AS RegistroInicial,

         MAX(NumRegistro) AS RegistroFinal

FROM dbo.TabelaParticionada

GROUP BY $PARTITION.[PFRegistro] (NumRegistro)

Go

 

Por fim o passo 6, onde poderemos realizar a exclusão das partições e seus registros, utilizando o comando Truncate Table em conjunto com a opção With Partition, conforme apresenta o código abaixo:

— Passo 6 – Realizando a exclusão dos dados alocados na partição 1 e em conjunto com as partições 4, 5 e 6 —

TRUNCATE TABLE dbo.TabelaParticionada

WITH (PARTITIONS (2, 4 TO 6));

Go


 

Conclusão

Muito bem, chegamos ao final de mais um artigo, olha por incrível que parece esse deu um pouco de trabalho para elaborar, principalmente no momento para popular os dados na tabela, pois não gostaria de construir um código que acaba-se sobrecarregando o processamento do meu SQL Server, mas por diversas vezes acabei derrubando o meu ambiente(kkkkk).

Bom espero que você tenha gostado, que esta simples novidade adicionada ao Microsoft SQL Server 2016 possa mostrar uma nova capacidade de remover dados trabalhando diretamente com as áreas de alocação de uma determinada tabela. Com certeza esta e outras melhorias adicionadas ao SQL Server 2016 trazem a cada vez que utilizamos uma nova maneira de se obter um resultado ou resolução de uma problema de forma mais simples, fácil e rápida, requisitos que hoje são primordias para qualquer profissional ou empresa.

Mais uma vez obrigado, um grande abraço e fique ligado, pois até o final de 2016 muitas novidades do SQL Server 2016 estarão sendo passadas a limpo aqui no meu blog.

Valeu.

Retrocompatibilidade no Xbox One suporta jogos com múltiplos discos


O primeiro jogo com múltiplos discos suportado pela retrocompatibilidade no Xbox One é o Deux Ex: Human Revolution Director’s Cut.

Outros jogos com múltiplos discos devem ser suportados no futuro. Os usuários podem votar em quais jogos que poderão ser adicionados futuramente através do site Xbox Feedback.

No site é possível votar em títulos como Skyrim, Tales of Vesperia, Lost Odyssey e muitos outros.

Retrocompatibilidade no Xbox One suporta jogos com múltiplos discos Retrocompatibilidade no Xbox One suporta jogos com múltiplos discos - {focus keyword}

Com a retrocompatibilidade os jogos do Xbox 360 rodarão da mesma forma no Xbox One, mas com o suporte para alguns recursos do novo console. Por exemplo, os usuários poderão capturar screenshots, fazer o streaming de gameplays e gravar suas partidas nos jogos do Xbox 360 rodando no Xbox One

Com a retrocompatibilidade no Xbox One os jogos do Xbox 360 rodarão da mesma forma, mas com o suporte para alguns recursos do novo console.

Por exemplo, os usuários poderão capturar screenshots, fazer o streaming de gameplays e gravar suas partidas nos jogos do Xbox 360 rodando no Xbox One.

A Microsoft também confirmou que todos os jogos do Xbox 360 disponibilizados futuramente como parte do programa Games with Gold já serão compatíveis com o Xbox One.

A lista mais recente com os jogos suportados por este recurso pode ser encontrada aqui e mais detalhes sobre a retrocompatibilidade estão disponíveis aqui.

Fontes e Direitos Autorias: Baboo.com – Sid Vicious @ 16 mai 2016 | 9:21 am

Atualização Cumulativa 3 para SQL Server 2012 SP3


A Microsoft disponibilizou para download nesta semana sua Atualização Cumulativa 3 para SQL Server 2012 SP3. O Service Pack 3 (ou SP3) foi lançado em novembro de 2015.

O SP3 trouxe novidades como:

• Aprimoramentos de escalabilidade e desempenho para o mecanismo de armazenamento.

• Melhorias no desempenho da verificação de consistência.

• Dicas de consulta para fornecer controle granular enquanto estiver usando o Resource Governor.

• Adicionais recursos por meio de melhorias na DMV, Extended Events e planos de consulta de monitoramento.

• Melhorar o desempenho ao abrir e ler arquivos XEL usando leitor XEvent Linq.

De acordo com a Microsoft, a Atualização Cumulativa 3 contém as correções para problemas introduzidos com o lançamento do SP3.

O artigo KB3152635 contendo a lista com os bugs corrigidos por esta atualização cumulativa deve ser publicado em breve aqui.

Atualização Cumulativa 3 para SQL Server 2012 SP3 Atualização Cumulativa 3 para SQL Server 2012 SP3 - {focus keyword}

A Microsoft disponibilizou para download nesta semana sua Atualização Cumulativa 3 para SQL Server 2012 SP3. O Service Pack 3 (ou SP3) foi lançado em novembro de 2015

Baixe a Atualização Cumulativa 3 para SQL Server 2012 SP3

A Atualização Cumulativa 3 para SQL Server 2012 SP3 está disponível para download aqui. Ela é compatível com o Windows 10, Windows 7 SP1, Windows 8, Windows 8.1, Windows Server 2008 R2, Windows Server 2008 R2 SP1, Windows Server 2012 e Windows Server 2012 R2.

Fontes e Direitos Autorais: Baboo.com – Sid Vicious @ 16 mai 2016 | 8:30 am

#04 – Para que serve


Eita mundo bão, boa noite galera, tudo bem?

Final de noite de sábado e após mais uma longa semana de muito trabalho, estou novamente aqui no meu blog para finalizar mais um mês com o post da sessão Para que serve.

No post de hoje vou compartilhar uma funcionalidade que particularmente não conhecia no SQL Server até o começo desta semana, estou me referindo a mais um DBCC – Database Command Console não documentada existente no Microsoft SQL Server, fazendo parte da longa lista de DBCC não documentadas, assunto que eu por diversas vezes já destaquei no meu blog e principalmente nos fóruns MSDN/TechNet.

Estou me referindo a DBCC CheckPrimaryFile, ao encontrar os primeiros posts sobre este commando fiquei surpreso com sua existência, ainda mais por que o cenário que eu me deparei com o uso do mesmo, por diversas outras oportunidade tive a necessidade de fazer aplicar uma possível solução muito parecida ou praticamente idêntica ao que este database command realiza, e ai acabei fazendo um questionamento para eu mesmo, poxa vida como eu nunca me atentei para esta funcionalidade.

Então tomei a descisão de buscar mais informações sobre este recurso e como de costume vamos fazer uso da internet para tentar descobrir mais informações sobre este DBCC. Não consegui encontrar muitas informações, sobre sua origem ou ator, dentre os principais posts que coletei informações foi possível identificar que trata-se de um recurso/funcionalidade presente no SQL Server desde a versão 2005 e mantida neste momento na versão 2014.

Levando-se em consideração as informações que encontrei durante as pesquisas que realizei, fica difícil afirmar se o time de desenvolvimento e engenharia do SQL Server vai manter este recurso de forma oculta na versão 2016 ou talvez venha a remover a compatibilidade da mesma. Mesmo assim, acredito que vale a pena conhecer um pouco mais sobre este comando, sua finalidade, forma de uso e principalmente em qual tipo de cenário pode ser interessante fazer uso deste recurso.

Vamos em frente, é chegada a hora, começa aqui o #04 – Para que serve – DBCC CheckPrimaryFile

Conhecida como um dos Database Command Console “não oficial” ou “não documentada” existente de forma no Microsoft SQL Server desde a versão 2005 e compátivel atualmente com a versão 2014 e suas edições a DBCC CheckPrimaryFile, tem como finalidade possibilitar ao DBA ou qualquer profissional que esteja naquele momento tendo a necessidade de descobrir se um determinado arquivo de dados (conhecido como arquivo .MDF – Master Data File), pode ser reconhecido como o arquivo primário (primary file) que compõem a estrutura física e lógica de respectivo banco de dados.

A DBCC CheckPrimaryFile apresenta uma sintaxe e forma de uso simples, composta por dois parâmetros:

  • PhysicalFileName: Representa e identifica o nome físico do arquivo de dados relacionado a um determinado banco de dados; e
  • Opt: Parâmetro composto por um conjunto de quatro valores sendo eles:
    • 0 – Verifique se o physical file name informado realmente representa e consiste como arquivo de dados primário;
    • 1 – Apresenta como retorno as colunas name, size, maxsize, status and path de todos os arquivos associados ao respectivo physical file name;
    • 2 – Apresenta como retorno as colunas databasename, version e collation do respectivo physical file name; e
    • 3 – Apresenta como retorno as colunas name, status e path do respectivo physical file name informado.

Exemplo:

  • DBCC checkprimaryfile (‘PhysicalFileName’, 0)

Dentre os principais cenários relacionados á este DBCC, estão associados as mensagens de erro 5171 e 5172 apresentadas pela Microsoft SQL Server, sendo elas:

  • An exception occurred while executing a Transact –SQL statement or batch. _db.mdf is not a primary database file. (Microsoft SQL Server, Error: 5171).”
  • is not a primary database file. (Microsoft SQL Server, Error: 5171)
  • Server: Msg 5172, Level 16, State 15, Line 1 The header for file path……\.mdf is not a valid database file header. The PageAudit property is incorrect.”

Basicamente estas mensagens relacionadas aos erros: 5171 e 5172 são apresentados pelo SQL Server em operações que envolvam as possíveis transações de:

  • Attach Database;
  • Attach Database a Single File; e
  • Restore Database.

Além disso, estas mensagem de erro normalmente são indicadores que a estrutura física e lógica dos arquivos de dados existentes a um determinado banco de dados podem estar corrompidas, algo que pode representar em diversas situações possíveis perdas de dados ou risco de seu banco de dados estar totalmente danificado ou condenado.

Agora é chegado a hora de por a mão na massa, vamos executar o DBCC CheckPrimaryFile e observar o conjunto de dados apresentados em cada das suas formas de uso, para este cenário de teste estou utilizando o Microsoft SQL Server 2014 Express em meu ambiente de teste e desenvolvimento. Aproveito a oportunidade para destacar que este tipo de comando não deve ser utilizado em servidores de produção ou ambientes que possuam grande volume de acesso por parte dos usuários, bem como dados de grande importância para você ou sua empresa.

Uma dica importante sempre que você for realizar qualquer tipo de teste sem conhecer um determinado comando ou funcionalidade é altamente recomendável a realização de backup dos seus principais bancos de dados.

— Exemplos de utilização – DBCC CheckPrimaryFile —


— Verificando se o arquivo realmente é um Primary File —
DBCC CheckPrimaryFile (‘C:\Bancos\Laboratorio.MDF’,0)
Go

DBCC CheckPrimaryFile - 0

— Retornando o conjunto completo de informações associados ao Primary File que formam a estrutura do respectivo Banco de Dados —
DBCC CheckPrimaryFile (‘C:\Bancos\Laboratorio.MDF’,1)
Go

DBCC CheckPrimaryFile - 1

— Retornando o nome do banco de dados, versão e collation relacionados ao Primary File —
DBCC CheckPrimaryFile (‘C:\Bancos\Laboratorio.MDF’,2)
Go

DBCC CheckPrimaryFile - 2

— Retornando o status, fileid, name e filename associados ao Primary File que formam a estrutura do respectivo Banco de Dados —
DBCC CheckPrimaryFile (‘C:\Bancos\Laboratorio.MDF’,3)
Go

DBCC CheckPrimaryFile - 3

Você pode notar que após a execução de cada uma das respectivas formas de uso existentes no DBCC CheckPrimaryFile, o conjunto de dados retornados pelo Microsoft SQL Server é apresentado de acordo com os valores informações no physical file name mas principalmente ao número que representa a opção e conjunto de valores deve ser retornados em tela.

Importante destacar a necessidade do usuário que encontra-se conectado no momento da execução deste DBCC em seu servidor ou instância SQL Server ter permissão de acesso ao local em que seu arquivos .mdf, .ndf e .ldf que formam a estrutura física do seu banco de dados estejam armazenados fisicamente.


Sendo assim chegamos ao final……Eita nóis, consegui, ou melhor conseguimos, estamos vivos em mais um post dedicado a sessão Para que serve, foi muito legal poder compartilhar com vocês este Database Command Console existente a muitos anos no SQL Server.

Desejo e torço para que você tenha gostado das informações aqui compartilhadas, caso tenha interesse em acessar os outros posts desta sessão não perca tempo, utilize os links apresentados abaixo e boa viagem meu amigo:

  1. https://pedrogalvaojunior.wordpress.com/2016/04/08/03-para-que-serve/
  2. https://pedrogalvaojunior.wordpress.com/2016/02/26/02-para-que-serve/
  3. https://pedrogalvaojunior.wordpress.com/2016/01/28/01-para-que-serve/

Um grande abraço! Obrigado por sua participação e visita, bom fim de noite e um ótimo domingo.

Dica do Mês – Identificando as Top 10 querys mais pesadas e seus respectivos planos de execução


Olá, boa tarde, salve, salve….. tudo bem?

Por um instante até pensei que estava ouvindo aquela conhecida música “Alô, alô realengo aquele abraço……”, mas não era isso não, estou cá com meus botões pensando como começar mais este post, sinceramente esta faltando muita criatividade para tentar fazer algo diferente, mesmo assim, vou tentando quem sabe um dia eu consigo.

Seguindo em frente, falando sério, seja bem vindo a mais um post do meu blog dedicado a sessão “Dica do Mês“, que alias vem recebendo nos últimos dias diversos feedback sobre os atuais posts, bem como, sugestões para novos, mais uma vez obrigado pela participação.

Como a voz do povo é a voz de deus, e se o povo esta pedindo temos que tentar agradar, vou publicar na dica deste mês, um script que eu particularmente uso muito, mas muito mesmo, principalmente quando eu escuto a seguinte frase:  “Nossa como o servidor de banco de dados esta lento….” ou esta outra “O sistema esta lento, muito lento, não consigo fazer nada…..” ao ouvir uma destas frases sinceramente eu fico louco e feliz ao mesmo tempo(kkkkk), louco por muitas vezes o usuário, desenvolvedor, gestor enfim a pessoa que falou não tem noção do que esta dizendo, e feliz porque vou mergulhar de cabeça no lado interno do SQL Server, como eu costumo dizer para meus alunos na lado sobrio e quente de  um servidor ou instância SQL Server, conhecido por muitos como SQL Server Internals.

Alias se conhecer e trabalhar com este lado do SQL Server, posso dizer que não é coisa de outro mundo mas requer muito calma, cuidado e conhecimento, principalmente no que se relaciona as camadas do Database Engine, Storage Engine, Buffer Cache, Query Processor, Query Optimizer, entre outros.

Antigamente poderíamos dizer que esta seria uma tarefa não muito amigável, algo que mudou muito nos últimos anos com a avanço das novas versões do SQL Server e principalmente pela possibilidade de contato com os maiores profissionais do mundo relacionados a banco de dados e SQL Server, dentre os quais destaco: Paul S. Randal, Kalen Delaney, Kimberly L. Tripp, sem se esquecer dos nossos brasileiros Fabricio Catae, Fabiano Amorin, Luciano Moreira, peço desculpas aos outros não citados, mas todos sabem do meu respeito e admiração.

Continuando nossa viagem, e se você que neste momento acabou de se deparar com esta mesma situação que eu relatei anteriormente, por algum motivo de uma hora para outro seu servidor de banco de dados ou até mesmo um determinado sistema começou a apresentar uma possível lentidão, nossa é uma situação bastante difícil e em muitos momento complexa para se decidir em pouco tempo ou tomar alguma possível ação.

É justamente nestes momentos que devemos tentar estabelecer uma linha de raciocínio, uma baseline para darmos início a nossa frente de combate, procurando definir uma forma de análise, mapeando os possíveis riscos e impactos, impactos que normalmente você já conhece e terá que conviver com ele até encontrar a possível causa raiz deste cenário que esta se apresentando.

Causa raiz que por diversas situações ou condições esta se apresentando em seu servidor ou instância SQL Server oriunda da execução de uma ou mais querys consideradas, as quais podem estar gerando um custo de processamento altíssimo para o Database Engine ou Storage Engine em seus componentes que a transforma em uma possível query candidata a participar da lista de querys pesadas.

Você pode estar estranhando isso, mas é exatamente desta forma que o SQL Server nos permite identificar e categorizar nossas querys, onde através de uma análise da complexidade do seu plano de execução, em conjunto com indicadores internos como:

  • Execution Count;
  • Logical Reads;
  • Logical Writes; e
  • Total Elapsed.

Podemos dizer que esta ou outra query esta presente na lista de querys impactantes ao processamento do nosso servidor, ou até mesmo dizer que é uma query pesada e precisa ser analisada e revista toda sua lógica e complexidade de execução.

Há dica de hoje, vai justamente nos ajudar a obter esta lista das top 10 querys consideradas com a maior carga de processamento e permitir apresentar seu plano de execução. E ai isso não é legal, vale a verdade não é uma grande dica que poderá lhe ajudar muito, particularmente falando eu acho uma dica fantástica.

Vamos então conhecer a dica deste mês apresentada abaixo:

— Dica do Mês – Top 10 querys mais pesadas e seus respectivos planos de execução —

SELECT TOP 10

SUBSTRING(qt.TEXT,(qs.statement_start_offset / 2) + 1,((CASE qs.statement_end_offset WHEN 1 THEN DATALENGTH(qt.TEXT) ELSE qs.statement_end_offset END qs.statement_start_offset) / 2) + 1) As ‘Query’,

qs.execution_count As ‘Execution Count’,

qs.total_logical_reads As ‘Total Logical Reads’,

qs.last_logical_reads As ‘Last Logical Reads’,

qs.total_logical_writes As ‘Total Logical Writes’,

qs.last_logical_writes As ‘Last Logical Writes’,

qs.total_worker_time As ‘Total Worker Time’,

qs.last_worker_time As ‘Last Worker Time’,

qs.total_elapsed_time / 1000000 As ‘Total Elapsed Time in seconds’,

qs.last_elapsed_time / 1000000 As ‘Last Elapsed Time in seconds’,

qs.last_execution_time As ‘Last Execution Time’,

qp.query_plan As ‘Query Execution Plan’

FROM sys.dm_exec_query_stats qs CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt

CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp

ORDER BY qs.total_logical_reads DESC

Dicadomesabril1
Figura 1 – Resultado da execução da dica do mês.

 


 

 

Note que os indicadores listados anteriormente são justamente colunas existentes na DMV sys.dm_exec_query_stats, sendo esta uma das principais dynamic management view introduzidas no SQL Server a partir da versão 2008, que nos permite obter todos estes dados referentes ao custo, tempo e esforço de processamento realizado pelo SQL Server. Para saber mais sobre esta DMV acesse: https://msdn.microsoft.com/en-us/library/ms189741.aspx

Para que esta mágica funcione também utilizamos uma outra importante e conhecida DMV sys.dm_exec_text, que possui a finalidade de possibilitar obter exatamente a instrução processada por cada query através do handle “identificador” contido na coluna sql_handle, como também, e o plano de execução desta mesma query com base no seu “identificador” armazenado na coluna plan_handle. Sendo esta dmv um élo de ligação entre a sys.dm_exec_query_stats e a sys.dm_exec_query_plan. Para saber mais sobre esta DMV acesse: https://msdn.microsoft.com/en-us/library/ms181929.aspx

Além disso, outro fator muito importante esta relacionado a capacidade de apresentar de forma gráfica o plano de execução pertencente a cada query, fazendo uso da DMV sys.dm_exec_query_plan, outra fundamental e excencial capacidade adicionada ao SQL Server 2008. Para saber mais sobre esta DMV acesse: https://msdn.microsoft.com/en-us/library/ms189747.aspx

 


Muito bem, chegamos ao final de mais uma dica do mês, tenho a certeza que você gostou deste post, mais uma vez agradeço sua visita, comentários, sugestões, enfim sua participação e interesse.

Caso você ainda não tenha acessado os posts anteriores desta sessão, não se preocupe utilize os links listados abaixo e bom divertimento:

Um grande, meu muito obrigado, nos encontramos no próximo mês com mais uma dica do mês.

Até lá.

Material de Apoio – Abril – 2016


Boa noite, boa noite, boa noite!!!!

Véspera de férias e aqui estamos nós se preparando para alguns dias de descanso e também não deixando de compartilhar com a comunidade um pouco mais sobre o Microsoft SQL Server seus segredos e mistérios. Alias esta ai um ótimo nome para um possível nova sessão que estou pensando em lançar no meu blog, sendo se esquecer é claro das atuais.

Falando de sessões atuais, hoje estou retornando com mais um post relacionado a minha biblioteca de scritps e códigos voltados para o SQL Server, como você já percebeu estou me referindo a sessão Material de Apoio que este ano ainda não recebeu uma merecida atenção, tendo seu último post publicado em Janeiro.

Caso você queira acessar este último post, utilize o link apresentado abaixo:
https://pedrogalvaojunior.wordpress.com/2016/01/18/material-de-apoio-janeiro-2016/

Neste post vou ser um pouco mais generoso e disponibilizar uma relação mais extensa e diversificada de arquivos, destaco alguns dos assuntos relacionados aos scripts de hoje:

  • BulkInsert com arquivos de formato .fmt;
  • Criptografia;
  • Controle Automática de Very Large Files;
  • Constrainst e Common Table Expressions;
  • Dynamic Management View – Sys.dm_os_memory_clerks;
  • Extended Stored Procedure – XP_FixedDrives;
  • Informações sobre Page Life Expectancy;
  • Informações sobre licença do uso do SQL Server
  • Funções – DateDiff, Convert, SubString;
  • System Stored Procedure – SP_FixedDrives;
  • Stored Procedure Não Documentada – SP_MSForEachDB; entre outros.

Como de costume gosto sempre de destacar que todos estes arquivos são fruto do meu trabalho realizado como DBA desde 2000 e principalmente da pesquisa e coleta de informações através da internet, onde grande parte do conhecimento aqui compartilhado também obtido através da dedicação e colaboração de seus autores grande profissionais nacionais e internacionais que atuam como profissionais reconhecidos e especialistas nas áreas de:

  • Modelagem de Dados;
  • Engenharia de Banco de Dados;
  • Engenharia de Softwares e Processos;
  • Banco de Dados;
  • Servidores;
  • Alta Disponibilidade;
  • Desenvolvimento;
  • Migração e Contingência de Dados.

Obseravação: Toda e qualquer informação, código, exemplo e lógica utilizada nestes scripts foi aplicada em um determinado cenário, situação ou necessidade, o que em muitos casos talvez não se aplica a sua necessidade mas pode ser útil como material de consulta ou aprendizado.

Além disso, todos os arquivos estão renomeados tendo ao final do seu nome a extensão .doc como forma de compatibilidade com a plataforma do WordPress.com, vale sempre ressaltar que após o seu download será necessário remover esta extensão mantendo a extensão .sql padrão para arquivos do script do SQL Server.

A seguir a relação de scripts:

1 – Exemplo – Avançado – Utilizando – Stored Procedure – sp_fixeddrives.sql

2 – Exemplo – Básico – Utilizando a Extended Procedure – XP_fixeddrives.sql

3 – Exemplo – Intermediário – BulkInsert com arquivo de formato.fmt.sql

4 – Exemplo – Obtendo informações – Utilizando sys.dm_os_memory_clerks.sql

5 – Exemplo – Obtendo informações – Page Life Expectancy.sql

6 – Exemplo – Informações – Server Memory.sql

7 – Exemplo – Intermediário – Cuidados – DATEDIFF, CONVERT, SUBSTRING e funções sobre colunas na cláusula WHERE e JOINs.sql

8 – Exemplo – Avançado Controle Automático de VLFs – Passo 1 – Setup.sql

9 – Exemplo – Avançado Controle Automático de VLFs – Passo 2 – Initial Config.sql

10 – Exemplo – Avançado Controle Automático de VLFs – Passo 3 -On Demand Check.sql

11 – Exemplo – Básico – Descobrindo se o Trigger é Insert, Update ou Delete.sql

12 – Exemplo – Utilizando – CTE Composta + CTE Recursiva.sql

13 – Exemplo – Criando – Check Constraint + User Function vinculada com Check Constraint.sql

14 – Exemplo – Utilizando – SP_MSForEachDB + Use Dinâmico.sql

15 – Exemplo – Utilizando – Stored Procedure – Exibir – Código Stored Procedure Criptografada.sql

16 – Exemplo – Utilizando – Stored Procedure para Descriptografia de Stored Procedure.sql

17 – Exemplo – Obtendo o Menor e o Maior Valor – Acrescentendo Valores Intermediários.sql

18 – Exemplo – Obtendo – Quantidade de Dias – Encerramento – Licença SQL Server.sql

 

Fique a vontade para compartilhar com seus contatos, não deixe de enviar seus comentários, críticas, dicas ou sugestões.

Mais uma vez obrigado por sua visita, por seu interesse e participação.

Um ótimo feriado, bom descanso, nos encontramos me breve.

Abraços.

#03 – Para que serve


Muito bom dia, senhoras e senhores!!!!

Mas que beleza, parece até coincidência mas o último para que serve também foi publicado em uma Sexta – Feira. Talvez você pode estar se perguntando, porque estou publicando o terceiro post deste sessão no mês de Abril.

Cadê o post do mês de Março? Ai eu vou dar um veja bem e dizer que acabei não conseguindo publicar no mês passado o post que estou escrevendo hoje, peço desculpas, mas a vida tem destas e outras situações que acabam mudando nossos planos.

No para que serve de hoje, vou publicar um script que utilizo bastante nas minhas aulas de segurança de banco de dados e recentimente utilizei em uma apresentação que realizei na Fatec de São Roque para um grupo de professores Mestres e Doutores especialistas em Banco de Dados e Engenharia de Softwares.

Antes de começar a falar deste post, se você quiser acessar os outros post desta nova sessão, fique a vontade utilize um dos links abaixo:

  1. https://pedrogalvaojunior.wordpress.com/2016/02/26/02-para-que-serve/
  2. https://pedrogalvaojunior.wordpress.com/2016/01/28/01-para-que-serve/

Bom divertimento, começa aqui o #03 – Para que serve!!!

Basicamente quando falamos de segurança de banco de dados, temos sempre em mente a preocupação e perguntas que nos fazem querer obter respostas de forma rápida, precisa e confiável. Vou destacar alguma destas perguntas que normalmente queremos saber:

  • Quem esta realizando o acesso?
  • O que esta sendo acesso?
  • Quais as permissões para um determinado objeto ou banco de dados?
  • Este usuário deve realmente ter esta permissão?
  • A senha do login foi definida de forma forte?
  • Quando um determinado login tentou realizar o último acesso?
  • Este login esta digitando a senha de forma correta?
  • A política de senhas esta sendo respeitada?

Enfim estas e outras diversas ou até mesmo milhares de dúvidas e perguntas são feitas quase que todos os dias, pois queremos sempre manter nosso ambiente seguro e confiável e quando falamos nisso estamos se referindo a área da Segurança da Informação, onde encontramos a tríade CIA (Confidentiality, Integrity and Availability) — Confidencialidade, Integridade e Disponibilidade. Há junção destes quatro elementos representa os principais atributos que, atualmente, orientam a análise, o planejamento e a implementação da segurança para um determinado grupo de informações que se deseja proteger. Outros atributos importantes são a irretratabilidade e a autenticidade.

Como o SQL Server é um produto que trabalho dentro das normas e padrões de tecnologia e segurança, entendo que seja importante destacar um pouco sobre estes elementos, para tentar elucidar e esclarecer a importância de cada um deles, gostaria de compartilhar com vocês um pouco do que conheço sobre estes conceitos:

Segurança da informação – Está relacionada com proteção de um conjunto de informações, no sentido de preservar o valor que possuem para um indivíduo ou uma organização. Atualmente o conceito de Segurança da Informação está padronizado pela norma ISO/IEC 17799:2005, influenciada pelo padrão inglês (British Standard) BS 7799. A série de normas ISO/IEC 27000 foram reservadas para tratar de padrões de Segurança da Informação, incluindo a complementação ao trabalho original do padrão inglês. A ISO/IEC 27002:2005 continua sendo considerada formalmente como 17799:2005 para fins históricos.

Confiabilidade: Característica que limita o acesso a informação tão somente às entidades legítimas, ou seja, àquelas autorizadas pelo proprietário da informação.

Integridade: Permite que a informação manipulada mantenha todas as características originais estabelecidas pelo proprietário da informação, incluindo controle de mudanças e garantia do seu ciclo de vida (nascimento,manutenção e destruição).

Disponibilidade: Assegura que a informação esteja sempre disponível para o uso legítimo, ou seja, por aqueles usuários autorizados pelo proprietário da informação.

Autenticidade: Garante que a informação é proveniente da fonte anunciada e que não foi alvo de mutações ao longo de um processo.

Irretratabilidade ou não repúdio: Garante a impossibilidade de negar a autoria em relação a uma transação anteriormente feita.

Vamos em frente, já conhecemos um pouco sobre estes conceitos que se relacionam com segurança da informação e também com o SQL Server em todos os seus níveis de permissão. Você pode estar querendo entender no que isso tem relação com o para que serve de número 03, posso lhe dizer com toda certeza que se você simplesmente acessar o seu SQL Server e começar a manipular os seus objetos e dados, vai conseguir ter toda noção do quanto cada um deste itens estão interligados, ainda mais quando falamos de Logins e Senhas que justamente o que vou compartilhar como recurso do #03 Para que serve.

 


 

 

Neste terceiro post desta sessão estaremos utilzando um Script apresentado abaixo, que demonstra a capacidade do SQL Server em armazenar e retornar informações sobre nossos Logins e Passwords. Onde, provavelmente estas informações poderão responder algumas das nossas principais preocupações relacionadas ao nossos servidores e bancos de dados.

Agora é a hora de apresentar o #03 – Para que serve:

SELECT l.name,

CAST(CASE sp.[state] WHEN N’D’ THEN 1 ELSE 0 END AS bit) AS DenyWindowsLogin,

CASE WHEN N’U’ = l.type THEN 0

WHEN N’G’ = l.type THEN 1

WHEN N’S’ = l.type THEN 2

WHEN N’C’ = l.type THEN 3

WHEN N’K’ = l.type THEN 4 END AS LoginType,

CAST(CASE WHEN (sp.[state] IS NULL) THEN 0 ELSE 1 END AS bit) AS HasAccess,

CAST(sl.is_policy_checked AS bit) AS PasswordPolicyEnforced,

CAST(sl.is_expiration_checked AS bit) AS PasswordExpirationEnabled,

l.create_date AS CreateDate,

l.modify_date AS DateLastModified,

LOGINPROPERTY(l.name, N’BadPasswordCount’) AS BadPasswordCount,

LOGINPROPERTY(l.name, N’BadPasswordTime’) AS BadPasswordTime,

LOGINPROPERTY(l.name, N’DaysUntilExpiration’) AS DaysUntilExpiration,

LOGINPROPERTY(l.name, N’IsExpired’) AS IsExpired,

LOGINPROPERTY(l.name, N’IsLocked’) AS IsLocked,

LOGINPROPERTY(l.name, N’IsMustChange’) AS IsMustChange,

LOGINPROPERTY(l.name, N’LockoutTime’) AS LockoutTime,

LOGINPROPERTY(l.name, N’PasswordLastSetTime’) AS PasswordLastSetTime,

l.is_disabled AS IsDisabled

FROM sys.server_principals AS l

LEFT OUTER JOIN sys.server_permissions AS sp

ON sp.grantee_principal_id = l.principal_id

AND sp.[type] = N’COSQ’ — Connect permissions

LEFT OUTER JOIN sys.sql_logins AS sl

ON sl.principal_id = l.principal_id

LEFT OUTER JOIN sys.credentials AS c

ON c.credential_id = l.credential_id

WHERE

l.[type] IN (‘U’, ‘G’, ‘S’, ‘C’, ‘K’)

AND l.principal_id NOT BETWEEN 101 AND 255 — ##MS% certificates

AND

( sp.[state] = N’D’ — DenyWindowsLogin

OR sp.[state] IS NULL — HasAccess

OR CAST(sl.is_policy_checked AS bit) = 0

OR CAST(sl.is_expiration_checked AS bit) = 0

OR l.create_date > GETDATE()-1

OR l.modify_date > GETDATE()-1

OR l.is_disabled > 0

OR LOGINPROPERTY(l.name, N’DaysUntilExpiration’)<= 5

OR LOGINPROPERTY(l.name, N’IsExpired’) > 0

OR LOGINPROPERTY(l.name, N’IsLocked‘) > 0

OR LOGINPROPERTY(l.name, N’IsMustChange‘) > 0

OR LOGINPROPERTY(l.name, N’BadPasswordCount‘) > 2

)

Vale ressaltar que este código pode ser utilizado a partir do Microsoft SQL Server 2008 ou versões superiores.


 

 

Você vai poder observar que algumas das mais importantes DMVs e Views existentes no SQL Server estão sendo utilizadas neste script como mecanismos para consulta e obtenção de informações dos nossos Logins e Password, dentre elas destaco:

Além disso, também estamos utilizando uma função de sistema chamada LoginProperty presente deste as primeiras versões do SQL Server, sendo esta função um dos principais elementos que compõem a estrutura deste script, responsável por permitir apresentar as propriedades que cada login possui dentro de um servidor SQL Server.

 


Muito bem, é isso pessoal, chegamos ao final de mais um Para que Serve.

E ai gostou do #03 – Para que serve, eu gostei, claro sou suspeito a falar, mas torço e espero que você tenha gostado, de preferência de todo post, mas isso não for possível, quem sabe pelo menos uma parte espero que tenha chamado a sua atenção.

Com isso chegamos ao final de mais um Para que Serve, agradeço sua participação e visita ao meu blog. Não deixe de contribuir com críticas, sugestões, comentários, opiniões, enfim contribua também interagindo cada vez mais proporcionando esta troca de conhecimento.

Um grande abraço, sucesso, nos encontramos em breve.

Tchau.

 

Microsoft SQL Server 2016 RC2 Feature Pack


A Microsoft disponibilizou para download o SQL Server 2016 RC2 Feature Pack. Disponível para download aqui, ele é um conjunto de pacotes autônomos que agregam valor adicional ao SQL Server 2016 RC2 (Release Candidate 2) sem custo extra.

O novo SQL Server 2016 RC2 Feature Pack inclui as últimas versões de:

  • Ferramentas e componentes para o Microsoft SQL Server 2016 RC2.
  • Provedores complementares para o Microsoft SQL Server 2016 RC2.

Observação: Há vários arquivos disponíveis neste Feature Pack. Após clicar no botão “Baixar“ na página de download, você deverá selecionar os arquivos que precisa.

Microsoft SQL Server 2016 RC2 Feature Pack

O Feature Pack é um conjunto de pacotes autônomos que agregam valor adicional ao SQL Server 2016 RC2 (Release Candidate 2) sem custo extra.

Arquivos no SQL Server 2016 RC2 Feature Pack – 32 bits:

  • x86\AttunityOracleCdcDesigner.msi
  • x86\AttunityOracleCdcService.msi
  • x86\MasterDataServicesExcelAddin.msi
  • x86\ReportBuilder3.msi
  • x86\SapBI.msi
  • x86\SQL_AS_ADOMD.msi
  • x86\SQL_AS_AMO.msi
  • x86\SQL_AS_OLEDB.msi
  • x86\SsisAzureFeaturePack_2016_x86.msi

Arquivos no SQL Server 2016 RC2 Feature Pack – 64 bits:

  • x64\AttunityOracleCdcDesigner.msi
  • x64\AttunityOracleCdcService.msi
  • x64\MasterDataServicesExcelAddin.msi
  • x64\rsSharePoint.msi
  • x64\SapBI.msi
  • x64\spPowerPivot.msi
  • x64\spPowerPivot16.msi
  • x64\SQL_AS_ADOMD.msi
  • x64\SQL_AS_AMO.msi
  • x64\SQL_AS_OLEDB.msi
  • x64\SsisAzureFeaturePack_2016_x64.msi

Evento de lançamento do SQL Server 2016 no Brasil

A Microsoft abriu recentemente as inscrições para o evento de lançamento do SQL Server 2016, que será realizado no próximo dia 7 de abril em São Paulo.

Saiba mais sobre o evento aqui.
Fontes e Direitos Autorais: Baboo.com