everythingOracle.bizhat.com

 

'Everything you wanted
to know about Oracle'

Training References Syntax Tell A Friend Contact Us

 

 

Manuscript: 08

 

 

Topics:  Hands-On 05

 

   
   

Your organization�s database is growing very fast. They want to have a database that contains each department in a separate tablespace. They projected that their employee�s table is growing to more than 100 million rows in each department. Also, upon their requirements, they want to have each department�s employees in a separate hard disk, and to be independent of other department employee�s data. Also, they want to be sure all the employees are in the same table. They want it to be partitioned in such away, that when they run a query against an employee�s information, they would scan at most on the department�s hard disk that he/she works, rather than the other department�s hard disks on non-partitioned table.

 

You will need to choose a partition key. You have been told that the department�s employees are distributed equally among the partition table. There are two types of partitioning approaches that you, as a database designer, must choose (they are Local and Global). A Local index, is one that is partitioned exactly like the table to which it belongs. A Global index, unlike local indexes, you should explicitly partition range boundaries using the �VALUE LESS THAN� methods. They want you to create a �Local Index� for the partition table.

 

 

Manuscript

-- Hands-On 05 (Data Partitioning) 

set echo on
CLEAR SCR
-- Connect to SQLPLUS as the oracle user.
-- 
pause

CONNECT oracle/learning
pause


CLEAR SCR
-- Set the linesize to 100 and the pagesize to 55.
--
pause

SET LINESIZE 100 PAGESIZE 55
pause

CLEAR SCR
-- Create folders for 
-- the accounting department, Reseach department, 
-- Sales department, and other departments.

-- Make sure that you have at least 50 Megabytes of 
-- hard drive space available on your hard disk.
--
pause

HOST mkdir c:\disk4dept10 
HOST mkdir c:\disk4dept20 
HOST mkdir c:\disk4dept30 
HOST mkdir c:\disk4deptxx

-- Your folders were created.
--
pause

CLEAR SCR 
-- Create a tablespace for the accounting department
-- with the following options:
--
-- 1- Automatic Allocation, 
-- 2- Generates the redo logs,
-- 3- Recoverable, and 
-- 4- Tablespace type must be permanent.
--
pause 

CREATE TABLESPACE dept10ts 
LOGGING 
DATAFILE 'c:\disk4dept10\dept10ts_01.dbf' SIZE 10M
AUTOEXTEND ON NEXT 5K MAXSIZE UNLIMITED 
/
-- Notice that you don't have the sufficient privilege
-- to create a tablespace.
--
pause 

CLEAR SCR
-- Now, connect to SQLPLUS as the system/manager user
-- 
pause

CONNECT system/manager
pause


CLEAR SCR
-- Grant the CREATE TABLESPACE and DROP TABLESPACE 
-- privilege to the oracle user. 
-- 
pause

GRANT CREATE TABLESPACE TO oracle
/

GRANT DROP TABLESPACE TO oracle
/
-- The CREATE TABLESPACE privilege and DROP TABLESPACE privilege
-- was granted to the ORACLE user.
--
pause 


CLEAR SCR
-- Now, go back and connect to SQLPLUS as the oracle user.
-- 
pause

CONNECT oracle/learning
pause


CLEAR SCR
-- Create tablespaces for the accounting department.
--
pause

CREATE TABLESPACE dept10ts 
LOGGING 
DATAFILE 'c:\disk4dept10\dept10ts_01.dbf' SIZE 10m
AUTOEXTEND ON NEXT 5k MAXSIZE UNLIMITED 

-- The accounting department tablespace was created.
--
pause

CLEAR SCR
-- Create tablespaces for the research department.
--
pause

CREATE TABLESPACE dept20ts 
LOGGING 
DATAFILE 'c:\disk4dept20\dept20ts_01.dbf' SIZE 10M
AUTOEXTEND ON NEXT 5K MAXSIZE UNLIMITED 

-- Here, the research department tablespace was created.
--
pause

CLEAR SCR
-- Create tablespaces for the sales department.
--
pause

CREATE TABLESPACE dept30ts 
LOGGING 
DATAFILE 'c:\disk4dept30\dept30ts_01.dbf' SIZE 10M
AUTOEXTEND ON NEXT 5K MAXSIZE UNLIMITED 

-- And here, the sales department tablespace was created.
--
pause

CLEAR SCR
-- Create tablespaces for the other departments.
--
pause

CREATE TABLESPACE deptxxts 
LOGGING 
DATAFILE 'c:\disk4deptxx\deptxxts_01.dbf' SIZE 10M 
AUTOEXTEND ON NEXT 5K MAXSIZE UNLIMITED 

-- And now, the other departments tablespace was created.
--
pause

