Especificação Genérica de Gatilhos e Procedimentos Armazenados para a Geração de Históricos de Dados

Documentos relacionados
Um Modelo para Projetar e Implementar Bancos de Dados Analítico-Temporais para Apoio à Tomada de Decisões, Auditorias e Recuperação de Dados

Um Método para Elaborar Bancos de Dados Analítico- Temporais para o Armazenamento de Históricos de Dados

SQL Gatilhos (Triggers)

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

Banco de Dados II. Triggers e Functions. Prof. Moser Fagundes. Curso TSI Instituto Federal Sul-Rio-Grandense (IFSul) Campus Charqueadas

Bancos de Dados I. Integridade semântica

BANCO DE DADOS II Prof. Ricardo Rodrigues Barcelar

Introdução a Banco de Dados Aula 03. Prof. Silvestri

NORMA TÉCNICA E PROCEDIMENTOS GERAIS PARA ADMINISTRAÇÃO DO BANCO DE DADOS CORPORATIVO

NORMA TÉCNICA PARA IMPLANTAÇÃO DE NOVOS SISTEMAS OU APLICAÇÕES NO BANCO DE DADOS CORPORATIVO

BD Oracle. Licenciatura em Engenharia Informática e Computação. Bases de Dados 2003/04

AUDITORIA EM BANCO DE DADOS COM UTILIZAÇÃO DE REGRAS

Agenda. Banco de Dados Temporais. Banco de Dados Temporais. Introdução. Banco de Dados Temporais PRINCIPAIS CONCEITOS DE REPRESENTAÇÃO TEMPORAL

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

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


Triggers no PostgreSQL

Neste artigo, serão apresentados os principais conceitos sobre os TRIGGERS e sua aplicabilidade.

PROGRAMAÇÃO EM BANCO DADOS Stored Procedure e Trigger

Banco de Dados. Marcio de Carvalho Victorino Exercícios SQL

Diretrizes de Qualidade de Projetos

PROCEDIMENTOS ARMAZENADOS (Stored Procedures)

Integridade dos Dados

CEFET.PHB - PI. Plano de Ensino. Banco de Dados. Plano de Ensino. Plano de Ensino. Plano de Ensino - Conteúdo. Plano de Ensino - Conteúdo

TRABALHO DE BANCO DE DADOS POSTGRES MINI-MUNDO: BD PARA GERENCIAMENTO DE UNIDADES DE CONSERVAÇÃO

LIMPEZA E FECHAMENTO DE TABELAS

Logado no OracleXE vamos acessar a opção:

Noções de. Microsoft SQL Server. Microsoft SQL Server

Oracle 10g: SQL e PL/SQL

VISÃO GERAL DE BANCO DE DADOS

MANUAL INSTALAÇÃO WEB SERVICE

4.6. SQL - Structured Query Language

GBD PROF. ANDREZA S. AREÃO

Prof. Antonio Almeida de Barros Jr. Prof. Antonio Almeida de Barros Junior

PL/SQL. Profa. Dra. Cristina Dutra de Aguiar Ciferri. Laboratório de Bases de Dados PL/SQL

Banco de Dados. Um momento crucial na organização dos dados é a forma com que cadastramos estes dados, a estrutura de armazenamento que criamos.

AULA 2 INTERAÇÃO COM O BANCO DE DADOS

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

White-box test: Também conhecido como teste estrutural, tem por objetivo validar os dados derivados das funções do sistema.

17/10/2008. Curso Superior de Tecnologia: Banco de Dados Sistemas para Internet Redes de Computadores

Banco de Dados Avançados Banco de Dados Ativo

AULA 16 - Sistema de Arquivos

Uma Abordagem para Tratamento de Regras de Negócio nas Fases Iniciais do Desenvolvimento

1. REGISTRO DE PROJETOS

MÉTRICAS DE REDE NO ZABBIX

Ensino Técnico Integrado ao Médio FORMAÇÃO PROFISSIONAL. Plano de Trabalho Docente 2014

RECUPERAÇÃO DE CONTEÚDO BANCO DE DADOS

O Gerenciamento de Documentos Analógico/Digital

Aula 3 SBD Modelo Entidade Relacionamento Parte 1. Profa. Elaine Faria UFU

Roteiro 9 - SQL Básico: chave estrangeira, operadores de comparação e operadores booleanos

PROGRAMAÇÃO EM BANCO DADOS Store Procedure e Trigger

Sistemas Operacionais. Prof. André Y. Kusumoto

Administração de Sistemas de Informação I

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

Sumário do Plano de Testes

Modelo Cliente/Servidor Por HIARLY ALVES

Política Gestão de Configuração e Mudança

