Custo de Execução de Queries | Oracle
Valores booleanos em bases de dados
A Arte das Bases de Dados
ISBN: 978-972-618-627-4
Trigger para validação de data | Oracle
Considerem-se as seguintes tabelas:
- Curso
- Disciplina
- Disciplina no Curso
CREATE OR REPLACE TRIGGER trg_check_data_cessacao
BEFORE INSERT OR UPDATE ON “Disciplina no Curso”
FOR EACH ROW
BEGIN
IF( :new.”Data de Cessação” > SYSDATE )
THEN
RAISE_APPLICATION_ERROR( -20001,
‘Data de Cessação inválida: esta data tem que ser maior que o valor actual da data.’);
END IF;
END;
SYSDATE numa restrição CHECK em Oracle
[Data de Fim] > SYSDATE
30-JAN-2012 > 26-DEC-2011
………………………………………
30-JAN-2012 > 10-FEB-2013
O valor de SYSDATE vai aumentando até ultrapassar o valor inserido na coluna, tornando o CHECK inválido e, consequentemente, a base de dados inconsistente. Dai não ser possível utilizar este tipo de regra de (anti)-integridade.
A validação terá que ser feita por intermédio de um trigger do tipo BEFORE INSERT OR UPDATE.
DBA | Isolamento de transacções
As normas ANSI SQL determinam os seguintes três tipos de isolamento transaccional nos sistemas de gestão de bases de dados:
- Dirty Read. A transacção T1 modifica um facto. Outra transacção T2 lê esse mesmo facto antes que T1 faça commit ou rollback. Se T1 desistir da transacção (rollback) então T2 leu um facto que nunca foi confirmado e, como tal, nunca existiu.
- Non-Repeatable Reads. A transacção T1 lê um facto. Outra transacção T2 modifica ou apaga esse facto e faz commit. Se T1 renovar o pedido desse facto descobre que ele foi modificado ou que já não existe.
- Phantom. A transacção T1 lê um conjunto de factos de acordo com uma determinada condição. A transacção T2 insere novos factos, que satisfazem a condição de T1, e confirma-os na base de dados. Se T1 voltar a fazer a mesma leitura-condição obtém um conjunto de factos distintos dos da leitura inicial.
DBA | Gestão de Transacções
Máquina do tempo…em Oracle
Através desta característica é possível fazer o seguinte:
- Pesquisar dados que já não existem (“do passado”);
- Analisar os metadados de modo a evidenciar o historial de alterações à base de dados;
- Recuperar tabelas ou linhas para um determinado ponto do tempo;
- Fazer rollback de transacções enquanto a base de dados de produção continua activa;
- Fazer a gestão de transacções.
Tabela dual ou dummy
Como fazer e utilizar?
Em primeiro lugar deve criar-se a tabela:
——————————————————–
– DDL para a tabela LAMY
——————————————————–
CREATE TABLE lamy (
lam varchar(2)
);
Em segundo lugar insere-se uma linha na tabela:
INSERT INTO lamy (lam) VALUES (‘a’);
Aplicações:
- Obter a data actual do sistema:
- select SYSDATE from lamy;
- Fazer um cálculo:
- SELECT (2+4) / 2 FROM lamy;
- Criar uma tabela com 100000 linhas com dados aleatórios:
- CREATE TABLE tabela_teste AS
SELECT LEVEL id, SYSDATE+DBMS_RANDOM.VALUE(-1000, 1000) valor_data, DBMS_RANDOM.string(‘A’, 20) valor_texto
FROM lamy
CONNECT BY LEVEL <= 100000;
- NOTA: O tempo necessário para inserir 100 000 linhas na tabela pode ser muito longo. Quem quiser pode experimentar com um número menor de linhas. O tempo de execução aumenta (quase) exponencialmente se a tabela lamy tiver mais do que uma linha.
- CREATE TABLE tabela_teste AS