DBA Junior

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 12

DBA Junior

Fortunas y adversidades de un DBA Oracle

 Home
 OCM 11g
 12c
 Tibero
Buscar Ir

Administer Partitioned Tables and


Indexes Using Appropriate Methods
and Keys
1. Documentación en Tahiti -> Oracle Database, 11g Release 2 (11.2) -> Masters Book List -> VLDB

and Partitioning Guide

Aparte de la dirección donde vienen varios capítulos relativos al particionamiento me gustaría

destacar estos otros:

· Tipos de Particiones

· Recomendaciones para escoger una estrategía

· Varios ejemplos de creación de particiones

2. El Particionamiento en Oracle es un tema muy denso. Hay un manual completo dedicado a las

particiones y sus ventajas dentro de las BBDD muy grandes (VLDB). En el examen se dedican tres

objetivos a este tema por la cantidad de requisitos a cubrir. Estos son los tres objetivos que cubren

las particiones en el examen:

[ ] Administer partitioned tables and indexes using appropriate methods and keys (este objetivo)

[ ] Perform partition maintenance operations

[ ] Maintain indexes on a partitioned table


Este objetivo concreto trata de cubrir las diferentes opciones que tenemos para crear tablas e

índices particionados. Además, debemos saber qué tipo de partición es la más adecuada para

nuestro propósito, así como la clave o claves de partición que debemos utilizar.

3. Empezamos creando diferentes tipos de tablas particionadas. En los ejemplos que vamos a ir

haciendo hay que prestar atención al tipo de particionamiento que hacemos y el por qué. Existen

tres tipos de tablas particionadas: RANGE, HASH y LIST. Además, están se pueden combinar entre sí.

En la documentación se nos explican varias razones por las cuales un método puede ser mejor en

una u otra ocasión (Recommendations for Choosing a Partitioning Strategy)

1 -- Hacemos los ejemplos sobre el esquema SH