MANUAL DE PROCEDIMENTOS MPR/SGP-500-R00 ARQUIVAMENTO DE PROCESSOS NA SGP

Guia de utilização da notação BPMN

UML: Diagrama de Casos de Uso, Diagrama de Classes

Formação em Banco de Dados

Sistemas de Informação

Centro Universitário Franciscano

AVISO: Os exemplos contidos no HELP ONLINE são meramente ilustrativos e têm como objetivo principal ensinar o usuário a utilizar o sistema.

SISTEMAS DE INFORMAÇÃO GERENCIAIS

Banco de Dados I Módulo V: Indexação em Banco de Dados. (Aulas 4) Clodis Boscarioli

ACCESS BÁSICO. Exercício 1 NCE/UFRJ. 1. O que são bancos de dados?...

SQL. Curso Prático. Celso Henrique Poderoso de Oliveira. Novatec

Banco de Dados Orientado a Objetos

Escopo do Copilot Optimize - Elaboração de Relatórios

Prova de Fundamentos de Bancos de Dados 2 a Prova

Figura 1: tela inicial do BlueControl COMO COLOCAR A SALA DE INFORMÁTICA EM FUNCIONAMENTO?

LISTA DE VERIFICAÇAO DO SISTEMA DE GESTAO DA QUALIDADE

Manual MQS. Logo após colocar essas informações abrirá a página inicial do sistema:

Uma expressão básica em SQL consiste em três cláusulas: select, from e where.

Laboratório de Banco de Dados II Aula 1. Stored Procedures

MANUAL DE PROCEDIMENTOS MPR/SGP-301-R00 ESTÁGIO PROBATÓRIO

Banco de Dados I. Construindo modelos de dados confiáveis

REGISTRO DE PROJETOS

AULA 2 INTERAÇÃO COM O BANCO DE DADOS

Relatórios. Manual. Pergamum

(Capitais e Interior) (Demais Localidades) (Capitais e Interior) Golden Fone (SAC)

BD SQL Server. Licenciatura em Engenharia Informática e Computação. Bases de Dados 2003/04

DESENVOLVIMENTO DE SOFTWARE

SEI Superintendência de Estudos Econômicos e Sociais da Bahia Av Luiz Viana Filho, 435-4ª avenida, 2º andar CAB CEP Salvador - Bahia Tel.

Planejamento e Orçamento

Sumário. Administração de Banco de dados Módulo 12. Ilustração Backup-Recovery. Recuperação (Recovery) - Definição

REAJUSTE DE MENSALIDADE INFORMAÇÕES INDISPENSÁVEIS AO CONSUMIDOR

IMPLEMENTAÇÃO DE UM PROTÓTIPO PARA INFORMATIZAÇÃO DE PROCESSO DE ADEQUAÇÃO DE FÉRIAS

Pró-Reitoria de Administração - PRAd Assessoria de Informática - AI SISTEMA DE PUBLICAÇÃO DE LICITAÇÕES. Manual de Procedimentos

Microsoft Office Outlook Web Access ABYARAIMOVEIS.COM.BR

PLANO DIRETOR DE INFORMÁTICA. Alexandre Painhas

Sistemas Gerenciadores de Banco de Dados Distribuídos

PL/pgSQL. Introdução. Introdução. Introdução

Transcrição:

Especificação Genérica de Gatilhos e Procedimentos Armazenados para a Geração de Históricos de Dados Alex Sandro Romeo de Souza Poletto 1, Jorge Rady de Almeida Júnior 2 1 Instituto Municipal de Ensino Superior de Assis IMESA/FEMA Av. Getúlio Vargas, 1200 - CEP 19.807-634 Assis - SP Brasil 2 Departamento Sistemas Digitais Escola Politécnica Universidade São Paulo (USP) Av. Prof. Luciano Gualberto, 158. CEP: 05508-900 - São Paulo, SP - Brasil apoletto@femanet.com.br, jorge.almeida@poli.usp.br Abstract. This study aims to explore mechanisms provided by the Database Management Systems, enabling the automatic generation of data history. For this, we specified generically triggers and stored procedures that will be used as templates for subprogram coding, which will be the responsible for the generation, transport and loading of historical data. Keywords: Historical Data, Triggers, Stored Procedures. Resumo. O presente trabalho tem por objetivo explorar mecanismos disponibilizados pelos próprios Sistemas Gerenciadores de Banco de Dados, que possibilitem a geração automática de históricos de dados. Para tal, são especificados, genericamente, gatilhos e procedimentos armazenados que servirão de templates para a codificação de subprogramas, que serão os responsáveis pela geração, transporte e carga dos históricos de dados. Palavras-chave: Histórico de Dados, Gatilhos, Procedimentos Armazenados. 1. Introdução Uma das formas disponíveis para a criação de Históricos de Dados dá-se por meio de ferramentas de ETL dentro do processo de Data Warehousing. No entanto, deve-se considerar a grande complexidade dos mecanismos de extração, transformação e carga de dados envolvidos na implementação de um Data Warehouse, chegando a representar até 80% do esforço total de desenvolvimento [Vassiliadis; Simitsis; Skiadopoulos 2002]. Oracle Flashback é uma tecnologia que tem a capacidade de recuperar dados históricos, realizar análises, alterar e realizar a auto-reparação do serviço para recuperar corrupções lógicas, para monitoramento de alterações, bem como recuperação e retorno em períodos de tempo das exclusões de dados, sendo todo o processo realizado diretamente nos Bancos de Dados Operacionais [Bryla e Loney, 2008]. Com o intuito de oferecer algo mais acessível e sem altos custos surgiu este trabalho, cujo objetivo é possibilitar o desenvolvimento de mecanismos e técnicas que auxiliem na geração, transporte e carga de históricos de dados, com base exclusivamente em Bancos de Dados Operacionais.

