NUNCA MAIS PASSE RAIVA POR NÃO CONSEGUIR RESOLVER UM PROBLEMA COM O EXCEL - GARANTIDO!

UNIVERSIDADE DO VBA - Domine o VBA no Excel Criando Sistemas Completos - Passo a Passo - CLIQUE AQUI

Você está em: PrincipalArtigosWindows : Sequencesqlserver
Quer receber novidades e e-books gratuitos?
Criando Sequence com SQL Server

Introdução

Nos dias de hoje a maior parte dos projetos são multiuso e aplicações client/server, onde diversos usuários acessam e alteram os dados ao mesmo tempo. Com aumento das aplicações baseadas em browser, alguns problemas podem ser diagnosticados, um deles é a concorrência de dados.

Descrição do problema

O que é concorrência de dados? Bem, vamos imaginar um cenário hipotético para ilustrar a explicação. Imagine uma aplicação que possui um cadastro de clientes, este cadastro de clientes possui uma tabela nomeada cad_cliente e composta dos campos: codcliente, nomecliente. Onde codcliente é um integer e a primary key da nossa tabela e nomecliente é um varchar(20).

Agora imaginemos que o cliente do nosso banco de dados possui duas secretárias que atendem a todo pais e cadastram clientes a todo tempo. A secretária “A” abre um evento de inserção na tabela de cad_cliente ao mesmo tempo em que a secretária “B”, supondo que ambas fossem salvar ao mesmo tempo os registros, ou que por uma questão de velocidade de hardware as informações de gravação chegassem ao SGBD ao mesmo tempo, como seria definido o campo codcliente? Ok, poderiamos utilizar campos identity (campos auto-incrementáveis como os do MS-Access), porém não é minha intenção aqui discutir qual a melhor prática até porque isso vai depender do projeto, da estrutura e do ambiente. Pode ser uma ótima sugestão para um próximo artigo.

Solução proposta

Uma boa solução é criar uma tabela auxiliar (por exemplo, NumeroSequencial) que conterá o próximo número seqüencial para cada chave de cada tabela. Para cada registro inserido em uma tabela, você necessitará obter um valor da tabela NumeroSequencial e incrementar o número. Este valor deverá ser usado em um (ID) identificador único de registro a ser inserido.

O uso de sequence é uma prática muito comum principalmente em bancos como postgressql, ORACLE e outros, os quais possuem funções especificas para tratamento de seqüenciais. No caso do postgressql o comando Create Sequence cria um gerador de números seqüenciais, que envolve a criação e a inicialização de uma nova tabela com uma única linha.

Esta técnica é um caminho para implementar controle de concorrência de chaves quando não é possível utilizar campos identity. Técnica que também poderá causar problemas de transação, porque irá criar processos de read, lock e update em valores chaves. Teremos que fazer um controle de lock do registro para resolver esses problemas e não criar um lock da página de dados (o que não era possível em versões antigas do SQL Server, por isso muitos analistas afirmam que não é possível fazer controle de chaves concorrentes no SQL Server).

Solucionando o problema

Resolveremos esse problema por meios mecânicos aumentando o número de registros para preencher o tamanho de uma página de dados. Criando campos “dstmp” no formato char que será usado para adicionar o tamanho necessário aos registros até preencher o equivalente a uma página de dados.

Página de dados é a menor área de armazenamento de dados do SQL Server, e preenchendo ela, estaremos provocando o lock (quando for o caso) somente de uma linha, no caso a página de dados que foi ocupada por valores NULL.

No SQL Server 2000 e SQL Server 7.0, isso não é necessário já que nessas versões automaticamente o lock pertence a um registro e não a uma página de dados. (Lembrando que uma página de dados pode conter mais de um registro). Entretanto, o processo ainda pode competir para read, lock e update um valor chave no mesmo registro. Isto pode conduzir para um deadlock. A procedure que segue é usada para obter um identificador para da tabela NumeroSequencial.

Vamos voltar a nossa hipótese, nós temos dois processos no servidor e os dois necessitam inserir um registro em uma cad_cliente. Um processo lê o registro da tabela NumeroSequencial. Em seguida o outro processo também ira ler um registro da tabela NumeroSequencial. O primeiro processo assumira o mesmo Id do segundo já que ambos estão lendo a tabela ao mesmo tempo. Por isso cada um terá que ter um lock de registro, permitindo a os outros processos somente pegar o Id quando uma atualização estiver concluída. Esta situação é chamada de deadlock.