-- Creamos varios TABLESPACES para nuestras pruebas
2
CREATE TABLESPACE DW01 DATAFILE '/u01/app/oracle/oradata/OCM/dw0101.dbf' size 100M;
3 CREATE TABLESPACE DW02 DATAFILE '/u01/app/oracle/oradata/OCM/dw0201.dbf' size 100M;
4 CREATE TABLESPACE DW03 DATAFILE '/u02/app/oracle/oradata/OCM/dw0301.dbf' size 100M;
5 CREATE TABLESPACE DW04 DATAFILE '/u02/app/oracle/oradata/OCM/dw0401.dbf' size 100M;
6 CREATE TABLESPACE DW05 DATAFILE '/u01/app/oracle/oradata/OCM/dw0501.dbf' size 100M;
CREATE TABLESPACE DW06 DATAFILE '/u01/app/oracle/oradata/OCM/dw0601.dbf' size 100M;
7 CREATE TABLESPACE DW07 DATAFILE '/u02/app/oracle/oradata/OCM/dw0701.dbf' size 100M;
8 ALTER USER SH QUOTA UNLIMITED ON DW01;
9 ALTER USER SH QUOTA UNLIMITED ON DW02;
10 ALTER USER SH QUOTA UNLIMITED ON DW03;
11 ALTER USER SH QUOTA UNLIMITED ON DW04;
ALTER USER SH QUOTA UNLIMITED ON DW05;
12 ALTER USER SH QUOTA UNLIMITED ON DW06;
13 ALTER USER SH QUOTA UNLIMITED ON DW07;
14  
15 -- Creamos una tabla particionada de tipo RANGE
16 --   · Este tipo de particionado es adecuado para guardar datos históricos (en este
--   · Las busquedas que hagamos sobre "time_id" se beneficiarán del "Partition Pru
17 ciertas particiones)
18 --   · El mantenimiento de esta tabla es sencillo, pudiendo crear nuevas particione
19 borrar las antiguas
20 --   · Hemos especificado un TBS distinto para cada partición, de esta forma podemo
21 CREATE TABLE SALES_RANGE
  ( prod_id       NUMBER(6)
22   , cust_id       NUMBER
23   , time_id       DATE
24   , channel_id    CHAR(1)
25   , promo_id      NUMBER(6)
26   , quantity_sold NUMBER(3)
  , amount_sold   NUMBER(10,2)
27   )
28  PARTITION BY RANGE (time_id)
29  ( PARTITION sales_q1_2013 VALUES LESS THAN (TO_DATE('2013/04/01','YYYY/MM/DD')) TAB
30    PARTITION sales_q2_2013 VALUES LESS THAN (TO_DATE('2013/07/01','YYYY/MM/DD')) TAB
   PARTITION sales_q3_2013 VALUES LESS THAN (TO_DATE('2013/10/01','YYYY/MM/DD')) TAB
31    PARTITION sales_q4_2013 VALUES LESS THAN (TO_DATE('2014/01/01','YYYY/MM/DD')) TAB
32  );
33  
34 -- Consultamos ciertos atributos de la tabla que hemos creado con sus particiones
35 -- Las vistas más consultadas son estas:
--   · DBA_TAB_PARTITIONS
36 --   · DBA_PART_TABLES
37 --   · DBA_TABLES
38 --   · DBA_SEGMENTS
39 SELECT TABLE_NAME, PARTITION_NAME, TABLESPACE_NAME FROM USER_TAB_PARTITIONS;
40 SELECT TABLE_NAME, PARTITIONING_TYPE, PARTITION_COUNT FROM USER_PART_TABLES;
41  
-- Una nueva funcionalidad que trae Oracle 11g se conoce como "Interval Partitionin
42 -- Oracle crear automática las particiones cuando lo necesita en base a un "interva
43 -- Nosotros seleccionamos que se cree una partición cada mes con la clausula "INTER
44 'MONTH')"
45 CREATE TABLE SALES_INTERVAL
46     ( prod_id        NUMBER(6)
    , cust_id        NUMBER
47     , time_id        DATE
48     , channel_id     CHAR(1)
49     , promo_id       NUMBER(6)
50     , quantity_sold  NUMBER(3)
    , amount_sold    NUMBER(10,2)
51     )
52   PARTITION BY RANGE (time_id)
53   INTERVAL(NUMTOYMINTERVAL(1, 'MONTH'))
54     ( PARTITION p0 VALUES LESS THAN (TO_DATE('1-1-2011', 'DD-MM-YYYY')),
55       PARTITION p1 VALUES LESS THAN (TO_DATE('1-1-2012', 'DD-MM-YYYY')),
      PARTITION p2 VALUES LESS THAN (TO_DATE('1-7-2012', 'DD-MM-YYYY')),
56       PARTITION p3 VALUES LESS THAN (TO_DATE('1-1-2013', 'DD-MM-YYYY')) );
57  
58 -- Comprobamos el número de particiones que tenemos
59 SELECT TABLE_NAME, PARTITION_NAME, TABLESPACE_NAME FROM USER_TAB_PARTITIONS WHERE
60 TABLE_NAME='SALES_INTERVAL';
61  
62 -- Insertamos varios registros en la tabla más alla del límite máximo de todas las
INSERT INTO SH.SALES_INTERVAL VALUES (1, 1, TO_DATE('2-1-2013', 'DD-MM-YYYY'), 'A', 1
63 INSERT INTO SH.SALES_INTERVAL VALUES (1, 1, TO_DATE('2-7-2013', 'DD-MM-YYYY'), 'A', 1
64  
65 -- Volvemos a revisar el número de particiones para descubrir que se han creado dos
66 SYS_P94)
67 -- Sólo es necesario crear dos particiones para los nuevos registros porque sólo ha
SELECT TABLE_NAME, PARTITION_NAME, HIGH_VALUE FROM USER_TAB_PARTITIONS WHERE TABLE_NA
68
69  
-- Obtenemos los registros de la nueva partición
70 SELECT * FROM INTERVAL_SALES PARTITION (SYS_P93);
71  
72 -- El segundo tipo de particionado es HASH
73 --   · Utilizaremos HASH cuando no tenemos una división lógica o una clara visión d
74 --   · Se suele utilizar para repartir los datos equitativamente entre varios parti
--   · Es recomendable que la clave de partición sea UNIQUE o casi única
75 --   · En nuestro ejemplo indicamos que las particiones se asignen a los 4 TBS con
76 CREATE TABLE EMP_HASH (
77   EMPNO    NUMBER(4) NOT NULL,
78   ENAME    CHAR(10),
  JOB      CHAR(9),
79
  MGR      NUMBER(4),
80   HIREDATE DATE,
81   SAL      NUMBER(7,2),
82
83
84
85
86
87
88
89   COMM     NUMBER(7,2),
90   DEPTNO   NUMBER(2),
91   PROJNO   NUMBER,
92   LOADSEQ  NUMBER)
PARTITION BY HASH (EMPNO)
93 PARTITIONS 4
94 STORE IN (DW01, DW02, DW03, DW04);
95  
96 -- El último tipo de particiones es LIST
97 --   · Utilizaremos este tipo cuando queremos dividir las particiones en base a val
--   · En particiones de tipo LIST sólo podemos usar una clave de partición, al con
98 métodos
99 CREATE TABLE ACCOUNTS_LIST
100 ( id             NUMBER
101 , account_number NUMBER
102 , customer_id    NUMBER
, branch_id      NUMBER
103 , region         VARCHAR(2)
104 , status         VARCHAR2(1)
105 )
106 PARTITION BY LIST (region)
( PARTITION p_northwest VALUES ('OR', 'WA')
107
, PARTITION p_southwest VALUES ('AZ', 'UT', 'NM')
108 , PARTITION p_northeast VALUES ('NY', 'VM', 'NJ')
109 , PARTITION p_southeast VALUES ('FL', 'GA')
110 , PARTITION p_northcentral VALUES ('SD', 'WI')
111 , PARTITION p_southcentral VALUES ('OK', 'TX')
);
112
113
114
115
116
117
118
119
4. Hemos visto ejemplo de particionados únicos, pero también tenemos la posibilidad de combinar

dos estrategías distintas. Se le conoce como COMPOSITE PARTITIONING o particionamiento

compuesto. Estas son las distintas combinaciones que podemos tener:

· Range-Range

· Range-Hash
· Range-List

· List-Range

· List-Hash

· List-List

No vamos a probar todas las combinaciones ya que en la documentación están todas. Pero si quieres

probar la más típicas.

1 -- Creamos una partición compuesta de tipo Range-Hash


--   · Indicado para datos históricos de gran volumen
2
--   · Se puede utilizar "Partition Pruning" a nivel de Range y "Partition-wise Joi
3 CREATE TABLE SALES_RANGE_HASH
4   ( prod_id       NUMBER(6)
5   , cust_id       NUMBER
6   , time_id       DATE
  , channel_id    CHAR(1)
7   , promo_id      NUMBER(6)
8   , quantity_sold NUMBER(3)
9   , amount_sold   NUMBER(10,2)
10   )
11  PARTITION BY RANGE (time_id) SUBPARTITION BY HASH (cust_id)
  SUBPARTITIONS 8 STORE IN (DW01, DW02, DW03, DW04)
12  ( PARTITION sales_q1_2006 VALUES LESS THAN (TO_DATE('01-APR-2006','dd-MON-yyyy'))
13  , PARTITION sales_q2_2006 VALUES LESS THAN (TO_DATE('01-JUL-2006','dd-MON-yyyy'))
14  , PARTITION sales_q3_2006 VALUES LESS THAN (TO_DATE('01-OCT-2006','dd-MON-yyyy'))
15  , PARTITION sales_q4_2006 VALUES LESS THAN (TO_DATE('01-JAN-2007','dd-MON-yyyy'))
 );
16
17  
-- El siguiente ejemplo más extenso no por ello más complicado se trata de una tabl
18 --   · Fijaros que tenemos una tabla histórica de ventas particionada por trimestre
19 --   · Nos interesa, como requisito de negocio, didivir las particiones en areas ge
20 CREATE TABLE SALES_RANGE_LIST
21   (
    deptno number,
22     item_no varchar2(20),
23     txn_date date,
24     txn_amount number,
25     state varchar2(2)
26   )
  PARTITION BY RANGE (txn_date)
27     SUBPARTITION BY LIST (state)
28       (PARTITION q1_1999 VALUES LESS THAN (TO_DATE('1-APR-1999','DD-MON-YYYY')) TABL
29          (SUBPARTITION q1_1999_northwest VALUES ('OR', 'WA'),
30           SUBPARTITION q1_1999_southwest VALUES ('AZ', 'UT', 'NM'),
          SUBPARTITION q1_1999_northeast VALUES ('NY', 'VM', 'NJ'),
31           SUBPARTITION q1_1999_southeast VALUES ('FL', 'GA'),
32           SUBPARTITION q1_1999_northcentral VALUES ('SD', 'WI'),
33           SUBPARTITION q1_1999_southcentral VALUES ('OK', 'TX')
34          ),
35        PARTITION q2_1999 VALUES LESS THAN ( TO_DATE('1-JUL-1999','DD-MON-YYYY')) TAB
         (SUBPARTITION q2_1999_northwest VALUES ('OR', 'WA'),
36           SUBPARTITION q2_1999_southwest VALUES ('AZ', 'UT', 'NM'),
37           SUBPARTITION q2_1999_northeast VALUES ('NY', 'VM', 'NJ'),
38           SUBPARTITION q2_1999_southeast VALUES ('FL', 'GA'),
          SUBPARTITION q2_1999_northcentral VALUES ('SD', 'WI'),
39           SUBPARTITION q2_1999_southcentral VALUES ('OK', 'TX')
40          ),
41        PARTITION q3_1999 VALUES LESS THAN (TO_DATE('1-OCT-1999','DD-MON-YYYY')) TABL
42          (SUBPARTITION q3_1999_northwest VALUES ('OR', 'WA'),
43           SUBPARTITION q3_1999_southwest VALUES ('AZ', 'UT', 'NM'),
          SUBPARTITION q3_1999_northeast VALUES ('NY', 'VM', 'NJ'),
44           SUBPARTITION q3_1999_southeast VALUES ('FL', 'GA'),
45           SUBPARTITION q3_1999_northcentral VALUES ('SD', 'WI'),
46           SUBPARTITION q3_1999_southcentral VALUES ('OK', 'TX')
47          ),
48        PARTITION q4_1999 VALUES LESS THAN ( TO_DATE('1-JAN-2000','DD-MON-YYYY')) TAB
         (SUBPARTITION q4_1999_northwest VALUES ('OR', 'WA'),
49           SUBPARTITION q4_1999_southwest VALUES ('AZ', 'UT', 'NM'),
50           SUBPARTITION q4_1999_northeast VALUES ('NY', 'VM', 'NJ'),
51           SUBPARTITION q4_1999_southeast VALUES ('FL', 'GA'),
52           SUBPARTITION q4_1999_northcentral VALUES ('SD', 'WI'),
          SUBPARTITION q4_1999_southcentral VALUES ('OK', 'TX')
53          )
54       );
55 -- Podemos listar todas las subparticiones que hemos creado (24)
56 SELECT
57   TABLE_NAME, PARTITION_NAME, SUBPARTITION_NAME, TABLESPACE_NAME
FROM
58   USER_TAB_SUBPARTITIONS
59 WHERE
60   TABLE_NAME='SALES_RANGE_LIST'
61 ORDER BY 2,3;
62  
63 -- Como habéis visto, la definición del ejemplo anterior repite continuamente el mi
subparticiones
64 -- Podemos crear una tabla particionado definiendo una plantilla para las subpartic
65 el DDL)
66 CREATE TABLE SALES_RANGE_LIST_TEMPLATE
67             ( deptno number, item_no varchar2(20),
              txn_date date, txn_amount number, state varchar2(2))
