Table Partition

You might also like

Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 3

--PARTITION

--PARTITIONING ALLOWS TABLE,INDEX AND INDEX_ORGANIZED TABLES TO SUB DIVIDED INTO


SMALLER PIECES,
--ENABLING THOSE DATABASE OBJECT TO BE MANAGED AND ACCESSED AT A FINER LEVEL OF
GRANULARITY.

--WHY WE USE PARTITION?


--WHEN WE ARE TAKING 30% ABOVE DATA .
--INDEX WILL BE INEFFECTIVE (INDEX ONLY USED FOR LESS THAN 4% DATA OUTPUT)
--FULL TABLE SCAN WILL TAKE WAY TOO MUCH TIME.
--ADVANTAGES
--FULL PARTITION SCAN (LESS DATA,MUCH FASTER).
--THEN OUR PERFORMANCE SIGNIFICANTLY IMPROVE.
--PAARTITION IS IMPROVEMENT OF PERFORMANCE WHEN HANDLING HUGE AMOUNT OF DATA(2GB)
--(ANY TABLE BIGGER THEN 2GB)
--TYPES
--LIST/REGION PARTITION -- (WE CAN GIVE NUMBER AND VARCHAR2 DATA TYPE)
--RANGE PARTITION --(WE CAN GIVE NUMBER AND DATE DATA TYPE)
--HASH PARTITION --(WHICH COLUMNS DOESN'T CREATE RANGE AND LIST THEN WE
CREATE HASH PARTITION.)
--ENABLE ROW MOVEMENT
--ITS USED FOR WHEN WE UPDATE PARTITION COLUMN IN FUTURE SO THAT'S WHY WE USE
ENABLE ROW MOVEMENT.
--OTHERWISE ROW MOVEMENT IS NOT POSSIBLE .(ERROR OCCURED).

-----------------------------------------------------------------------------------
-----------------------
-->RANGE PARTITION (WE CAN GIVE NUMBER AND DATE DATA TYPE)

CREATE TABLE EMP (EMP_ID NUMBER,NAME VARCHAR2(30),SALARY NUMBER,DEPT_ID


NUMBER,HIRE_DATE DATE)
PARTITION BY RANGE (SALARY) INTERVAL (1000)
--INTERVAL IS OPTIONAL
(
PARTITION P1 VALUES LESS THAN (1000),
PARTITION P2 VALUES LESS THAN (2000),
PARTITION P3 VALUES LESS THAN (3000)
)ENABLE ROW MOVEMENT;

SELECT*FROM USER_TAB_PARTITIONS WHERE TABLE_NAME='EMP';

ALTER TABLE EMP ADD PARTITION P4 VALUES LESS THAN (4000);


--ORA-14760: ADD PARTITION IS NOT PERMITTED ON INTERVAL PARTITIONED OBJECTS
--BCOZ WHEN WE GIVE SALARY <=3000 THEN IT'S TAKE SYSTEM GENERATED PARTITION.

INSERT INTO EMP VALUES (100,'SUNDAR',3000,10,'01-FEB-21'); --PARTITION P4 CREATE


LIKE SYS_NAME
INSERT INTO EMP VALUES (100,'RAJ',2000,20,'01-APR-21'); --ITS P3 PARTITION.

SELECT*FROM EMP PARTITION (P3);

SELECT*FROM USER_TAB_PARTITIONS WHERE TABLE_NAME='EMP';

SELECT TABLE_NAME,PARTITION_NAME,SUBPARTITION_COUNT,TABLESPACE_NAME FROM


USER_TAB_PARTITIONS WHERE TABLE_NAME ='EMP';

DELETE FROM EMP WHERE HIRE_DATE='01-APR-21'; --ITS DELETE FROM MAIN TABLE ALSO
PARTITION TABLE BUT PARTITION P3 IS AVAILABALE .
---------->

CREATE TABLE EMP1(EMP_ID NUMBER,NAME VARCHAR2(30),SALARY NUMBER,DEPT_ID


NUMBER,HIRE_DATE DATE)
PARTITION BY RANGE (SALARY)
(
PARTITION P1 VALUES LESS THAN (10000),
PARTITION P2 VALUES LESS THAN (15000),
PARTITION P3 VALUES LESS THAN (20000)
);

SELECT*FROM USER_TAB_PARTITIONS WHERE TABLE_NAME='EMP1';

SELECT TABLE_NAME,PARTITION_NAME,SUBPARTITION_COUNT,TABLESPACE_NAME FROM


