Pag 160 - Tablas y Otros Segmentos de Datos

You might also like

Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 22

SQL> create table test_migracion

2 (id number,
3 valor varchar2(50),
4 valor2 varchar2(1000));

Tabla creada.

SQL> begin
2 for x in 1..1000
3 loop
4 insert into test_migracion values (x,'VALOR',NULL);
5 end loop;
6 end;
7 /

Procedimiento PL/SQL terminado correctamente.

SQL> commit;

Confirmaci�n terminada.

SQL> exec dbms_stats.gather_table_stats('VUELOS','TEST_MIGRACION')

Procedimiento PL/SQL terminado correctamente.

SQL> show parameters db_block_size

NAME TYPE VALUE


------------------------------------ -------------------------------- --------
db_block_size integer 8192

SQL> select table_name, avg_row_len, num_rows, blocks, pct_free


2 from user_tables
3 where table_name='TEST_MIGRACION';

TABLE_NAME AVG_ROW_LEN NUM_ROWS BLOCKS PCT_FREE


------------------------------ ----------- ---------- ---------- ----------
TEST_MIGRACION 10 1000 5 10

SQL> select DBMS_ROWID.ROWID_BLOCK_NUMBER(rowid), count(*)


2 from test_migracion
3 group by DBMS_ROWID.ROWID_BLOCK_NUMBER(rowid);

DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID) COUNT(*)
------------------------------------ ----------
80125 491
80126 484
80127 25
SQL> select DBMS_ROWID.ROWID_BLOCK_NUMBER(rowid), count(*)
2 from test_migracion
3 where id<=10
4 group by DBMS_ROWID.ROWID_BLOCK_NUMBER(rowid);

DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID) COUNT(*)
------------------------------------ ----------
80125 10

SQL> declare
2 texto varchar2(1000);
3 begin
4 for x in 1..100
5 loop
6 texto:=texto||'X';
7 end loop;
8 update test_migracion set valor2=texto where id<=10;
9 end;
10 /

Procedimiento PL/SQL terminado correctamente.

SQL> commit;

Confirmaci�n terminada.

SQL> drop table chained_rows;

Tabla borrada.

SQL> @?/rdbms/admin/utlchain

Tabla creada.

SQL> desc chained_rows


Nombre +Nulo? Tipo
---------------------------------------------- -------- ------------
OWNER_NAME VARCHAR2(30)
TABLE_NAME VARCHAR2(30)
CLUSTER_NAME VARCHAR2(30)
PARTITION_NAME VARCHAR2(30)
SUBPARTITION_NAME VARCHAR2(30)
HEAD_ROWID ROWID
ANALYZE_TIMESTAMP DATE

SQL> analyze table test_migracion list chained rows;

Tabla analizada.
SQL> select table_name, head_rowid
2 from chained_rows;

TABLE_NAME HEAD_ROWID
------------------------------ ------------------
TEST_MIGRACION AAAXnIAAEAAATj9AAI
TEST_MIGRACION AAAXnIAAEAAATj9AAJ

SQL> select id from test_migracion


2 where rowid in (select head_rowid from chained_rows);

ID
----------
9
10

SQL> select * from test_migracion where id<=20;

ID VALOR VALOR2
---------- ----- ------------------------------------------------------------
1 VALOR XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

2 VALOR XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

3 VALOR XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

4 VALOR XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

5 VALOR XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

6 VALOR XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

7 VALOR XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

8 VALOR XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

11 VALOR
12 VALOR
13 VALOR
14 VALOR
15 VALOR
16 VALOR
17 VALOR
18 VALOR
19 VALOR
20 VALOR
9 VALOR XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

10 VALOR XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

20 filas seleccionadas.

SQL> truncate table chained_rows;

Tabla truncada.

SQL> alter table test_migracion move;

Tabla modificada.

SQL> analyze table test_migracion list chained rows;

Tabla analizada.

SQL> select table_name, head_rowid


2 from chained_rows;

ninguna fila seleccionada

SQL> create table objetos_iot (


2 id number,
3 tipo varchar2(19),
4 nombre varchar2(128),
5 constraint pk_objetos_iot primary key (id))
6 organization index;

Table created.

SQL> create table objetos_estandar (


2 id number,
3 tipo varchar2(19),
4 nombre varchar2(128),
5 constraint pk_objetos_std primary key (id)) ;