Sendo assim, este artigo está organizado da seguinte forma: na Seção 2, é descrita a proposta; na Seção 3, é apresentado um estudo de caso; e, finalmente, na última seção são relatadas as considerações finais. 2. Descrição da Proposta O objetivo dessa proposta é a geração, o transporte e a carga de históricos de dados, de forma dinâmica e automática, por intermédio de gatilhos e procedimentos armazenados instalados nos próprios Bancos de Dados Operacionais. Tais dados podem ser armazenados em uma cópia ou no próprio Banco de Dados Operacional, ou em um novo Banco de Dados modelado e criado a partir dos Bancos de Dados Operacionais, porém, essa escolha ou definição, não está contemplada neste trabalho, ficando a critério do implementador. Para a realização dinâmica e automática dos históricos, é necessário algum controle sobre o Banco de Dados Operacional, que permita, a qualquer momento, a aquisição, o transporte e a carga dos históricos de dados. Por essa razão é que são utilizados gatilhos e procedimentos armazenados, visto que são recursos disponibilizados pelos próprios Sistemas Gerenciadores de Bancos de Dados (SGBD) que permitem acompanhar e gerenciar as atualizações ocorridas nas bases de dados operacionais, em tempo real, oferecendo acesso aos valores atuais e anteriores dos dados em tempo de execução [Italiano e Ferreira 2006]. As operações realizadas pelas aplicações dos usuários finais acionarão, automaticamente, os gatilhos e procedimentos armazenados programados diretamente nos Bancos de Dados Operacionais. A ideia é transportar, remota e imediatamente, os dados, toda vez em que ocorrer alguma transação que afete as regras de negócio estabelecidas na programação dos gatilhos e dos procedimentos armazenados. Para auxiliar esse processo, são oferecidas, três especificações genéricas, duas de gatilhos e uma de procedimentos armazenados, que deverão ser utilizadas como templates para as codificações dos subprogramas [Poletto e Almeida Jr. 2007]. 2.1. Especificação Genérica dos Templates de Gatilhos Serão especificados dois gatilhos genéricos: o primeiro tem por objetivo a inclusão de elementos de tempo; e o segundo a inclusão de valores derivados, conforme descrito nos próximos itens. Vale ressaltar que as representações gráficas dos gatilhos e dos procedimentos armazenados são realizadas por intermédio de Fluxogramas, de acordo com as definições encontradas em [Martin e McClure 1991] e [Peters e Pedrycz 2000]. A inclusão do termo BDH (Banco de Dados Histórico) nas especificações é somente para representar um local aos quais os históricos dos dados deverão ser enviados e armazenados. Gatilho_1: Template com a Inclusão de Elementos de Tempo A finalidade desse gatilho é gerar, transportar e dar carga de históricos de dados, quando ocorrer alguma operação de inclusão e alteração junto aos conjuntos de entidades e/ou atributos dos Bancos de Dados Operacionais, bem como para o registro das épocas nas quais ocorreram as mudanças de valores dos dados operacionais (Figura 1).