68    PARTITION BY RANGE (txn_date)
69    SUBPARTITION BY LIST (state)
70    SUBPARTITION TEMPLATE
71       (SUBPARTITION northwest VALUES ('OR', 'WA') TABLESPACE DW01,
72        SUBPARTITION southwest VALUES ('AZ', 'UT', 'NM') TABLESPACE DW02,
       SUBPARTITION northeast VALUES ('NY', 'VM', 'NJ') TABLESPACE DW03,
73        SUBPARTITION southeast VALUES ('FL', 'GA') TABLESPACE DW04,
74        SUBPARTITION northcentral VALUES ('SD', 'WI') TABLESPACE DW05,
75        SUBPARTITION southcentral VALUES ('OK', 'TX') TABLESPACE DW06,
76        SUBPARTITION others VALUES (DEFAULT) TABLESPACE DW07
      )
77
  (PARTITION q1_1999 VALUES LESS THAN ( TO_DATE('01-APR-1999','DD-MON-YYYY')),
78    PARTITION q2_1999 VALUES LESS THAN ( TO_DATE('01-JUL-1999','DD-MON-YYYY')),
79    PARTITION q3_1999 VALUES LESS THAN ( TO_DATE('01-OCT-1999','DD-MON-YYYY')),
80    PARTITION q4_1999 VALUES LESS THAN ( TO_DATE('1-JAN-2000','DD-MON-YYYY'))
81   );
-- Comprobamos las particiones que hemos creado
82 SELECT
83   TABLE_NAME, PARTITION_NAME, SUBPARTITION_NAME, TABLESPACE_NAME
84 FROM
85
86
87
88
89
90
91
92
93   USER_TAB_SUBPARTITIONS
94 WHERE
95   TABLE_NAME='SALES_RANGE_LIST_TEMPLATE'
ORDER BY 2,4;
96
97
98
99
100
101
102
103
104
5. Hasta ahora hemos creado varias tablas particionadas pero siempre hemos utilizado una única