Table created.
SQL> select table_name from user_tables;

TABLE_NAME
------------------------------
OBJETOS_ESTANDAR
OBJETOS_IOT

SQL> select segment_name, segment_type


2 from user_segments;

SEGMENT_NAME SEGMENT_TYPE
------------------------- ------------------
OBJETOS_ESTANDAR TABLE
PK_OBJETOS_IOT INDEX --> Este segmento corresponde a la tabla
OBJETOS_IOT
PK_OBJETOS_STD INDEX

SQL> explain plan for


2 select nombre from objetos_estandar
3 where id between 20000 and 30000;

Explained.

SQL> @?/rdbms/admin/utlxpls

PLAN_TABLE_OUTPUT
-----------------------------------------------------------------------------------
-----
Plan hash value: 3057118431

-----------------------------------------------------------------------------------
-----
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time
|
-----------------------------------------------------------------------------------
-----
| 0 | SELECT STATEMENT | | 10492 | 809K| 142 (0)|
00:00:02 |
| 1 | TABLE ACCESS BY INDEX ROWID|OBJETOS_ESTANDAR| 10492 |809K|142 (0)|
00:00:02 |
|* 2 | INDEX RANGE SCAN | PK_OBJETOS_STD | 10492 | | 29 (0)|
00:00:01 |
-----------------------------------------------------------------------------------
-----

Predicate Information (identified by operation id):


---------------------------------------------------

2 - access("ID">=20000 AND "ID"<=30000)


SQL> explain plan for
2 select nombre from objetos_iot
3 where id between 20000 and 30000;

Explained.

SQL> @?/rdbms/admin/utlxpls

PLAN_TABLE_OUTPUT
-----------------------------------------------------------------------------------
-----
Plan hash value: 2341284110

-----------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-----------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 11063 | 853K| 4 (0)| 00:00:01 |
|* 1 | INDEX RANGE SCAN| PK_OBJETOS_IOT | 11063 | 853K| 4 (0)| 00:00:01 |
-----------------------------------------------------------------------------------

Predicate Information (identified by operation id):


---------------------------------------------------

1 - access("ID">=20000 AND "ID"<=30000)

SQL> select rowid, o.*


2 from objetos_iot o
3 where rownum<5;

ROWID ID TIPO NOMBRE


---------------- ---------- ------------------- ------------------------
*BABCiiICwQP+ 2 CLUSTER C_OBJ#
*BABCiiICwQT+ 3 INDEX I_OBJ#
*BABCiiICwQX+ 4 TABLE TAB$
*BABCiiICwQb+ 5 TABLE CLU$

SQL> select rowid, o.*


2 from objetos_estandar o
3 where rownum<5;
ROWID ID TIPO NOMBRE
------------------ ---------- -------------------
--------------------------------------
AAA5EkAABAAArQhAAA 28 TABLE CON$
AAA5EkAABAAArQhAAB 49 INDEX I_COL2
AAA5EkAABAAArQhAAC 11 INDEX I_USER#
AAA5EkAABAAArQhAAD 6 CLUSTER C_TS#

SQL> create cluster clu_factura (id_factura number) tablespace users;

Cluster created.

SQL> create index idx_clu_factura on cluster clu_factura;

Index created.

SQL> create table factura (


2 id_factura number primary key,
3 cliente varchar2(50),
4 fecha_factura date)
5 cluster clu_factura(id_factura);

Table created.
SQL> create table linea_factura (
2 id_detalle number primary key,
3 articulo varchar2(50),
4 precio number,
5 unidades number,
6 id_factura number references factura(id_factura))
7 cluster clu_factura(id_factura);

Table created.

SQL> select segment_name, segment_type from user_segments;

SEGMENT_NAME SEGMENT_TYPE
------------------------- ------------------
CLU_FACTURA CLUSTER
PK_FACTURA INDEX
PK_DETALLE INDEX
IDX_CLU_FACTURA INDEX

SQL> select table_name, cluster_name from user_tables;

TABLE_NAME CLUSTER_NAME
------------------------------ ------------------------------
FACTURA CLU_FACTURA
LINEA_FACTURA CLU_FACTURA
SQL> begin
2 for x in 1..10
3 loop
4 insert into factura
5 values (x,'CLIENTE'||to_char(x,'9999'),sysdate);
6 end loop;
7 end;
8 /

