Máquina do tempo…em Oracle
Acontece por vezes que alguns dados podem inadvertidamente ser apagados ou modificados e não há tempo para os restaurar a partir de um dispositivo de backup. O Oracle possui uma tecnologia bastante útil denominada Flashback que permite que se façam queries “a um passado recente”. O “quanto” é permitido recuar depende do espaço disponível em UNDO.
Suponha-se que na última hora se apagou qualquer linha da tabela Curso e que agora é imperioso saber que dados foram removidos:
SELECT * FROM “Curso” AS OF TIMESTAMP SYSDATE-1/24;
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
Este tipo especial de tabela, denominada em inglês de dummy, serve o propósito especial de fazer algumas operações sobre conjuntos sem aceder a tabelas de dados propriamente ditas. Isso alivia a carga do sistema e impede, por exemplo, que se façam utilizações indevidas a tabelas com muitas linhas.
Este tipo de tabelas pode ser utilizado para trabalhar com triggers ou, mais simplesmente, para obter uma marca temporal. Convém que a tabela dummy tenha uma única linha para evitar que o resultado se multiplique num output com o mesmo número de linhas da tabela.
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
How to teach computer programming?
- Maybe there are a lot of methods to teach computer programming to novices. All of them have been exhaustively used and documented in computer science literature. But most of those studies and related publications have forgotten the most basic and fundamental principle: in order to able to write a person have, in first place, to have a good reading capacity.
- Having forgotten this most teachers pretends that students begin to write even when they cannot read. Pursuing this line of thought whatever the chosen method (classical or less classical; with beautiful or ugly analogies; with more or less tutorial sessions; beginning with object-programming or structured-programming paradigm) the outcome will be always a “negative” one.
- The only way to teach students in firsts years of computer programming courses is to teach them how to read computer programs and only after that task accomplished it will make any sense to begin writing computer programs with them.