Oracle basic, Bagaimana cara ngerubah tabel non-partisi ke tabel berpartisi, berikut beberapa cara yang biasa digunakan: A. Metode Export/Import B. Insert dengan metode sub-query C. metode Partition exchange. Metode2 berikut akan membuat sebuah tabel partisi dari tabel yang sebelumnya belum dipartisi. Sekarang kita umpamakan tabel EMP adalah sebuah tabel non-partisi.
A. Metode Export/import
1) Export tabel EMP non-partisi:
exp username/password tables=emp file=emp_export.dmp log=emp_export.log
2) Drop table EMP:
DROP TABLE EMP CASCADE CONSTRAINTS PURGE;
3) Recreate tabel EMP dengan partisi:
create table EMP (
empo number(3),
name varchar2(15))
partition by range (qty)
(
partition p1 values less than (501),
partition p2 values less than (maxvalue)
);
4) Import tabel dengan gunakan parameter ignore=y:
imp user/password file=emp_export.dmp ignore=y
Parameter ignore=y akan membuat proses import skip pada proses create tabel dan melanjutkan meload semua data.
B. Insert dengan metode subquery
1) Create tabel partisi :
create table EMP_PART (
empo number(3),
name varchar2(15))
partition by range (qty)
(
partition p1 values less than (501),
partition p2 values less than (maxvalue)
);
2) Insert data kedalam tabel yang sudah kita create dan berpartisi dengan subquery dari tabel non-partisi:
insert into EMP_TEMP (qty, name) select * from EMP
Note: EMP adalah tabel non-partisi.
3) Selanjutnya kita ubah tabel yang sudah berpartisi sehingga mempunyai nama yang sama dengan tabel yang
original, DROP tabel original dan rename tabel baru yang sudah berpartisi:
DROP TABLE EMP CASCADE CONSTRAINTS PURGE;
alter table EMP_TEMP rename to EMP;
C. Metode Partition Exchange ALTER TABLE EXCHANGE PARTITION dapat digunakan untuk convert sebuah partisi atau
subpartisi ke tabel non-partisi dan dari tabel non-partisi ke tabel partisi atau subpartisi dari tabel partisi
dengan exchange data dan index segment.
1) “Create table dummy_temp as select …” dengan partisi yang kita perlukan
2) Kemudian lakukan alter table EXCHANGE partition with tabel dummy yang kita create ;
SQL> CREATE TABLE p_emp
2 (sal NUMBER(7,2))
3 PARTITION BY RANGE(sal)
4 (partition emp_p1 VALUES LESS THAN (2000),
5 partition emp_p2 VALUES LESS THAN (4000));Table created.
SQL> SELECT * FROM emp;
EMPNO ENAME JOB MGR HIREDATE SAL
——— ———- ——— ——— ——— ———
7369 SMITH CLERK 7902 17-DEC-80 800 7499 ALLEN SALESMAN 7698 20-FEB-81 1600
7521 WARD SALESMAN 7698 22-FEB-81 1250 7566 JONES MANAGER 7839 02-APR-81 2975
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 7698 BLAKE MANAGER 7839 01-MAY-81 2850
7782 CLARK MANAGER 7839 09-JUN-81 2450 7788 SCOTT ANALYST 7566 19-APR-87 3000
7839 KING PRESIDENT 17-NOV-81 5000 7844 TURNER SALESMAN 7698 08-SEP-81 1500
7876 ADAMS CLERK 7788 23-MAY-87 1100 7900 JAMES CLERK 7698 03-DEC-81 950
7902 FORD ANALYST 7566 03-DEC-81 3000 7934 MILLER CLERK 7782 23-JAN-82 130014 rows selected.
SQL> CREATE TABLE dummy_y as SELECT sal FROM emp WHERE sal<2000;
Table created.
SQL> CREATE TABLE dummy_z as SELECT sal FROM emp WHERE sal BETWEEN 2000 AND 3999;
Table created.
SQL> alter table p_emp exchange partition emp_p1 with table dummy_y;
Table altered.
SQL> alter table p_emp exchange partition emp_p2 with table dummy_z;
Table altered





Comments