INÍCIO Gatilho_1 Define o tempo de disparo Define o evento de acionamento Define o conjunto de entidades e/ou atributos que causarão o acionamento Define as variáveis para armazenar valores operacionais Obtém atributos descritivos com base no valor da chave estrangeira Obtém a identificação do Banco de Dados Operacional e a do usuário ALTERAÇÃO Atualiza o atributo elemento tempo que armazena a data final de validade da informação junto ao BDH Insere novos históricos de dados juntamente com o elemento tempo, que armazena a data inicial de validade da informação junto ao BDH Ocorreu Inserção ou Alteração no BDO? INSERÇÃO Figura 1. Fluxograma do Gatilho_1 Insere novos históricos de dados juntamente com o elemento tempo, que armazena a data inicial de validade da informação junto ao BDH CREATE OR REPLACE TRIGGER Gatilho_1 BEFORE/AFTER INSERT OR UPDATE OF BDO_Atributo_Y ON BDO_Tabela FOR EACH ROW DECLARE [Variavel_1 BDO_Tabela_X.BDO_Atributo_X%TYPE; Variavel_2 BDO_Tabela_X.BDO_Atributo_X%TYPE;...;] Variavel_Nome_Usuario BDO_Tabela_Usuario.Atributo_Nome_Usuario %TYPE; [Variavel_Nome_Sistema BDO_Tabela_Parametro.Atributo_Nome_Sistema%TYPE;] [SELECT BDO_Atributo_1, BDO_Atributo_2,... INTO Variavel_1, Variavel_2,... FROM BDO_Tabela_X WHERE BDO_Chave_X = :NEW.BDO_Chave_2;] [SELECT BDO_Atributo_Nome_Usuario INTO Variavel_Nome_Usuario FROM BDO_Tabela_Usuario;] SELECT BDO_Atributo_Nome_Sistema INTO Variavel_Nome_Sistema FROM BDO_Tabela_Parametro; IF INSERTING THEN INSERT INTO BDH_Tabela (BDAT_Chave_1, BDAT_Chave_2,..., BDH_Atributo_1, BDH_Atributo_2, BDH_Atributo_3, BDH_Atributo_4,..., BDH_Atributo_Tempo_1, BDH_Atributo_Nome_Usuario, [BDH_Atributo_Nome_Sistema]) VALUES(:NEW.BDO_Chave_1, NEW.BDO_Chave_2,..., :NEW.BDO_Atributo_1, :NEW.BDO_Atributo_2,..., [Variavel_1, Variavel_2],..., Data_Dia, Variavel_Nome_Usuario, [Variavel_Nome_Sistema]); ELSE UPDATE BDH_Tabela SET BDH_Atributo_Tempo_2=Data_Dia WHERE BDH_Tabela.BDH_Atributo_X=:OLD. BDH_Atributo_X AND BDH_Tabela.BDH_Chave_1=:OLD.BDO_Chave_1 AND BDH_Tabela.BDH_Chave_2=:OLD.BDO_Chave_2 AND.... AND BDH_Tabela.BDH_Atributo_Tempo_2 is NULL; INSERT INTO BDH_Tabela (BDH_Chave_1, BDH_Chave_2,..., BDH_Atributo_1, BDH_Atributo_2, BDH_Atributo_3, BDH_Atributo_4,..., BDH_Atributo_Tempo_1, BDH_Atributo_Nome_Usuario, [BDH_Atributo_Nome_Sistema]) VALUES(:OLD.BDO_Chave_1, :OLD.BDO_Chave_2,...., :NEW.BDO_Atributo_1, :NEW.BDO_Atributo_2,..., [Variavel_1, Variavel_2],.., Data_Dia, Variavel_Nome_Usuario, [Variavel_Nome_Sistema]); END IF; END. FIM Figura 2. Especificação Genérica do Gatilho_1