PL/SQL procedure successfully completed.

SQL> commit;

Commit complete.

SQL> select segment_name, sum(bytes)/1024/8 num_blocks


2 from user_segments
3 group by segment_name;

SEGMENT_NAME NUM_BLOCKS
------------------------- ----------
PK_DETALLE 8
IDX_CLU_FACTURA 8
CLU_FACTURA 16
PK_FACTURA 8

SQL> begin
2 for x in 11..500
3 loop
4 insert into factura
5 values (x,'CLIENTE'||to_char(x,'9999'),sysdate);
6 end loop;
7 end;
8 /

PL/SQL procedure successfully completed.

SQL> commit;

Commit complete.

SQL> select segment_name, sum(bytes)/1024/8 num_blocks


2 from user_segments
3 group by segment_name;

SEGMENT_NAME NUM_BLOCKS
------------------------- ----------
PK_DETALLE 8
IDX_CLU_FACTURA 8
CLU_FACTURA 640
PK_FACTURA 8

SQL> set autotrace traceonly

SQL> select * from linea_factura;

no rows selected

Execution Plan
----------------------------------------------------------
Plan hash value: 1325426376

-----------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-----------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 79 | 170 (0)| 00:00:03 |
| 1 | TABLE ACCESS FULL| LINEA_FACTURA | 1 | 79 | 170 (0)| 00:00:03 |
-----------------------------------------------------------------------------------

Note
-----
- dynamic sampling used for this statement (level=2)

Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
536 consistent gets
0 physical reads
0 redo size
618 bytes sent via SQL*Net to client
509 bytes received via SQL*Net from client
1 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
0 rows processed

SQL> select * from factura;

500 rows selected.

Execution Plan
----------------------------------------------------------
Plan hash value: 2931952114

-----------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-----------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 504 | 24696 | 170 (0)| 00:00:03 |
| 1 | TABLE ACCESS FULL| FACTURA | 504 | 24696 | 170 (0)| 00:00:03 |
-----------------------------------------------------------------------------

Note
-----
- dynamic sampling used for this statement (level=2)

Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
538 consistent gets
0 physical reads
0 redo size
32252 bytes sent via SQL*Net to client
883 bytes received via SQL*Net from client
35 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
500 rows processed

SQL> insert into linea_factura values (1,'ART-001',10,1,5);

1 row created.

SQL> insert into linea_factura values (2,'ART-002',1, 7,1);

1 row created.

SQL> insert into linea_factura values (3,'ART-003',15,20,5);

1 row created.

SQL> insert into linea_factura values (4,'ART-004',4, 3,1);

1 row created.

SQL> insert into linea_factura values (5,'ART-005',50,4,1);

1 row created.

SQL> insert into linea_factura values (6,'ART-006',100,2,5);

1 row created.

SQL> insert into linea_factura values (7,'ART-007',7,15,3);

1 row created.
SQL> insert into linea_factura values (8,'ART-008',2,11,1);

1 row created.

SQL> insert into linea_factura values (9,'ART-009',30,16,3);

1 row created.

SQL> insert into linea_factura values (10,'ART-0010',10,10,5);

1 row created.

SQL> insert into linea_factura values (11,'ART-0011',20,10,1);

1 row created.

SQL> insert into linea_factura values (12,'ART-0012',17,15,3);

1 row created.

SQL> insert into linea_factura values (13,'ART-0013',1,5,5);

1 row created.

SQL> select * from linea_factura;

ID_DETALLE ARTICULO PRECIO UNIDADES ID_FACTURA


---------- ------------------------------ ---------- ---------- ----------
2 ART-002 1 7 1
4 ART-004 4 3 1
5 ART-005 50 4 1
8 ART-008 2 11 1
11 ART-0011 20 10 1
7 ART-007 7 15 3
9 ART-009 30 16 3
12 ART-0012 17 15 3
1 ART-001 10 1 5
3 ART-003 15 20 5
6 ART-006 100 2 5
10 ART-0010 10 10 5

12 rows selected.

SQL> set autotrace on explain stat


SQL> select * from linea_factura
2 where id_factura=3;

ID_DETALLE ARTICULO PRECIO UNIDADES ID_FACTURA