clave o columna para dividir las particiones, pero podemos utilizar más de una.

1
2 -- Creamos una tabla particionada sobre varias claves
--   · El segundo campo "month" se evalua cuando el primero no es suficiente para de
3 CREATE TABLE SALES_MULTI (
4    year          NUMBER,
5    month         NUMBER,
6
   day           NUMBER,
7    amount_sold   NUMBER)
8 PARTITION BY RANGE (year,month)
9   (PARTITION before2001 VALUES LESS THAN (2001,1),
10    PARTITION q1_2001    VALUES LESS THAN (2001,4),
   PARTITION q2_2001    VALUES LESS THAN (2001,7),
11    PARTITION q3_2001    VALUES LESS THAN (2001,10),
12    PARTITION q4_2001    VALUES LESS THAN (2002,1),
13    PARTITION future     VALUES LESS THAN (MAXVALUE,0));
14
6. En el siguiente ejemplo quiero combinar varias características ya que no merece la pena verlas

por separado.

1 -- Creamos una tabla con varios aspectos distintivos


--   · Habilitamos la compresión a nivel de tabla, por lo que todas particiones se c
2 --   · Habilitamos movimiento de filas (ENABLE ROW MOVEMENT) para migrar las filas c
3 clave
4 --   · Podemos usar columnas virtuales como la clave de la partición (total_amount)
5 --   · Con "SEGMENT CREATION IMMEDIATE" forzamos la creación de los segmentos aunque
6 --   · Habilitamos PX sobra la tabla (PARALLEL)
7
8
9 --   · Deshabilitamos la generación de REDO (NOLOGGING)
10 CREATE TABLE SALES_COMBO
11   ( prod_id       NUMBER(6) NOT NULL
  , cust_id       NUMBER NOT NULL
12   , time_id       DATE NOT NULL
13   , channel_id    CHAR(1) NOT NULL
14   , promo_id      NUMBER(6) NOT NULL
15   , quantity_sold NUMBER(3) NOT NULL
16   , amount_sold   NUMBER(10,2) NOT NULL
  , total_amount AS (quantity_sold * amount_sold)
17   )
18  SEGMENT CREATION IMMEDIATE
19  COMPRESS
20  PARTITION BY RANGE (time_id) INTERVAL (NUMTOYMINTERVAL(1,'MONTH'))
 SUBPARTITION BY RANGE(total_amount)