O SQL Server tem um mecanismo que ira matar um dos processos para que um possa continuar. Isso se faz necessário em uma aplicação client/server para evitar a perda de dados. O melhor caminho para tratar um deadlock é utilizar um hint na clausula From que segue no select forçando o SQL Server a criar um lock na clausula update e instantaneamente evitando o compartilhamento do registro. Um lock irá prevenir que outro processo venha a ler e criar locks até que o registro de origem seja completado.

O segundo processo irá esperar o primeiro processo ser concluído, segue a procedure com o tratamento de lock.

Conclusão

Neste artigo procuro mostar uma solução competente para resolver um problema grave de concorrência de dados usando o MS SQL Server, como eu disse no inicio do artigo não é meu propósito ficar discutindo se essa é a melhor ou pior técnica. Mas existem outras soluções, por exemplo: utilizar campos identity (campos auto-incrementáveis), fazer o controle de campos IDs através da aplicação e etc.. A escolha deve ser por conta do DBA ou AD do projeto, afinal cada caso é um caso e cada aplicação tem suas particularidades.


Web site: www.crespi.pro.br

email: rodrigo@crespi.pro.br


Confira todos os artigos de Windows e Redes:

1 Como Criar Servidores Web com o Windows Server
1 Instalando o Google Chrome Com SCCM 2012 R2
1 Como Mapear Unidade De Rede Com Drive Maps
1 Como Utilizar Grupos Restritos No Active Directory
1 Como configurar o Client Push Installation no System Center
1 Como Criar uma Collection no System Center
1 Como Criar Atalho Na Área De Trabalho Com GPO
1 Como configurar a GPO para o System Center 2012 R2
1 Ninite Software Deployment
1 Guia de Certificação Microsoft
1 Como Alterar A Mascara de Rede No Escopo do DHCP
1 Como Criar uma GPO com WMI Filter
1 Como fazer uma migração de DHCP
1 Como Criar Pacotes de Instalação Automáticos e Silenciosos
1 Certificação ITIL
1 Como fazer download e instalar o VMWare Workstation 11
WINDOWS 7
1 Como Instalar o Windows 7 Automaticamente
1 Como Formatar o Windows 7
1 Os melhores Antivírus para Windows 7
1 Os melhores Aplicativos para Windows 7
1 Os melhores recursos do Windows 7
1 Como usar o Windows 7 para facilitar o seu dia a dia
1 Como escolher entre o Windows 7 e 8
WINDOWS 8
1 Como Formatar o Windows 8
1 Os melhores Antivírus para Windows 8
1 Os melhores Aplicativos para Windows 8
1 Os melhores recursos do Windows 8
1 Como usar o Windows 8 para facilitar o seu dia a dia
1 Principais diferenças entre o Windows 8 e 7
WINDOWS 2003 SERVER
1 Windows 2003 - DNS - Instalação do DNS e Criação de Zonas
1 Windows 2003 - DNS - Configurando as Propriedades de uma Zona
1 Windows 2003 - DNS - Configurando as Propriedades do Servidor DNS
1 Windows 2003 - DNS - Integração do DNS com o Active Directory
1 Windows 2003 - DNS - Atualização Dinâmica
1 Windows 2003 - DNS - Zonas de Pesquisa Inversa
1 Windows 2003 - MBSA - Microsoft Baseline Security Analyzer
1 Windows 2003 - Permissões de Compartilhamento
1 Windows 2003 - Permissões e Compartilhamento de Impressoras
1 Windows 2003 - Permissões NTFS
1 Windows 2003 - WINS - Introdução ao WINS
1 Windows 2003 - WINS - Instalação do WINS
1 Windows 2003 - WINS - Configurando as Propriedades do Servidor WINS
1 Windows 2003 - WINS - Replicação do WINS
1 Windows 2003 - DHCP – Instalação
1 Windows 2003 - DHCP - Configuração de Escopos
1 Windows 2003 - DHCP - Backup e Restore
1 Windows 2003 - DHCP - Compactando a Base de Dados do DHCP
1 Windows 2003 - DHCP - Auditoria no DHCP
1 Windows 2003 - Autenticação
1 Windows 2003 - Modelos de Segurança
WINDOWS - GERAL
1 Saiba Porque o Windows XP se Tornou uma Ameaça
1 Acesso Remoto [vídeo]
1 Como se preparar para os Exames da Microsoft [vídeo]
1 Cenários para utilização do Windows AIK - Parte 2
1 Cenários para utilização do Windows AIK - Parte 1
1 Windows AIK - Kit de Instalação Automática
1 Introdução ao MDT - Microsoft Deployment Toolkit
1 Implementando Infraestrutura entre Matriz e Filial - Parte 1
1 Implementando Infraestrutura entre Matriz e Filial - Parte 2
1 Implementando Infraestrutura entre Matriz e Filial - Parte 3
1 Implementando Infraestrutura entre Matriz e Filial - Parte 4
1 Caminhos de upgrade para o Windows Vista
1 Instalação do Windows Vista
1 Windows Vista Upgrade Advisor
1 Configurações básicas do Windows Mail
1 Contas de usuário no Windows Vista
1 Contatos do Windows
1 Cotas em disco no Windows Vista
1 Discos básicos no Windows Vista
1 Discos dinâmicos no Windows Vista
Seta Vídeo: Usando Sysprep e Ghost
Seta Vídeo: Instalando o Windows XP de forma automatizada
Seta Vídeo: Baixando atualizações do Windows e Integrando na Instalação – Parte 2
Seta Vídeo: Baixando atualizações do Windows e Integrando na Instalação – Parte 1
Seta Vídeo: Criando usuários e grupos no Active Directory com scripts automatizados
Seta Vídeo: RunAs Powerful - Script super poderoso
Seta Certificação - MCTS Windows 7
Seta Vídeo: Instalação do Serviço DNS - Parte 1
Seta Vídeo: Office Communications Server 2007 R2 – Parte 1
1 Virtual PC 2007 - Parte 2 - Instalação do Virtual PC 2007
1 Virtual PC 2007 - Parte 1 - Introdução ao Virtual PC 2007
ACTIVE DIRECTORY
1 Tutorial de Active Directory - Parte 5
1 Tutorial de Active Directory - Parte 4
1 Tutorial de Active Directory - Parte 3
1 Tutorial de Active Directory - Parte 2
1 Tutorial de Active Directory - Parte 1
1 Aprenda a Usar o VMware - Parte 2
1 Aprenda a Usar o VMware - Parte 1
1 Saiba Como Ter Boletos Bancários em Seu Site
1 Alterando o Texto do Botão Iniciar
1 System Restore (Restauração do Sistema)
1 Recovery Console (Console de Recuperação)
1 Pecados Mortais no uso do E-mail - Parte 2
1 Pecados Mortais no uso do E-mail
1 SUS - Implementação e Administração - Parte 2
1 SUS - Implementação e Administração - Parte 1
1 Windows Server 2003 - O novo recurso Shadow Copies
1 Tutorial sobre Profiles
1 Criptografia no Windows 2000 Server e o Agente de Recuperação
1 Tudo sobre Permissões de Segurança: Compartilhamento e NTFS
1 Implementando o DFS: Distributed File System
1 Boot no Windows 2000/XP e o arquivo Boot.ini
1 Gerenciamento de Discos e Armazenamento
WINDOWS 2000
1 DHCP no Windows 2000 Server
1 DNS no Windows 2000 Server
1 Implementação e Administração do SUS
1 Serviço RRAS no Windows 2000 Server
1 Introdução às redes com Windows 2000 – Parte 1
1 Introdução às redes com Windows 2000 – Parte 2
1 Introdução às redes com Windows 2000 – Parte 3
1 Primeiros passos com Ajax Control Toolkit
1 Faça a sua declaração de imposto de renda com Linux
1 Sistema de Controle de Gasolina Mobile
1 Série Visual Source Safe - Parte 1
1 Extraindo dados para arquivo texto
1 Como exibir informações com múltiplas instruções SQL
1 Expressões Regulares No Microsoft SQL Server 2000
1 Cursores
1 O Namespace My
1 JOB no SQL Server
1 Criando uma aplicação Windows Service
1 Criando Class Libraries com VB.NET - Parte 2
1 Criando Class Libraries com VB.NET
1 Importação de arquivos XML com SQL Server 2000
1 Web Services e AD/DBA
1 Criando Sequence com SQL Server
Quer receber novidades e e-books gratuitos?

Cursos Online

  • Banco de Dados
  • Carreira
  • Criação/Web
  • Excel/Projetos
  • Formação
  • + Todas as categorias
  • Contato: Telefone: (51) 3717-3796 | E-mail: webmaster@juliobattisti.com.br | Whatsapp: (51) 99627-3434

    Júlio Battisti Livros e Cursos Ltda | CNPJ: 08.916.484/0001-25 | Rua Vereador Ivo Cláudio Weigel, 537 - Universitário, Santa Cruz do Sul/RS, CEP: 96816-208

    Todos os direitos reservados, Júlio Battisti 2001-2019 ®

    [LIVRO]: MACROS E PROGRAMAÇÃO VBA NO EXCEL 2010 - PASSO-A-PASSO

    APRENDA COM JULIO BATTISTI - 1124 PÁGINAS: CLIQUE AQUI