una - oracle pivot subquery
Tablas dinĂ¡micas de tablas en Oracle (4)
Hay un producto que lo cuida automáticamente. PartitionManager for Oracle proporciona administración automática de particiones, basada en la retención de la organización, incluida la depuración y el archivo de datos antiguos, la copia de estadísticas, etc. Puede probarlo en http://www.xyrosoft.com
Estoy en el proceso de crear un almacenamiento de base de datos para mi aplicación que consiste en una sola tabla con un enorme volumen de datos (cientos de millones de registros). Estoy planeando tener un índice en el campo de fecha, ya que realizaré una recuperación por lotes de todos los registros en un período de tiempo determinado de vez en cuando (por ejemplo, recuperando todos los registros para el día siguiente, a la medianoche) )
Dado que el número de registros es enorme y el rendimiento es una preocupación importante en este sistema, me gustaría saber si existe una forma de dividir dinámicamente mi tabla para que pueda recuperar los registros más rápidamente, creando y truncando particiones, ya que no son más tiempo necesitado. Por ejemplo, ¿cómo podría crear una partición para el día siguiente y rellenarla con el resto de los datos una vez que haya terminado de procesar los registros de hoy?
puede automatizar el proceso de crear o truncar particiones mediante el uso de SQL dinámico . Escribiría procedimientos con EXECUTE IMMEDIATE o DBMS_SQL
y los programaría con DBMS_JOB
o DBMS_SCHEDULER
( DBMS_SCHEDULER
es una función 10g y es más versátil que DBMS_JOB
).
Probablemente desee construir las instrucciones de partición manualmente primero y automatizar el proceso más adelante cuando esté seguro con el DDL. Encontrará todo el synthax en la documentación de la instrucción ALTER TABLE .
Aquí hay una muestra de algo que surgió para crear particiones usando SYSDATE
y un desplazamiento. Tuve que crear parámetros de reemplazo con una cadena concatenada con SYSDATE
:
COLUMN temp_var new_value partition_name_01;
SELECT ''TABLE_NAME_'' || TO_CHAR(SYSDATE - 3, ''YYYYMMDD'') AS temp_var FROM dual;
COLUMN temp_var new_value partition_date_01;
SELECT TO_CHAR(SYSDATE - 3, ''SYYYY-MM-DD'') || '' 00:00:00'' AS temp_var FROM dual;
COLUMN temp_var new_value partition_name_02;
SELECT ''TABLE_NAME_'' || TO_CHAR(SYSDATE - 2, ''YYYYMMDD'') AS temp_var FROM dual;
COLUMN temp_var new_value partition_date_02;
SELECT TO_CHAR(SYSDATE - 2, ''SYYYY-MM-DD'') || '' 00:00:00'' AS temp_var FROM dual;
COLUMN temp_var new_value partition_name_03;
SELECT ''TABLE_NAME_'' || TO_CHAR(SYSDATE - 1, ''YYYYMMDD'') AS temp_var FROM dual;
COLUMN temp_var new_value partition_date_03;
SELECT TO_CHAR(SYSDATE - 1, ''SYYYY-MM-DD'') || '' 00:00:00'' AS temp_var FROM dual;
COLUMN temp_var new_value partition_name_04;
SELECT ''TABLE_NAME_'' || TO_CHAR(SYSDATE, ''YYYYMMDD'') AS temp_var FROM dual;
COLUMN temp_var new_value partition_date_04;
SELECT TO_CHAR(SYSDATE, ''SYYYY-MM-DD'') || '' 00:00:00'' AS temp_var FROM dual;
CREATE TABLE TABLE_NAME
(
SEQ_NO NUMBER NOT NULL,
INSERT_DATE DATE NOT NULL,
FIRST_NAME VARCHAR2 (256 BYTE),
LAST_NAME VARCHAR2 (256 BYTE),
ID_NUM NUMBER,
ID_STATUS NUMBER
)
PARTITION BY RANGE
(INSERT_DATE)
SUBPARTITION BY LIST
(ID_STATUS)
SUBPARTITION TEMPLATE (
SUBPARTITION SP1 VALUES (0) TABLESPACE &tblspce,
SUBPARTITION SP2 VALUES (1) TABLESPACE &tblspce,
SUBPARTITION SP3 VALUES (2) TABLESPACE &tblspce)
(
PARTITION &partition_name_01
VALUES LESS THAN
(TO_DATE (''&partition_date_01'',
''SYYYY-MM-DD HH24:MI:SS'',
''NLS_CALENDAR=GREGORIAN'')),
PARTITION &partition_name_02
VALUES LESS THAN
(TO_DATE (''&partition_date_02'',
''SYYYY-MM-DD HH24:MI:SS'',
''NLS_CALENDAR=GREGORIAN'')),
PARTITION &partition_name_03
VALUES LESS THAN
(TO_DATE (''&partition_date_03'',
''SYYYY-MM-DD HH24:MI:SS'',
''NLS_CALENDAR=GREGORIAN'')),
sysdate
PARTITION &partition_name_04
VALUES LESS THAN
(TO_DATE (''&partition_date_04'',
''SYYYY-MM-DD HH24:MI:SS'',
''NLS_CALENDAR=GREGORIAN'')))
ENABLE ROW MOVEMENT;
En 11g podemos definir particiones INTERVAL, y Oracle creará automáticamente nuevas particiones cuando obtenga nuevos registros cuyas claves no encajen en ninguno de los rangos existentes. Esta es una característica muy buena. Descubra más .
Una cosa a tener en cuenta es que el Particionamiento es un cargo adicional sobre la licencia de Enterprise Edition. Entonces no es barato de usar.