Administração de Banco de Dados

Documentos relacionados
GBC043 - Sistemas de Banco de Dados Lab8 : Transações no PostgreSql

Transacções. Vitor Vaz da Silva

Conceitos. Gestão de Transacções. Transacção. Conceitos e Propriedades. Controlo de Concorrência. Recuperação. Transacções no SGBD Oracle

Sharding e replicação com Citus

Orientações. Transações - PostgreSQL. Relembrando: Propriedades desejáveis. Abrir Prompt de comando ROLLBACK

A U L A 1 0 C R I A N D O V I E W S V I E W S ( V I S Õ E S )

Programando em SQL. Triggers, Stored Procedures e funções. Profa. Késsia Marchi

Lock. Administração de Banco de Dados

Administração de Banco de Dados

Controle de Transações. Banco de Dados André Luiz do Vale Soares

Instituto Federal de Educação, Ciência e Tecnologia de São Paulo - IFSP

Triggers(Gatilhos) Tiago Alves de Oliveira

Banco de Dados. -Aprendendo conceitos -Usando o SQL Conf para: -Conectar no banco de dados -Criar, alterar, excluir e consultar estruturas de tabelas

BANCO DE DADOS. info 3º ano. Prof. Diemesleno Souza Carvalho

Oracle Comandos para Processamento de Transações

BANCO DE DADOS WEB AULA 12. manipulação de dados atualização e exclusão de registros. professor Luciano Roberto Rocha.

Uma solução possível para garantir, em ambiente APEX, a consistência duma estrutura ISA, total e disjuntiva.

RECUPERAÇÃO DE CONTEÚDO BANCO DE DADOS

BDII SQL TRANSAÇÃO Revisão 2

Instituto Federal de Educação, Ciência e Tecnologia de São Paulo

f. Exemplo: verificar condição de aprovação de alunos

Flickr, shindotv/ / BASES DE DADOS. Laboratórios de Informática João Paulo Barraca, André Zúquete, Diogo Gomes

Triggers e Regras. Fernando Lobo. Base de Dados, Universidade do Algarve

Uma solução possível para garantir, em ambiente APEX, a consistência duma estrutura ISA total e disjuntiva.

Técni n c i as e L i L n i g n u g age g ns n p ara r Ba B nc n o d e D ados I ACCESS

Sistemas de Bases de Dados 2.º teste (com consulta limitada: 2 folhas identificadas) - Duração: 2 horas

Prof. Josenildo Silva

Progress DCA Desenvolvendo Aplicações Caracter Parte 1

Mapeando Relacionamentos Entre Classes com Anotações Hibernate Por: Raphaela Galhardo Fernandes Gleydson de Azevedo F. Lima

Progress DCA Desenvolvendo Aplicações Caracter Parte 3

Linguagens Procedurais no PostgreSQL: Funcoes. Linguagens Procedurais no PostgreSQL: Funcoes

Criando Transações. Prof. Fernanda Baião. TbEstoqueLivros. TbEstoqueLivros. ID IDLoja IDLivro Estoque

Triggers em PostgreSQL. Linguagem de Programação de Banco de Dados. Triggers em PostgreSQL. Triggers em PostgreSQL

DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E OTIMIZAÇÃO DE DADOS. Fábio Roberto Octaviano

revisão Controle de Concorrência com Locks Bancos de Dados I 2015/02

Administração de Banco de Dados

Sistemas de Informação

PROGRAMAÇÃO EM BANCO DADOS Stored Procedure e Trigger

UNINGÁ UNIDADE DE ENSINO SUPERIOR INGÁ FACULDADE INGÁ CIÊNCIA DA COMPUTAÇÃO CURSORS. Profº Erinaldo Sanches Nascimento

C A P I T U L O 10 F U N Ç Õ E S I N T E R N A S P H P P A R A B A N C O D E D A D O S

PL/pgSQL por Diversão e Lucro

Transações Seguras em Bancos de Dados (MySQL)

26/04/2017 Triggers no SQL Server: teoria e prática aplicada em uma situação real

BD II (SI 587) Procedimentos Armazenados

MySql. Introdução a MySQL. Andréa Garcia Trindade

Funções em PostgreSQL

Laboratório de Banco de Dados Prof. Luiz Vivacqua. PL/pgSQL A Linguagem de programação do PostgreSQL

Introdução às funções e procedimentos. SQL suporta funções e procedimentos úteis com tipos de dados específicos

GES013 - Sistema de Banco de Dados SQL/DML no PostgreSQL Parte 1 Introdução e Consultas Basicas