CLEAR SCR
-- Now, create a range-based partitioning table named p_emp.
-- Be sure that the data entry of the accounting department
-- goes to the dept10ts tablespace, the data entry of 
-- the research department goes to the dept20ts tablespace,
-- etc.
-- 
pause

CREATE TABLE p_emp ( 
empno NUMBER(4) PRIMARY KEY, 
ename VARCHAR2(10), 
job VARCHAR2(9), 
mgr NUMBER(4), 
hiredate DATE, 
sale NUMBER(7,2), 
comm NUMBER(7,2), 
deptno NUMBER(2)) 
STORAGE (INITIAL 5K NEXT 5K PCTINCREASE 0) 
PARTITION BY RANGE (deptno) 
(PARTITION dept10 VALUES LESS THAN (20) TABLESPACE dept10ts, 
PARTITION dept20 VALUES LESS THAN (30) TABLESPACE dept20ts, 
PARTITION dept30 VALUES LESS THAN (40) TABLESPACE dept30ts, 
PARTITION deptxx VALUES LESS THAN (MAXVALUE) TABLESPACE deptxxts) 

-- Your partition table has now been created.
pause

CLEAR SCR
-- Insert records into your partition table (p_emp).
--
pause 

INSERT INTO p_emp SELECT * FROM emp
/
COMMIT
/
pause 

CLEAR SCR
-- Analyze your partition table.
--
pause

ANALYZE TABLE p_emp COMPUTE STATISTICS
/
pause

CLEAR SCR
-- Query the PARTITION_NAME, TABLESPACE_NAME, and NUM_ROWS columns
-- from the dictionary view.
--
pause

SELECT partition_name, tablespace_name, num_rows 
FROM user_tab_partitions 
WHERE table_name = 'P_EMP'
/
-- Notice that in the accounting tablespace you have three
-- records and research tablespace you have 5 records, etc.
pause 

CLEAR SCR
-- Compare these two tables, EMP and P_EMP.
-- First, query the EMP table.
pause

SELECT * FROM emp
/
pause

CLEAR SCR
-- Now, query the p_emp table.
pause

SELECT * FROM p_emp
/
-- Can you see the difference?
-- Notice that the query scanned the partition table by 
-- the sequence of the tablespaces.
-- That is why the list is sorted by department number.
pause 

CLEAR SCR
-- Query the accounting employees from the partition table.

-- Use the partition option.
--
pause

SELECT * FROM p_emp PARTITION (dept10)
/
-- Notice that your query is only against 
-- the accounting department partition and 
-- you don't have to have a WHERE clause. 
-- 
pause 

CLEAR SCR
-- Query employee number 7900 from the sales department.
--
pause

SELECT * FROM p_emp PARTITION (dept30) 
WHERE empno = 7900
/
pause 

CLEAR SCR
-- Create a local partition index.
--
pause

CREATE INDEX p_emp_ind ON p_emp (deptno) LOCAL
/
pause


CLEAR SCR
-- Analyze the partition table index. 
-- 
pause

ANALYZE INDEX p_emp_ind COMPUTE STATISTICS 

pause

CLEAR SCR
-- Query the statistics on the number of records in each partition.
-- 
pause

SELECT index_name, partition_name, num_rows FROM user_ind_partitions
/
pause

CLEAR SCR
-- Drop the table and all of the tablespaces.
pause

DROP TABLE p_emp CASCADE CONSTRAINTS
/
DROP TABLESPACE dept10ts INCLUDING CONTENTS

DROP TABLESPACE dept20ts INCLUDING CONTENTS

DROP TABLESPACE dept30ts INCLUDING CONTENTS

DROP TABLESPACE deptxxts INCLUDING CONTENTS
/
pause

CLEAR SCR
-- Now, connect to SQLPLUS as the system/manager user
--
pause

CONNECT system/manager

Pause

CLEAR SCR
-- Revoke the CREATE TABLESPACE and DROP TABLESPACE privileges 
-- from the ORACLE user.
--
pause

REVOKE CREATE TABLESPACE FROM oracle 
/
REVOKE DROP TABLESPACE FROM oracle 
/
pause

CLEAR SCR
-- Remove all of the created folders.
-- Use the /S option if folder is not empty.
-- And use the /Q option for the QUIET MODE option.
-- 
pause

HOST rmdir c:\disk4dept10 /S /Q
HOST rmdir c:\disk4dept20 /S /Q
HOST rmdir c:\disk4dept30 /S /Q
HOST rmdir c:\disk4deptxx /S /Q
pause

CLEAR SCR
-- Now, you should practice this over and over
-- until you become a master at it.

-- For more information about the subject, you are encouraged
-- to read from a wide selection of available books.

-- Good luck!
pause

 

     Reviews and Templates for FrontPage
     

Copyright � everythingOracle.bizhat.com 2006 All Rights Reserved.