You are hereComo redefinir una tabla en Oracle

Como redefinir una tabla en Oracle


By surachart - Posted on 11 December 2008

Necesito redefinir "en-vivo" la tabla SCOTT.EMP01 de acuerdo a la siguiente formula: columna deptno=deptno+10 y además utilizar particiones.

CREATE TABLE "SCOTT"."EMP01"
   (    "EMPNO" NUMBER(4,0),
        "ENAME" VARCHAR2(10),
        "JOB" VARCHAR2(9),
        "DEPTNO" NUMBER(2,0),
         CONSTRAINT "PK_EMP01" PRIMARY KEY ("EMPNO"));

select * from "SCOTT"."EMP01";
EMPNO ENAME JOB DEPTNO ---------- ---------- --------- ---------- 7369 SMITH CLERK 20 7499 ALLEN SALESMAN 30 7521 WARD SALESMAN 30 7566 JONES MANAGER 20 7654 MARTIN SALESMAN 30 7698 BLAKE MANAGER 30 7782 CLARK MANAGER 10 7788 SCOTT ANALYST 20 7839 KING PRESIDENT 10 7844 TURNER SALESMAN 30 7876 ADAMS CLERK 20 7900 JAMES CLERK 30 7902 FORD ANALYST 20 7934 MILLER CLERK 10

- Verificar que la tabla "SCOTT"."EMP01" es candidata para la redefinición online.

BEGIN
DBMS_REDEFINITION.CAN_REDEF_TABLE('SCOTT','EMP01',
      DBMS_REDEFINITION.CONS_USE_PK);
END;
/

- Crear una tabla intermedia o temporal, con las particiones deseadas.

 CREATE TABLE "SCOTT"."EMP02"
   (    "EMPNO" NUMBER(4,0),
        "ENAME" VARCHAR2(10),
        "JOB" VARCHAR2(9),
        "DEPTNO" NUMBER(2,0),
         CONSTRAINT "PK_EMP02" PRIMARY KEY ("EMPNO"))
        PARTITION BY RANGE(empno)
       (PARTITION emp1000 VALUES LESS THAN (7500),
        PARTITION emp2000 VALUES LESS THAN (8000));

- Iniciar el proceso de redefinición

BEGIN
DBMS_REDEFINITION.START_REDEF_TABLE('SCOTT', 'EMP01','EMP02',
       'empno empno, ename ename, job job, deptno+10 deptno',
        dbms_redefinition.cons_use_pk);
END;
/

- Copiar el objeto dependiente

DECLARE
num_errors PLS_INTEGER;
BEGIN
DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS('SCOTT', 'EMP01','EMP02',
   DBMS_REDEFINITION.CONS_ORIG_PARAMS, TRUE, TRUE, TRUE, TRUE, num_errors);
END;
/

select * from emp01;

     EMPNO ENAME      JOB           DEPTNO
---------- ---------- --------- ----------
      7369 SMITH      CLERK             20
      7499 ALLEN      SALESMAN          30
      7521 WARD       SALESMAN          30
      7566 JONES      MANAGER           20
      7654 MARTIN     SALESMAN          30
      7698 BLAKE      MANAGER           30
      7782 CLARK      MANAGER           10
      7788 SCOTT      ANALYST           20
      7839 KING       PRESIDENT         10
      7844 TURNER     SALESMAN          30
      7876 ADAMS      CLERK             20
      7900 JAMES      CLERK             30
      7902 FORD       ANALYST           20
      7934 MILLER     CLERK             10


select * from emp02;

     EMPNO ENAME      JOB           DEPTNO
---------- ---------- --------- ----------
      7369 SMITH      CLERK             30
      7499 ALLEN      SALESMAN          40
      7521 WARD       SALESMAN          40
      7566 JONES      MANAGER           30
      7654 MARTIN     SALESMAN          40
      7698 BLAKE      MANAGER           40
      7782 CLARK      MANAGER           20
      7788 SCOTT      ANALYST           30
      7839 KING       PRESIDENT         20
      7844 TURNER     SALESMAN          40
      7876 ADAMS      CLERK             30
      7900 JAMES      CLERK             40
      7902 FORD       ANALYST           30
      7934 MILLER     CLERK             20

- Consultar la vista DBA_REDEFINITION_ERRORS para checar si hubo error

select object_name, base_table_name, ddl_txt from DBA_REDEFINITION_ERRORS;

- Sincronizar la tabla temporal o intermedia

BEGIN 
DBMS_REDEFINITION.SYNC_INTERIM_TABLE('SCOTT', 'EMP01', 'EMP02');
END;
/

- Completar la redefinición

BEGIN
DBMS_REDEFINITION.FINISH_REDEF_TABLE('SCOTT', 'EMP01', 'EMP02');
END;
/

- Verificar el resultado en cuanto al particionamiento

select partitioned from user_tables where table_name='EMP01';

PAR
---
YES

... Hemos terminado, ahora eliminemos la tabla temporal (EMP02)

Saludos desde Indonesia!



Distribuir

Distribuir contenido

Follow DatabasesLA on Twitter

En línea

En este momento hay 0 usuarios y 1 invitado en línea.

Estadisticas

Locations of visitors to this page

hidden hit counter