Sistemas de Bases de Dados 2.º teste (com consulta limitada: 2 folhas identificadas) - Duração: 2 horas

A U L A 3 S U B G R U P O S D M L E D Q L : I N S E R I N D O E P E S Q U I S A N D O D A D O S E M U M A T A B E L A

FUNCTION ) RETURNS INTEGER AS $$ DECLARE

S U B G R U P O S D M L E D Q L : A L T E R A N D O E A P A G A N D O D A D O S E M U M A T A B E L A

BANCO DE DADOS WEB AULA 9. concessão e revogação de privilégios. professor Luciano Roberto Rocha.

Sistemas de Informação e Bases de Dados 2012/2013. Stored Procedures e Triggers

SQL Gatilhos (Triggers)

SQL CREATE DATABASE. MySQL, SQL Server, Access, Oracle, Sybase, DB2, e outras base de dados utilizam o SQL.

FACULDADE INGÁ Unidade de Ensino Superior Ingá Ltda Ciência da Computação TRIGGERS. Prof. Erinaldo Sanches Nascimento

Controle de Transação

PostgreSQL. André Luiz Fortunato da Silva Analista de Sistemas CIRP / USP alf@cirp.usp.br

Lista 02 Sistema de Banco de Dados CAP 241 Computação Aplicada I

BANCO DE DADOS PARA NINJAS

Sistemas de Gerência de Bancos de Dados. 5 - Controle de Concorrência Tópicos Adicionais

Aula 06 Sistemas Embarcados LT38C

EXEMPLO DE FLASHBACK VERSIONS QUERY E FLASHBACK TRANSACTION QUERY

Tutorial SQL Server 2014 Express

Manipulação de Dados com SQL

Java DataBase Connectivity - JDBC. Ramon Lopes Embaixador de Campus Sun - UFBA

DML: Conceitos Básicos INSERT UPDATE DELETE Atividade. Banco de Dados. Aula SQL (III) Bruno Neiva Moreno

ESTUDO DE CASO EM PL/SQL

Triggers em SQLite. Fernando Lobo. Base de Dados, Universidade do Algarve

Bases de Dados 2007/2008. Aula 8

Bancos de Dados I. Integridade semântica

SGBD. Funções Básicas de um SGBD

ManualPostgre Documentation

Conceitos básicos. Funcionario SIAPE Nome Lotacao Cargo Salario Admissao

INE5645 Programação Paralela e Distribuída - Prova 1 22/10/2012 Aluno: Parte 1 Controle de Concorrência Conceitos Básicos (2,5)

Lista de Exercícios 12 Transações

Disciplina: Banco de Dados Tema: SQL Parte 2

BANCO DE DADOS TRIGGERS (GATILHOS) Prof. Fabiano Papaiz IFRN

SGBD. Definição. Funções básicas

Avisos. Sumário. Atividade em lab Aula 29. Atividade em lab Aula 29. Programando com SQL Triggers EXERCÍCIO LAB SP. Vista da segunda prova

José Antônio da Cunha

AULA 8. Ambientes Visuais 8.1. OBJETIVO DA AULA SQL (Structured Query Language)

Administração e Optimização de BDs

WHILE = 0 -- Enquanto não é o fim do cursor, execute.

TRANSAÇÕES. Considerando que estes comandos fazem parte de uma TRANSAÇÃO (veremos como indicar isso):

Marcos Alexandruk Marcos Alexandruk

Tarefa Orientada 17 Scripts

Triggers. um trigger permite que uma determinada sequência de comandos SQL seja accionada quando um determinado evento ocorre.

Curso de Ciência da Computação

Transcrição:

Administração de Banco de Dados Adriano J. Holanda http://holanda.xyz 4/9/05 Transação O modelo de transação do PostgreSQL considera que as operações ocorrem entre e e marcação de tempo para a transação começa após. Como exemplo, executamos a função now() em tempos diferentes e o tempo retornado durante a transação é o valor de que ela iniciou: postgres=# SELECT now(); now - 05-09-04 3:9:06.46063-03 postgres=# SELECT now(); now - 05-09-04 3:9:06.46063-03 Outro aspecto importante é que qualquer erro cancela a transação, e por padrão, as operações já executadas após : postgres=# SELECT ; postgres=# SELECT /0; ERROR: division by zero postgres=# SELECT ; ERROR: current transaction is aborted, commands ignored until end of transaction block Após a divisão por zero, a transação é abortada e fica a espera do.

