oracle分区表的建立方法

合集下载

oracle 分区表的建立方法(Method for establishing Oracle partition table)

oracle 分区表的建立方法(Method for establishing Oracle partition table)

oracle 分区表的建立方法(Method for establishing Oraclepartition table)Oracle provides partitioning techniques to support VLDB (Very, Large, DataBase). The partition table partitions the different columns of the partition column into different partitions by judging the partition column. The partition is completely transparent to the application.The partition table of Oracle can include multiple partitions, each of which is a separate segment (SEGMENT) that can be stored in separate table spaces. When querying, you can access the data in each partition by querying tables, or you can query the queries directly by specifying partitions.Partitioning offers the following advantages:The possibility of data corruption is reduced by dispersing data into individual partitions;Individual partitions can be backed up and restored;You can map partitions to different physical disks to distract IO;Improve manageability, availability, and performance.Oracle provides the following types of partitions:Range partitioning (range);Hash partitioning (hash);List partition (list);Range hash complex partitioning (range-hash);Range list composite partition (range-list).Oracle common table there is no way to modify the properties directly into the partition table, must be converted by rebuilding the way, there are three ways of high efficiency, and explain their characteristics.4m6Linux AllianceMethod 1: rebuild the partition table with the original table.Step:SQL>, CREATE, TABLE, T (ID, NUMBER, PRIMARY, KEY, TIME, DATE);Table created.SQL>, INSERT, INTO, T, SELECT, ROWNUM, CREATED, FROM,DBA_OBJECTS;6264 rows have been created.SQL> COMMIT;Submit completed.SQL>, CREATE, TABLE, T_NEW (ID, TIME), PARTITION, BY, RANGE (TIME), 4m6Linux, union2 (PARTITION, P1, VALUES, LESS, THAN (TO_DATE('2004-7-1','YYYY-MM-DD')), 4m6Linux League3, PARTITION, P2, VALUES, LESS, THAN (TO_DATE('2005-1-1','YYYY-MM-DD')), 4m6Linux League4, PARTITION, P3, VALUES, LESS, THAN (TO_DATE('2005-7-1','YYYY-MM-DD')), 4m6Linux League5, PARTITION, P4, VALUES, LESS, THAN (MAXVALUE)) 4m6Linux League6, AS, SELECT, ID, TIME, FROM, T;Table created.SQL>, RENAME, T, TO, T_OLD;The table was renamed.SQL>, RENAME, T_NEW, TO, T;The table was renamed.SQL>, SELECT, COUNT (*) FROM, T;COUNT (*) 4m6Linux Alliance----------4m6Linux AllianceSix thousand two hundred and sixty-fourSQL>, SELECT, COUNT (*), FROM, T, PARTITION (P1);COUNT (*) 4m6Linux Alliance----------4m6Linux AllianceZeroSQL>, SELECT, COUNT (*), FROM, T, PARTITION (P2);COUNT (*) 4m6Linux Alliance----------4m6Linux AllianceSix thousand two hundred and forty-sixSQL>, SELECT, COUNT (*), FROM, T, PARTITION (P3);COUNT (*) 4m6Linux Alliance----------4m6Linux AllianceEighteenAdvantages: the method is simple and easy to use, because the use of DDL statements will not produce UNDO, and only a smallamount of REDO, the efficiency is relatively high, and after the completion of the table, the data has been distributed to each partition.Deficiency: additional considerations are needed for data consistency. Because almost no way to ensure consistency through the manual locking T table, in the implementation of the CREATE TABLE statement and RENAME T_NEW TO T statement directly changes may be lost, if you want to ensure the consistency, need to check the data in executing the statement, and this price is relatively large. Also, access to T between two RENAME statements will fail.It is suitable for modifying tables that are not frequent, and the data in tables should not be too large when they are idle.Method two: using swap partitioning.Step:SQL>, CREATE, TABLE, T (ID, NUMBER, PRIMARY, KEY, TIME, DATE);Table created.SQL>, INSERT, INTO, T, SELECT, ROWNUM, CREATED, FROM,DBA_OBJECTS;6264 rows have been created.SQL> COMMIT;Submit completed.SQL>, CREATE, TABLE, T_NEW (ID, NUMBER, PRIMARY, KEY, TIME, DATE), PARTITION, BY, RANGE (TIME), 4m6Linux, union2 (PARTITION, P1, VALUES, LESS, THAN (TO_DATE('2005-7-1','YYYY-MM-DD')), 4m6Linux League3, PARTITION, P2, VALUES, LESS, THAN (MAXVALUE);表已创建。

oracle创建分区表语法

oracle创建分区表语法

oracle创建分区表语法在Oracle中,分区表是一个物理数据库对象,它允许您将一个大表的数据分割成较小的、更易于管理的片段,称为分区。

每个分区可以在不同的表空间中存储,并且可以独立地备份和恢复。

这可以提高查询性能,备份和恢复的效率,以及管理大量数据的便利性。

创建分区表的语法如下:```sqlCREATE TABLE table_name (column1 datatype1,column2 datatype2,...)PARTITION BY partition_method (partition_name1 value_column1 value_range,partition_name2 value_column2 value_range,...);```这里是一些常见的分区方法:RANGE Partitioning:根据列的值范围对数据进行分区。

LIST Partitioning:根据列的离散值对数据进行分区。

HASH Partitioning:根据计算列的哈希值对数据进行分区。

KEY Partitioning:类似于 RANGE Partitioning,但使用索引的键值进行分区。

以下是一个创建RANGE分区表的例子:```sqlCREATE TABLE sales (order_id NUMBER,sale_date DATE,amount NUMBER)PARTITION BY RANGE (sale_date) (PARTITION p0 VALUES LESS THAN (TO_DATE('', 'YYYY-MM-DD')), PARTITION p1 VALUES LESS THAN (TO_DATE('', 'YYYY-MM-DD')),PARTITION p2 VALUES LESS THAN (MAXVALUE));```在这个例子中,`sales` 表根据 `sale_date` 列的值被分成了三个分区:p0、p1 和 p2。

oracle创建分区表

oracle创建分区表

oracle创建分区表创建分区create table pt_range_list_test(pid number(10),pname varchar2(30),sex varchar2(10),create_date date) partition by range(create_date)subpartition by list(sex)(partition p1 values less than(to_date('2020-01-01', 'YYYY-MM-DD')) tablespace tetstbs1(subpartition sub1p1 values('MAN') tablespace tetstbs1,subpartition sub2p1 values('WOMAN') tablespace tetstbs1,subpartition sub3p1 values(default) tablespace tetstbs1),partition p2 values less than(to_date('2021-01-01', 'YYYY-MM-DD')) tablespace tetstbs2(subpartition sub1p2 values('MAN') tablespace tetstbs2,subpartition sub2p2 values('WOMAN') tablespace tetstbs2,subpartition sub3p2 values(default) tablespace tetstbs2),partition p3 values less than(maxvalue) tablespace tetstbs3(subpartition sub1p3 values('MAN') tablespace tetstbs3,subpartition sub2p3 values('WOMAN') tablespace tetstbs3,subpartition sub3p3 values(default) tablespace tetstbs3)) enable row movement;局部索引-- 创建测试分区表create table local_index_example(id number(2),name varchar2(50),sex varchar2(10))partition by range (id)(partition part_1 values less than (5),partition part_2 values less than (10))--创建局部前缀索引;分区键(id)作为索引定义的第⼀列create index local_prefixed_index on local_index_example (id, name) local;--创建局部⾮前缀索引;分区键未作为索引定义的第⼀列create index local_nonprefixed_index on local_index_example (name, id) local;注意:判断局部索引是前缀还是⾮前缀的只需要看分区键是否作为索引定义的第⼀列①: select … from local_index_example where id = :id and name = :name;②: select … from local_index_example where name = :name;对于以上两个查询来说,如果查询第⼀步是⾛索引的话,则:局部前缀索引 local_prefixed_index 只对①有⽤;局部⾮前缀索引 local_nonprefixed_index 则对①和②均有⽤;如果你有多个类似①和②的查询的话,则可以考虑建⽴局部⾮前缀索引;如果平常多使⽤查询①的话,则可以考虑建⽴局部前缀索引;总之,重点是你要尽可能保证查询包含的谓词允许索引分区消除全剧索引对于全局分区索引来说,索引的实际分区数可能不同于表的分区数量;全局索引的分区机制有别于底层表,例如表可以按 done_date 列划分为10个分区,表上的⼀个全局索引可以按 id 列划分为5个分区。

oracle数据库表分区方法

oracle数据库表分区方法

oracle数据库表分区方法【原创实用版4篇】篇1 目录1.Oracle 数据库表分区的概念和理解2.Oracle 数据库表分区的操作方法3.Oracle 数据库表分区的优势和应用场景4.总结篇1正文一、Oracle 数据库表分区的概念和理解Oracle 数据库表分区是一种将大表按照一定规则划分为多个小表的方法,这样可以提高查询效率和数据管理方便性。

在 Oracle 数据库中,表空间是一个或多个数据文件的集合,所有的数据对象都存放在指定的表空间中。

当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能就会下降,这时就应该考虑对表进行分区。

二、Oracle 数据库表分区的操作方法1.范围分区:根据数据范围进行分区,例如按照年份、季度等时间属性进行分区。

2.列表分区:根据数据中的某一列的值进行分区,例如按照地区、产品类型等进行分区。

3.复合分区:结合范围分区和列表分区,根据多个属性进行分区。

具体的分区操作方法如下:1.创建分区表:使用 CREATE TABLE 语句创建一个分区表,例如:```CREATE TABLE sales (invoiceno NUMBER,number NUMBER,saledate DATE,not NULL)PARTITION BY RANGE (saledate);```2.添加分区:如果需要对已有的分区表添加新的分区,可以使用ALTER TABLE 语句,例如:```ALTER TABLE salesADD PARTITION (PARTITION sales_p2 VALUES LESS THAN(TO_DATE("2000-01-01", "YYYY-MM-DD")));```3.删除分区:如果需要删除分区表中的某个分区,可以使用 ALTER TABLE 语句,例如:```ALTER TABLE salesDROP PARTITION sales_p1;```三、Oracle 数据库表分区的优势和应用场景1.提高查询效率:分区表可以将大表划分为多个小表,这样可以减少查询时的 I/O 操作,提高查询效率。

Oracle分区表和索引的创建与管理

Oracle分区表和索引的创建与管理

Oracle分区表和索引的创建与管理今天用到了Oracle表的分区,就顺便写几个例子把这个表的分区说一说:一、创建分区表1、范围分区根据数据表字段值的范围进行分区举个例子,根据学生的不同分数对分数表进行分区,创建一个分区表如下:create table range_fraction(id number(8),name varchar2(20),fraction number(3),grade number(2))partition by range(fraction)(partition fraction_60 values less than(60), --不及格partition fraction_80 values less than(85), --及格partition fraction_100 values less than(maxvalue) --优秀)创建完分区表后向表中添加一些数据:declarename varchar2(10);fraction number(5);grade number(5);i number(8):=1;beginfor i in 1100000 LOOPSELECT CHR (ROUND (DBMS_RANDOM.VALUE (97, 122))) INTO NAME FROM DUAL;SELECT ABS(MOD(DBMS_RANDOM.RANDOM,101)) into fraction FROM DUAL;SELECT ABS(MOD(DBMS_RANDOM.RANDOM,10))+1 into grade FROM DUAL;insert into range_fraction values(seq_range_fraction.nextval ,name,fraction,grade);END LOOP;end;查询分区表:--分别查询所有的,不及格的,中等的,优秀的成绩select * from range_fraction;select * from range_fraction partition(fraction_60) ;select * from range_fraction partition(fraction_80) ;select * from range_fraction partition(fraction_100) ;当我们的查询语句不指定分区的时候,如果分区字段出现在where条件之后,Oracle会自动根据字段值的范围扫描响应的分区:select * from range_fraction where fraction<30; 这句SQL执行的时候只会扫描不及格的分区select * from range_fraction where fraction<80; 这句SQL执行的时候会扫描不及格和中等两个分区2、散列分区在范围分区中,分区字段的连续值通常出现在一个分区内,而在散列分区中,连续的字段值不一定存储在相同的分区中。

oracle普通表转化为分区表的方法

oracle普通表转化为分区表的方法

一、引言在数据库管理系统中,分区表是一种将表中数据按照特定规则分割存储的技术,可以提高数据的查询和管理效率。

而对于现有的普通表,如何将其转化为分区表是数据库管理员经常面临的问题之一。

在Oracle数据库中,有多种方法可以实现将普通表转化为分区表,本文将对其中的一些常用方法进行介绍和分析。

二、创建分区表的基本步骤1. 设计分区键:分区键是决定表数据如何分割存储的关键因素,可以是按照时间、地区、业务类型等规则进行分割。

在设计分区键时,需要考虑到数据的查询频率、增长趋势以及分区之间的平衡性。

2. 创建分区表:通过创建新的表结构,并按照设计好的分区键进行分割,可以将普通表转化为分区表。

在创建分区表时,需要考虑到分区类型(范围分区、列表分区、哈希分区等)、分区键的数据类型和约束条件等因素。

3. 数据迁移:将原有普通表中的数据迁移至新创建的分区表中,在数据迁移过程中需要考虑到数据的一致性和完整性,可以通过Oracle内置的数据迁移工具或者自定义的数据迁移脚本来实现。

4. 更新应用程序:由于原有的普通表与新创建的分区表结构不同,需要对应用程序进行相应的更新和调整,以适配新的数据存储结构。

三、利用ALTER TABLE语句进行分区表转化1. 使用ALTER TABLE ... MOVE PARTITION语句:该语句可以将整个分区的数据移动至新创建的分区表中,并可以同时对数据进行重分布和整理。

这种方法适用于数据量较小的表,操作简单方便。

2. 使用ALTER TABLE ... SPLIT PARTITION语句:如果原有的普通表结构已经满足分区表的要求,可以通过该语句将原有表中的数据按照分区键进行分割,并将其转化为分区表。

四、利用DBMS_REDEFINITION包进行分区表转化1. 使用DBMS_REDEFINITION.START_REDEF_TABLE过程:通过该过程可以启动对指定表的在线重定义操作,包括表结构、数据进行迁移等。

oracle按时间创建分区表

oracle按时间创建分区表

oracle 按时间创建分区表首先明确分区表和表分区的区别:表分区是一种思想,分区表示一种技术实现。

当表的大小过G 的时候可以考虑进行表分区,提高查询效率,均衡IO 。

oracle 分区表是oracle 数据库提供的一种表分区的实现形式。

表进行分区后,逻辑上仍然是一张表,原来的查询SQL 同样生效,同时可以采用使用分区查询来优化SQL 查询效率,不至于每次都扫描整个表一、分区表基本操作1、按时间分区表创建:1 2 3 4 5 6 7 8 9 10 11 create table t_test (pk_id number(30) not null,add_date_time DATE,constraintPK_T_TEST primary key (pk_id))PARTITION BY RANGE (add_date_time)(PARTITIONt_test_2013_less VALUES LESS THAN (TO_DATE('2013-01-01 00:00:00','yyyy-mm-ddhh24:mi:ss')) TABLESPACE TS_MISPS,PARTITIONt_test_2013 VALUES LESS THAN (TO_DATE('2014-01-01 00:00:00','yyyy-mm-ddhh24:mi:ss')) TABLESPACE TS_MISPS,PARTITION t_test_2014VALUES LESS THAN (TO_DATE('2015-01-01 00:00:00','yyyy-mm-dd hh24:mi:ss'))TABLESPACE TS_MISPS)其中add_date_time 为分区字段,每一年一个分区。

插入100W 数据1 2 3 4 5 6 7 declarei int := 1;yearVARCHAR2(20);beginloopyear := CASEmod(i, 3)WHEN 0 THEN8 9 10 11 12 13 14 15 16 17 18 '2012-01-14 12:00:00'WHEN 1 THEN'2013-01-14 12:00:00'ELSE'2014-01-14 12:00:00'END;insert into t_test values(i, to_date(year, 'yyyy-mm-dd hh24:mi:ss'));exit when i= 1000000;i := i + 1;end loop;end;查看分区表的分区的详细信息1 Select table_name,partition_name,high_value fromdba_tab_partitions where table_name='T_TEST';2、分区表修改2.1增加一个分区分两种情况:1.没有maxvalue 分区。

Oracle分区表 (Partition Table) 的创建及管理

Oracle分区表 (Partition Table) 的创建及管理

Oracle分区表 (Partition Table) 的创建及管理一、创建分区表分区表分为四类:1、范围分区表2、列表分区表3、哈希分区表4、组合分区表下面分别创建四类分区表。

1、范围分区表2、列表分区表3、哈希分区表4、组合分区表--注subpartitions 2 并不是指定subpartition的个数一定为2,实际上每个分区的子分区个数可以不同。

subpartitions 关键字的作用到底是什么?如果不指定subpartition的具体明细,则系统按照subpartitions 的值指定subpartition的个数生成子分区,名称由系统定义。

二、增加分区注:hash partitioned table 新增partition时,现有表的中所有data都有重新计算hash值,然后重新分配到分区中。

所以被重新分配的分区的indexes需要rebuild 。

三、删除分区You can drop partitions from range, list, or composite range-list partitioned tables.For hash-partitioned tables, or hash subpartitions of range-hash partitioned tables, you must perform. a coalesce operation instead.四、分区合并1. 合并父分区如果省略update indexes子句的话,必须重建受影响的分区的index 。

ALTER TABLErange_example MODIFY PARTITION part02 REBUILD UNUSABLE LOCAL INDEXES;2. 合并子分区五、分割分区hash partitions or subpartitions不能分割。

如果指定的分割分区包含任何的数据时,对应的indexes可以被标识为UNUSABLE 。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

oracle分区表的建立方法Oracle的分区表能够包括多个分区,每个分区差不多上一个独立的段(SEGMENT),能够存放到不同的表空间中。

查询时能够通过查询表来访咨询各个分区中的数据,也能够通过在查询时直截了当指定分区的方法来进行查询。

分区提供以下优点:由于将数据分散到各个分区中,减少了数据损坏的可能性;能够对单独的分区进行备份和复原;能够将分区映射到不同的物理磁盘上,来分散IO;提高可治理性、可用性和性能。

Oracle提供了以下几种分区类型:范畴分区(range);哈希分区(hash);列表分区(list);范畴-哈希复合分区(range-hash);范畴-列表复合分区(range-list)。

Oracle的一般表没有方法通过修改属性的方式直截了当转化为分区表,必须通过重建的方式进行转变,下面介绍三种效率比较高的方法,并讲明它们各自的特点。

方法一:利用原表重建分区表。

步骤:SQL> CREATE TABLE T (ID NUMBER PRIMARY KEY, TIME DATE);表已创建。

SQL> INSERT INTO T SELECT ROWNUM, CREATED FROM DBA_OBJECTS;已创建6264行。

SQL> COMMIT;提交完成。

SQL> CREATE TABLE T_NEW (ID, TIME) PARTITION BY RANGE (TIME)2 (PARTITION P1 V ALUES LESS THAN (TO_DATE('2004-7-1', 'YYYY-MM-DD')),3 PARTITION P2 V ALUES LESS THAN (TO_DA TE('2005-1-1', 'YYYY-MM-DD')),4 PARTITION P3 V ALUES LESS THAN (TO_DA TE('2005-7-1', 'YYYY-MM-DD')),5 PARTITION P4 V ALUES LESS THAN (MAXV ALUE))6 AS SELECT ID, TIME FROM T;表已创建。

SQL> RENAME T TO T_OLD;表已重命名。

SQL> RENAME T_NEW TO T;表已重命名。

SQL> SELECT COUNT(*) FROM T;COUNT(*)----------6264SQL> SELECT COUNT(*) FROM T PARTITION (P1);COUNT(*)----------SQL> SELECT COUNT(*) FROM T PARTITION (P2);COUNT(*)----------6246SQL> SELECT COUNT(*) FROM T PARTITION (P3);COUNT(*)----------18优点:方法简单易用,由于采纳DDL语句,可不能产生UNDO,且只产生少量REDO,效率相对较高,而且建表完成后数据差不多在分布到各个分区中了。

不足:关于数据的一致性方面还需要额外的考虑。

由于几乎没有方法通过手工锁定T表的方式保证一致性,在执行CREATE TABLE语句和RENAME T_NEW TO T语句直截了当的修改可能会丢失,假如要保证一致性,需要在执行完语句后对数据进行检查,而那个代价是比较大的。

另外在执行两个RENAME语句之间执行的对T的访咨询会失败。

适用于修改不频繁的表,在闲时进行操作,表的数据量不宜太大。

方法二:使用交换分区的方法。

步骤:SQL> CREATE TABLE T (ID NUMBER PRIMARY KEY, TIME DATE);表已创建。

SQL> INSERT INTO T SELECT ROWNUM, CREATED FROM DBA_OBJECTS;已创建6264行。

SQL> COMMIT;提交完成。

SQL> CREATE TABLE T_NEW (ID NUMBER PRIMARY KEY, TIME DA TE) PARTITION BY RANGE (TIME)2 (PARTITION P1 V ALUES LESS THAN (TO_DATE('2005-7-1', 'YYYY-MM-DD')),3 PARTITION P2 V ALUES LESS THAN (MAXV ALUE));表已创建。

SQL> ALTER TABLE T_NEW EXCHANGE PARTITION P1 WITH TABLE T;表已更换。

SQL> RENAME T TO T_OLD;表已重命名。

SQL> RENAME T_NEW TO T;表已重命名。

SQL> SELECT COUNT(*) FROM T;COUNT(*)----------6264优点:只是对数据字典中分区和表的定义进行了修改,没有数据的修改或复制,效率最高。

假如对数据在分区中的分布没有进一步要求的话,实现比较简单。

在执行完RENAME操作后,能够检查T_OLD中是否存在数据,假如存在的话,直截了当将这些数据插入到T中,能够保证对T插入的操作可不能丢失。

不足:仍旧存在一致性咨询题,交换分区之后RENAME T_NEW TO T之前,查询、更新和删除会显现错误或访咨询不到数据。

假如要求数据分布到多个分区中,则需要进行分区的SPLIT操作,会增加操作的复杂度,效率也会降低。

适用于包含大数据量的表转到分区表中的一个分区的操作。

应尽量在闲时进行操作。

方法三:Oracle9i以上版本,利用在线重定义功能步骤:SQL> CREATE TABLE T (ID NUMBER PRIMARY KEY, TIME DATE);表已创建。

SQL> INSERT INTO T SELECT ROWNUM, CREATED FROM DBA_OBJECTS;已创建6264行。

SQL> COMMIT;提交完成。

SQL> EXEC DBMS_REDEFINITION.CAN_REDEF_TABLE(USER, 'T', DBMS_REDEFINITION.CONS_USE_PK);PL/SQL 过程已成功完成。

SQL> CREATE TABLE T_NEW (ID NUMBER PRIMARY KEY, TIME DA TE) PARTITION BY RANGE (TIME)2 (PARTITION P1 V ALUES LESS THAN (TO_DATE('2004-7-1', 'YYYY-MM-DD')),3 PARTITION P2 V ALUES LESS THAN (TO_DA TE('2005-1-1', 'YYYY-MM-DD')),4 PARTITION P3 V ALUES LESS THAN (TO_DA TE('2005-7-1', 'YYYY-MM-DD')),5 PARTITION P4 V ALUES LESS THAN (MAXV ALUE));表已创建。

SQL> EXEC DBMS_REDEFINITION.START_REDEF_TABLE(USER, 'T', 'T_NEW', -> 'ID ID, TIME TIME', DBMS_REDEFINITION.CONS_USE_PK);PL/SQL 过程已成功完成。

SQL> EXEC DBMS_REDEFINITION.FINISH_REDEF_TABLE('YANGTK', 'T', 'T_NEW');PL/SQL 过程已成功完成。

SQL> SELECT COUNT(*) FROM T;COUNT(*)----------6264SQL> SELECT COUNT(*) FROM T PARTITION (P2);COUNT(*)----------6246SQL> SELECT COUNT(*) FROM T PARTITION (P3);COUNT(*)----------18优点:保证数据的一致性,在大部分时刻内,表T都能够正常进行DML操作。

只在切换的瞬时锁表,具有专门高的可用性。

这种方法具有专门强的灵活性,对各种不同的需要都能满足。

而且,能够在切换前进行相应的授权并建立各种约束,能够做到切换完成后不再需要任何额外的治理操作。

不足:实现上比上面两种略显复杂。

适用于各种情形。

那个地点只给出了在线重定义表的一个最简单的例子,详细的描述和例子能够参考下面两篇文章。

Oracle的在线重定义表功能:/post/468/12855Oracle的在线重定义表功能(二):/post/468/12962索引也能够进行分区,分区索引有两种类型:global和local。

关于local索引,每一个表分区对应一个索引分区,当表的分区发生变化时,索引的爱护由Oracle自动进行。

关于global 索引,能够选择是否分区,而且索引的分区能够不与表分区相对应。

当对分区进行爱护操作时,通常会导致全局索引的INV ALDED,必须在执行完操作后REBUILD。

Oracle9i提供了UPDATE GLOBAL INDEXES语句,能够使在进行分区爱护的同时重建全局索引。

全局索引能够包含多个分区的值局部索引比全局索引容易治理,而全局索引比较快注意:不能为散列分区或者子分区创建全局索引Oracle的分区功能十分强大。

只是用起来发觉有两点不大方便:第二点是假如采纳了local分区索引,那么在增加表分区的时候,索引分区的表空间是不可操纵的。

假如期望将表和索引的分区分开到不同的表空间且不同索引分区也分散到不同的表空间中,那么只能在增加分区后,对新增的分区索引单独rebuild。

Oracle最大承诺存在多少个分区呢?我们能够从Oracle的Concepts手册上找到那个信息,关于Oracle9iR2:Tables can be partitioned into up to 64,000 separate partitions.关于Oracle10gR2,Oracle增强了分区特性:Tables can be partitioned into up to 1024K-1 separate partitions.关于何时应该进行分区,Oracle有如下建议:■Tables greater than 2GB should always be considered for partitioning.■Tables containing historical data, in which new data is added into the newest partition. A typical example is a historical table where only the current month's data is updatable and the other 11 months are read only.。

相关文档
最新文档