views oracle database

60
Instituto Federal do Sudeste de Minas Gerais Tecnologia em Sistemas para Internet

Upload: wagner-almeida

Post on 15-Apr-2017

198 views

Category:

Data & Analytics


0 download

TRANSCRIPT

Page 1: Views Oracle Database

Instituto Federal do Sudeste de Minas GeraisTecnologia em Sistemas para Internet

Page 2: Views Oracle Database

Views - Oracle Database

Alunos: Armando Assunção

Richardson William

Samuel Gonçalves

Wagner Almeida

2

Page 3: Views Oracle Database

Views

● Consultas predefinidas baseadas em uma ou mais tabelas.● Podem receber consultas e manipular dados assim como uma tabela.

3

Page 4: Views Oracle Database

Vantagens ao utilizar Views

● Restringir acesso aos dados;● Realizar consultas complexas de forma mais simplificada;● Oferecer independência de dados.

4

Page 5: Views Oracle Database

Tipos de Views

● Views Simples● Views Complexas● Views Materializadas

5

Page 6: Views Oracle Database

Views Simples

● Recupera linhas de uma única tabela base;● Não contém funções grupo;● Aceita todas as operações DML (Linguagem de Manipulação de Dados).

6

Page 7: Views Oracle Database

Views Complexas

● Recupera linhas de várias tabelas;● Contém funções de grupo;● Nem sempre permitem operações DML.

7

Page 8: Views Oracle Database

Views Materializadas

● É uma View onde o seu resultado é armazenado no banco;● É uma tabela real no banco de dados que é atualizada ao ocorrer alguma

atualização nas tabelas base;● Como é uma View, pode ser simples ou complexa.

8

Page 9: Views Oracle Database

Criação de Views Simples e Complexas

CREATE [OR REPLACE] [FORCE | NOFORCE] VIEW Nome_Da_View

[ (alias [, alias ] ... ) ]

AS subquery

[ WITH CHECK OPTION [ CONSTRAINT Nome_Constraint ] ]

[ WITH READ ONLY [ CONSTRAINT Nome_Constraint ] ];

9

Page 10: Views Oracle Database

Parâmetros

● OR REPLACE - A View deverá ser alterada, caso ela já exista;● FORCE - Força a criação da View mesmo que as tabelas base não existam;● NOFORCE - Não permite a criação da View se as tabelas base não

existirem. É o padrão na criação, ou seja, se o FORCE não for declarado o NOFORCE é embutido de forma implícita;

10

Page 11: Views Oracle Database

Parâmetros

● NOME_DA_VIEW - É o nome da visão;● ALIAS - É o apelido de uma expressão na subconsulta. Deve haver o

mesmo número de apelidos e de expressões na subconsulta;● SUBQUERY - É a subconsulta que recupera as linhas das tabelas base. Se

você estiver usando alias(apelidos), pode usá-los na lista após a instrução SELECT.

11

Page 12: Views Oracle Database

Parâmetros

● WITH CHECK OPTION - Somente as linhas que seriam recuperadas na sub-consulta podem ser inseridas, atualizadas ou removidas. Se essa cláusula não for utilizada, as linhas não são verificadas;

● NOME_CONSTRAINT - É o nome que será atribuído à restrição WITH CHECK OPTION ou WITH READ ONLY;

● WITH READ ONLY - Significa que só podem ser consultadas as linhas da tabela base (Não permite operações DML).

12

Page 13: Views Oracle Database

Views Simples

13

Page 14: Views Oracle Database

Criando View Simples

CREATE VIEW func_dptos

AS SELECT id_func, nome_func, salario

FROM funcionarios;

14

Page 15: Views Oracle Database

Criando View Simples

● Cria a View FUNC_DPTOS baseada na tabela FUNCIONARIOS;● A View criada não possui qualquer restrição.

15

Page 16: Views Oracle Database

Criando View Simples

CREATE VIEW func_dptos_read

AS SELECT id_func, nome_func, salario

FROM funcionarios

WITH READ ONLY constraint apenas_leitura;

16

Page 17: Views Oracle Database

Criando View Simples

● Diferente do exemplo anterior, a View FUNC_DPTOS_READ só disponibilizará consulta aos dados, não sendo possível utilizar operações DML (delete, insert, update).

17

Page 18: Views Oracle Database

Criando View Simples

CREATE VIEW func_option_const

AS SELECT id_func, nome_func, salario

FROM funcionarios