Savepoints Um forma de se recuperar de erros, e voltar em algum ponto da transação é através do uso do comando SAVEPOINT: postgres=# SELECT ; postgres=# SAVEPOINT s; SAVEPOINT postgres=# SELECT /0; ERROR: division by zero postgres=# TO SAVEPOINT s; postgres=# SELECT ; O comando TO SAVEPOINT s retorna a transação para o ponto s, quando ainda não havia ocorrido o erro de divisão por zero. Bloqueio e deadlocks No PostgreSQL ocorre bloqueio durante as transações, para que haja consistência nas operações concorrentes. Por exemplo ao criarmos um tabela com um único campo id como mostrado a seguir: CREATE TABLE bar AS SELECT as id; E duas operações tentarem modificar o valor de id dentro da transação, como no exemplo mostrado a seguir. A segunda operação, que ocorre depois da primeira, só conseguirá atualizar o valor do campo id após a primeira transação tiver encerrado. postgres=# UPDATE bar SET id=id+; UPDATE postgres=# UPDATE bar SET id=id+; UPDATE Para verificar como pode ocorrer deadlock, vamos criar uma tabela chamada custo e inserir dois valores para os ids e :

postgres=# CREATE TABLE custo(id INTEGER, valor INTEGER); CREATE TABLE postgres=# INSERT INTO custo VALUES (, 300); INSERT 0 postgres=# INSERT INTO custo VALUES (, 500); INSERT 0 Vamos realizar duas transações, na transação A vamos transferir 00 unidades do id para o, e na transação B transferir 50 unidades do id para o id. Como as operações são realizadas concorrentemente, haverá deadlock quando a transação B tentar bloquear que já está bloqueado pela transação A, e o sistema notar que a transação A está esperando o desbloqueio de, que está bloqueado pela transação B. -- transação A postgres=# UPDATE custo SET valor=valor-00 WHERE id = ; UPDATE postgres=# UPDATE custo SET valor=valor+00 WHERE id = ; UPDATE -- transação B postgres=# UPDATE custo SET valor=valor-50 WHERE id = ; UPDATE postgres=# UPDATE custo SET valor=valor+50 WHERE id = ; ERROR: deadlock detected DETAIL: Process 6633 waits for ShareLock on transaction Process 7735 waits for ShareLock on transaction 96; b HINT: See server log for query details. O deadlock pode ser evitado pelo uso de bloqueio da tabela com o comando LOCK que apresenta várias possibilidades para o controle do bloqueio. O comando a seguir mostra as possibilidades de bloqueio: postgres=# \h LOCK Command: LOCK Description: lock a table Syntax: LOCK [ TABLE ] [ ONLY ] name [ * ] [,...] [ IN lockmode MODE ] [ NOWAIT ] where lockmode is one of: ACCESS SHARE ROW SHARE ROW EXCLUSIVE SHARE UPDATE EXCLUSIVE SHARE SHARE ROW EXCLUSIVE EXCLUSIVE ACCESS EXCLUSIVE Cursor O uso do cursor é uma forma de evitar que grandes quantidades de dados vão para o cliente que fez a consulta de um só vez. Como exemplo vamos criar uma tabela com 6 entradas postgres=# CREATE TABLE t_teste AS SELECT * FROM generate_series(, 6) AS x; SELECT 6 e criar um cursor para percorrer as entradas da tabela dentro de um transação que inicia em postgres=# DECLARE cur_teste CURSOR FOR SELECT * FROM t_teste; DECLARE CURSOR 3

e acessar o resultado da colsulta usando o cursor postgres=# FETCH NEXT FROM cur_teste; x --- Para acessar um número de maior de entradas inserimos o número após FETCH e removemos NEXT: postgres=# FETCH 8 FROM cur_teste; x --- 3 4 5 6 7 8 9 (8 rows) Para encerrar a busca, fechamos a transação postgres=# END; Após o encerramento da transação, o cursor não existe mais: postgres=# FETCH NEXT FROM cur_teste; ERROR: cursor "cur_teste" does not exist Sequência Uma sequência no banco de dados PostgreSQL é criada pelo comando CREATE SEQUENCE: postgres=# CREATE SEQUENCE seq_teste; CREATE SEQUENCE As sequências são acessadas pelas funções: ('nome'): retorna o próximo número disponível na sequência e atualiza o contador; currval('nome'): retorna o valor atual do contador; setval('name', valor): atribui valor para o contador. A seguir, são mostradas os usos das funções que manupulam as sequências: 4

postgres=# SELECT currval('seq_teste'); currval postgres=# SELECT setval('seq_teste',8); setval -------- 8 9 5