En este post se presenta un ejemplo sencillo del proceso de migración de BasicFile a SecureFile.
1.
Creación de la tabla destino y definición de los
objetos a trabajar en este ejemplo guía
a.
Definición de la Tabla Origen BasicFile
CREATE TABLE BASICFILE_TAB (
ID
NUMBER PRIMARY KEY,
CLOB_DATA
CLOB
)
LOB(CLOB_DATA) STORE AS
BASICFILE BASICFILE_LOB;
b.
Creación de la Tabla destino SecureFile
CREATE TABLE SECUREFILE_TAB (
ID
NUMBER NOT NULL,
CLOB_DATA
CLOB
)
LOB(CLOB_DATA) STORE AS
SECUREFILE SECUREFILE_LOB (
DEDUPLICATE
COMPRESS MEDIUM
);
c.
A continuación, se presenta la definición
resumen de las dos tablas:
SELECT OWNER, TABLE_NAME,
COLUMN_NAME, SEGMENT_NAME, TABLESPACE_NAME, COMPRESSION, DEDUPLICATION,
SECUREFILE
FROM ALL_LOBS WHERE TABLE_NAME
IN ('SECUREFILE_TAB','BASICFILE_TAB');
d.
Se insertan datos en la tabla origen:
DECLARE
l_clob CLOB := RPAD('X', 10000, 'X');
BEGIN
FOR i IN 1 .. 1000 LOOP
INSERT INTO BASICFILE_TAB VALUES (i,
l_clob);
END LOOP;
COMMIT;
END;
e.
Revisamos el tamaño de las tablas en KB:
SELECT SEGMENT_NAME,
BYTES/1024
FROM USER_SEGMENTS
WHERE SEGMENT_NAME IN
('BASICFILE_LOB','SECUREFILE_LOB');
2.
Se inicia la redefinición de tablas, donde se
mapean los campos de las tablas:
BEGIN
DBMS_REDEFINITION.START_REDEF_TABLE
('JMENDOZA', 'BASICFILE_TAB', 'SECUREFILE_TAB', 'ID ID, CLOB_DATA CLOB_DATA');
END;
Revisamos
el tamaño de las tablas en KB, luego de la redefinición, que se observa que se
hizo la copia de los datos de la tabla origen (BASICFILE) a la tabla destino
(SECUREFILE), se redujo significativamente el espacio gracias a las propiedades
definidas Deduplicate y Compression:
SELECT SEGMENT_NAME,
BYTES/1024
FROM USER_SEGMENTS
WHERE SEGMENT_NAME IN
('BASICFILE_LOB','SECUREFILE_LOB');
3.
El siguiente paso es copiar las dependencias de
la tabla origen:
DECLARE
ERROR_COUNT INTEGER := 0;
BEGIN
DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS
('JMENDOZA', 'BASICFILE_TAB', 'SECUREFILE_TAB', 1, TRUE, TRUE, TRUE, FALSE,
ERROR_COUNT);
END;
4.
Fin de la redefinición, se intercambian los
nombres de las tablas, luego de este paso la tabla BASICFILE_TAB estará
migrada, tendrá los datos y la definición de SecureFile:
EXEC DBMS_REDEFINITION.FINISH_REDEF_TABLE ('JMENDOZA',
'BASICFILE_TAB', 'SECUREFILE_TAB');
SELECT OWNER, TABLE_NAME,
COLUMN_NAME, SEGMENT_NAME, TABLESPACE_NAME, COMPRESSION, DEDUPLICATION,
SECUREFILE
FROM ALL_LOBS WHERE TABLE_NAME IN
('SECUREFILE_TAB','BASICFILE_TAB');
5.
Teniendo ya migrada nuestra tabla, podemos
eliminar la tabla auxiliar:
DROP TABLE SECUREFILE_TAB;
No hay comentarios:
Publicar un comentario