---------- ------------------------------ ---------- ---------- ----------
7 ART-007 7 15 3
9 ART-009 30 16 3
12 ART-0012 17 15 3

Execution Plan
----------------------------------------------------------
Plan hash value: 1409678405

-----------------------------------------------------------------------------------
-----
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time
|
-----------------------------------------------------------------------------------
-----
| 0 | SELECT STATEMENT | | 1 | 79 | 1 (0)|
00:00:01 |
| 1 | TABLE ACCESS CLUSTER| LINEA_FACTURA | 1 | 79 | 1 (0)|
00:00:01 |
|* 2 | INDEX UNIQUE SCAN | IDX_CLU_FACTURA | 1 | | 0 (0)|
00:00:01 |
-----------------------------------------------------------------------------------
-----

Predicate Information (identified by operation id):


---------------------------------------------------

2 - access("ID_FACTURA"=3)

Statistics
----------------------------------------------------------
1 recursive calls
0 db block gets
3 consistent gets
0 physical reads
0 redo size
922 bytes sent via SQL*Net to client
520 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
3 rows processed

SQL> create cluster clu_libros (isbn number) tablespace users hashkeys 1000000;

Cluster created.

Elapsed: 00:10:43.95

SQL> select segment_name, sum(bytes)/1024/8 num_blocks


2 from user_segments
3 group by segment_name;

SEGMENT_NAME NUM_BLOCKS
------------------------------ ----------
CLU_LIBROS 1005056

SQL> create table libros (


2 isbn number constraint pk_libros primary key,
3 titulo varchar2(500),
4 autor varchar2(500),
5 paginas number)
6 cluster clu_libros (isbn);

Table created.

SQL> insert into libros values (1237823415363,'LIBRO 1','AUTOR 1',215);

1 row created.

SQL> insert into libros values (2341269983422,'LIBRO 2','AUTOR 2',95);

1 row created.

SQL> insert into libros values (8723424215235,'LIBRO 3','AUTOR 3',400);

1 row created.

SQL> insert into libros values (8218787342122,'LIBRO 4','AUTOR 4',216);

1 row created.

SQL> insert into libros values (9812893185323,'LIBRO 5','AUTOR 5',236);

1 row created.

SQL> insert into libros values (7754272347762,'LIBRO 6','AUTOR 1',477);

1 row created.

SQL> insert into libros values (3492923561032,'LIBRO 7','AUTOR 3',900);

1 row created.

SQL> insert into libros values (2289215268232,'LIBRO 8','AUTOR 1',60);

1 row created.

SQL> insert into libros values (2525550232300,'LIBRO 9','AUTOR 2',343);


1 row created.

SQL> insert into libros values (5523412322230,'LIBRO 10','AUTOR 1',266);

1 row created.

SQL> commit;

Commit complete.

SQL> select DBMS_ROWID.ROWID_BLOCK_NUMBER(rowid) bloque,


2 DBMS_ROWID.ROWID_ROW_NUMBER(rowid) fila,
3 rowid, libros.*
4 from libros;

BLOQUE FILA ROWID ISBN TITULO AUTOR PAGINAS


------- ----- ------------------ ---------- ---------- ---------- -------
91224 0 AAA5m1AAEAAAWRYAAA 9.8129E+12 LIBRO 5 AUTOR 5 236
167623 0 AAA5m1AAEAAAo7HAAA 3.4929E+12 LIBRO 7 AUTOR 3 900
168883 0 AAA5m1AAEAAApOzAAA 2.2892E+12 LIBRO 8 AUTOR 1 60
227026 0 AAA5m1AAEAAA3bSAAA 5.5234E+12 LIBRO 10 AUTOR 1 266
366122 0 AAA5m1AAEAABZYqAAA 8.7234E+12 LIBRO 3 AUTOR 3 400
605841 0 AAA5m1AAEAACT6RAAA 1.2378E+12 LIBRO 1 AUTOR 1 215
645039 0 AAA5m1AAEAACdevAAA 2.5256E+12 LIBRO 9 AUTOR 2 343
651066 0 AAA5m1AAEAACe86AAA 2.3413E+12 LIBRO 2 AUTOR 2 95
737854 0 AAA5m1AAEAAC0I+AAA 7.7543E+12 LIBRO 6 AUTOR 1 477
791168 0 AAA5m1AAEAADBKAAAA 8.2188E+12 LIBRO 4 AUTOR 4 216