A inclusão de elementos de tempo (timestamp) nos conjuntos de entidades que receberão os históricos tem por função o controle do estado evolutivo dos dados, representando as épocas exatas das modificações dos dados ao longo do tempo, envolvendo tanto o instante inicial de validade quanto o instante em que tal dado sofrer alterações. [Tansel 1997]. O script do template proposto está especificado na Figura 2. Gatilho_2: Template com a Inclusão de Valores Derivados INÍCIO Gatilho_2 Define o tempo de disparo Define o evento de acionamento Define o conjunto de entidades que causará o acionamento Define as variáveis para armazenar os valores operacionais Obtém atributos descritivos com base no valor da chave estrangeira Gerar, transportar e inserir novos históricos de dados no BDH com valores pré-calculados FIM Figura 3. Fluxograma do Gatilho_2 CREATE OR REPLACE TRIGGER Gatilho_2 BEFORE/AFTER INSERT ON BDO_Tabela FOR EACH ROW DECLARE [Variavel_1 BDO_Tabela_X.BDO_Atributo_X%TYPE; Variavel_2 BDO_Tabela_X.BDO_Atributo_X%TYPE;...;] Variavel_Nome_Usuario BDO_Tabela_Usuario.Atributo_Nome_Usuario %TYPE; [Variavel_Nome_Sistema BDO_Tabela_Parametro.Atributo_Nome_Sistema%TYPE;] [SELECT BDO_Atributo_1, BDO_Atributo_2,... INTO Variavel_1, Variavel_2,... FROM BDO_Tabela_X WHERE BDO_Chave_X = :NEW.BDO_Chave_2;] SELECT BDO_Atributo_Nome_Usuario INTO Variavel_Nome_Usuario FROM BDO_Tabela_Usuario; [SELECT BDO_Atributo_Nome_Sistema INTO Variavel_Nome_Sistema FROM BDO_Tabela_Parametro;] INSERT INTO BDH_Tabela (BDH_Chave_1, BDH_Chave 2,...., BDH_Atributo_1, BDH_Atributo_2,...., BDH_Atributo_Total_1,...., VALUES(:NEW.BDO_Chave_1, NEW.BDO_Chave_2,...., :NEW.BDO_Atributo_1, :NEW.BDO_Atributo_2,....., :NEW.BDO_Atributo_Calc_1 [OPERAÇÃO] :NEW.BDO_Atributo_Calc_2,....,); END. Figura 4. Especificação Genérica do Gatilho_2

A finalidade desse gatilho é gerar, transportar e dar carga de históricos de dados, quando ocorrer alguma operação de inclusão e alteração junto aos conjuntos de entidades e/ou atributos dos Bancos de Dados Operacionais, possibilitando o registro de valores précalculados. A inclusão de valores derivados nos conjuntos de entidades que receberão os históricos tem por função o acesso rápido a valores pré-calculados, sem a necessidade de realização de cálculos (Figuras 3 e 4). 2.2. Especificação Genérica do Template do Procedimento Armazenado Os procedimentos armazenados nos Bancos de Dados Operacionais justificam-se pelo fato de que poderão ser utilizados para enviar históricos de dados já agrupados e sumarizados, aplicando-se o fator de Granularidade. Os procedimentos armazenados são relevantes pelo fato de que podem ser utilizados para aumentar o nível de agrupamento ou até mesmo criar novos grupos, caso seja necessário, sobretudo em se tratando do crescimento da base de dados. INÍCIO Procedimento Define as variáveis de entrada Define as variáveis que serão utilizadas como parâmetro para a variável cursor Declara a variável cursor, que deve ser realizada por meio de uma consulta, filtrando, agrupando e sumarizando os dados para o armazenamento; Determina a abertura da variável cursor, já com as tuplas sumarizadas Determina o carregamento dos valores da variável cursor nas variáveis declaradas para recebê-los Efetiva as eliminações e as inserções ocorridas no loop (COMMIT) NÃO A variável cursor ainda possui linhas para serem lidas? SIM Elimina tupla(s) inserida(s) anteriormente, caso essa sumarização já tenha sido realizada, possibilitando que a sumarização seja refeita FIM Insere tupla(s) agrupada(s) e sumarizada(s) no BDH de acordo com as condições de filtro (entrada) Figura 5. Fluxograma do Procedimento Armazenado Esse template se destina a implementar a geração de atributos derivados, cujo cálculo e transferência dos dados não necessitem ser realizados imediatamente após a ocorrência de modificações nos Bancos de Dados Operacionais. Os períodos de atualização devem ser pré-estabelecidos pelos administradores do banco de dados e analistas de negócios.

CREATE OR REPLACE PROCEDURE P_PASSO_C3 (Variavel_Filtro_1 IN BDAT_Tabela.BDAT_Atributo_1%TYPE, Variavel_Filtro_2 IN BDAT_Tabela.BDAT_Atributo_2%TYPE,.... ) IS Variavel_1 BDO_Tabela.BDO_Atributo_1%TYPE; Variavel_2 BDO_Tabela.BDO_Atributo_2%TYPE;.....; CURSOR BDO_Tabela_CURSOR IS SELECT BDO_Chave_1, BDO_Chave_2,...., BDO_Atributo_1, BDO_Atributo_2,...., Sum(BDO_Atributo_Calc_1* BDO_Atributo_Calc_2), Sum(BDO_Atributo_Calc_3,....) INTO Variável_1,Variável_2,.... FROM BDO_Tabela WHERE BDO_Chave_1=Variavel_Filtro_1 OR/AND.... OR BDO_Atributo_1=Variavel_Filtro_2 OR/AND.... GROUP BY BDO_Chave_1, BDO_Chave_2,...., BDO_Atributo_1, BDO_Atributo_2,... OPEN BDO_Tabela_CURSOR; LOOP FETCH BDO_Tabela_CURSOR INTO Variavel_1, Variavel_2,.... ; EXIT WHEN BDO_Tabela_CURSOR%NOTFOUND; DELETE FROM BDH_Tabela WHERE BDH_Chave_1=Variavel_Filtro_1 OR/AND.... OR BDH_Atributo_1=Variavel_Filtro_2 OR/AND.... INSERT INTO BDH_Tabela (BDH_Chave_1, BDH_Chave_2, BDH_Atributo_1, BDH_Atributo_2, BDH_Atributo_3,.... ) VALUES(Variavel_1,Variavel_2,.... ); END LOOP; COMMIT; END; Figura 6. Especificação Genérica do Procedimento Armazenado Portanto, a finalidade desse procedimento armazenado é gerar e dar carga de dados agrupados e totalizados, de acordo com uma periodicidade pré-estabelecida, podendo ser diária, semanal, mensal e até mesmo anual. Para tal, é essencial o uso de variáveis do tipo CURSOR, disponibilizadas em programação PL/SQL. A Figura 5 ilustra o fluxograma e a Figura 6 o script do procedimento armazenado genérico proposto. 3. Estudo de Caso (Aplicação da Proposta) Neste item, são apresentados dois exemplos, que foram testados e validados no Sistema Gerenciador de Banco de Dados Oracle 11g [Price 2009]. Os construtores utilizados para ilustrar os modelos de dados apresentados nas figuras foram adaptados de Silberschatz, Korth e Sudarschan (2006). Servidor de Banco de Dados Banco de Dados Operacional BDO Banco de Dados Histórico BDH Comunicação entre os bancos de dados via DBLINK) Figura 7. Arquitetura de comunicação entre os bancos de dados Para a implementação dos testes, foram criados dois bancos de dados, um para conter os dados operacionais (BDO) e outro para armazenar os históricos gerados