WHERE id_dpto = 4

WITH CHECK OPTION CONSTRAINT func_4;

18

Page 19: Views Oracle Database

Criando View Simples

● A View FUNC_OPTION_CONST possui a cláusula WITH CHEK OPTION, onde foi criada a constraint func_4;

● Essa constraint se baseia no que está na cláusula WHERE, que nesse caso só irá recuperar as linhas onde o id_dpto seja igual a 4.

● As operações DML só poderão ser aplicadas onde o código do departamento (id_dpto) for igual a 4.

19

Page 20: Views Oracle Database

Criando View Simples

CREATE VIEW func_dptos_alias(Cod_Func, Nome_Func, Salario_Func)

AS SELECT id_func, nome_func, salario

FROM funcionarios;

20

Page 21: Views Oracle Database

Criando View Simples

● A View FUNC_DPTOS_ALIAS utiliza apelidos para as colunas que irão compor a View;

● Dessa forma, quando forem aplicadas operações DML sobre essa View, pode-se utilizar os apelidos usados em sua criação.

● O número de apelidos deve corresponder ao número de colunas envolvidas na subconsulta.

21

Page 22: Views Oracle Database

Criando View Simples

CREATE VIEW func_dptos_alias_as

AS SELECT id_func as Cod_Func,

nome_func as Nome_Func,

salario as Salario_Func

FROM funcionarios;

22

Page 23: Views Oracle Database

Criando View Simples

● Na View FUNC_DPTOS_ALIAS_AS possui o mesmo efeito da View do exemplo anterior, diferenciando apenas a forma como os apelidos foram passados;

● Nessa View os apelidos para as colunas foram passados direto na subconsulta.

23

Page 24: Views Oracle Database

Criando View Simples

CREATE FORCE VIEW V_Grupo

AS SELECT grupo_id, descricao

FROM grupo;

24

Page 25: Views Oracle Database

Criando View Simples

● A View V_GRUPO foi baseada na tabela GRUPO, porém a mesma ainda não foi criada no banco de dados, por isso a necessidade do parâmetro FORCE, para que a criação seja feita independente de existir a tabela base.

25

Page 26: Views Oracle Database

Views Complexas

26

Page 27: Views Oracle Database

Criando View Complexa

CREATE VIEW func_e_dpto

AS SELECT id_func, nome_func, nome_dpto

FROM funcionarios F, departamentos D

WHERE F.id_dpto = D.id_dpto;

27

Page 28: Views Oracle Database

Criando View Complexa

● A View FUNC_E_DPTO foi criada baseada em duas tabelas (FUNCIONARIOS e DEPARTAMENTOS);

● Nesse momento deixa de ser uma View simples e passa a ser uma View complexa, pois está sendo aplicada uma subconsulta sobre duas tabelas.

28

Page 29: Views Oracle Database

Criando View Complexa

CREATE VIEW dpto_media_salario

AS SELECT id_dpto as Cod_Departamento,

CAST(AVG(salario) as NUMBER(6,2)) as Media_Salario

FROM funcionarios

GROUP BY id_dpto;

29

Page 30: Views Oracle Database

Criando View Complexa

● A View DPTO_MEDIA_SALARIO foi criada baseada na tabela FUNCIONARIOS;

● Mesmo sendo utilizada apenas uma tabela, foi usada a função de agrupamento AVG e os registros estão sendo agrupados através do GROUP BY;

● A utilização da função de agrupamento torna esta View Complexa.

30

Page 31: Views Oracle Database

Alterando Views Simples e Complexas

CREATE OR REPLACE VIEW func_dptos

AS SELECT id_func, nome_func, email, salario

FROM funcionarios;

31

Page 32: Views Oracle Database

Alterando Views Simples e Complexas

● Para alterar uma View, é necessário usar OR REPLACE que é a opção para substituir uma view já existente;

● A view FUNC_DPTOS está sendo alterada com o OR REPLACE, nesse caso está sendo inserida a coluna EMAIL que não estava na criação da View anteriormente;

● A FUNC_DPTOS será substituída já com a nova coluna que foi incluída na subconsulta.

32

Page 33: Views Oracle Database

Alterando Views Simples e Complexas

CREATE OR REPLACE VIEW func_e_dpto

AS SELECT nome_func, nome_dpto

FROM funcionarios F, departamentos D

WHERE D.id_dpto = F.id_dpto;

33

Page 34: Views Oracle Database

