Baixe o app para aproveitar ainda mais
Prévia do material em texto
Instituto Federal do Sudeste de Minas Gerais Tecnologia em Sistemas para Internet Alunos ▷ Armando Assunção ▷ Richardson William ▷ Samuel Gonçalves ▷ Wagner Almeida Transações Transações ▷ Conjunto de operações em DML, delimitadas por um inicio e um fim; ▷ Permitem alterações consistentes dos dados; ▷ Iniciam quando se executa o primeiro comando SQL e terminam de acordo com situações pré- determinadas. Vantagens ▷ Permitem mais flexibilidade e controle durante a alteração de dados; ▷ Garantem a consistência de dados em caso de falha de processo do usuário ou falha do sistema. Inicio de uma transação quando: ▷ Uma transação começa quando a primeira instrução DML é encontrada; ▷ Para terminar uma transação, existem vários cenários possíveis. Término de uma transação quando: ▷ Uma instrução COMMIT ou ROLLBACK (diferente de ROLLBACK TO) é executada; ▷ Uma instrução DDL, como CREATE, é executada; ▷ Uma instrução DCL é executada; ▷ O usuário sai do iSQL *Plus; ▷ Ocorre uma falha do sistema. Término de uma transação ▷ Após o término de uma transação, a próxima instrução SQL executável inicia automaticamente a transação seguinte; ▷ Uma instrução DDL ou DCL é submetida a commit automaticamente e, portanto, encerra uma transação de forma implícita. Dica ▷ Aplicações devem explicitar o commit ou rollback de transações antes da finalização do programa. ▷ Como vimos anteriormente: ○ Se o usuário finaliza a sessão, a transação é comitada; ○ Caso contrário (se o processo é encerrado e a sessão finaliza de forma anormal) a transação é cancelada - ocorre rollback. Vantagens de Instruções COMMIT e ROLLBACK ▷ Garantir a consistência de dados; ▷ Visualizar alterações de dados antes de torná- las permanentes; ▷ Agrupar operações relacionadas logicamente; ▷ Permitem controlar as alterações permanentes nos dados; ▷ O comando COMMIT e utilizado para comitar a transação; ▷ Indica que a transação foi finalizada com sucesso; ▷ Grava definitivamente as alterações realizadas pela transação, atualizando o banco de dados. Comitando Transações Cancelando Transações (Rollback) ▷ O comando ROLLBACK cancela a transação, desfazendo todas as ações realizadas até o momento; ▷ Utilizado quando for identificado que o resultado de uma ação em uma transação gera inconsistência nos dados; Savepoints em Transações ▷ SAVEPOINTS são utilizados para criar uma marca na transação, do qual pode se desfazer toda a operação até aquela marca; ▷ SAVEPOINT nome_savepoint: para definir o nome do SAVEPOINT; ▷ Para utilizar o savepoint utiliza-se o comando ROLLBACK TO nome_do_savepoint. Exemplo 1 DECLARE … BEGIN UPDATE funcionarios SET salario = 2000 WHERE id_func = 1; DELETE FROM funcionarios WHERE id_func = 16; SAVEPOINT do_insert; INSERT INTO funcionarios VALUES (1,’teste’,1200,’t@teste.com’,3); COMMIT; EXCEPTION WHEN DUP_VAL_ON_INDEX THEN ROLLBACK TO do_insert; END; Exemplo 1 ▷ No exemplo 1, ao se tentar inserir um novo dado, isto viola a restrição de chave primária, mas a transação não é completamente abortada; ▷ Apenas o ponto que foi capturado pela exceção (inserção de um novo dado) não é executado, ocorrendo um rollback_to até o ponto de salvamento antes desta instrução. Exemplo 2 BEGIN UPDATE funcionarios SET salario = 1999 WHERE id_func = 1; DELETE FROM funcionarios WHERE id_func = 15; SAVEPOINT do_insert; INSERT INTO funcionarios VALUES (1,’teste’,1200,’t@teste.com’, 3); COMMIT; END; Exemplo 2 ▷ O exemplo 2 é bem parecido com o primeiro, com a diferença de não ter sido capturada a exceção e não ser executado o rollback_to; ▷ Isso faz com que ocorra um erro, e nenhuma das operações desta transação seja executada. Gerenciamento de Transações Nomeando Transações ▷ Transações podem ser nomeadas com um texto simples. ▷ Este nome é um lembrete do que a transação se trata. ▷ Para nomear uma transação, deve-se usar: SET TRANSACTION NAME <nome>. ▷ Quando se nomeia uma transação, esta é associada ao seu ID. ▷ Os nomes não precisam ser únicos. Diferentes transações podem ter o mesmo nome ao mesmo tempo pelo mesmo dono. Nomeando Transações Vantagens de Transações nomeadas ▷ Facilidade de monitorar longas transações. ▷ Podem ser utilizadas em conjunto com os ID’s de transação. ▷ Mineradores de log podem usar nomes de transação para pesquisas no registro de alterações. Comentários de Commit ▷ Em versões anteriores, uma transação poderia ser associada a um comentário no commit. ▷ No entanto, um comentário pode ser associado a uma transação apenas quando houver um commit. ▷ Comentários de commit estão em processo de depreciação. Nomes de transação são altamente recomendados pela Oracle. Caso de uso - Transações autônomas ▷ Suponha que uma aplicação deve guardar registros de auditoria: ○ Um usuário alterar uma tabela de funcionários; ○ Uma trigger dispara e insere na tabela de auditoria o ocorrido. ▷ Neste caso, uma transação deve ser independente da outra. Transações Autônomas ▷ São transações independentes que podem ser chamadas dentro de outra transação. ▷ A transação principal é suspensa durante a execução da transação autônoma. ▷ São úteis para a realização de ações que devem ser executadas de forma independente. Transações Autônomas Figura 1: Execução de uma transação autônoma. A transação principal aguarda o término da execução da transação autônoma. ▷ Transações autônomas não vêm as mudanças realizadas e não compartilha recursos com a transação principal. ▷ As mudanças realizadas pela transação autônoma serão visíveis para outras transações após o commit da transação autônoma. ▷ Transações autônomas podem chamar outras transações autônomas. Não há limites de níveis de chamada. Características Transações Distribuídas ▷ São transações que processam dados em dois ou mais nós de um banco de dados distribuído; ▷ Utilizam um objeto de esquema chamado link de banco de dados; ▷ O link de banco de dados descreve como um nó de banco de dados distribuído pode se conectar em outro nó; Transações Distribuídas ▷ Uma transação distribuída altera dados em vários nós de um bancos de dados distribuído; ▷ Isso faz com que seu processamento seja mais complexo; ▷ O Oracle Database deve ser capaz de coordenar o controle de transações de forma distribuída, mantendo a consistência dos dados, mesmo se ocorrer uma falha de rede ou de sistema. Transações Distribuídas Figura 2: Visão de acesso a um banco de dados distribuído. Exemplo de uma transação distribuída BEGIN UPDATE scott.dept@hq.us.example.com SET loc = 'REDWOOD SHORES' WHERE deptno = 10; UPDATE scott.emp SET deptno = 11 WHERE deptno = 10; UPDATE scott.bldg@maint.us.example.com SET room = 1225 WHERE room = 1163; COMMIT; END; Importante ▷ Mesmo que um banco de dados trabalhe de forma distribuída, se as operações de uma transação forem executadas em apenas um nó, a transação é classificada como uma transação remota, não distribuída. Registro das transações ▷ O ORACLE registra todas as alterações feitas em um banco de dados na estrutura redo log buffer cache; ▷ Um processo LGWR escreve as informações desses buffers para o disco; ▷ Um outro processo conhecido como ARCH pode ser opcionalmente utilizado para armazenar as informações sobre as alterações feitas nos dados em outro dispositivo, sempre que um arquivo redo log for preenchido; Registro das transações ▷ Somente um arquivo redo log é utilizado por vez, entretanto em um banco de dados podem existirdiversos arquivos de redo log; ▷ O seu número mínimo é de dois grupos, cada um deles podendo conter um ou mais arquivos. O que acontece quando um COMMIT é executado? ▷ Um usuário emite o comando COMMIT para finalizar sua transação; ▷ Um registro desse COMMIT é colocado no redo log buffer; ▷ O processo em background LGWR grava as entradas de redo log dos buffers para o arquivo redo log correntemente em uso, se possível usando uma gravação multi-bloco; O que acontece quando um COMMIT é executado? ▷ O usuário é notificado de que a transação foi efetivada; ▷ Os locks nos recursos são liberados assim como os blocos do segmento de rollback alocados para a transação do usuário. Referências ▷ Centro de Ajuda Oracle - Conceitos de Banco de Dados - Transações ▷ Centro de Ajuda Oracle - Guia do administrador de banco de dados - Conceitos de Transações Distribuídas.
Compartilhar