(BDH). Para a comunicação entre os bancos de dados foi criado um DBLink, conforme descrito na Figura 7. Vale ressaltar também, que para a criação dos conjuntos de entidades BDH_CARGO e BDH_ANUAL_FUNC foi necessário aplicar conceitos de desnormalização de dados, mas que não serão apresentados neste artigo. Exemplo 01: Aplicando o gatilho genérico. A Figura 8 apresenta parte de um Modelo de Dados Operacional, representado pelos conjuntos de entidades, FUNCIONARIO e CARGO, e parte de um Modelo de Dados Histórico, criado somente para testes, representado pelo conjunto de entidades BDH_CARGO. ID_FUNC NOME ID_CARGO(FK) ID_CARGO DESCRICAO SALARIO FUNCIONARIO ocupa CARGO DESCRICAO_CARGO NOME_FUNC ID_CARGO ID_FUNC VALOR_SALARIO TS_INICIAL TS_FINAL ID_USUARIO_BDO BDH_CARGO Figura 8. Conjuntos de Entidades utilizados para a criação de um Gatilho CREATE OR REPLACE TRIGGER GAT_HD_CARGO BEFORE INSERT OR UPDATE OF ID_CARGO ON FUNCIONARIO FOR EACH ROW DECLARE V_DESCRICAO CARGO.DESCRICAO%TYPE; V_SALARIO CARGO.SALARIO%TYPE; V_USER_NAME USER_USERS.USERNAME%TYPE; SELECT DESCRICAO, SALARIO INTO V_DESCRICAO, V_SALARIO FROM CARGO WHERE ID_CARGO=:NEW.ID_CARGO; SELECT USERNAME INTO V_USER_NAME FROM USER_USERS; IF INSERTING THEN INSERT INTO BDH_CARGO@BDAT_LINK(ID_FUNC, NOME_FUNC, ID_CARGO, DESCRICAO_CARGO, VAL_SALARIO, TS_INICIAL, ID_USUARIO_BDO) VALUES(:NEW.ID_FUNC, :NEW.NOME, :NEW.ID_CARGO, V_DESCRICAO, V_SALARIO, SYSDATE, V_USER_NAME); ELSE UPDATE BDH_CARGO@BDH_LINK SET TS_FINAL=SYSDATE WHERE BDH_CARGO.ID_CARGO=:OLD.ID_CARGO AND BDH_CARGO.ID_FUNC=:OLD.ID_FUNC AND BDH_CARGO.TS_FINAL IS NULL; INSERT INTO BDH_CARGO@BDH_LINK (ID_FUNC, NOME_FUNC, ID_CARGO, DESCRICAO_CARGO, VAL_SALARIO, TS_INICIAL, ID_USUARIO_BDO,) VALUES(:OLD.ID_FUNC, :OLD.NOME, :NEW.ID_CARGO, V_DESCRICAO, V_SALARIO, SYSDATE, V_USER_NAME); END IF; END; OBS: As siglas :NEW e :OLD possibilitam obter os valores posteriores/anteriores de um atributo. Figura 9. Ilustração Prática do Gatilho_1 Genérico (GAT_HD_CARGO) Tendo como base esses conjuntos de entidades, foi elaborado o gatilho GAT_HD_CARGO, conforme ilustrado na Figura 9.