Alterando Views Simples e Complexas

● A View FUNC_E_DPTO está sendo alterada com OR REPLACE, nesse caso está sendo excluída a coluna id_func que foi inserida na criação da View (Slide 27);

● A View FUNC_E_DPTO será substituída com a coluna id_func já removida da subconsulta.

34

Page 35: Views Oracle Database

Removendo Views Simples e Complexas

● Quando uma View não é mais necessária, pode ser removida do mesmo modo que outros objetos no Oracle Database.

DROP VIEW func_e_dpto;

35

Page 36: Views Oracle Database

Views Materializadas

36

Page 37: Views Oracle Database

Aplicações

● Replicação de dados;● Manter em cache consultas de alto custo em ambientes de Data

Warehouse;● Realiza pré-calculo e armazenamento de dados;● Procura melhorar a performance de consultas, reconhecendo quando uma

View Materializada pode ser utilizada.● É uma subdivisão das Views, portanto, pode ser simples ou complexa.

37

Page 38: Views Oracle Database

Tipos

Views materializadas podem ser:

● Somente leitura (Read-only)● Atualizável (Updatable)● Gravável (Writeable)

38

Page 39: Views Oracle Database

Sintaxe Básica

CREATE MATERIALIZED VIEW NOME_DA_VIEW

BUILD [IMMEDIATE | DEFERRED]

REFRESH [FAST | COMPLETE | FORCE ]

ON [COMMIT | DEMAND ]

[ [ENABLE | DISABLE] QUERY REWRITE]

[ON PREBUILT TABLE]

AS

SELECT ...; 39

Page 40: Views Oracle Database

Parâmetros

● BUILD ○ IMMEDIATE: A view materializada será populada imediatamente○ DEFERRED: A view materializada será populada no próximo pedido de

atualização (Refresh)

40

Page 41: Views Oracle Database

Parâmetros

● REFRESH ○ FAST: Tenta fazer uma atualização rápida. Deve existir arquivos de

log relacionado as tabelas de origem.○ COMPLETE: O segmento de tabela que suporta a View Materializada é

truncado e repopulado utilizando a consulta associada.○ FORCE: Tenta realizar uma atualização rápida (REFRESH FAST). Se

não conseguir, realiza uma atualização completa (REFRESH COMPLETE).

41

Page 42: Views Oracle Database

Parâmetros

● ON COMMIT: A atualização é disparada após alteração nas tabelas base.● ON DEMAND: A atualização é disparada manualmente.● [ENABLE | DISABLE] QUERY REWRITE: Diz ao otimizador de custo se a

View Materializada será considerada para operações de reescrita de consultas (query rewrite) ou não.

● ON PREBUILT TABLE: Diz ao banco de dados para utilizar uma tabela existente.

42

Page 43: Views Oracle Database

Otimização por custo - Query Rewrite

● Um dos maiores benefícios de se utilizar Views Materializadas.● Quando as tabelas têm grande quantidade de dados, consultas mais

complexas têm custo computacional alto, e podem durar minutos, ou horas.

● Aproveita o uso das Views Materializadas para verificar a possibilidade de otimização as consultas, utilizando as próprias Views.

● Chamada de Query Rewrite.

43

Page 44: Views Oracle Database

Query Rewrite

● Transforma uma consulta acessando tabelas ou Views fazendo-as acessar uma ou mais Views Materializadas.

● Processo sem intervenção do usuário.● Uma consulta passa por testes para verificar a possibilidade da

otimização. A consulta com menor custo será a escolhida.● Pode ter custo alto em relação a poder de processamento e tempo de

resposta.

44

Page 45: Views Oracle Database

Query Rewrite - Precisão

Existem três níveis de integridade que podem ser escolhidos:

● ENFORCED: modo padrão, usa apenas dados atualizados.● TRUSTED: o otimizador acredita que os dados estão corretos.● STALE TOLERATED: utiliza dados atualizados em conjunto com dados

envelhecidos. Oferece o máximo de reescrita, mas aumenta o risco de obtenção de dados incorretos.

45

Page 46: Views Oracle Database

Atualização dos dados

● A Oracle garante a atualização dos dados em uma View Materializada após modificações nas tabelas originais.

● Método de atualização: incremental (REFRESH FAST) ou completo (COMPLETE).○ Incremental: necessita de um arquivo de log contendo as

modificações nas tabelas originais.● Atualização ocorre ou sobre demanda ou em intervalos de tempo

definidos.

