Oracle表的創(chuàng)建與管理二(創(chuàng)建臨時(shí)表和分區(qū)表)
一.創(chuàng)建臨時(shí)表
1、臨時(shí)表概述
臨時(shí)表創(chuàng)建后,其結(jié)構(gòu)將一直存在,但其數(shù)據(jù)只在當(dāng)前事務(wù)或當(dāng)前會(huì)話(huà)中有效。
事務(wù)級(jí)臨時(shí)表(ON COMMIT DELETE ROWS)在事務(wù)提交時(shí)系統(tǒng)自動(dòng)刪除表中的所有記錄。
會(huì)話(huà)級(jí)臨時(shí)表(ON COMMIT PRESERVE ROWS 在會(huì)話(huà)終止時(shí)系統(tǒng)自動(dòng)刪除表中的所有記錄。
2、語(yǔ)法格式
CREATE GLOBAL TEMPORARY TABLE [schema_name.]temp_tablename ([column_name data_type [DEFAULT expr][PRIMARY KEY] [NULL|NOT NULL] ] [ , …]) [ON COMMIT DELETE ROWS] --默認(rèn)為事務(wù)級(jí)別臨時(shí)表 [ON COMMIT PRESERVE ROWS] --會(huì)話(huà)級(jí)別臨時(shí)表 ;
臨時(shí)表的作用:對(duì)于龐大的數(shù)據(jù)我們只要查詢(xún)其中一小部分結(jié)果集這樣我們可以借助臨時(shí)表。
二.創(chuàng)建分區(qū)表
1、分區(qū)的概念
分區(qū)是指將一個(gè)巨型表或巨型索引分成若干個(gè)獨(dú)立的組成部分進(jìn)行存儲(chǔ)和管理,每個(gè)相對(duì)小的可以獨(dú)立管理的部分稱(chēng)為原來(lái)表或索引的分區(qū)。
對(duì)表進(jìn)行分區(qū)的情況:
表的大小超過(guò)2GB,且表中不含有LONG或LONG RAW類(lèi)型的列。
對(duì)一個(gè)表做并行的DML操作時(shí),應(yīng)對(duì)表進(jìn)行分區(qū)。
為平衡I/O操作,需將一個(gè)表存儲(chǔ)在不同表空間時(shí),必須對(duì)表進(jìn)行分區(qū)。
需將表一部分設(shè)置為只讀,另一部分設(shè)置為可更新時(shí),必須對(duì)表進(jìn)行分區(qū)。
2、分區(qū)的類(lèi)型
1)范圍分區(qū)
范圍分區(qū)是按照分區(qū)列值的范圍來(lái)對(duì)表進(jìn)行分區(qū)的。一般用于數(shù)值類(lèi)型和日期類(lèi)型。
語(yǔ)法格式:
CREATE TABLE [schema_name.] table_name ([column_name data_type [DEFAULT expr][PRIMARY KEY] [NULL|NOT NULL] ] [ , …]) PARTITION BY RANGE(column_name) ( PARTITION pn VALUES LESS THAN (values|MAXVALUE) TABLESPACE tablespace_name [,]);
[示例1]創(chuàng)建范圍分區(qū)表
創(chuàng)建一個(gè)分區(qū)表student_range,將學(xué)生信息根據(jù)其出生日期進(jìn)行分區(qū),將1980-1-1前出生的學(xué)生信息保存在ORCLTB1表空間中,將1980-1-1至1990-1-1間出生的學(xué)生信息保存在ORCLTB2表空間中,其他的學(xué)生信息保存在USERS表空間。
CREATE TABLE student_range ( sno number(6) PRIMARY KEY, sname varchar2(20), birth date) PARTITION BY RANGE(birth) ( PARTITION p1 VALUES LESS THAN(to_date(‘1980-1-1','yyyy-mm-dd')) TABLESPACE orcltbs1, PARTITION p2 VALUES LESS THAN(to_date(‘1990-1-1','yyyy-mm-dd')) TABLESPACE orcltbs2, PARTITION p3 VALUES LESS THAN(maxvalue) TABLESPACE users );
2)列表分區(qū)
如果分區(qū)列的取值是非數(shù)值型數(shù)據(jù),且分區(qū)列的取值范圍只是少數(shù)值的有限集合,則可對(duì)表采用列表分區(qū)。
語(yǔ)法格式:
CREATE TABLE [schema_name.] table_name ([column_name data_type [DEFAULT expr][PRIM9ARY KEY] [NULL|NOT NULL] ] [ , …]) PARTITION BY LIST(column_name) ( PARTITION pn VALUES (values) TABLESPACE tablespace_name [,])
[示例2 ]:創(chuàng)建列表分區(qū)表
創(chuàng)建一個(gè)分區(qū)表student_list,將學(xué)生信息根據(jù)性別進(jìn)行分區(qū),將女生信息保存在ORCLTB1表空間中,將男生信息保存在ORCLTB2表空間中。
CREATE TABLE student_list ( sno number(6) PRIMARY KEY, sname varchar2(20), sex char(2), birth date) PARTITION BY LIST(sex) ( PARTITION p1 VALUES (‘女’) TABLESPACE orcltbs1, PARTITION p2 VALUES (‘男') TABLESPACE orcltbs2 );
3)散列分區(qū)
如果需要在各分區(qū)中均衡分配數(shù)據(jù),則可對(duì)表采用散列(Hash)分區(qū)。語(yǔ)法格式:
CREATE TABLE [schema_name.] table_name ([column_name data_type [DEFAULT expr][PRIMARY KEY] [NULL|NOT NULL] ] [ , …]) PARTITION BY HASH(column_name) [( PARTITION pn TABLESPACE tablespace_name [,])] [PARTITIONS n STORE IN(tbsp_name1, tbsp_nameN)]
[示例3 ]:創(chuàng)建HASH分區(qū)表
創(chuàng)建一個(gè)分區(qū)表student_hash,將學(xué)生信息均衡保存在ORCLTB1和ORCLTB2表空間中。
CREATE TABLE student_hash ( sno number(6) PRIMARY KEY, sname varchar2(20), sex char(2), birth date) PARTITION BY hash(sno) ( PARTITION p1 TABLESPACE orcltbs1, PARTITION p2 TABLESPACE orcltbs2);
4)復(fù)合分區(qū)
結(jié)合兩種基本的分區(qū)方法,先采用一個(gè)分區(qū)方法對(duì)表或索引進(jìn)行分區(qū),然后再采用另一個(gè)方法將分區(qū)再劃分若干個(gè)子分區(qū),每個(gè)分區(qū)的子分區(qū)都是數(shù)據(jù)的一個(gè)邏輯子集。需指明分區(qū)方法,分區(qū)列,子分區(qū)方法,子分區(qū)列,各子分區(qū)描述等。
范圍-列表復(fù)合分區(qū) 范圍-散列復(fù)合分區(qū) 范圍-范圍復(fù)合分區(qū)
列表-范圍復(fù)合分區(qū) 列表-散列復(fù)合分區(qū) 列表-列表復(fù)合分區(qū)
3、管理分區(qū)表
1)查詢(xún)分區(qū)表的字典
dba_part_tables
all_part_tables
user_part_tables
2)顯示表分區(qū)的數(shù)據(jù)字典
dba_tab_partitions
all_tab_partitions
user_tab_partitions
浙公網(wǎng)安備 33010602011771號(hào)