21
 SUBPARTITION TEMPLATE
22    ( SUBPARTITION p_small VALUES LESS THAN (1000)
23    , SUBPARTITION p_medium VALUES LESS THAN (5000)
24    , SUBPARTITION p_large VALUES LESS THAN (10000)
25    , SUBPARTITION p_extreme VALUES LESS THAN (MAXVALUE)
   )
26  (PARTITION sales_before_2007 VALUES LESS THAN
27         (TO_DATE('01-JAN-2007','dd-MON-yyyy'))
28 )
29 ENABLE ROW MOVEMENT
30 PARALLEL NOLOGGING;
31
32
7. Al igual que tenemos tablas particionadas, también podemos particionar los índices. Cuando

creamos un índice sobre una tabla particionada puede ser de uno de estos tipos:

· Local Partitioned: Cada clave de una partición del índice apunta a una única partición de la tabla

del índice

· Global Partitioned: Cada clave de una mima partición pueden a apuntar a varias particiones

distinas de la tabla

· Global Nonpartitioned: Tenemos índice no particionado sobre una tabla particionada

Dentro de los índices particionados localmente, tenemos dos tipos:

· Local prefixed: El índice se particiona sobre un prefijo de las columnas del índice

· Local nonprefixed: El índice no está particionado sobre un prefijo de las columnas del índice