Seu principal objetivo é armazenar informações relacionadas aos cargos que um funcionário ocupou durante toda a sua vida na empresa, considerando-se também todos os períodos nos quais ocorreram essas mudanças. Os atributos TS_INICIAL e TS_FINAL destacam a adição dos elementos tempo responsáveis pelo armazenamento dos períodos de validade dos dados. Para o armazenamento de valores tempo, foram utilizados atributos do tipo timestamp. O atributo ID_USUARIO_BDO tem por função, armazenar o usuário do banco de dados operacional que realizou a operação, que poderá ser usado para eventuais auditorias. Os atributos NOME_FUNC, DESCRICAO_CARGO e VALOR_SALARIO, têm por função, retratar os valores exatos que um atributo assumiu ao longo do tempo, já que esses atributos podem sofrer alterações em seus valores operacionais, como exemplo a mudança da descrição de um cargo, e principalmente, as mudanças dos valores salariais que um funcionário venha a sofrer. O gatilho ficará armazenado no Banco de Dados Operacional. Exemplo 02: Aplicando o procedimento genérico. A Figura 10 apresenta parte do Modelo de Dados Operacional, representado pelos conjuntos de entidades FUNCIONARIO e VERBA, bem como pelo conjunto de relacionamentos RECEBE, e parte do Modelo de Dados Histórico, representado pelo conjunto de entidades BDH_ANUAL_FUNC, ao qual demonstra a aplicação da granularidade, já que os recebimentos são agrupados e totalizados por funcionário, verba e ano. O atributo TOTAL se refere a soma do atributo VALOR, e o atributo QTDE a soma do atributo QUANTIDADE. ID_VERBA(FK) ID_FUNC NOME ID_FUNC(FK) QUANTIDADE ID_VERBA DESCRICAO MES_ANO VALOR FUNCIONARIO RECEBE VERBA ID_VERBA ID_EMP NOME_EMP DESCRICAO_VERBA ANO QTDE TOTAL BDH_ANUAL_FUNC Figura 10. Conjuntos de Entidades utilizados para a criação de um Procedimento Tendo como base esses conjuntos de entidades e relacionamentos, foi elaborado o procedimento armazenado ilustrado na Figura 11. Assim, o procedimento armazenado PROC_HD_ANUAL_FUNC é um exemplo prático de como armazenar dados sumarizados, aplicando-se níveis de granularidade.

CREATE OR REPLACE PROCEDURE PROC_HD_ANUAL_FUNC (I_ANO IN CHAR) IS V_ID_FUNC RECEBE.MATRICULA%TYPE; V_ID_VERBA RECEBE.VERBA%TYPE; V_NOME_FUNC FUNCIONARIO.NOME%TYPE; V_DESCRICAO_VERBA VERBA.DESCRICAO%TYPE; V_ANO CHAR(4); V_VALOR RECEBE.VALOR%TYPE; V_QTDE RECEBE.QUANTIDADE%TYPE; CURSOR BDO_ANUAL_FUNC_CURSOR IS SELECT FUNCIONARIO.MATRICULA,FUNCIONARIO.NOME,VERBA.CODIGO, VERBA.DESCRICAO,SUBSTR(TO_CHAR(MES_ANO),3,4),SUM(VALOR), SUM(QUANTIDADE) INTO V_ID_FUNC,V_NOME_FUNC,V_ID_VERBA, V_DESCRICAO_VERBA, V_ANO,V_VALOR,V_QTDE FROM FUNCIONARIO,VERBA,RECEBE WHERE FUNCIONARIO.MATRICULA=RECEBE.MATRICULA AND VERBA.CODIGO=RECEBE.VERBA AND SUBSTR(TO_CHAR(MES_ANO),3,4)=I_ANO GROUP BY FUNCIONARIO.MATRICULA,FUNCIONARIO.NOME,VERBA.CODIGO, VERBA.DESCRICAO, SUBSTR(TO_CHAR(MES_ANO),3,4); DELETE FROM BDH_ANUAL_FUNC@BDH_LINK WHERE ANO=I_ANO; OPEN BDO_ANUAL_FUNC_CURSOR; LOOP FETCH BDO_ANUAL_FUNC_CURSOR INTO V_ID_FUNC,V_NOME_FUNC, V_ID_VERBA,V_DESCRICAO_VERBA, V_ANO,V_VALOR,V_QTDE; EXIT WHEN BDO_ANUAL_FUNC_CURSOR%NOTFOUND; INSERT INTO BDH_ANUAL_FUNC@BDAT_LINK VALUES(V_ID_FUNC,V_ID_VERBA,V_NOME_FUNC,V_DESCRICAO_VERBA, V_ANO,V_VALOR,V_QTDE); END LOOP; COMMIT; END; / Figura 11. Especificação Prática do Procedimento Genérico Os exemplos apresentados foram elaborados com base em um banco de dados que armazena informações sobre uma Folha de Pagamento, porém, pode ser aplicado em outras áreas, tais como: telefonia, bancária, acadêmica, etc., no sentido de armazenar históricos de dados para auxiliar no processo de tomada de decisões, auditorias e recuperação de dados. 4. Considerações Finais Este trabalho possibilita uma proposta para a geração, transporte e carga de históricos de dados, sem a necessidade de se adquirir onerosas ferramentas de software, já que as rotinas necessárias são implementadas por meio de gatilhos e procedimentos armazenados, recursos oferecidos pelos próprios Sistemas Gerenciadores de Bancos de Dados. Acredita-se que essa é uma solução simples e de menor custo, que poderá vir a suprir as necessidades quanto à geração de históricos de dados, para apoiar tomadas de decisões, auditorias e recuperação de dados. Acredita-se que formas simples que possam gerar histórico de dados a partir de base de dados operacionais são de grande importância para a área de sistemas de banco de dados, já que praticamente, há na literatura disponível poucos estudos acerca do que foi elaborado no referida trabalho. Espera-se, portanto, que essas especificações possam auxiliar na implementação de Bancos de Dados com a finalidade de armazenamento de históricos de dados. Vale reforçar, que a estrutura de dados dos Bancos de Dados Operacionais em funcionamento, não é afetada, sendo necessária apenas a inserção de gatilhos e

