Atualização Cumulativa 4 para SQL Server 2012 SP3


A Microsoft disponibilizou para download nesta semana sua Atualização Cumulativa 4 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 4 contém as correções para problemas encontrados depois do lançamento do SP3.

A lista com os bugs corrigidos por esta atualização pode ser encontrada no artigo KB3165264 publicado no site de suporte da Microsoft.

Entre os bugs corrigidos estão um que faz com que caracteres Unicode não sejam exibidos corretamente quando eles são copiados de um relatório do SQL Server Reporting Services e um que faz com que o erro “The process cannot access the file” seja exibido quando uma tarefa XML falha no SQL Server.

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

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

A Atualização Cumulativa 4 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 – 19/07/2016 – 8:53 am.

Material de Apoio – Julho 2016


Hoje é sexta – feira, sexta – feira….. Graças a deus.

Salve galera, bom dia, Tudo bem?

E ai, mês de Julho, férias para boa parte dos estudantes, professores e demais profissionais relacionados a área de educação, assim como eu também. Espero que todos estejam aproveitando este justo e necessário período de descanso, pois muitos pensam que a vida acadêmica é fácil, tranquila e estável, mas posso dizer que não é bem assim.

Pois bem, como você deve ter percebido este é mais um post da sessão Material de Apoio, que a partir deste ano esta sendo publicada a cada três meses. Para você que ainda não conhece esta sessão, ela é uma das mais antigas do meu blog, tendo atualmente mais de 140 posts exclusivos, tendo como objetivo principal compartilhar os códigos de exemplo e scripts existentes em minha biblioteca pessoal de scripts dedicados ao SQL Server desde a versão 7 isso lá nos anos 2000.

Caso você queira acessar os últimos posts, utilize os links apresentados abaixo:

https://pedrogalvaojunior.wordpress.com/2016/04/20/material-de-apoio-abril-2016

https://pedrogalvaojunior.wordpress.com/2016/01/18/material-de-apoio-janeiro-2016/

Seguindo em frente, no post de hoje vou compartilhar com vocês alguns scripts que utilizei recentemente com os meus alunos da Fatec São Roque na Disciplina de Banco de Dados II, dentre os quais destaco:

  • Comando Merge;
  • Comando Begin Catch;
  • Comando Begin Try;
  • Comando Begin Transaction;
  • Comando Commit;
  • Comando Rollback;
  • Comando Print;
  • Common Table Expression;
  • Função de Ranking – Dense_Rank();
  • Função de Ranking – NTile()
  • Função de Ranking – Rank();
  • Função de Ranking – Row_Number();
  • Ordenação de Dados;
  • Operador And;
  • Operador Between; e
  • Operador Is Not Null.

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:

Exemplo 1 – Utilizando a função Raiserror.sql

Exemplo 2 – Utilizando o Comando Merge.sql

Exemplo 3 – Utilizando o comando Merge + Insert + Update.sql

Exemplo 4 – Utilizando o comando Begin Try.. Begin Catch + Transaction + Print para apresentar mensagem.sql

Exemplo 5 – Trabalhando com função de Ranking.sql

Exemplo 6 – Trabalhando com função de Ranking-2.sql


Legal, chegamos ao final de mais um post, 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.

Uma ótima sexta – feira e bom final de semana.

Abraços.

#06 – Para que serve


Muito boa tarde pessoal……

Mais um dia lindo de muito sol e um pouco de calor para alegrar este sábado! Estou retornando com mais um post dedicado a sessão Para que Serve, sendo este o sexto post desta sessão criada no início de 2016, já passamos da metade do ano.

Pois bem, no post de hoje quero compartilhar com vocês um desafio que passei esta semana realizando a migração de alguns bancos de dados que estavam hospedados em um servidor com o Microsoft SQL Server 2008 R2 Enterprise para um outro servidor rodando o Microsoft SQL Server 2014 Standard.

A princípio algo que parece ser bastante tranquilo pois estamos falando de um upgrade de versão, mas na verdade seria um downgrade de edição, isso mesmo estaria evoluíndo no número da versão mas baixando o nível em relação ao tipo da edição. Foi justamente ai que surgiu o desafio identificar quais recursos meus atuais bancos de dados armazenados na edição Enterprise poderiam ser migrados diretamente para a edição Standard sem correr riscos ou se possível tentar limitar o máximo possível de impactos.

Neste momento, comecei a pensar como poderia realizar este tipo de procedimento de uma maneira fácil, ágil e simples, por alguns instantes pensei que poderia fazer uso do Upgrade Advisor, mas precisa de algo que como eu destaquei acima mais rápido e simples, além disso, uma funcionalidade existente dentro do Management Studio.

Por alguns instantes minha cabeça começou a processamento, me senti um Tom Hanks em um dos seus filmes da série O código da Vinci (nossa quem ve parece que isso seria possível kkkkk) foi como tivesse ocorrido um estálo, um momento de pura nostalgia me fazendo lembrar dos treinamentos de SQL Server 2008 e R2 que ministrei anos atrás(kkkk isso já faz tempo).

Voltando a realidade deixando de lado o momento de ator,  para minha alegria acabei rememorando uma das mais interessantes DMVs – Dynamic Management Views (Visão de Gerenciamento Dinâmica), estou me referindo a: sys.dm_db_persisted_sku_features implementada pela equipe de desenvolvedores e engenheiros do SQL Server a partir da versão 2008 e mantida até as atuais versões incluíndo a nova 2016.