USER_TAB_PARTITIONS WHERE TABLE_NAME ='EMP1';

ALTER TABLE EMP1 ADD PARTITION P4 VALUES LESS THAN (25000);

SELECT*FROM USER_TAB_PARTITIONS WHERE TABLE_NAME='EMP1';

INSERT INTO EMP1 VALUES (104,'SURYA',30000,40,'01-APR-21');


--ORA-14400: inserted partition key does not map to any partition ORA-06512: at
"SYS.DBMS_SQL", line 1721
--OUR SALARY COLUMN ONLY IN P4 --25000.

------------>
POSSIBLE OPERATIONS WITH RANGE PARTITION

*ADD-->ALTER TABLE EMPLOYEES ADD PARTITION P5 VALUES LESS THAN (50);


*DROP-->ALTER TABLE EMPLOYEES DROP PARTITION P4;
*TRUNCATE-->ALTER TABLE EMPLOYEES TRUNCATE PARTITION P6;
*RENAME -->ALTER TABLE EMPLOYEES RENAME PARTITION P3 TO P4;
*MOVE-->ALTER TABLE EMPLOYEES MOVE APRTITION P21 TABLESPACE SYSAUX;
*SPLIT -->WE HAVE PARTITION P2 VALUE 10 TO 20 NOW,
--ALTER TABLE EMPLOYEES SPLIT PARTITION P2 AT(15) INTO (PARTITION
P21,PARTITION P22);
*EXCHANGE-->TABLE TO TABLE (NON PARTITIONED TABLE) -->ALTER TABLE EMPLOYEES
EXCHANGE PARTITION P21 WITH TABLE EMPLOYEES2;
-->NON PARTITIONED ONLY EXCHANGING DATA(P).

-----------------------------------------------------------------------------------
------------------------------------------
-->LIST PARTITION ( WE CAN GIVE NUMBER AND VARCHAR2 DATA TYPE )

CREATE TABLE EMP2 (EMP_ID NUMBER,NAME VARCHAR2(30),SALARY NUMBER,DEPT_ID


NUMBER,HIRE_DATE DATE)
PARTITION BY LIST (DEPT_ID)
(
PARTITION P1 VALUES (10,20,30),
PARTITION P2 VALUES (40,50,60),
PARTITION P3 VALUES (70,80,90)
);

SELECT*FROM USER_TAB_PARTITIONS WHERE TABLE_NAME='EMP2';


SELECT TABLE_NAME,PARTITION_NAME,SUBPARTITION_COUNT,TABLESPACE_NAME FROM
USER_TAB_PARTITIONS WHERE TABLE_NAME ='EMP2';
CREATE TABLE EMP3 (EMP_ID NUMBER,NAME VARCHAR2(30),SALARY NUMBER,DEPT_ID
NUMBER,HIRE_DATE DATE,CITY VARCHAR2(30))
PARTITION BY LIST (CITY)
(
PARTITION P1 VALUES ('CHENNAI','MADURAI'),
PARTITION P2 VALUES ('KOVAI','TRICHY'),
PARTITION P3 VALUES ('CHIDAMBARAM','VELUR')
);

SELECT*FROM USER_TAB_PARTITIONS WHERE TABLE_NAME='EMP3';


SELECT TABLE_NAME,PARTITION_NAME,SUBPARTITION_COUNT,TABLESPACE_NAME FROM
USER_TAB_PARTITIONS WHERE TABLE_NAME ='EMP3';

-----------------------------------------------------------------------------------
--------------

-->HASH PARTITION (WHICH COLUMN DOESN'T CREATE RANGE AND LIST THEN WE CREATE HASH
PARTITION.)

CREATE TABLE EMP4(EMP_ID NUMBER,NAME VARCHAR2(30),SALARY NUMBER,DEPT_ID


NUMBER,HIRE_DATE DATE,CITY VARCHAR2(30))
PARTITION BY HASH (EMP_ID)
PARTITION 4;

SELECT*FROM USER_TAB_PARTITIONS WHERE TABLE_NAME='EMP4';


SELECT TABLE_NAME,PARTITION_NAME,SUBPARTITION_COUNT,TABLESPACE_NAME FROM
USER_TAB_PARTITIONS WHERE TABLE_NAME ='EMP4';

-----------------------------------------------------------------------------------
------------

DOUBTS

ALTER TABLE EMP1 MODIFY PARTITION P3 VALUES LESS THAN (23000);

You might also like