# OLTP - Online Transaction Processing

Sistemas Transacionais

## Transações

A execução de comandos SQL como transações é importante para assegurar a confiabilidade das operações e a consistência dos dados dos bancos. Mecanismos de OLTP (On-line Transaction Processing) asseguram aos bancos de dados individuais diversos requisitos relacionados a manutenção da consistência dos dados armazenados. Um sistema de banco de dados distribuídos necessita de mecanismos que garantam para o sistema distribuídos os mesmos requisitos de segurança assegurado pelos bancos de dados individuais.
Essa tarefa se torna mais crítica quando os dados estão, de fato, distribuídos em vários bancos. O componente chave desse processo é o global transaction monitor.

### Propriedades das Transações

As transações garantem propriedades fundamentais para manutenção da consistência dos dados denominadas ACID:
* Atomicidade: O conjunto de operações agrupados numa transação é executado integralmente ou não é executado. O mundo externo não vê as fases intermediárias.
* Consistência: Em caso de falha, os bancos de dados são colocados em seu estado original.
* Isolamento: Os efeitos de uma transação devem ser transparentes para as demais transações, enquanto ela estiver sendo executada.
* Durabilidade: Após o commit, o feito sobre os objetos alterados deverão ser permanentes (persistidos).

### Implementação das Transações

A técnica mais comumente utilizada para implementar transações é a utilização de arquivos de logs conhecidos como Writeahead. Nessa técnica cada operação a ser efetuada no banco é primeiro escrita num arquivo de log e depois efetuada

## Monitores de Transação

Os monitores de transação desacoplam a conexão dos usuários com o banco de dados

### Módulo de Requisições de Transações Globais (GTR)

Recebe as solicitações de transações distribuídas feitas pelos usuários e as deposita numa fila para processamento.

### Módulo de Análise da Semântica Global

Valida as requisições depositadas na fila para verificar erros de semântica e todos os objetos que são referenciados na transação para ver se eles existem no catálogo. se a verificação for positiva, a requisição prossegue para o próximo módulo. se houver um erro na requisição a requisição é retirada da fila e o usuário é notificado (através do GTR).

### Módulo de Decomposição de Consultas Globais (QDM)

Quebra uma consulta em subconsultas, de maneira que elas possam ser enviadas individualmente para os sites remotos onde os fragmentos das tabelas estão localizados.

### Módulo de Localização de Objetos

Substitui os nomes de campos e tabelas globais que aparecem nas subconsultas pelos nomes utilizados localmente pelos bancos locais. Adiciona informações de endereçamentos que serão utiilzadas pelo dispatcher.

### Módulo de Otimização de Consultas

Elimina as possíveis redundâncias introduzidas pela decomposição das consultas.

### Módulo de Escalonamento de Transações

Gerencia a execução de várias transações concorrentes, bloqueia os objetos envolvidos nas transações (lock) e implementa as operações de controle de transação global através de técnicas como two-phase commit (recovery).

### Módulo de Encaminhamento de Transações (DISPATCHER)

Módulo de comunicação que envia os fragmentos de consulta (subconsultas) para os sites distribuídos. Coleta as respostas vindas dos sites distribuídos e as deposita em filas, gerenciadas pelo módulo de escalonamento.

## Monitores de Transação Comerciais

* Tuxedo
Produzido pela Unix Systems Lab (USL), adquirido pela Novell em 1993. Realiza tranparência de localização, balanceamento de carga, processamento de prioridades, etc.
* Top End
Produzido pela NCR Corporation, com base no modelo Distributed Transaction Processing da X/Open.
* Encina
Produzido pela empresa americana Transarc Corporation, . Baseado no X/Open e no DCE da OSF .