E ai, você conhece esta funcionalidade? Já utilizou? Sabe para que ela serve?

Pois bem, estas e outras possíveis perguntas serão respondidas a partir de agora em mais este post da sessão Para que Serve!


Começa agora o #06 – Para que serve.

Quando pensamos em realizar a migração de um ou mais bancos de dados normalmente temos a necessidade de identificar os possíveis riscos e impactos que esta atividade pode apresentar, para muitos profissionais de banco de dados, administradores, gestores, enfim aqueles que de alguma maneira estão envolvidos neste tipo de cenário querer tentar fazer este procedimento no menor tempo possível, visando gerar o tão temido downtime!!! Isso mesmo tempo de parada que os sistemas podem ficar fora do ar.

Normalmente quando estamos se referindo ao Microsoft SQL Server existem alguns pontos de muito atenção que devemos se atentar um deles é a versão e edição que estamos atualmente utilizando mapeando seus recursos e funcionalidades através de um check-list gerando como resultado um mapeamento de compatilidade para estabelecer o nível de aderencia para a futura versão que vamos utilizar, ainda mais se estiverem planejando realizar o downgrade de edição em conjunto com o upgrade de versão.

Pensando nestes riscos e principalmente no mapeamento a Microsoft introduziu a partir da versão 2008 a DMV sys.dm_db_persisted_sku_features que nos permite de maneira rápida e fácil através do management studio ou via script identificar quais as funcionalidades exclusivas da edição Enterprise que podem estar sendo utilizadas. Como você a edição enterprise apresenta um lista de recursos e funcionalidades exclusivos que tornam esta a edição mais completa e poderosa de todas as edições disponíveis para se utilizar em relação ao SQL Server, dentre estas funcionalidades destaco as mais conhecidas:

Seguindo em frente, agora que já conhecemos algumas das funcionalidades exclusivas da edição Enterprise tendo como base as versões do SQL Server 2008 R2 até a versão 2016, vamos então fazer uso da sys.dm_db_persisted_sku_features, para isso vamos conecte em seu servidor SQL Server, abra uma nova query em seguida execute o bloco de código 1 apresentado abaixo:

— Código 1 — Consultando a lista de recursos habilitados —

Use Master

Go

Select * from sys.dm_db_persisted_sku_features

Go

Pronto, simples e prático, é possível notar que nosso Management Studio retornou um select contendo as colunas:

  1. feature_name = Nome da funcionalidade; e
  2. feature_id = Id ou código da funcionalidade.

Mas nenhum dado foi apresentado em ambas as colunas, isso representa que o banco de dados Master não esta fazendo uso de nenhum recurso exclusivo da edição Enterprise. Então vamos similar o uso de uma funcionalidade exclusiva, para isso vou utilizar como exemplo a CDC ou Change Data Capture, introduzida a partir da versão 2008 SQL Server posteriormente se tornou um recurso nativo do SQL Server. Desta forma, vamos utilizar o bloco de código 2 apresentado abaixo:

— Código 2 — Simulando o uso de uma funcionalidade exclusiva da edição Enterprise

— Criando o Banco de Dados CDC —
Create Database CDC
Go
— Habilitando o CDC para o Banco de Dados —
Use CDC
Go
Exec sys.sp_cdc_enable_db
Go
— Criando a Tabela de Exemplo —
Create Table Produtos
(Codigo Int Identity(1,1) Primary Key,
Descricao VarChar(20))
Go
— Habilitando o Change Data Capture para trabalhar sobre a table Produtos —
EXECUTE sys.sp_cdc_enable_table
@source_schema = N’dbo’,
@source_name = N’Produtos’,
@role_name = N’cdc_Admin’;
GO
Ufa estamos quase lá, agora vamos executar novamente o select na dmv sys.dm_db_persisted_sku_features 1 e observar o retorno de dados apresentados pelo Management Studio:

Select * from sys.dm_db_persisted_sku_features

Go

Muito bem, agora sim, observando o resultado do nosso select podemos notar claramente que estamos fazendo uso de uma funcionalidade exclusiva da edição Enterprise, neste caso será apresentado os seguintes valores:

  1. feature_name = ChangeCapture; e
  2. feature_id = 400.
Legal, muito legal mesmo, que fantástico, como o SQL Server é surpreende, sinceramente esse produto esta sempre me supreendendo com sua capacidade de recursos e funcionalidades, com base, neste simples select fica bem mais fácil obter a lista de funcionalidade exclusivas que estamos utilizando e com isso definir toda a estratégia para migração, upgrade ou qualquer outra técnica que podemos adotar para evitar o máximo possível de riscos e impactos para
nosso ambiente, como também, não proporcionar algum tipo de downtime.
Vale ressaltar que este tipo de recurso pode ser muito útil em ambientes considerados pequenos, mas que pode também ser analisado para cenários mais complexos e críticos.
Sucessooooooo, chegamos ao final de mais um post, tenho a certeza que agora vai ser mais fácil planejar qualquer migração de banco de dados ou versão de SQL Server antes mesmo de realizar esta tão misteriosa, intrigante e talvez complexa atividade.

Valeu galera!

Espero que você tenha gostado, que as informações compartilhadas aqui possam lhe ajudar a se tornar cada vez um profisisonal de banco de dados mais reconhecido e valorizado, algo que atualmente as empresas estão deixando muito de reconhecer o verdadeiro papel de um DBA que muitas vezes passa despercebido, mas é de grande e extremo valor para qual instituição, empresa ou corporação.