10 rows selected.

SQL> select * from libros where isbn=2525550232300;

ISBN TITULO AUTOR PAGINAS


---------- -------------------- -------------------- ----------
2.5256E+12 LIBRO 9 AUTOR 2 343

Elapsed: 00:00:00.01

Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
1 consistent gets
0 physical reads
0 redo size
751 bytes sent via SQL*Net to client
520 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed

SQL> select * from libros where to_char(isbn)='2525550232300';

ISBN TITULO AUTOR PAGINAS


---------- -------------------- -------------------- ----------
2.5256E+12 LIBRO 9 AUTOR 2 343

Elapsed: 00:01:04.18

Statistics
----------------------------------------------------------
30 recursive calls
0 db block gets
1000109 consistent gets
1000126 physical reads
0 redo size
751 bytes sent via SQL*Net to client
520 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed

SQL> select cn_comp, sum(importe)


2 from companias, vuelos, reservas
3 where companias.id_comp=vuelos.comp_id_comp
4 and vuelos.id_vuelo=reservas.vue_id_vuelo
5 group by cn_comp;

CN_COMP SUM(IMPORTE)
------------------------------ ------------
Spanair 3386479,12
Air France 1720119,06
British Airways 3454955,5
Alitalia 3415356,57
Iberia 3463249,72
Air Europa 3387305,26
Air Nostrum 3463869,83
KLM 3367617,09
8 filas seleccionadas.

SQL> create materialized view mv_totales_compania


2 refresh on commit fast with primary key
3 as
4 select cn_comp, sum(importe)
5 from companias, vuelos, reservas
6 where companias.id_comp=vuelos.comp_id_comp
7 and vuelos.id_vuelo=reservas.vue_id_vuelo
8 group by cn_comp;
from companias, vuelos, reservas
*
ERROR en l�nea 5:
ORA-23413: la tabla "VUELOS"."RESERVAS" no tiene un log de vista materializada

SQL> create materialized view log on reservas


2 with rowid, primary key, sequence(importe)
3 including new values;

Log de vista materializada creado.

SQL> create materialized view log on vuelos


2 with rowid, primary key, sequence(comp_id_comp)
3 including new values;

Log de vista materializada creado.

SQL> create materialized view log on companias


2 with rowid, primary key, sequence(cn_comp)
3 including new values;

Log de vista materializada creado.

SQL> create materialized view mv_totales_compania


2 refresh on commit fast with primary key
3 as
4 select cn_comp, sum(importe)
5 from companias, vuelos, reservas
6 where companias.id_comp=vuelos.comp_id_comp
7 and vuelos.id_vuelo=reservas.vue_id_vuelo
8 group by cn_comp;

Vista materializada creada.

SQL> select mview_name, refresh_mode, refresh_method


2 from user_mviews;

MVIEW_NAME REFRES REFRESH_


------------------------------ ------ --------
MV_TOTALES_COMPANIA COMMIT FAST

SQL> insert into reservas values ('test',1000,null,null,null,null,78475);

1 fila creada.

SQL> commit;

Confirmaci�n terminada.

SQL> select * from mv_totales_compania;

CN_COMP SUM(IMPORTE)
------------------------------ ------------
Spanair 3386479,12
British Airways 3454955,5
Air France 1720119,06
Alitalia 3415356,57
Iberia 3463249,72
Air Europa 3387305,26
Air Nostrum 3463869,83
KLM 3368617,09 <-- el total se ha visto incrementado
en
1000 con la nueva reserva.

8 filas seleccionadas.

SQL> @?/rdbms/admin/utlxmv.sql

Tabla creada.

SQL> exec dbms_mview.explain_mview('MV_TOTALES_COMPANIA');

Procedimiento PL/SQL terminado correctamente.

SQL> select capability_name, possible, related_text, msgtxt


2 from mv_capabilities_table
3 where mvname='MV_TOTALES_COMPANIA';

CAPABILITY_NAME P RELATED_TEXT MSGTXT


