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
ODS vs. Data Warehousing
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
DBA | Transacção
O que não se deve fazer no desenvolvimento de um DW
O que não se deve fazer no desenvolvimento de um DW
Em seguida listam-se algumas das coisas que não se deve fazer no desenvolvimento de um DW. Os elementos não estão ordenados e a importância de cada um deles depende do projecto em causa.
- Evitar a excessiva focalização na tecnologia em si mesma. O único aspecto que interessa é os requisitos dos processos de negócio e os objectivos das organizações;
- Desenvolver o DW sem ter o apoio de elementos de alto nível da administração da organização, pois devido à sua natureza não transaccional os níveis intermédios e baixos da hierarquia não compreendem a importância do DW;
- Nunca ter a veleidade de querer desenvolver todo o DW de uma só vez. O único caminho para o sucesso é a construção de data marts integrados que são disponibilizados ao cliente à medida que ficam prontos;
- Despender tempo e trabalho na tarefa inútil de estruturar o DW como se fosse uma base de dados relacional. O objectivo é conseguir uma estrutura especialmente adaptada à análise da informação e que produza interfaces amigáveis;
- Nunca ir pelo caminho da complexificação da informação, a simplicidade é o lema do bom profissional;
- Evitar a construção de diferentes tabelas de dimensão sobre o mesmo assunto.