procedimentos armazenados, além de alguns pequenos detalhes necessários à operacionalização dos mesmos. Nessa mesma linha, não são necessárias alterações nos programas já implementados e utilizados pelos usuários finais. Um resultado bastante interessante está ligado aos períodos de atualizações, visto que a maioria das atualizações deve ser propagada, logo após uma ação de modificação ter sido submetida ao Banco de Dados Operacional, obtendo-se assim, um sincronismo quase que imediato, entre os Bancos de Dados. No que se refere à sobrecarga de processamento no ambiente operacional, considerando-se que a quantidade de registros a serem transportados não será grande, a cada disparo dos gatilhos inseridos no ambiente operacional, entende-se que a sobrecarga imposta não prejudique sensivelmente o seu desempenho. Além do mais, os procedimentos armazenados, responsáveis por calcular informações sumarizadas, serão acionados em períodos agendados, amenizando, assim, a utilização do ambiente operacional. Referências Bryla, Bob; Loney, Kevin. Oracle Database 11g Manual do DBA, 2008. Italiano, Isabel C.; Ferreira, João Eduardo. Synchronization Options for Data Warehouse Designs, Publicado na IEEE Computer Magazine, Revista de IEEE Computer Society, 2006. Martin, James; McClure, Carma. Técnicas Estruturadas e CASE. Tradução de Lúcia Faria Silva. Revisão Técnica de Ronald Stevis Cassiolato. São Paulo: Editora Makron, McGraw-Hill, 1991. Peters, James F.; Pedrycz, Witold. Software engineering: an engineering approach. New York: Library of Congress Cataloging-in-Publication Data, John Wiley & Sons, 2000. Poletto, Alex S. R. de S.; Almeida Junior, Jorge Rady de. Modeling of an Analytical Database System, 9ª International Conference on Enterprise Information Systems - ICEIS 2007, Ilha da Madeira, Portugal, Funchal, 13 16 de Jun., 2007. Price, Jason. Oracle Database 11g SQL: Domine SQL e PL/SQL no banco de dados Oracle. Aborda as versões 11g, 10g, 9i e 8i. Porto Alegre. Editora Bookman, 2009. Silberschatz, Abraham; Korth, Henry F.; Sudarschan, S. Sistemas de Bancos de Dados. 5ª edição - Rio de Janeiro. Editora: Elsevier, 2006. Tansel, Abdullah Uz. Temporal relational data model. Revista IEEE Computer Society (IEEE Transactions on Knowledge e Data Engineering), v.9, n.3, may/june, p. 464-479, 1997. Vassiliadis, Panos; Simitsis, Alkis; Skiadopoulos, Spiros. Conceptual modeling for ETL processes, In: WORKSHOP ON DATA WAREHOUSING AND OLAP. Proceedings of the 5th ACM international workshop on Data Warehousing and OLAP. McLean, Virginia, USA, p. 14-21, 2002.