----------------------------- - --------------
---------------------------------------
PCT N
REFRESH_COMPLETE Y
REFRESH_FAST Y
REWRITE N
PCT_TABLE N COMPANIAS la relaci�n no es una tabla
particionada
PCT_TABLE N VUELOS la relaci�n no es una tabla
particionada
PCT_TABLE N RESERVAS la relaci�n no es una tabla
particionada
REFRESH_FAST_AFTER_INSERT Y
REFRESH_FAST_AFTER_ONETAB_DML N SUM(IMPORTE) SUM(expr) sin COUNT(expr)
REFRESH_FAST_AFTER_ONETAB_DML N COUNT(*) no est� en la lista de
selecci�n
REFRESH_FAST_AFTER_ANY_DML N consulte el motivo por la que
REFRESH_FAST_AFTER_ONETAB_DML est�
desactivado
REFRESH_FAST_PCT N no se puede realizar PCT en ninguna
tabla
de detalles de la vista
materializada
REWRITE_FULL_TEXT_MATCH N la reescritura de consulta est�
desactivada en la vista
materializada
REWRITE_PARTIAL_TEXT_MATCH N la reescritura de consulta est�
desactivada en la vista
materializada
REWRITE_GENERAL N la reescritura de consulta est�
desactivada en la vista
materializada
REWRITE_PCT N no se puede realizar la reescritura
general ni PCT en ninguna tabla de
detalles
PCT_TABLE_REWRITE N COMPANIAS la relaci�n no es una tabla
particionada
PCT_TABLE_REWRITE N VUELOS la relaci�n no es una tabla
particionada
PCT_TABLE_REWRITE N RESERVAS la relaci�n no es una tabla
particionada

19 filas seleccionadas.

SQL> update reservas set importe=3000 where id_reserva='test';

1 fila actualizada.

SQL> commit;

Confirmaci�n terminada.

SQL> select * from mv_totales_compania where cn_comp='KLM';

CN_COMP SUM(IMPORTE)
------------------------------ ------------
KLM 3368617,09 <-- la vista NO se ha refrescado.
SQL> select cn_comp, sum(importe)
2 from companias, vuelos, reservas
3 where companias.id_comp=vuelos.comp_id_comp
4 and vuelos.id_vuelo=reservas.vue_id_vuelo
5 and cn_comp='KLM'
6 group by cn_comp;

CN_COMP SUM(IMPORTE)
------------------------------ ------------
KLM 3370617,09 <-- Las tablas muestran el c�mputo
real,
tras el update.

SQL> select capability_name, possible, related_text, msgtxt


2 from mv_capabilities_table
3 where mvname='MV_TOTALES_COMPANIA'
4 and capability_name like '%REFRESH_FAST_AFTER%';

CAPABILITY_NAME P RELATED_TEXT MSGTXT


------------------------------ - ---------------
-----------------------------------
REFRESH_FAST_AFTER_INSERT Y
REFRESH_FAST_AFTER_ONETAB_DML N SUM(IMPORTE) SUM(expr) sin COUNT(expr)
REFRESH_FAST_AFTER_ONETAB_DML N COUNT(*) no est� en la lista de
selecci�n
REFRESH_FAST_AFTER_ANY_DML N consulte el motivo por la que
REFRESH_FAST_AFTER_ONETAB_DML est�
desactivado

SQL> drop materialized view mv_totales_compania;

Vista materializada borrada.

SQL> truncate table mv_capabilities_table;

Tabla truncada.

SQL> create materialized view mv_totales_compania


2 refresh on commit fast with primary key
3 as
4 select cn_comp, sum(importe), count(importe), count(*)
5 from companias, vuelos, reservas
6 where companias.id_comp=vuelos.comp_id_comp
7 and vuelos.id_vuelo=reservas.vue_id_vuelo
8 group by cn_comp;

Vista materializada creada.


SQL> exec dbms_mview.explain_mview('MV_TOTALES_COMPANIA');

Procedimiento PL/SQL terminado correctamente.

SQL> select capability_name, possible, related_text, msgtxt


2 from mv_capabilities_table
3 where mvname='MV_TOTALES_COMPANIA'
4 and capability_name like '%REFRESH_FAST_AFTER%';

CAPABILITY_NAME P RELATED_TEXT MSGTXT


------------------------------ - ---------------
-------------------------------------
REFRESH_FAST_AFTER_INSERT Y
REFRESH_FAST_AFTER_ONETAB_DML Y
REFRESH_FAST_AFTER_ANY_DML Y