Dica do Mês – Você sabe o que é Normalização de Banco de Dados?


Olá galera, bom dia, bom dia comunidade!!!

Estou de volta com mais um post da sessão Dica do Mês, nossa como o tempo esta passando, este é o sexto post desta nova sessão criada este ano no meu blog e que lentamente começa a apresentar alguns resultados. Como você já deve estar acostumado quando visita o meu blog, todo final de mês é dedicado a post exclusivos das sessões Dica do Mês e Para que Serve.

No último post publicado no mês de Maio, apresentei um conteúdo mais focado para área acadêmica e hoje não será diferente, vou falar sobre um dos conceitos mais importantes quando falamos sobre banco de dados, estou me referindo a Normalização de Dados ou para muitos Normalização.

 Acredito que você já deve ter ouvir falar sobre este conceito, para muitos algo bastante complexo, mas na verdade não é bem assim, por isso eu decidi compartilhar com vocês um pouco do meu conhecimento nesta área.

Então, seja bem vindo a mais uma dica do mês, começa aqui a Dica do Mês – Você sabe o que é Normalização de Banco de Dados?


Introdução

Conhecida como técnicas de racionalização das estruturas de dados de um sistema, eliminando redundâncias, problemas de manipulação e armazenamento, basicamente a normalização é um processo através do qual esquemas de relação, que não sejam satisfatórios às características do modelo relacional, são decompostos em esquemas menores que satisfaçam as propriedades desejáveis.

Inicialmente proposta como uma ferramenta de auxílio no projeto físico para a definição de relações, porém na prática tornou-se uma ferramenta de verificação, pois serve para verificar se os esquemas do projeto físico satisfazem algumas características básicas. Estas características são conhecidas como medidas de qualidade que devem obrigatóriamente estar alinhadas as necessidades do projeto de banco de dados e seu modelagem conceitual.

Medidas de Qualidade

Na normalização, são analisadas algumas medidas de qualidade para o projeto de um esquema de relação. Estas medidas de qualidade visam, por exemplo, evitar um mau uso da memória. As medidas são as seguintes:

1 – Correta representação semântica – os dados devem ser projetados de forma a terem seus significados bem definidos e coerentes com o que realmente querem representar;

2 – Redução de valores redundantes – sempre que possível deve-se reduzir ao máximo os valores redundantes desnecessários, ou seja, valores que muitas vezes aparecem repetidos quando isto não seria preciso;

3 – Redução de valores nulos – sempre que possível deve-se reduzir o número de atributos que por alguma razão receberão muitos valores nulos;

4 – Não geração de tuplas espúrias (sem sentido) – durante o processo de normalização deve-se atentar para evitar que sejam geradas tuplas que não façam sentido diante da realidade, isto pode ocorrer devido a alguma decomposição.

Estas medidas de qualidade nos ajudam a estabelecer uma estrutura organizacional para nosso modelo de banco de dados, onde podemos tentar afirmar que estamos criando um cenário para armazenar com coerência.

Outro elemento muito importante quando estamos trabalhando com Normalização é a chamada dependência funcional, conhecida como propriedade da semântica ou do significado dos atributos. Você pode estar se perguntando poxa vida o que seria isso, calma vou tentar se ajudar neste respostas.

Dependência Funcional

As decomposições da normalização ocorrem seguindo os conceitos de dependências funcionais. A seguir estes conceitos serão apresentados, juntamente com as três principais e mais utilizadas formas normais.

Uma dependência funcional (DF) é uma propriedade da semântica ou do significado dos atributos. Formalmente, uma dependência funcional entre dois conjuntos de atributos, x e y, que são subconjuntos de um esquema de relação R, denotada por x® y é uma restrição que estabelece que para quaisquer tuplas t1 e t2 de uma instância r de R, tal que, se temos t1[x] = t2[x], então também devemos ter que t1[y] = t2[y].

Em outras palavras, os valores do componente y em uma tupla de r dependem de (ou são determinados por) valores do componente x.

Por exemplo:  Seja x = {Matrícula} e y = {Nome, Endereço, Telefone, CodCurso}, então {Matrícula} {Nome, Endereço, Telefone, CodCurso}, ou seja, a depender do valor da Matrícula, serão determinados os valores do Nome, Endereço, Telefone, e CodCurso.

Quando se define uma dependência funcional, esta regra deve valer para todas as instâncias da relação, é como se fosse uma restrição de integridade, onde em muitos casos não se pode deduzir a existência de uma dependência, conforme a Figura 1 apresentada abaixo demonstra:

Normalização

Figura 1 – Exemplo de como podemos identificar a existência ou não de dependência funcional.

Seguindo em frente, agora que conhecemos um pouco sobre a normalização, suas medidas de qualidade e seu principal elemento de decomposição chamado dependência funcional, o próximo passo é justamente conhecer e entender um pouco mais sobre esta técnica de decomposição de estrutura, para tal será necessário se aprofundar um pouco mais, vamos então começar a desmistificar as tão temidas Formas Normais (kkkkkk), tenho a certeza que você vai gostar.

Formas Normais Baseadas em Chaves Primárias

O processo de normalização é realizado gradativamente através de formas normais, definidas a partir do conceito de DF. As três principais formas normais são a Primeira Forma Normal (1FN), a Segunda Forma Normal (2FN) e a Terceira Forma Normal (3FN).

1FN  2FN  3FN……

