Inspirado en la publicación de @connor_mc_d estoy publicando la versión al español, de la pregunta:
Cuántas particiones máximo puede tener una tabla en una base de datos Oracle.?
Veamos esto con un ejemplo.
Vamos a levantar los servicios de mi VM de pruebas utilizando Oracle Linux y Oracle Database 12c R1 12.1.0.2
Mi laboratorio es un Contanier Database 12c con una base de datos PDB y el opcional de IN-MEMORY Database configurado.
[oracle@lab2-db ~]$ sqlplus /nolog
SQL*Plus: Release 12.1.0.2.0 Production on Sat Feb 18 13:43:29 2017
Copyright (c) 1982, 2014, Oracle. All rights reserved.
SQL> connect / as sysdba
Connected to an idle instance.
SQL> startup
ORACLE instance started.
Total System Global Area 1660944384 bytes
Fixed Size 2925072 bytes
Variable Size 973082096 bytes
Database Buffers 452984832 bytes
Redo Buffers 13848576 bytes
In-Memory Area 218103808 bytes
Database mounted.
Database opened.
SQL> connect / as sysdba
Connected.
SQL> alter pluggable database pdb1 open;
Pluggable database altered.
Vamos a conectarnos a la base de datos, utilizando un usuario común y silvestre. Para ello, nos conectamos con el esquema de recursos humanos de demo de la base de datos.
SQL> connect hr/hr@pdb1
Connected.
Vamos a crear una tabla simple con dos columnas, particionada por rango de años.
SQL> create table SALES
( cal_year date,
txn_id int )
partition by range ( cal_year )
INTERVAL( NUMTOYMINTERVAL(1,'YEAR'))
(
partition p_low values less than ( date '2000-01-01' )
)
/
Table created.
Ahora sí, veamos cuantas particiones han sido creadas con la sentencia anterior.
SQL> select PARTITION_NAME, HIGH_VALUE
from user_tab_partitions
where table_name = 'SALES';
PARTITION_NAME HIGH_VALUE
------------------------------ --------------------------------------------------------------------------------
P_LOW TO_DATE(' 2000-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA
SQL> SELECT * FROM SALES;
no rows selected
En el plan de ejecución de la sentencia, podemos observar las columnas PSTART y PSTOP.
La columna PSTART contiene el número de la primera partición a la que se accede y la columna PSTOP contiene el número de la última partición a la que se accede.
Execution Plan
----------------------------------------------------------
Plan hash value: 1550251865
---------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop |
---------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 22 | 2 (0)| 00:00:01 | | |
| 1 | PARTITION RANGE ALL| | 1 | 22 | 2 (0)| 00:00:01 | 1 |1048575|
| 2 | TABLE ACCESS FULL | SALES | 1 | 22 | 2 (0)| 00:00:01 | 1 |1048575|
---------------------------------------------------------------------------------------------
Como se puede mirar, según el plan de ejecución obtenida para el barrido completo de la tabla "sales", a la hora de hacer recorrido por la tabla, se obtiene que la partición 1 es la primera que sería barrida y que la última sería la 1.048.575.
El objeto del diccionario de la base de datos "USER_PART_INDEXES", muestra la información de partición a nivel de objeto para todos los índices particionados en la base de datos. Al consultar el valor para la columna "PARTITION_COUNT" obtenemos el resultado de 1.048.575.
SQL> select TABLE_NAME,INDEX_NAME,PARTITION_COUNT from user_part_indexes
where table_name='SALES';
SQL> column INDEX_NAME format a20;
SQL> /
TABLE_NAME INDEX_NAME PARTITION_COUNT
-------------------- -------------------- ---------------
SALES SALES_IX 1048575
Conclusión:
En Oracle Database 12c Release 1, la cantidad máxima de particiones que podemos tener en una tabla es de más de 1 Millón.
Excelente respuesta, sería bueno hacer el ejercicio de subparticiones
ResponderEliminarEsperemos para el principio de la próxima semana.
EliminarMuchas gracias Willblog, lo vamos a hacer más adelante. Te agradezco el comentario.
ResponderEliminar