SQL> delete from reservas where id_reserva like '%test%';

1 fila suprimida.

SQL> commit;

Confirmaci�n terminada.

SQL> select cn_comp, sum(importe), count(importe), count(*)


2 from companias, vuelos, reservas
3 where companias.id_comp=vuelos.comp_id_comp
4 and vuelos.id_vuelo=reservas.vue_id_vuelo
5 and cn_comp='KLM'
6 group by cn_comp;

CN_COMP SUM(IMPORTE) COUNT(IMPORTE) COUNT(*)


------------------------------ ------------ -------------- ----------
KLM 3367617,09 22454 22454

SQL> select * from mv_totales_compania where cn_comp='KLM';

CN_COMP SUM(IMPORTE) COUNT(IMPORTE) COUNT(*)


------------------------------ ------------ -------------- ----------
KLM 3367617,09 22454 22454

SQL> select capability_name, possible, related_text, msgtxt


2 from mv_capabilities_table
3 where mvname='MV_TOTALES_COMPANIA'
4 and capability_name like '%REWRITE%';

CAPABILITY_NAME P RELATED_TEXT MSGTXT


------------------------------ - -------------
---------------------------------------
REWRITE N
REWRITE_FULL_TEXT_MATCH N la reescritura de consulta est�
desactivada en la vista
materializada
REWRITE_PARTIAL_TEXT_MATCH N la reescritura de consulta est�
desactivada en la vista
materializada
REWRITE_GENERAL N la reescritura de consulta est�
desactivada en la vista
materializada
REWRITE_PCT N no se puede realizar la reescritura
general ni PCT en ninguna tabla de
detalles
PCT_TABLE_REWRITE N COMPANIAS la relaci�n no es una tabla
particionada
PCT_TABLE_REWRITE N VUELOS la relaci�n no es una tabla
particionada
PCT_TABLE_REWRITE N RESERVAS la relaci�n no es una tabla
particionada

8 filas seleccionadas.

SQL> alter materialized view mv_totales_compania enable query rewrite;

Vista materializada modificada.

SQL> truncate table mv_capabilities_table;

Tabla truncada.
SQL> exec dbms_mview.explain_mview('MV_TOTALES_COMPANIA');

Procedimiento PL/SQL terminado correctamente.

SQL> select capability_name, possible, related_text, msgtxt


2 from mv_capabilities_table
3 where mvname='MV_TOTALES_COMPANIA'
4 and capability_name like '%REWRITE%';

CAPABILITY_NAME P RELATED_TEXT MSGTXT


------------------------------ - -------------
---------------------------------------
REWRITE Y
REWRITE_FULL_TEXT_MATCH Y
REWRITE_PARTIAL_TEXT_MATCH Y
REWRITE_GENERAL Y
REWRITE_PCT N no se puede realizar la reescritura
general ni PCT en ninguna tabla de
detalles
PCT_TABLE_REWRITE N COMPANIAS la relaci�n no es una tabla
particionada
PCT_TABLE_REWRITE N VUELOS la relaci�n no es una tabla
particionada
PCT_TABLE_REWRITE N RESERVAS la relaci�n no es una tabla
particionada

8 filas seleccionadas.
SQL> explain plan for
2 select cn_comp, sum(importe)
3 from companias, vuelos, reservas
4 where companias.id_comp=vuelos.comp_id_comp
5 and vuelos.id_vuelo=reservas.vue_id_vuelo
6 and cn_comp='KLM'
7 group by cn_comp;

Explicado.

SQL> @?/rdbms/admin/utlxpls

PLAN_TABLE_OUTPUT
-----------------------------------------------------------------------------------
-----
Plan hash value: 1279300060

-----------------------------------------------------------------------------------
-----
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time
|
-----------------------------------------------------------------------------------
-----
| 0 | SELECT STATEMENT | | 1 | 30 | 3 (0)|
00:00:01 |
|* 1 | MAT_VIEW REWRITE ACCESS FULL| MV_TOTALES_COMPANIA | 1 |30 | 3 (0)|
00:00:01 |
-----------------------------------------------------------------------------------
-----

Predicate Information (identified by operation id):


---------------------------------------------------

1 - filter("MV_TOTALES_COMPANIA"."CN_COMP"='KLM')

You might also like