46

Page 47: Views Oracle Database

Atualização Incremental: por quê um arquivo de log?

● Na atualização incremental de Views Materializadas somente as modificações nas tabelas originais serão utilizadas para atualização da View Materializada.

● Por isto, deve-se criar um arquivo de log associado a cada uma das tabelas envolvidas, assim, cada modificação nas tabelas base será armazenada no arquivo de log.

47

Page 48: Views Oracle Database

Criando Views Materializadas

CREATE MATERIALIZED VIEW func_mv

BUILD IMMEDIATE

REFRESH FORCE

ON DEMAND

AS

SELECT * FROM funcionarios;

48

Page 49: Views Oracle Database

Criando Views Materializadas

● BUILD IMMEDIATE faz com, que a View seja imediatamente populada;● REFRESH FORCE, faz com que a atualização procure por alterações no

arquivo de log relacionado a tabela FUNCIONARIOS;● ON DEMAND informa que a atualização será disparada manualmente.

49

Page 50: Views Oracle Database

Criando Views Materializadas

CREATE MATERIALIZED VIEW func_mv_repli

BUILD IMMEDIATE REFRESH FORCE

START WITH SYSDATE + 1 NEXT SYSDATE + 1/24

WITH PRIMARY KEY

AS

SELECT nome_func, salario FROM funcionarios;

50

Page 51: Views Oracle Database

Criando Views Materializadas

● START WITH indica a hora em que a View Materializada começara a ser replicada (atualizada), no exemplo utiliza a data e hora do sistema (SYSDATE) acrescido de 1 (amanhã);

● NEXT indica o intervalo de replicações a partir do início, no exemplo será feita de 1 em 1 hora (SYSDATE + 1/24);

● WITH PRIMARY KEY indica que utilizará a chave primária da tabela base.

51

Page 52: Views Oracle Database

Criando Views Materializadas

CREATE MATERIALIZED VIEW func_e_dpto_mv

BUILD IMMEDIATE REFRESH FORCE ON COMMIT

AS SELECT nome_func, nome_dpto, salario

FROM funcionarios F, departamentos D

WHERE D.id_dpto = F.id_dpto;

52

Page 53: Views Oracle Database

Criando Views Materializadas

● Cria a View Materializada FUNC_E_DPTO_MV utilizando dados das tabelas FUNCIONARIOS e DEPARTAMENTOS;

● BUILD IMMEDIATE popula a View Materializada criada imediatamente;● REFRESH FORCE faz com que nas atualizações, as alterações sejam

procuradas nos arquivos de log relacionados as tabelas base;● ON COMMIT faz com que as atualizações sejam disparadas

automaticamente quando houver alteração nas tabelas base.

53

Page 54: Views Oracle Database

Alterando Views Materializadas

A sintaxe para se modificar uma view materializada é:

ALTER MATERIALIZED VIEW <NOME>

… MUITOS PARÂMETROS

54

Page 55: Views Oracle Database

Alterando Views Materializadas

Pode-se alterar uma ou mais destas características:

● Características de armazenamento;● Método, modo ou hora de atualização● Estrutura● Habilitar ou desabilitar a reescrita de queries.

55

Page 56: Views Oracle Database

Alterando Views Materializadas

ALTER MATERIALIZED VIEW func_mv

REFRESH COMPLETE

START WITH TRUNC(SYSDATE + 1) + 12/24

NEXT SYSDATE + 1;

56

Page 57: Views Oracle Database

Alterando Views Materializadas

● Altera a View Materializada para que ela seja replicada de forma automática na base de dados;

● REFRESH COMPLETE para que toda View seja atualizada;● START WITH TRUNC(SYSDATE + 1) + 12/24 para que a replicação inicie

no próximo dia às 12:00;● NEXT SYSDATE + 1 para que a replicação se repita 24 horas após o início.

57

Page 58: Views Oracle Database

“Problema” de Alterar Views Materializadas

● Alterar uma View Materializada no banco de dados Oracle não é tão trivial quanto alterar uma View.

● Uma rápida solução é destruir a View e criá-la novamente.

58

Page 59: Views Oracle Database

Removendo Views Materializadas

● Para poder remover a View Materializada utiliza-se o seguinte comando:

DROP MATERIALIZED VIEW FUNC_MV;

59

Page 60: Views Oracle Database

Referências

● oracle-base.com● docs.oracle.com● www.devmedia.com.br● aprendaplsql.com

60