Este processo de normalização é composto por algumas propriedades:

  1. Junções sem perda – uma vez definida uma decomposição, caso esta seja recomposta através de uma operação de junção, no resultado gerado não pode haver perdas;  e
  2. Preservação de dependências – assegura que cada DF seja representada em algumas relações individuais resultantes após a decomposição.

A Figura 2 apresentada a seguir ilustra como as formas normais trabalham, sua forma de uso e finalidade:

Normalização1
Figura 2 – Resumo formas normais.

Primeira Forma Normal (1FN)

Um esquema de relação R está na 1FN se todos os seus atributos forem atômicos e monovalorados, ou seja, não possuem valores que formam atributos compostos.

1 – Exemplo:
ESTUDANTES = {MATRÍCULA + NOME + ENDEREÇO + CODCURSO} e
ENDEREÇO é um atributo composto, ENDEREÇO = {RUA + NUMERO + BAIRRO + CIDADE + UF}.

Para colocar na 1FN faz:
ESTUDANTES={MATRÍCULA+NOME+RUA+NUMERO+BAIRRO+CIDADE+UF+CODCURSO}

Um esquema de relação R está na 1FN se todos os seus atributos forem atômicos e monovalorados, ou seja, não possuem valores que formam atributos compostos.

2 – Exemplo:

FUNCIONÁRIOS = {CODFUNC + NOME + CARGO + {PROJETO + DATAINI + DATAFIM}}

Para colocar na 1FN faz:

– FUNCIONÁRIOS = {CODFUNC + NOME + CARGO}

– FUNC_PROJ = {CODFUNC + PROJETO + DATAINI + DATAFIM}

Observação: todas as tabelas são relações na 1FN.

 

Segunda Forma Normal (2FN)

Dependência funcional total ou completa: Uma DF x® y é total, se não existir nenhum atributo A em x, tal que (x – {A})® y, para qualquer AÎ x, ou seja, se retirarmos este atributo A da relação x a DF deixa de existir. Caso contrário, x® y é parcial.

Definição da 2FN: Um esquema de relação está na 2FN se: estiver na 1FN e, além disso, todo atributo que não pertença a alguma de suas chaves for totalmente dependente da sua chave primária.

Em outras palavras, para que uma relação esteja na 2FN é preciso que esteja na 1FN e que, havendo uma chave primária composta, todos os dados que não são chaves dependem de toda a chave primária (a chave primária completa).

Seja o exemplo de uma relação que represente o estoque de um estabelecimento comercial, da seguinte forma:

ESTOQUE = {PRODUTO + ALMOX + END_ALMOX + UNID_EST + QTD + PRECO}

Não está na 2FN porque alguns dados não chave dependem somente de parte da chave, como END_ALMOX depende só de ALMOX, e UNID_EST depende só de PRODUTO.

Com a normalizando ficaria:
– Estoque = {PRODUTO + UNID_EST}
– Almoxarifado = {ALMOX + END_ALMOX}
– Produto= {PRODUTO + ALMOX + QTD + PRECO}

 

Terceira Forma Normal (3FN)

Dependência funcional transitiva: Uma DF x® y é transitiva em um esquema de relação R se existir um conjunto de atributos z, que não seja um subconjunto de alguma chave de R, e as DFs x® z e z® y forem válidas em R.

Um esquema de relação está na 3FN se: estiver na 2FN e, além disso, nenhum atributo que não pertença a alguma das suas chaves for transitivamente dependente da sua chave primária.

Em outras palavras, para que uma relação esteja na 3FN é preciso que esteja na 2FN e todo atributo, que não pertença a alguma chave for não dependente de algum outro atributo, que também não pertença a alguma chave.

Seja o exemplo de uma relação que represente os dados referentes às músicas, da seguinte forma:

Exemplo: MÚSICA = {CÓDIGO + TÍTULO + GÊNERO + PAÍS_ORIGEM}, supondo que neste exemplo, o PAÍS_ORIGEM refere-se ao GÊNERO musical e não a música, sendo assim, apesar de estar na 2FN, a relação não está na 3FN, pois existe  dependência entre GÊNERO e PAÍS_ORIGEM.

Com a normalizando ficaria:
MÚS_1 = {CÓDIGO + TÍTULO + GÊNERO}
MÚS_2 = {GÊNERO + PAÍS_ORIGEM}

Acredito que você pode ter entendido como inicialmente a normalização de dados vai influenciar na estrutura da sua modelagem de dados, como a mesma vai ser elaborada, estruturada e elaborada.

Para tentar ajudar o seu entendimento e tentar praticar o que estamos vendo neste post, vou deixar algumas perguntas que podem ser de extrema importância para o esclarecimento de dúvidas, como também, um exercício prático de normalização.


Questionário

1.O que é uma dependência funcional?

2.Quem especifica as dependências funcionais que se mantêm (são válidas) entre os atributos de um esquema de relação?

3.A que se refere a expressão “relação desnormalizada”?

4.Defina primeira, segunda e terceira formas normais quando somente chaves primárias são consideradas. Como as definições da 2FN e 3FN, que consideram todas as chaves de uma relação, diferem daquelas que consideram somente chaves primárias?

Exercício

Sejam os seguintes dados de uma locadora de automóveis:

A locadora aluga automóveis de uma determinada marca apenas para clientes pessoa jurídica (empresas). Estes clientes credenciam motoristas para utilizarem os veículos, o preço diário de aluguel e a potência do carro dependem de seu modelo. Considerando que a locadora necessite, para seu controle, dos dados descritos na seguinte relação:

  • REGISTRO_ALUGUEL = {NumCNH + NomeMotorista + DataNasc + CGCCliente + NomeCliente + EndCliente + {PlacaCarro + Modelo + Cor + Potência + QTDDiárias + PreçoDiária}}

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

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.

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

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

