《Oracle中使用分区表技术教程》由会员分享,可在线阅读,更多相关《Oracle中使用分区表技术教程(40页珍藏版)》请在人人文库网上搜索。
1、Oracle,分区表技术,1,Oracle,中使用分区表技术,主讲人:倪畅,Oracle,分区表技术,2,分区表,什么是分区表,将大的数据集拆成更小,可管理的数据块的策略,每个单独的块就是一个分区,分区上的数据处理相互独立,DBA,工作拆分到分区上,采用拆分各个击破的策略来管理日益增大的数据,主要用于支持,VLDB(Very Large DataBase,Oracle,分区表技术,3,分区表,为什么要对表进行分区,由于将数据分散到各个分区中,减少了数据损坏的可能性,可以将分区映射到不同的物理磁盘上,来分散,IO,可以对单独的分区进行备份和恢复,提高可管理性、可用性和性能,Oracle,分区表技。
2、术,4,分区表,分区表特点,分区表主要支持比较大规模的应用系统,它有以下的特点,一个分区表有一个或多个分区,每个分区存储按照范围,散列,列表或复合,进行分区后的数据,分区表的每个分区是一个段并可分配在不同的表空间,分区对于大型表的并发查询和操作是非常大的用处,管理分区需要特殊的命令,分区表不支持,Long,Long Raw,数据类型,Oracle,分区表技术,5,分区表类型,分区方法有以下几种类型,范围,Range,散列,HASH,列表,List,复合,Composite,范围分区,散列分区,复合分区,列表分区,Oracle,分区表技术,6,分区表类型(续,分区方法,按照范围分区,按照表中列值。
3、的范围将映射相应的行到不同的分区。例如按照月或年进行分,区划分,该方法比较适合于数据历史表,但是,并不能总是预先知道每个范,围有多少数据而导致各个分区的大小不一致,因此在某些操作上如并行的,DML,操作时,性能并不能达到最优,Oracle,分区表技术,7,分区表类型(续,散列分区,如果你的数据并不适合于进行范围分区,但你仍然想进行分区提高性能和管,理,可以使用散列分区。该方法在分区列上使用散列功能把数据均匀地划分,到每个分区中。通过固定的分区数控制数据的物理分布同时保证分区的大小,一致,列表分区,如果你的数据并不适合于进行范围分区,同时分区字段的取值范围只是一个,包含少数值的集合,可以进行列表。
4、分区,指定分区列中一串离散的值列将行数据分配进相应的分区中,列表分区不同于由范围值指定的范围分区,也不同于用户不能对行与分区之间,的映射关系进行控制的散列分区,数据间没有关联,使用列表分区将它们分,组或组织在一起,Oracle,分区表技术,8,分区表类型(续,复合分区,该方式使用三种分区类型的复合方式,这种类型支持在分区级上的历史数据操作,及在子分区级上的并行,DML,操作,复合分区有以下两种类型,范围,散列复合分区,首先表通过按范围方法进行分区,每个分区再通过散,列方式分为子分区,范围,列表复合分区,首先表通过按范围方法进行分区,每个分区再通过列,表方式分为子分区,Oracle,分区表技术,。
5、9,创建范围分区表,创建范围分区表,创建范围分区时,你需要指定,分区方法,Range,分区列指定,分区范围条件说明,下面例子创建一个有四个分区的表,每个分区为一季度的销售数据,其中列,Sale_year,Sale_Month,Sale_Day,为分区列。它们的值构成一个特殊的行的分区关,键字,VALUES LESS THEN,子句描述了分区条件范围,行的关键字与分区条件相,比较,小于分区条件中设置的值的行数据被存储在相应的分区中。每个分区给定一,个名字,sales_q1,q2,q3,q4,同时每个分区分别在独立的表空间中,Oracle,分区表技术,10,创建范围分区表,示例,CREATE TA。
6、BLE sales,invoice_no NUMBER,sale_year INT NOT NULL,sale_month INT NOT NULL,sale_day INT NOT NULL,PARTITION BY RANGE (sale_year, sale_month, sale_day,PARTITION sales_q1 VALUES LESS THAN (1999, 04, 01,TABLESPACE tsa,PARTITION sales_q2 VALUES LESS THAN (1999, 07, 01,TABLESPACE tsb,PARTITION sales_q3 VA。
7、LUES LESS THAN (1999, 10, 01,TABLESPACE tsc,PARTITION sales_q4 VALUES LESS THAN (2000, 01, 01,TABLESPACE tsd,Oracle,分区表技术,11,创建分区表,接上例,如果某行数据中的,sale_year=1999,sale_month=8,sale_day=1,则该行会有分,区关键字,1999,8,1,并被保存在分区,Sales_q3,中,cust_ptn3,Sale_year 1999 10 1,Segment 3,cust_ptn2,sale_year 1999 07 01,Segmen。
8、t 2,cust_ptn1,sale_year 1999 04 01,Segment 1,Oracle,分区表技术,12,创建散列分区表,创建散列分区表,创建散列分区时,你需要指定,分区方法,Hash,分区列指定,分区数量或单独的分区说明,以下的例子创建散列分区表,分区列是,id,并将创建由系统命名四个分区,同时,被分别放入四个表空间中,gear1,gear2,Oracle,分区表技术,13,创建散列分区表,示例,CREATE TABLE scubagear,id NUMBER,name VARCHAR2 (60,PARTITION BY HASH (id,PARTITIONS 4,STORE。
9、 IN (gear1, gear2, gear3, gear4,gear2,Segment 2,gear1,Segment 1,gear3,Segment 3,gear4,Segment 4,Oracle,分区表技术,14,创建列表分区,创建列表分区表,创建列表分区时,你需要指定,分区方法,List,分区列指定,分区描述:描述了每个分区条件的值的列表,每个值列是由分区列中的不连续的,值组成,用于判断该行是否包含在分区中,下面的例子创建列表分区表,该表在,state,字段上进行区域分区,Oracle,分区表技术,15,创建列表分区表,示例,CREATE TABLE q1_sales_by_reg。
10、ion,deptno number,deptname varchar2(20,quarterly_sales number(10, 2,state varchar2(2,PARTITION BY LIST (state,PARTITION q1_northwest VALUES (OR, WA,PARTITION q1_southwest VALUES (AZ, UT, NM,PARTITION q1_northeast VALUES (NY, VM, NJ,PARTITION q1_southeast VALUES (FL, GA,PARTITION q1_northcentral VALU。
11、ES (SD, WI,PARTITION q1_southcentral VALUES (OK, TX,Oracle,分区表技术,16,创建列表分区,接上例,某行分区列中的值与分区条件中的值列进行匹配,以判断放入哪个分区中,例如,10, accounting, 100, WA,对应于分区,partition q1_northwest,20, R&D, 150, OR,对应于分区,partition q1_northwest,30, sales, 100, FL,对应于分区,partition q1_southeast,40, HR, 10, TX,对应于分区,partition q1_sout。
12、hwest,50, systems engineering, 10, CA,不对应于表中任何分区并返回错误,可以指定,Default Partition,语句到上例中,以存放不符合其它分区条件的行数,据,Oracle,分区表技术,17,创建复合分区,创建复合范围散列分区表,创建复合范围,散列分区时,你需要指定,分区方法,Range,分区列指定,分区范围条件说明,子分区方法,Hash,子分区列指定,每个分区的子分区数量或子分区的描述,下面的例子创建范围,散列分区表,指定三个范围分区,每个分区包含,8,个由系统,命名的子分区,其中,STORE IN,子句将它们分别分布于,4,个表空间内,Oracl。
13、e,分区表技术,18,创建复合分区,示例,CREATE TABLE scubagear,equipno NUMBER,equipname VARCHAR(32,price NUMBER,PARTITION BY RANGE (equipno) SUBPARTITION BY HASH(equipname,SUBPARTITIONS 8 STORE IN (ts1, ts2, ts3, ts4,PARTITION p1 VALUES LESS THAN (1000,PARTITION p2 VALUES LESS THAN (2000,PARTITION p3 VALUES LESS THAN 。
14、(MAXVALUE,Oracle,分区表技术,19,创建复合分区,创建复合范围列表分区表,创建复合范围,列表分区时,你需要指定,分区方法,Range,分区列指定,分区范围条件说明,子分区方法,List,子分区列指定,描述了每个子分区条件的值的列表,每个值列是由子分区列中的不连续的值组成,用于判断该行是否包含在子分区中,下面的例子显示了每个季度的产品销售数据,在每个季度中,根据区域位置进行,分组,Oracle,分区表技术,20,创建复合分区,示例,CREATE TABLE quarterly_regional_sales,deptno number,item_no varchar2(20,txn。
15、_date date,txn_amount number,state varchar2(2,TABLESPACE ts4,PARTITION BY RANGE (txn_date) SUBPARTITION BY LIST (state,PARTITION q1_1999 VALUES LESS THAN (TO_DATE(1-APR-1999,DD,MON-YYYY,SUBPARTITION q1_1999_northwest VALUES (OR, WA,SUBPARTITION q1_1999_southwest VALUES (AZ, UT, NM,SUBPARTITION q1_19。
16、99_northeast VALUES (NY, VM, NJ,Oracle,分区表技术,21,创建复合分区,SUBPARTITION q1_1999_southeast VALUES (FL, GA,SUBPARTITION q1_1999_northcentral VALUES (SD, WI,SUBPARTITION q1_1999_southcentral VALUES (OK, TX),PARTITION q2_1999 VALUES LESS THAN ( TO_DATE(1-JUL-1999,DD,MON-YYYY,SUBPARTITION q2_1999_northwest V。
17、ALUES (OR, WA,SUBPARTITION q2_1999_southwest VALUES (AZ, UT, NM,SUBPARTITION q2_1999_northeast VALUES (NY, VM, NJ,SUBPARTITION q2_1999_southeast VALUES (FL, GA,SUBPARTITION q2_1999_northcentral VALUES (SD, WI,SUBPARTITION q2_1999_southcentral VALUES (OK, TX),Oracle,分区表技术,22,创建复合分区,PARTITION q3_1999 。
18、VALUES LESS THAN (TO_DATE(1-OCT-1999,DD,MON-YYYY,SUBPARTITION q3_1999_northwest VALUES (OR, WA,SUBPARTITION q3_1999_southwest VALUES (AZ, UT, NM,SUBPARTITION q3_1999_northeast VALUES (NY, VM, NJ,SUBPARTITION q3_1999_southeast VALUES (FL, GA,SUBPARTITION q3_1999_northcentral VALUES (SD, WI,SUBPARTITI。
19、ON q3_1999_southcentral VALUES (OK, TX),PARTITION q4_1999 VALUES LESS THAN ( TO_DATE(1-JAN-2000,DD,MON-YYYY,SUBPARTITION q4_1999_northwest VALUES (OR, WA,SUBPARTITION q4_1999_southwest VALUES (AZ, UT, NM,SUBPARTITION q4_1999_northeast VALUES (NY, VM, NJ,SUBPARTITION q4_1999_southeast VALUES (FL, GA,。
20、SUBPARTITION q4_1999_northcentral VALUES (SD, WI,SUBPARTITION q4_1999_southcentral VALUES (OK, TX) ),Oracle,分区表技术,23,维护分区表,在表中增加分区(以范围分区为例,使用,Alter TableAdd Partition,子句增加新分区到表中(该分区位置在该表最后,一个分区之后),如果要将该分区加入表中开始或中间位置,则使用,SPLIT,PARTITION,子句,示例,ALTER TABLE sales,ADD PARTITION jan96 VALUES LESS THAN ( 0。
21、1-FEB-1999,TABLESPACE tsx,Oracle,分区表技术,24,维护分区表,结合分区,减少散列分区或范围散列分区数量的方法就是组合分区,当一个散列分区被组,合之后,其数据内容会被重新分布到现存的一个或多个散列分区中,被组合的分,区由,Oracle,选择,再其数据被重新分布后删除掉,使用,Alter Table .COALESCE PARTITION,子句用来结合散列分区中的一个分,区,示例,ALTER TABLE ouu1 COALESCE PARTITION,Oracle,分区表技术,25,维护分区表,删除分区,可以在范围,复合,列表或范围列表分区表中删除分区。而对于散列。
22、分区,散,列子分区或范围散列分区表,必须使用结合分区方法,使用,Alter TableDrop PARATITION,删除分区,使用,Alter Table Drop SUBPARATITION,删除子分区,示例,ALTER TABLE sales DROP PARTITION dec98,Oracle,分区表技术,26,维护分区表,交换分区,你可以将一个非分区表数据交换为一个分区表。也可以将一个散列分区交换为,范围散列分区中的一个分区或反之,类似的,将列表分区交换为范围列表分,区中的分区或反之,使用,Alter TableEXCHANGE PARATITION,语句,示例,1,转换一个非分区。
23、表中的分区到分区表中,ALTER TABLE stocks EXCHANGE PARTITION p3 WITH stock_table_3,Oracle,分区表技术,27,维护分区表,示例,2,交换一个散列分区表到一个范围散列分区表的中一个分区中,首先,创建一个散列分区表,CREATE TABLE t1 (i NUMBER, j NUMBER,PARTITION BY HASH(i,PARTITION p1, PARTITION p2,Oracle,分区表技术,28,维护分区表,创建一个范围散列表,CREATE TABLE t2,i NUMBER,j NUMBER,PARTITION BY 。
24、RANGE(j,SUBPARTITION BY HASH(i,PARTITION p1 VALUES LESS THAN (10,SUBPARTITION t2_pls1,SUBPARTITION t2_pls2,PARTITION p2 VALUES LESS THAN (20,SUBPARTITION t2_p2s1,SUBPARTITION t2_p2s2,Oracle,分区表技术,29,维护分区表,T1,表中的分区关键字与,t2,表中的子分区关键,字必须相同,将数据从,t2,迁移到,t1,中,并且保证数据行有效。使用以下的语句,ALTER TABLE t1 EXCHANGE PARTI。
25、TION p1 WITH TABLE t2,WITH VALIDATION,Oracle,分区表技术,30,维护分区表,合并分区表,将两个分区的内容合并为一个,原来的两个分区则会被删除掉。这个功能不能应,用于散列分区或散列子分区,使用,ALTER TABLE . MERGE PARTITIONS,执行该功能,例,1,合并范围分表,可以合并两个相邻范围分区为一个分区,如果两个分区的范围并不相邻,则不,能进行合并,首先,创建范围分区表,Oracle,分区表技术,31,维护分区表,CREATE TABLE four_seasons,one DATE,two VARCHAR2(60,three NUM。
26、BER,PARTITION BY RANGE ( one,PARTITION quarter_one VALUES LESS THAN ( TO_DATE(01-apr,1998,dd-mon-yyyy) TABLESPACE quarter_one,PARTITION quarter_two VALUES LESS THAN ( TO_DATE(01-jul,1998,dd-mon-yyyy) TABLESPACE quarter_two,PARTITION quarter_three VALUES LESS THAN ( TO_DATE(01-oct,1998,dd-mon-yyyy) T。
27、ABLESPACE quarter_three,PARTITION quarter_four VALUES LESS THAN ( TO_DATE(01-jan,1999,dd-mon-yyyy) TABLESPACE quarter_four,Oracle,分区表技术,32,维护分区表,然后,进行合并分区操作,合并头两个分区,ALTER TABLE four_seasons,MERGE PARTITIONS quarter_one, quarter_two,INTO PARTITION quarter_two,例,2,合并列表分区,合并列表分区时,被合并的两个分区可以是任意两个分区。并不需要。
28、如同合,并范围分区时两分区的需要邻近的范围。如果其中合并了一个,default,分区,则新,合并的分区则是,default,分区,ALTER TABLE q1_sales_by_region,MERGE PARTITIONS,q1_northcentral, q1_southcentral,INTO PARTITION q1_central,Oracle,分区表技术,33,维护分区表,上面语句的两个原始分区分别是,PARTITION q1_northcentral VALUES (SD,WI,PARTITION q1_southcentral VALUES (OK,TX,合并后的新分区则包含以。
29、下列值,SD,WI,OK,TX,Oracle,分区表技术,34,维护分区表,修改列表分区,增加值,可以在现存分区的值列中增加值以扩充值列范围,但新增的值不能存在于其它,分区条件中,使用,MODIFY PARTITION . ADD VALUES,子句执行该功能,例如,ALTER TABLE sales_by_region,MODIFY PARTITION region_south ADD VALUES (OK, KS,在列表分区,region_south,中新增值,OK,KS,Oracle,分区表技术,35,维护分区表,修改列分区:删除值,从列表分区的值列中删除某些值。不能从,default,。
30、列表分区中删除值,使用,MODIFY PARTITION . DROP VALUES,执行该操作,例如,ALTER TABLE sales_by_region,MODIFY PARTITION region_south,DROP VALUES (OK, KS,Oracle,分区表技术,36,维护分区表,移动分区,移动分区到另一个表空间中,重组织数据及减少数据碎片,使用,MOVE PARTITION,子句执行该功能,例如,ALTER TABLE parts,MOVE PARTITION depot2 TABLESPACE ts094,Oracle,分区表技术,37,维护分区表,重命名分区表,可以。
31、给某个分区或子分区重命名一个更有意义的名字以取代系统的命名,这样,更有利于平时的维护工作,使用,RENAME PARTITION,执行该操作,例如,ALTER TABLE scubagear RENAME PARTITION sys_p636 TO tanks,Oracle,分区表技术,38,维护分区表,拆分分区表,拆分分区表中分区重新分配分区数据到两个新分区。当某个分区变得过大,在,执行备份,恢复与平时的维护工作时需花大量时间,则需要考虑进行拆分,使用,SPLIT PARTITION,执行该功能,例,1,拆分范围分区表,拆分范围分区表时,需要指定分区列中的值,该值需存在于该分区范围中。拆,分。
32、后的两个分区,第一个分区的内容是小于该值的数据。第二个分区则大于或等,于该值的数据,例,ALTER TABLE vet_cats,SPLIT PARTITION fee_katy at (100,INTO ( PARTITION fee_katy1 ., PARTITION fee_katy2 .,Oracle,分区表技术,39,维护分区表,例,2,拆分列表分区,需指定一个值列以定义拆分后的第一个分区的值列条件,原分区的内容符合,该值列条件的数据放入第一个分区中,而其余的内容则放入第二个分区中,如,ALTER TABLE sales_by_region,SPLIT PARTITION region_east VALUES (CT, VA, MD,INTO ( PARTITION region_east_1,PARTITION region_east_2,其中原分区,region_east,的值列为,MA,NY,CT,NH,ME,MD,VA,PA,NJ,Oracle,分区表技术,40,维护分区表,截取分区,截取一个分区与删除一个分区有些类似,不同在于截取分区时只是清空该分区中,的数据内容,但不物理地删除该分区,使用,ALTER TABLE . TRUNCATE PARTITION,执行该功能,例如,ALTER TABLE sales TRUNCATE PARTITION dec98。