1 -- Creamos un índice global particionado sobre la tabla SALES_RANGE (tipo RANGE)


CREATE INDEX amount_sold_ix ON sales_range(amount_sold)
2    GLOBAL PARTITION BY RANGE(amount_sold)
3       ( PARTITION p_100 VALUES LESS THAN (100)
4       , PARTITION p_1000 VALUES LESS THAN (1000)
5       , PARTITION p_10000 VALUES LESS THAN (10000)
6       , PARTITION p_100000 VALUES LESS THAN (100000)
7       , PARTITION p_1000000 VALUES LESS THAN (1000000)
8       , PARTITION p_greater_than_1000000 VALUES LESS THAN (maxvalue)
9       );
10  
11 -- La creación de un índice LOCAL es mucho más sencilla, ya que las particiones son
tabla
12 -- Las particiones se crean EMPNO pero el índice está creado sobre DEPTNO => El índi
13      · El índice está particionado sobre EMPNO (aunque no lo indiquemos) porque lo o
14 particionada
15 CREATE INDEX LOC_DEPT_IX ON EMP_HASH(DEPTNO) LOCAL;
16  
-- Pongo un ejemplo de lo que sería un índice LOCAL PREFIXED (índice y particiones s
17 CREATE INDEX LOC_EMPNO_IX ON EMP_HASH(EMPNO) LOCAL;
18
Respecto a qué índice es más apropiado para qué situación, os recomiendo leer esta sección donde

dan unas directrices bastante adecuadas para ello. Expongamos un caso concreto bastante sencillo.

Supongamos que tenemos una tabla de registros de llamadas telefónicas. Este tipo de tablas suelen

tener millones de registros y además suelen tener un requisito de negocio muy claro que es el

número de meses de retención de estos registros. La estrategía habitual consiste en particionar la

tabla por fecha y tener un índice local sobre la fecha, para poder mantener la tabla con bastante

facilidad y no tener que recrear el índice cada vez que purgamos particiones viejas. Además,

podemos tener índices globales sobre otros campos en función de los requisitos de negocio que

manejemos.

8. Una funcionalidad nueva de Oracle 11g se llama Reference Partitioning. Nos permite clonar el tipo

de particionado de una tabla referencia por una Foreign Key. Es mucho más sencillo explicarlo con

un ejemplo que con texto.

1 -- Creamos varios tablespace para almacenar las tablas particionadas de prueba


CREATE TABLESPACE TBS1 DATAFILE SIZE 20M;
2 CREATE TABLESPACE TBS2 DATAFILE SIZE 20M;
3 CREATE TABLESPACE TBS3 DATAFILE SIZE 20M;
4 CREATE TABLESPACE TBS4 DATAFILE SIZE 20M;
5  
6 -- Creamos una tabla de productos (muy similar a la tabla OE.PRODUCTS)
7 CREATE TABLE HASH_PRODUCTS
    ( PRODUCT_ID          NUMBER(6)   PRIMARY KEY
8     , PRODUCT_NAME        VARCHAR2(50)
9     , PRODUCT_DESCRIPTION VARCHAR2(2000)
10     , CATEGORY_ID         NUMBER(2)
11     , WEIGHT_CLASS        NUMBER(1)
12     , WARRANTY_PERIOD     INTERVAL YEAR TO MONTH
    , SUPPLIER_ID         NUMBER(6)
13     , PRODUCT_STATUS      VARCHAR2(20)
14     , LIST_PRICE          NUMBER(8,2)
15     , MIN_PRICE           NUMBER(8,2)
16     , CATALOG_URL         VARCHAR2(50)
    , CONSTRAINT          PRODUCT_STATUS_LOV_DEMO
17
18
19
20
21                           CHECK (PRODUCT_STATUS IN ('ORDERABLE'
                                                  ,'PLANNED'
22                                                   ,'UNDER DEVELOPMENT'
23                                                   ,'OBSOLETE')
24  ) )
25  PARTITION BY HASH (PRODUCT_ID)
 PARTITIONS 4
26
 STORE IN (TBS1, TBS2, TBS3, TBS4);
27
 
28 -- Aquí es donde creamos una tabla con Reference Partitioning
29 -- Indicamos que el particionado de la clave debe ser el mismo que tiene HASH_PRODUC
30 PRODUCT_ID
31 CREATE TABLE PART_ORDER_ITEMS (
    ORDER_ID        NUMBER(12) PRIMARY KEY,
32     LINE_ITEM_ID    NUMBER(3),
33     PRODUCT_ID      NUMBER(6) NOT NULL,
34     UNIT_PRICE      NUMBER(8,2),
35     QUANTITY        NUMBER(8),
36     CONSTRAINT PRODUCT_ID_FK
    FOREIGN KEY (PRODUCT_ID) REFERENCES HASH_PRODUCTS(PRODUCT_ID))
37  PARTITION BY REFERENCE (PRODUCT_ID_FK);
38  
39 -- Limpiamos el entorno
40 DROP TABLE PART_ORDER_ITEMS;
41 DROP TABLE HASH_PRODUCTS;
DROP TABLESPACE TBS1 INCLUDING CONTENTS AND DATAFILES;
42 DROP TABLESPACE TBS2 INCLUDING CONTENTS AND DATAFILES;
43 DROP TABLESPACE TBS3 INCLUDING CONTENTS AND DATAFILES;
44 DROP TABLESPACE TBS4 INCLUDING CONTENTS AND DATAFILES;
45
46
47
48
DBA Junior
Páginas

 Home
 Configure archiving in a RAC Database
 Account
 Administer and Tune Schema Object to Support Various Access Methods
 Administer External Tables
 Administer Flashback Data Archive and Schema Evolution
 Administer Partitioned Tables and Indexes Using Appropriate Methods and Keys
 Administer Resource Manager
 Administer, Manage and Tune Parallel Execution
 Assign Jobs to Windows
 Choose the Appropriate Tablespace Type for the Intended Use
 Configure a Fast Recovery Area
 Configure a Schema to Support a Star Transformation Query
 Configure and Manage Distributed Materialized Views
 Configure and Use Parallel Execution for Queries
 Configure Archivelog Deletion Policy for the Dataguard Configuration
 Configure ASM for the shared disks and create a clustered database
 Configure Baseline Templates
 Configure Connect Ttime Failover
 Configure Enterprise Manager to Modify a Database Availability
 Configure Grid Control for Business Requirements
 Configure Recovery Manager
 Configure RMAN
 Configure Services using both Manual and Policy Managed Methods
 Configure the Data Guard Environment to Reduce Overheads of Fast Incremental Backups on the Primary Database
 Configure the Database Environment to Support Optimal Data Access Performance
 Configure the Database Instance to Support Shared Server Connections
 Configure the Enterprise Manager Repository
 Configure the Network Environment to Allow Connections to Multiple Databases
 Configure the Observer
 Convert the Standby to a Snapshot Standby
 Crear máquina virtual OCM
 Create and Configure a Listener
 Create and Manage a Tablespace that uses NFS Mounted File System File
 Create and manage an ASM instance
 Create and Manage Bigfile Tablespaces
 Create and Manage Contexts
 Create and Manage Database Configuration Files
 Create and Manage Encrypted Tablespaces
 Create and Manage Jobs
 Create and Manage LOB Segments
 Create and Manage Multiple Network Configuration Files
 Create and Manage Temporary, Permanent, and Undo Tablespaces
 Create And Monitor Alerts
 Create ASM Disk Groups
 Create Different Types of RMAN Backups to Cater for Different Performance and Retention Requirements
 Create Enterprise Manager Grid Control Users
 Create Job Classes
 Create Multitenant Cointanter Database (CDB)
 Create Notifications
 Create Physical Standby Database with Real-time Apply
 Create Programs
 Create Scheduler Jobs
 Create Schedules
 Create the database
 Create Virtual Machine Template
 Creating ACFS File System
 Deploy Enterprise Manager Grid Control Agents
 Deploy OEM Cloud Control Management Agent
 Determine and Set Sizing Parameters for Database Structures
 Download Oracle 12c Software
 Gather Statistics on a Specific Table Without Invalidating Cursors
 Implement ASM Failure Groups
 Implement Data Pump Export and Import Jobs for Data Transfer
 Implement Data Pump To and From Remote Databases
 Implement Fine-grained Access Control
 Implement Grid Control and Database Control
 Implement Instance Caging
 Implement SecureFile LOB
 Instalación Oracle Linux 5.4 en Máquina OCM
 Instalación Software Oracle 11.2.0.3 en OCM
 Install and Patch Enterprise Manager Grid Control Software
 Install OEM Cloud Control 12c
 Install Oracle Grid Infrastructure
 Install the Enterprise Manager Grid Control Infrastructure
 Install the Oracle Database 11gR2 software
 Interpret Execution Plan
 Maintain Indexes on a Partitioned Table
 Manage Materialized Views to Improve Rewrite and Refresh Performance
 Manage Oracle Network Processes
 Manage Transport of Tablespaces Across Platforms
 Mantain Recovery Catalogs
 New Features 12c
 Perform Partition Maintenance Operations
 Perform Various Recovery Operations Using Flashback Technology
 Protected Content
 Register
 Set Flashback Database Parameters
 Set up Network Tracing
 Setup OEM Database Express
 Start, Stop, Configure and Administer Oracle Grid Infrastructure
 Stripe Data Files Across Multiple Physical Devices and Locations
 Switchover and Switch Back
 Tibero
 Use -Multi Column Statistics
 Use Configurationless Connections
 Use Enterprise Manager Configuration Assistant (EMCA) Utility
 Use Enterprise Manager to Modify a Database Configuration
 Use Grid Infrastructure to Manage Oracle Databases and Other Resources
 Use OPatch to Install a Patch
 Use Partitioned Indexes
 Use Recover Manager to Perform Complete Database Restore and Recovery Operations
 Use Recovery Manager to Perform Database Backups
 Use Result Cache
 Use SQL Access Advisor
 Use SQL Performance Analyzer
 Use SQL Plan Management Feature
 Use SQL Tuning Advisor
 Use SQL Tuning Tools and Features
 Use SQL*Loader
 Oracle Certified Master 11g

Permanece en Contacto

 Site RSS Feed

Más

¿Quieres ser DBA? ¿Eres un DBA Junior? Juntos profundizaremos en nuevas técnicas y "machacaremos" los
conceptos básicos, para poder convertirnos en cracks! ;)

   
© 2020 DBA Junior

También podría gustarte