Até mais.

 

Short Scripts – Junho 2016


Salve, salve minha gente, boa tarde!!!

Mais uma segunda – feira começando e mais uma semana se iniciando, já passamos da metade do mês de Junho tão aguardado devido ao lançamento do novo Microsoft SQL Server 2016. Caso você tenha perdido alguma informação sobre este lançamento, aproveito para compartilhar aqui um dos diversos posts publicados no meu blog sobre esta nova versão:

Voltando a falar sobre o Short Scripts, esta é uma das sessões mas visitadas do meu blog, onde o objetivo  é compartilhar os scripts existentes em minha biblioteca de códigos  dedicados exclusivamente para o SQL Server. Muitos destes scripts são resultado de pesquisas, posts publicados nos fóruns MSDN e também de respostas encontradas em outros websites de profissionais, administradores de banco de dados, professores e comunidades.

Boa parte de material é fruto de um trabalho dedicado exclusivamente a colaboração com a comunidade, visando sempre encontrar algo que possa ser a solução de um determinado problema, bem como, a demonstração de como se pode fazer uso de um determinado recurso. Todos os scripts publicados nesta sessão são devidamente testados antes de serem publicados, mas isso não significa que você pode fazer uso dos mesmo em seu ambiente de produção, vale sim todo cuidado possível para evitar maiores problemas.

Caso você não tenha acessado os últimos posts, não perca tempo, utilize os links publicados a seguir:

https://pedrogalvaojunior.wordpress.com/2016/03/22/short-scripts-marco-2016/

https://pedrogalvaojunior.wordpress.com/2015/12/14/short-script-dezembro-2015/

https://pedrogalvaojunior.wordpress.com/2015/10/21/short-scripts-outubro-2015/

https://pedrogalvaojunior.wordpress.com/2015/08/26/short-scripts-agosto-2015/

https://pedrogalvaojunior.wordpress.com/2015/06/03/short-script-junho-2015/

Para esta relação você vai encontrar scripts relacionados aos seguintes assuntos, conceitos, recursos ou funcionalidades:

  • Acesso a banco de dados;
  • Collation;
  • Comando Exec;
  • Comando Union;
  • Comando Union All;
  • Comando Create Table;
  • Comando Alter Table;
  • Common Table Expression;
  • DBCC CheckPrimaryFile;
  • DMV sys.dm_db_index_usage_stats;
  • DMV sys.dm_os_buffer_descriptors;
  • Índices Clustered e NonClustered;
  • Option MaxRecursion;
  • Plano de Execução;
  • Querys consideradas pesadas;
  • Tabela de sistema sys.allocation_units;
  • Tabela de sistema sys.partitions;
  • Tabela de sistema sys.indexes;
  • Tabela e caracteres Unicode; e
  • Recursividade.
A seguir, apresento a relação de short scripts:

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

 

— Short Script 2 – DBCC CheckPrimaryFile – 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

 

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

— Short Script 4 – DBCC CheckPrimaryFile – 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
— Short Script 5 – Informações sobre acesso ao Banco de Dados —
WITH agg AS
(SELECT last_user_seek,
                  last_user_scan,
                  last_user_lookup,
last_user_update
FROM sys.dm_db_index_usage_stats
WHERE database_id = DB_ID()
)
SELECT last_read = MAX(last_read),
                 last_write = MAX(last_write)
FROM
(SELECT last_user_seek, NULL FROM agg
UNION ALL
SELECT last_user_scan, NULL FROM agg
UNION ALL
SELECT last_user_lookup, NULL FROM agg
UNION ALL
SELECT NULL, last_user_update FROM agg
) AS x (last_read, last_write);
Go

 

— Short Script 6 – Observando a mudança de comportamento após a troca de Collation —

CREATE TABLE [dbo].[Authors]
([id] [INT] NULL,
   [author] [VARCHAR](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
   [dateposted] [DATE] NULL) ON [PRIMARY]
GO
INSERT Authors  VALUES (1, ‘Steve’, ‘20160101’),
                                                   (2, ‘STEVE’, ‘20160201’),
                                                   (3, ‘Andy’, ‘20160301’),
                                                   (4, ‘andy’, ‘20160401’)
GO
CREATE PROCEDURE GetAuthors @author VARCHAR(50)
AS
BEGIN
SELECT a.id, a.author FROM dbo.Authors a
WHERE a.author = @author
END
GO
— If I run the procedure with a parameter of ‘Steve’, it returns two rows. I then run this code:
Exec GetAuthors ‘Steve’
Go
ALTER TABLE dbo.Authors
ALTER COLUMN author VARCHAR(50) COLLATE SQL_Latin1_General_CP437_BIN2 NULL
— If I were to execute the stored procedure, what would happen?
Exec GetAuthors ‘Steve’
Go

 

— Short Script 7 – Descobrindo o código Unicode de um caracter ou String —

— Exemplo 1 —
DECLARE @n CHAR(10);
SET @n = N’Abc’;
SELECT UNICODE(@n);
Go
— Exemplo 2 —
DECLARE @n NCHAR(10);
SET @n = N’??????????’;
SELECT UNICODE(@n);
Go

 

— Short Script 8 – Criando CTEs —

— Exemplo 1 – Criando uma simples CTE —
;With Exemplo1(Valor, Nome)
As
(
Select 1, ‘Pedro Galvão’ As Nome
)
Select * from Exemplo1
Go
— Exemplo 2 – Criando uma CTE com Union de Selects —
;With Exemplo2(Valor)
As
( Select 10
Union
Select 50
Union
Select 8
Union
Select 10 + 2
)
Select Valor = (Select Max(valor) From Exemplo2) + (Select Sum(Valor) From Exemplo2)
Go
– Short Script 9 – Criando CTEs com Recursividade —
— Exemplo – Criando uma nova CTE Recursiva concatenando dados —
;With ConcatenarNomes(nome)
AS
( SELECT Nome = CONVERT(Varchar(4000),’Pedro Antonio’)
UNION ALL
SELECT CONVERT(Varchar(4000),nome + ‘ Galvão Junior’) FROM ConcatenarNomes
WHERE LEN(nome) < 30
)
SELECT Nome FROM ConcatenarNomes
Go
— Exemplo 2 – Criando uma CTE com Union + Recursividade – Simulando uma sequência de números pares —
;With CTENumerosPares(Numero)
As
( Select 0 As Numero
Union All
Select Numero + 2 As Numero From CTENumerosPares
Where Numero < 100
)
Select Numero From CTENumerosPares
Go
— Exemplo 3 – Criando uma CTE com Union + Recursividade – Simulando uma sequência de números —
;With CTENumerosSequenciais(Numero)
AS
(   SELECT 1 AS Numero
UNION ALL
SELECT Numero + 1 AS num FROM CTENumerosSequenciais
WHERE Numero < 1000
)
SELECT * FROM CTENumerosSequenciais
OPTION (MAXRECURSION 0)
Go
— Short Script 10 – Obtendo o tamanho de índices Clustered e NonClustered —
SELECT COUNT(*) AS cached_pages_count,
COUNT(*)/128.0000 MB,
name AS BaseTableName,
IndexName,
IndexTypeDesc
FROM sys.dm_os_buffer_descriptors AS bd
INNER JOIN (SELECT s_obj.name,
s_obj.index_id,
s_obj.allocation_unit_id,
s_obj.OBJECT_ID,
i.name IndexName,
i.type_desc IndexTypeDesc
FROM
(SELECT OBJECT_NAME(OBJECT_ID) AS name,
index_id,
allocation_unit_id,
OBJECT_ID
FROM sys.allocation_units AS au INNER JOIN sys.partitions AS p
ON au.container_id = p.hobt_id
AND (au.TYPE = 1 OR au.TYPE = 3)
UNION ALL
SELECT OBJECT_NAME(OBJECT_ID) AS name,
index_id,
allocation_unit_id,
OBJECT_ID
FROM sys.allocation_units AS au INNER JOIN sys.partitions AS p
ON au.container_id = p.partition_id
AND au.TYPE = 2
) AS s_obj LEFT JOIN sys.indexes i
ON i.index_id = s_obj.index_id
AND i.OBJECT_ID = s_obj.OBJECT_ID
) AS obj ON bd.allocation_unit_id = obj.allocation_unit_id
WHERE database_id = DB_ID()
and name not like ‘sys%’
and IndexName <> ‘null’
GROUP BY name, index_id, IndexName, IndexTypeDesc
ORDER BY cached_pages_count DESC;
Muito bem, mais uma relação de short scripts acaba de ser compartilhada, mesmo sendo denominados short entre aspas pequenos, posso garantir que todos estes exemplos são de grande importância e apresentam um valor e conhecimento do mais alto nível.

Chegamos ao final de mais um post, fique a vontade para compartilhar este conteúdo com seus contatos e redes sociais, contribua também enviando dicas, sugestões, dúvidas, críticas, enfim participe e ajude a melhorar cada vez mais esta sessão.

Mais uma vez obrigado por sua visita, nos encontramos em breve em mais um post da sessão Short Scripts.

Uma ótima semana, abraços.

#05 – Para que serve


Hello everybody, Good Afternoon, Buenas Tardes e Buon pomeriggio!!!!

Domingão chuvoso aqui em São Roque, olha esta chuvinha já esta dando o que falar e causando alguns estranhos na região, poxa vida eu gosto de chuva mas acho que já deu na hora de parar(kkkkk), desse jeito vamos ficar todos embolorados(kkkkkk)….

Comentários e brincadeirasa parte, aproveitando este tempinho para ficar em casa se preparando para mais uma semana de muito trabalho no FIT e na FATEC, falando de FATEC já estamos chegando ao final do semestre.

Pois bem, estava pensando e decidi compartilhar com vocês na sessão Para que serve, mais dois comandos DBCCs (Database Command Console) não documentadas que recentimente acabei me deparando em uma necessidade na empresa e por incrível que pareça uma das QoD (Question of Day) no portal SQLServerCentral.com, alias eu sou suspeito a falar deste portal, sou fã de carterinha desta plataforma que emana conhecimento especializado e dedicado ao Microsoft SQL Server.

Seguindo em frente, estou me referindo a DBCC Freeze_IODBCC Thaw_IO! Por acaso você já teve a necessidade de utilizar ou já ouvi falar destes commandos?

Ficou surpreso em saber da existência destes recursos, eu também, mas tenho a certeza que você vai ficar mais supreso quando fazer uso deles, algo que realmente pode ajudar em muito a entender o comportamento do SQL Server durante o procedimento de leitura e escrita de uma transação.

Bom vamos conhecer um pouco mais sobre estas duas DBCCs não documentadas, tendo como base um tradicional ambiente de testes que normalmente utilizo para este tipo de necessidade, e como de costume, vamos vais uma vez resaltar que este tipo de procedimento deve ser realizado sempre em ambientes ou cenários de teste e desenvolvimento, pois são comandos que podem alterar o comportamento do seu servidor ou instância SQL Server, proporcionando algum tipo de perda de informação ou impactos nos seus dados. Mesmo assim acredito que vale a pena conhece-los.


Começa aqui o #05 – Para que serve, boa viagem meu amigo.

Basicamente estas duas DBCCs não documentadas estão presentes na relação de comandos não oficiais e não reconhecidos pela documentação Microsoft á algum tempo, nas pesquisas que realizei para obter mais exemplos e informações encontrei posts publicados em alguns blogs americas, russos e europeus datados de meados do ano de 2011, sendo assim deduzido que ambas as funcionalidades podem ser utilizadas de uma maneira mais “segura” nas versões 2008 R2, 2012 e 2014.

Para nosso ambiente de testes vou utilizar o Microsoft SQL Server 2014 Express SP1, também realizei testes no Microsoft SQL Server 2012 Express SP3, não observei nenhum tipo de mudança de comportamento ou processamento em relação a cada versão, tanto na sua forma de execução como também na maneira de processamento o resultado obtive foi o mesmo, sendo assim, fique a vontade para escolher a versão que você deseja utilizar. Então vamos conhecer um pouco sobre cada comando DBCC, começando pela DBCC Freeze_IO.

DBCC Freeze_IO

Como seu próprio nome segure, esta dbcc tem a função de congelar de forma temporária do processo de leitura e escrita realizada para um banco de dados, quando eu me referi a congelar estou fazendo referência a possibilidade de suspender todo processo de IO(Input – Output) para gravação de dados no banco de dados que você encontra conectado.

Quando o DBCC Freeze_IO é executado todas as atividades realizadas pelo SQL Server que envolvam processos de IO que estejam vinculadas a operação de escrita serão suspensas, não estou dizendo que estas atividades vão receber uma instrução de encerramento ou finalização, nada disso todas serão congeladas até que o comando DBCC Thaw_IO seja executado.
Uma vez que o IO é congelado, você pode tratar o banco de dados como um banco de dados somente leitura. Qualquer atividade de escrita não retornará nenhum tipo de informação, pois este banco de dados terá naquele exato momento o comportamento de um banco somente leitura. 
Você pode estar se pergunta, cara isso é muito perigo? Sim a resposta é sim, ainda mais se você fizer uso deste tipo de implementação em um ambiente que sofre uma carga enorma de leitura e escritas em pouco espaço de tempo.
DBCC Thaw_IO
Como destacado anteriormente este comando DBCC tem a finalidade de descongelar ou remover o status de suspensão nos processos de leitura e escrita marcados pela DBCC Freeze_IO. Quando executado o DBCC Thaw_IO envia para o Database Engine uma instrução que permite reverter o estado do banco de dados de somente leitura para leitura e escrita, desta forma, o SQL Server entende que a partir daquele momento o banco de dados envolvimento na execução da DBCC Freeze_IO não necessita mais ser impedido de receber novos dados, como também, esta livre para retornar qualquer tipo de informação solicitado pelo usuário e suas aplicações.
Ufa, parece ser bastante assustador fazer uso destes dois comandos, mas não é bem assim, e para mostrar que nem tudo o que parece realmente é tão perigoso, vamos fazer uma pequena prática para ilustrar o comportamento do SQL Server durante a execução de cada DBCC, para isso iremos utilizar uma pequena tabela chamada Estudantes, chegou então a hora de colocar a mão na massa ou melhor no código (kkkkk)….

Colocando a mão no código #05 – Para que serve – DBCC Freeze_IO e DBCC Thaw_IO

Para nosso ambiente de testes, vamos criar um novo banco de dados chamado DBFreeze e como destacado anteriormente será criada uma tabela chamada Estudantes que receberá alguns linhas de registros, conforme apresenta o bloco de Código 1 a seguir:
— Código 1 —

— Criando o Banco de Dados DBFreeze —

Create Database DBFreeze

Go

 

— Acessando o Banco de Dados —

Use DBFreeze

Go

 

— Criando a Tabela Estudantes —

Create Table Estudantes

(Id Int Primary Key Identity(1,1),

Nome Varchar(20) Not Null,

Classificacao TinyInt Not Null,

Curso Varchar(20) Not Null)

Go

 

— Inserindo os dados —

Insert Into Estudantes (Nome, Classificacao, Curso)

Values (‘Kim’, 99, ‘Inglês’),

(‘Thomas’, 95, ‘Inglês’),

(‘Jonh’, 92, ‘Inglês’),

(‘Mag’, 97, ‘Espanhol’),

(‘Sussy’, 90, ‘Espanhol’),

(‘Boby’, 91,‘Português’),

(‘Darth’, 89, ‘Português’)

Go 100000

 

Ótimo, nosso ambiente este criado, agora podemos fazer uma simples simulação do congelamento do banco de dados DBFreeze, para isso vamos utilizar o bloco de código 2, note que iremos executar um simples select com algumas funções de ranking na tabela Estudantes, conforme apresento abaixo:

 

— Código 2 —

Begin Transaction

Select Id, Nome, Classificacao, Curso,

ROW_NUMBER() Over (Order By Curso) As ‘Row Number’,

Rank() Over (Order By Curso) As ‘Rank’,

Dense_Rank() Over (Order By Curso) As ‘Dense Rank’,

NTile(4) Over (Order By Curso) As ‘NTile’

From Estudantes

Go

Observe que para garantir e evitar qualquer tipo de impacto em outras transações, realizei a abertura de uma nova transação para que o comando select e suas respectivas funções de ranking fossem executadas, neste momento esta transação esta sendo executado, vamos então forçar o congelamento do banco de dados, para isso abra uma nova query em seu management studio e execute o bloco de código 3:

— Código 3 —

DBCC Freeze_IO(DBFreeze)
Go

A partir deste momento nosso banco de dados DBFreeze acaba de receber a instrução de Freeze IO, onde o mesmo vai ser obrigado a interromper qualquer processo de atividades que envolvam leitura e escrita de dados, se você decidir voltar a sessão anterior, será possível observar que a mesma continua em execução mas os dados não são retornados em tela, para ter certeza de qual é o atual status desta sessão, podemos fazer uso da system stored procedure sp_lock para obter a lista de recursos e objetos atualmente em lock em nosso SQL Server.

Vamos voltar nosso banco de dados para o estado original, possibilitando que todas as leituras e escritam possam ser executadas normalmente retornando os dados solicitados, para isso utilizaremos o bloco código 4 apresentado a seguir. Para sua execução recomendo utilizar a mesma query criada para execução do código 3:

 

— Código 4 —

DBCC Thaw_IO(9)

Go

Após alguns segundos o Database Engine entende que o nosso banco de dados DBFreeze deve ter o estado de somente leitura alterado para leitura e gravação, sendo assim, o processamento da nossa primeira query será executado e encerrado normalmente, onde teremos todos os nossos dados apresentados conforme a estrutura do comando select executada no bloco de código 2, ilustrado anteriormente.

Observações:

  1. Gostaria de salientar que este tipo de funcionalidade não será muito aplicável ou utilizável em suas atividades diárias, mas poderá ser bastante útil quando você desejar de alguma forma simular uma possível “imagem ou snapshot” do seu banco de dados em um espaço de tempo ou situação; e
  2. O uso do DBCC Freeze_IO, DBCC Thaw_IO e qualquer outro comando DBCC não reconhecido ou documentado pela Microsoft e seus times de Engenheiros e desenvolvedores deve ser utilizado com muita cautela e sempre em ambientes de testes e desenvolvimento. Em algumas situações a adoção de estratégias de backup de bancos de dados ou até mesmo de um snapshot de seu ambiente virtualizado devem ser adotados como forma de garantir a recuperação dos seus recursos.

Então chegamos ao final de mais um post, estamos vivos e salvos e principalmente nosso banco de dados sobreviveu.


É isso ai galera, muito legal este post da sessão Para que serve!

Espero que você tenha gostado, que as informações compartilhadas aqui possam lhe ajudar a se tornar cada vez um profisisonal de banco de dados mais reconhecido e valorizado, algo que atualmente as empresas estão deixando muito de reconhecer o verdadeiro papel de um DBA que muitas vezes passa despercebido, mas é de grande e extremo valor para qual instituição, empresa ou corporação.

Caso deseje acessar os posts anteriores desta sessão, utilize os links postados abaixo:

Mais uma vez obrigado por sua visita, tenha uma ótima semana, nos encontramos em breve.

Até mais.

Microsoft SQL Server 2016 Express já está disponível


Com o lançamento do SQL Server 2016 nesta semana, a Microsoft também disponibilizou para download no Microsoft Download Center o SQL Server 2016 Express.

O Microsoft SQL Server 2016 Express é uma edição gratuita e com muitos recursos do SQL Server 2016. Esta versão é ideal para aprender, desenvolver e capacitar aplicativos Web, para desktops e para servidores de pequeno porte, bem como para redistribuição por ISVs.

LocalDB (SqlLocalDB)
• O LocalDB é uma versão simples do Express que tem todos os recursos de programação, é executado no modo de usuário, tem uma instalação rápida e sem configuração e uma lista pequena de pré-requisitos. Use essa opção se você precisar de uma maneira simples de criar e trabalhar com bancos de dados a partir do código. Ele pode ser agrupado com ferramentas de desenvolvimento de aplicativos e bancos de dados, como o Visual Studio, ou inserido em um aplicativo que necessite de bancos de dados locais.

Express (SQLEXPR)
• A edição Express inclui apenas o mecanismo de banco de dados do SQL Server. Mais indicado para aceitar conexões remotas ou administrar remotamente.

Express com Advanced Services (SQLEXPRADV)
• Esse pacote contém todos os componentes do SQL Server Express, incluindo a versão completa do SQL Server Management Studio. Este pacote inclui a Pesquisa de Texto Completo e o Reporting Services.

Faça o download do SQL Server 2016 Express

O SQL Server 2016 Express está disponível para download gratuitamente aqui. Esta versão é compatível com o Windows 10, Windows 7 SP1, Windows 8, Windows 8.1, Windows Server 2008 Windows Server 2008 R2, Windows Server 2008 R2 SP1, Windows Server 2012 e Windows Server 2012 R2.

Outros requisitos incluem processador Intel com 1GHz ou mais rápido, mínimo de 512MB de memória RAM e pelo menos 4.2GB de espaço livre em disco.

Fontes e Direitos Autorais: Baboo.com – Sid Vicious @ 2 jun 2016 | 8:45 am

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.