Oracle 表分区

早在8.0.5版本中,Oracle就将范围分区技术引入,现在分区功能已经越来越强大,包括支持扩展分区功能、Interval分区、外键分区、模拟列分区、以及分区建议器等。那么,分区到底有什么好处呢?我们为什么要使用分区呢?在什么环境下使用分区比较合适呢?

分区表应用在大表更合适,至少要大于100万条的记录才可以考虑使用分区表

1       使用oracle分区的好处

1)由于Oracle数据库可以将分区指定为不同的表空间,而不同的表空间是可以指向不同的磁盘设备的,优化物理硬件资源,缩短了执行的时间;安全性也得到了很大的提升。

2)可以无视其他分区的数据,仅对本区的数据进行删除操作。

3)提高了特定的查询速度。

4)节约维护的成本,降低因为维护数据而对其他系统数据产生的各种影响。

2       Oracle提供了下面几种比较常见的分区方式:

2.1      范围分区(partition by range

范围分区将数据基于范围映射到每一个分区,这个范围是你在创建分区时指定的分区键决定的。这种分区方式是最为常用的,并且分区键经常采用日期。

如何选择范围分区的依据从而能够让数据均匀分布,是一个需要重点关注的问题。

当使用范围分区时,请考虑以下几个规则:

1、每一个分区都必须有一个VALUES LESS THAN子句,它指定了一个不包括在该分区中的上限值。分区键的任何值等于或者大于这个上限值的记录都会被加入到下一个高一些的分区中。

2、所有分区,除了第一个,都会有一个隐式的下限值,这个值就是此分区的前一个分区的上限值。

3、在最高的分区中,MAXVALUE被定义。MAXVALUE代表了一个不确定的值。这个值高于其它分区中的任何分区键的值,也可以理解为高于任何分区中指定的VALUE LESS THAN的值,同时包括空值。

1)查看数据库表空间

select * from dba_tablespaces

2)创建表空间

create tablespace zj1

datafile 'D:\app\zWX214990\oradata\orcl\zj.dbf' size 50M

下面,我们通过脚本来创建一个基于月份的范围分区表(假设插入的数据全部都是2013年的数据)

DROP TABLE PART_LOG_ZJ PURGE; --purge永久删除选项

(补充):对于误删的表,只要没有使用purge永久删除选项,那么从flash back区恢复回来希望挺大的。一般步骤:

  1. 从flash back里查询被删的表

select * from recyclebin

  1. 执行表的恢复
   flashback table  tb  to before drop
 

CREATE TABLE PART_LOG_ZJ(

LOG_ID NUMBER(20) PRIMARY KEY,

LOG_DATE DATE,

LOG_DESC VARCHAR2(20)

)

PARTITION BY RANGE(LOG_DATE)

(

PARTITION PART_LOG_01 VALUES LESS THAN (TO_DATE('2013-01-01','YYYY-MM-DD')) TABLESPACE zj1,

PARTITION PART_LOG_02 VALUES LESS THAN (TO_DATE('2013-03-01','YYYY-MM-DD')) TABLESPACE zj1,

PARTITION PART_LOG_03 VALUES LESS THAN (TO_DATE('2013-05-01','YYYY-MM-DD')) TABLESPACE zj1,

PARTITION PART_LOG_04 VALUES LESS THAN (TO_DATE('2013-07-01','YYYY-MM-DD')) TABLESPACE zj1,

PARTITION PART_LOG_05 VALUES LESS THAN (TO_DATE('2013-09-01','YYYY-MM-DD')) TABLESPACE zj1,

PARTITION PART_LOG_06 VALUES LESS THAN (TO_DATE('2013-10-01','YYYY-MM-DD')) TABLESPACE zj1,

PARTITION PART_LOG_07 VALUES LESS THAN (MAXVALUE) TABLESPACE zj1

);

通过PARTITION BY RANGE关键字来指出进行分区的策略,其中PARTITION BY LOG(LOG_DATE)指的是使用LOG_DATE来作为分区的字段,里面根据取值的大小,命名了7个分区来存放数据,每个分区还可以指定不同的表空间,第七个分区使用MAXVALUE来避免有数值没有被上面的范围圈定,这个就类似于SWITCH语法中的DEFAULT,不同的,这个并不是fall through的。

下面,我们来生成10万条数据来插入到表中,查看一下表中发生了什么样子的变化?

INSERT INTO PART_LOG_ZJ

(LOG_ID, LOG_DATE, LOG_DESC)

SELECT LEVEL,

TO_DATE('2013-01-01', 'YYYY-MM-DD') +

NUMTODSINTERVAL(CEIL(DBMS_RANDOM.VALUE(0, 365)), 'DAY'),

LEVEL || 'DESC'

FROM DUAL

CONNECT BY LEVEL <= 100000;

首先,我们可以查询一下落在7、8月份的日志记录,就如同我们去新华书店只是去查找IT类的书籍一样,我们知道我们应当去那里寻找名字为PART_LOG_05分区的数据:

SELECT COUNT(1) FROM PART_LOG_ZJ PARTITION (PART_LOG_05);

显示结果:

通过上面的结果可以很明显的看出,有17030条数据落在了7、8月份的分区中。我们通过指定分区,将全部的注意力只放到此1.7W条左右的数据而不是全部的10W条数据上,可以很明显带来效能的提升。

我们如何才能知道正确的分区呢?

Oracle数据库也提供了这个指引牌,那就是下面两个数据字典:DBA_PART_TABLES和DBA_TAB_PARTITIONS

SELECT T.OWNER AS "所有者",

T.TABLE_NAME AS "表名",

T.PARTITIONING_TYPE AS "分区类型",

T.SUBPARTITIONING_TYPE AS "子分区类型",

T.PARTITION_COUNT AS "子分区数量",

T.PARTITIONING_KEY_COUNT AS "分区键中列的数量",

T.SUBPARTITIONING_KEY_COUNT AS "子分区键中列的数量",

T.STATUS AS "分区表状态",

T.DEF_TABLESPACE_NAME AS "默认表空间"

FROM DBA_PART_TABLES T

WHERE T.TABLE_NAME IN ('PART_LOG_ZJ');

通过上面我们可以看到,表PART_LOG_CHENZW现在有7个分区,但是,我们并不能知道这7个分区都是存放什么样子的数据的?我们到什么地方去找到我们希望的7、8月的数据呢?

SELECT T.TABLE_OWNER AS "所有者",

T.TABLE_NAME AS "表名",

T.COMPOSITE AS "是否组合分区",

T.PARTITION_NAME AS "分区名",

T.SUBPARTITION_COUNT AS "子分区数",

T.HIGH_VALUE AS "分区上限",

T.HIGH_VALUE_LENGTH AS "分区上限长度",

T.PARTITION_POSITION AS "分区在表中位置",

T.TABLESPACE_NAME AS "所在表空间"

FROM DBA_TAB_PARTITIONS T

WHERE T.TABLE_NAME IN ('PART_LOG_ZJ')

从上面的结果可以看到,如果我们希望找到7、8月份的数据,就可以根据分区上限定位到PART_LOG_05分区。

最后,我们可以通过查询数据字典USER_SEGMENTS来查看分区表占用的磁盘空间信息,如下:

SELECT T.SEGMENT_NAME AS "段名",

T.PARTITION_NAME AS "分区名",

T.SEGMENT_TYPE AS "分区类型",

T.BYTES / POWER(1024, 2) || 'M' AS "分区大小",

T.TABLESPACE_NAME AS "表空间"

FROM USER_SEGMENTS T

WHERE T.SEGMENT_NAME IN ('PART_LOG_ZJ');

 

2.2      列表分区(partition by list

通常情况下,如果你的数据中的某一项是可以被枚举的,那么,此列就可以用作列表分区的分区字段。

CREATE TABLE PART_BOOK_ZJ(

BOOK_ID NUMBER(20) PRIMARY KEY,

BOOK_DATE DATE,

BOOK_TYPE NUMBER(2) NOT NULL,

BOOK_DESC VARCHAR2(20)

)

PARTITION BY LIST(BOOK_TYPE)

(

PARTITION PART_BOOK_01 VALUES(0) TABLESPACE zj1,

PARTITION PART_BOOK_02 VALUES(1) TABLESPACE zj1,

PARTITION PART_BOOK_03 VALUES(2) TABLESPACE zj1,

PARTITION PART_BOOK_04 VALUES(3) TABLESPACE zj1

);

下面的脚本用于生成相应的数据:

INSERT INTO PART_BOOK_ZJ

(BOOK_ID, BOOK_DATE, BOOK_TYPE,BOOK_DESC)

SELECT LEVEL,

TO_DATE('2013-01-01', 'YYYY-MM-DD') +

NUMTODSINTERVAL(CEIL(DBMS_RANDOM.VALUE(0, 365)), 'DAY'),

MOD(LEVEL,4),

LEVEL || 'DESC'

FROM DUAL

CONNECT BY LEVEL <= 100000;

注:操作同上

2.3      散列分区(partition by hash

这类分区是在列值上使用散列算法,以确定将行放入哪个分区中。当列的值没有合适的条件时,建议使用散列分区。

散列分区为通过指定分区编号来均匀分布数据的一种分区类型,因为通过在I/O设备上进行散列分区,使得这些分区大小一致。

DROP TABLE PART_BOOK_ZJ PURGE;

CREATE TABLE PART_BOOK_ZJ(

BOOK_ID NUMBER(20) PRIMARY KEY,

BOOK_DATE DATE,

BOOK_TYPE NUMBER(2) NOT NULL,

BOOK_DESC VARCHAR2(20)

)

PARTITION BY HASH(BOOK_ID)

(

PARTITION PART_BOOK_01 TABLESPACE zj1,

PARTITION PART_BOOK_02 TABLESPACE zj1,

PARTITION PART_BOOK_03 TABLESPACE zj1,

PARTITION PART_BOOK_04 TABLESPACE zj1

);

INSERT INTO PART_BOOK_ZJ

(BOOK_ID, BOOK_DATE, BOOK_TYPE,BOOK_DESC)

SELECT LEVEL,

TO_DATE('2013-01-01', 'YYYY-MM-DD') +

NUMTODSINTERVAL(CEIL(DBMS_RANDOM.VALUE(0, 365)), 'DAY'),

MOD(LEVEL,4),

LEVEL || 'DESC'

FROM DUAL

CONNECT BY LEVEL <= 100000;

hash分区最主要的机制是根据hash算法来计算具体某条纪录应该插入到哪个分区中,hash算法中最重要的是hash函数,Oracle中如果你要使用hash分区,只需指定分区的数量即可。建议分区的数量采用2的n次方,这样可以使得各个分区间数据分布更加均匀。

2.4      组合分区(partition by xxx subpartition by xxx

这种分区是基于范围分区和列表分区,表首先按某列进行范围分区,然后再按某列进行列表分区,分区之中的分区被称为子分区。

/*组合分区*/

--删除测试表

DROP TABLE PART_BOOK_ZJ PURGE;

--创建列表-范围组合分区

CREATE TABLE PART_BOOK_ZJ(

BOOK_ID NUMBER(20) PRIMARY KEY,

BOOK_DATE DATE,

BOOK_TYPE NUMBER(2) NOT NULL,

BOOK_DESC VARCHAR2(20)

)

PARTITION BY LIST(BOOK_TYPE)

SUBPARTITION BY RANGE(BOOK_DATE)

SUBPARTITION TEMPLATE

(

SUBPARTITION PART_LOG_01 VALUES LESS THAN (TO_DATE('2013-01-01','YYYY-MM-DD')) TABLESPACE zj1,

SUBPARTITION PART_LOG_02 VALUES LESS THAN (TO_DATE('2013-03-01','YYYY-MM-DD')) TABLESPACE zj1,

SUBPARTITION PART_LOG_03 VALUES LESS THAN (TO_DATE('2013-05-01','YYYY-MM-DD')) TABLESPACE zj1,

SUBPARTITION PART_LOG_04 VALUES LESS THAN (TO_DATE('2013-07-01','YYYY-MM-DD')) TABLESPACE zj1,

SUBPARTITION PART_LOG_05 VALUES LESS THAN (TO_DATE('2013-09-01','YYYY-MM-DD')) TABLESPACE zj1,

SUBPARTITION PART_LOG_06 VALUES LESS THAN (TO_DATE('2013-10-01','YYYY-MM-DD')) TABLESPACE zj1,

SUBPARTITION PART_LOG_07 VALUES LESS THAN (MAXVALUE) TABLESPACE zj1

)

(

PARTITION PART_BOOK_01 VALUES(0) TABLESPACE zj1,

PARTITION PART_BOOK_02 VALUES(1) TABLESPACE zj1,

PARTITION PART_BOOK_03 VALUES(2) TABLESPACE zj1,

PARTITION PART_BOOK_04 VALUES(3) TABLESPACE zj1

);

--生成测试数据

INSERT INTO PART_BOOK_ZJ

(BOOK_ID, BOOK_DATE, BOOK_TYPE,BOOK_DESC)

SELECT LEVEL,

TO_DATE('2013-01-01', 'YYYY-MM-DD') +

NUMTODSINTERVAL(CEIL(DBMS_RANDOM.VALUE(0, 365)), 'DAY'),

MOD(LEVEL,4),

LEVEL || 'DESC'

FROM DUAL

CONNECT BY LEVEL <= 100000;

2.5      复合范围散列分区:

这种分区是基于范围分区和散列分区,表首先按某列进行范围分区,然后再按某列进行散列分区。

3       有关表分区的一些维护性操作

3.1      添加分区

以下代码给PART_BOOK_ZJ表添加了一个PART_BOOK_05分区

--添加列表分区

ALTER  TABLE  PART_BOOK_ZJ  ADD  PARTITION PART_BOOK_05  VALUES(4) TABLESPACE zj1;

--添加范围分区

ALTER  TABLE  PART_LOG_ZJ  ADD  PARTITION P3  VALUES  LESS  THAN (TO_DATE('2003-06-01','YYYY-MM-DD'))  TABLESPACE  zj1;

注意:增加一个分区的时候,增加的分区的条件必须大于现有分区的最大值,否则系统将提示ORA-14074 partition bound must collate higher than that of the last partition 错误。

3.2      删除分区

以下代码删除了PART_BOOK_ZJ表中名为PART_BOOK_05的分区:

ALTER  TABLE  PART_BOOK_ZJ  DROP  PARTITION  PART_BOOK_05;

注意:如果删除的分区是表中唯一的分区,那么此分区将不能被删除,要想删除此分区,必须删除表。

3.3      截断分区

截断某个分区是指删除某个分区中的数据,并不会删除分区,也不会删除其它分区中的数据。当表中即使只有一个分区时,也可以截断该分区。通过以下代码截断分区:

ALTER  TABLE  PART_LOG_ZJ  TRUNCATE  PARTITION  PART_LOG_01;

SELECT COUNT(1) FROM PART_LOG_ZJ PARTITION (PART_LOG_01);

3.4      合并分区

合并分区是将相邻的分区合并成一个分区,结果分区将采用较高分区的界限,值得注意的是,不能将分区合并到界限较低的分区。以下代码实现了PART_LOG_02, PART_LOG_03分区的合并:

ALTER  TABLE  PART_LOG_ZJ  MERGE  PARTITIONS  PART_LOG_02, PART_LOG_03  INTO  PARTITION  PART_LOG_03;

注:1.PART_LOG_02, PART_LOG_03 合并到 PART_LOG_02

2. PART_LOG_03 ,PART_LOG_02 合并到 PART_LOG_03

3.5          拆分分区

拆分分区将一个分区拆分两个新分区,拆分后原来分区不再存在但是如果表存在PMAX分区那么原来的分区还是可以存在的。注意不能对 HASH类型的分区进行拆分。

ALTER  TABLE  PART_LOG_ZJ split  PARTITION PART_LOG_03

AT (TO_DATE('2013-03-01','YYYY-MM-DD'))  INTO  (PARTITION PART_LOG_02,PARTITION PART_LOG_03);

3.6      接合分区(coalesca)

 接合分区是将散列分区中的数据接合到其它分区中,当散列分区中的数据比较大时,可以增加散列分区,然后进行接合,值得注意的是,接合分区只能用于散列分区中。通过以下代码进行接合分区:

ALTER TABLE PART_BOOK_ZJ coalesce PARTITION;

3.7      重命名表分区

以下代码将PART_BOOK_01更改为PART_BOOK_1

ALTER TABLE PART_BOOK_ZJ RENAME PARTITION PART_BOOK_01 TO PART_BOOK_1

3.8      将分区改表空间

alter table PART_BOOK_ZJ move Partition PART_BOOK_02

tablespace USERS nologging

3.9      相关查询

3.9.1        跨分区查询

select sum(cn) from

(select count(*) cn from PART_BOOK_ZJ PARTITION (PART_BOOK_1)

union all

select count(*) cn from PART_BOOK_ZJ PARTITION (PART_BOOK_02));

统计PART_BOOK_1、PART_BOOK_02上总共多少条数据

3.9.2        查询表上有多少分区

SELECT * FROM user_tab_partitions WHERE TABLE_NAME='PART_BOOK_ZJ'

3.9.3        查询索引信息

select object_name,object_type,tablespace_name,sum(value)

from v$segment_statistics

where statistic_name IN ('physical reads','physical write','logical reads')and object_type='INDEX'

group by object_name,object_type,tablespace_name

order by 4 desc

3.9.4        查询特定分区

SELECT COUNT(1) FROM PART_LOG_ZJ PARTITION (PART_LOG_01);

4       显示信息

--显示数据库所有分区表的信息:

select * from DBA_PART_TABLES

--显示当前用户可访问的所有分区表信息:

select * from ALL_PART_TABLES

--显示当前用户所有分区表的信息:

select * from USER_PART_TABLES

--显示表分区信息 显示数据库所有分区表的详细分区信息:

select * from DBA_TAB_PARTITIONS

--显示当前用户可访问的所有分区表的详细分区信息:

select * from ALL_TAB_PARTITIONS

--显示当前用户所有分区表的详细分区信息:

select * from USER_TAB_PARTITIONS

--显示子分区信息 显示数据库所有组合分区表的子分区信息:

select * from DBA_TAB_SUBPARTITIONS

--显示当前用户可访问的所有组合分区表的子分区信息:

select * from ALL_TAB_SUBPARTITIONS

--显示当前用户所有组合分区表的子分区信息:

select * from USER_TAB_SUBPARTITIONS

--显示分区列 显示数据库所有分区表的分区列信息:

select * from DBA_PART_KEY_COLUMNS

--显示当前用户可访问的所有分区表的分区列信息:

select * from ALL_PART_KEY_COLUMNS

--显示当前用户所有分区表的分区列信息:

select * from USER_PART_KEY_COLUMNS

--显示子分区列 显示数据库所有分区表的子分区列信息:

select * from DBA_SUBPART_KEY_COLUMNS

--显示当前用户可访问的所有分区表的子分区列信息:

select * from ALL_SUBPART_KEY_COLUMNS

--显示当前用户所有分区表的子分区列信息:

select * from USER_SUBPART_KEY_COLUMNS

--怎样查询出oracle数据库中所有的的分区表

select * from user_tables a where a.partitioned='YES'

--删除一个表的数据是

truncate table table_name;

--删除分区表一个分区的数据是

alter table table_name truncate partition p5;

5       表的分区做过改变后索引问题

注意,在维护分区的时候可能会对索引产生一定的影响,会引起分区表的全局索引无效,需要重建索引。

对分区表做了维护操作后,必须检查相关索引,如检查hisdeliverx表的非分区索引:

select owner,index_name,status from dba_indexes where table_name='HISDELIVERX';

若有索引的状态为unusable,则必须使用alter index index_name rebuild online;重建该索引。

一般建议在拆分分区、truncate 分区中的数据、删除分区等功作时最好在语句后面加上update indexes子句,

这样索引为unusable状态的可能性就会很低,如下语句:

ALTER TABLE  table_name  SPLIT  PARTITION  partition_name1  AT(20000)  INTO (

partition partition_name2,partition partition_name3) update indexes;

alter table table_name truncate partition  partition_name update indexes;

alter table table_name drop partition partition_name update indexes;

6       将一个非分区表转换为分区表

使用exchange partition方法

假设把hisdeliverx由非分区表改为分区表。

基本思路:hisdeliverx是(数据量上百万条,列比较多)一个非分区表,此时创建一 个与hisdeliverx同结构的分区表t_hisdeliverx,交换和维护数据,删除hisdeliverx表,将t_hisdeliverx更 名为hisdeliverx。然后再重建hisdeliverx表上的索引。

--具体步骤:

--创建分区表(结构和非分区表hisdeliverx相同)

create table t_HISDELIVERX

(

INIT_DATE        NUMBER(10) default to_number(to_char(sysdate,'yyyymmdd')) not null,

SERIAL_NO        NUMBER(10) default 0 not null,

……

……

---交换数据(数据从非分区表到分区表)

SQL> alter table t_hisdeliverx exchange partition pmax with table hisdeliverx;

Table altered

SQL> drop table hisdeliverx;

---删除非分区表

Table dropped

---将分区表重命名为原非分区表名

SQL> alter table t_hisdeliverx rename to hisdeliverx;

Table altered

---检查hideliverx表是否为分区表

select table_owner,table_name,partition_name from dba_tab_partitions a where a.table_owner='HS_HIS' and

a.table_name='HISDELIVERX';

注意,在做exchange partition操作前先对该表进行备份

7       扩展

7.1      查看数据库中的tablespace

select * from dba_tablespaces

7.2      删除表空间

DROP TABLESPACE zj1 INCLUDING CONTENTS  AND DATAFILES CASCADE CONSTRAINTS;

7.3      查看分区表

select TABLE_NAME,PARTITIONING_TYPE,SUBPARTITIONING_TYPE,STATUS

from user_part_tables;

select TABLE_NAME,PARTITION_NAME,TABLESPACE_NAME

from user_tab_partitions

7.4      对于误删的表,只要没有使用purge永久删除选项,那么从flash back区恢复回来希望挺大的。

一般步骤:

1.从flash back里查询被删的表

select * from recyclebin

2.执行表的恢复

flashback table  tb  to before drop

7.5      ORA-00054: 资源正忙,要求指定 NOWAIT  

解决:这个表正在使用,lock

select * from v$session;

select * from v$locked_object;

7.6      分区表的导出

exp zj/zj@orcl buffer=102400 tables=PART_BOOK_ZJ:PART_BOOK_02,file=D:\exp_dxsq_tables.dmp log=D:\exp_dxsq_tables.log

oracle分区表(整理)的更多相关文章

  1. oracle 跨分区查询效率,Oracle分区表做跨分区查询

    问:有一张大表,其中按时间字段(TIME_ID)进行表分区(按季度分区),但是如果业务人员做跨季度的大批量数据的查询时,未能走TIME_ID分区索引,导致全表扫描.此种情况该如何处理? 示例解析: 1 ...

  2. 【三思笔记】 全面学习Oracle分区表及分区索引

    [三思笔记]全面学习Oracle分区表及分区索引 2008-04-15 关于分区表和分区索引(About PartitionedTables and Indexes) 对于 10gR2 而言,基本上可 ...

  3. 谈一下如何设计Oracle 分区表

    在谈设计Oracle分区表之间先区分一下分区表和表空间的个概念: 表空间:表空间是一个或多个数据文件的集合,所有数据对象都存放在指定的表空间中,但主要存放表,故称表空间. 分区表:分区致力于解决支持极 ...

  4. Oracle 数据库整理表碎片

    Oracle 数据库整理表碎片 转载:http://kyle.xlau.org/posts/table-fragmentation.html 表碎片的来源 当针对一个表的删除操作很多时,表会产生大量碎 ...

  5. 深入学习Oracle分区表及分区索引

    关于分区表和分区索引(About Partitioned Tables and Indexes)对于10gR2而言,基本上可以分成几类: •       Range(范围)分区 •       Has ...

  6. oracle 分区表和分区索引

    很复杂的样子,自己都没有看完,以备后用 http://hi.baidu.com/jsshm/item/cbfed8491d3863ee1e19bc3e ORACLE分区表.分区索引ORACLE对于分区 ...

  7. 谈一下怎样设计Oracle 分区表

    在谈设计Oracle分区表之间先区分一下分区表和表空间的个概念: 表空间:表空间是一个或多个数据文件的集合,全部数据对象都存放在指定的表空间中,但主要存放表,故称表空间. 分区表:分区致力于解决支持极 ...

  8. ORACLE分区表、分区索引详解

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt160 ORACLE分区表.分区索引ORACLE对于分区表方式其实就是将表分段 ...

  9. oracle分区表彻底删除的办法,处理删不掉的不规则表名

    Oracle分区表彻底删除的办法当对一个不再使用的分区表进行drop后,查询user_tab_partitions视图发现出现如下不规则的分区表表名:SQL> select distinct t ...

  10. Oracle分区表常见操作

    Oracle分区表常用于业务中大表使用,如历史交易记录表等,提高表记录查询效率.本文主要描述范围分区表的创建.新增以及索引创建. Oracle操作分区表相关信息 显示数据库所有分区表的信息:DBA_P ...

随机推荐

  1. 【翻译习作】 Windows Workflow Foundation程序开发-第一章05

    1.3      开发我们的第一个工作流 也许你曾经在这样的产品经理手下搞过开发:他总是在你身边转悠,并不时的问一句“你还没做完吗?”.在这一部分,我们将用一个简单的Windows Workflow程 ...

  2. 【PL/SQL练习】DML语句的处理(可以处理多行数据)

    1.Insert (在表中插入一行数据,并查看) SQL> desc t1; Name Type Nullable Default Comments ---- ------------ ---- ...

  3. 默菲定律 [Murphy's Law]

    一.关于默菲定律(Murphy's Law)   “墨菲定律”.“帕金森定律”和“彼德原理”并称为二十世纪西方文化三大发现. “墨菲定律”的原话是这样说的:If there are two or mo ...

  4. [linux]查看文件编码和编码转换

    方法一:file filename 方法二:在Vim中可以直接查看文件编码 :set fileencoding 即可显示文件编码格式. 如果你只是想查看其它编码格式的文件或者想解决用Vim查看文件乱码 ...

  5. Mac OS X Server 安装与应用

    Mac OS X Server 安装与应用 Mac OS X Server是苹果电脑公司新一代服务器软件.专为OS X和iOS设备.Mac OS X提供服务,现在支持Mavericks,能够轻松共享文 ...

  6. C++断言与静态断言

    断言是很早之前就有的东西了,只需要引入cassert头文件即可使用.往往assert被用于检查不可能发生的行为,来确保开发者在调试阶段尽早发现“不可能”事件真的发生了,如果真的发生了,那么就表示代码的 ...

  7. 【python】基础

    [字符串]前后引号必须要匹配,相关函数int(),float(),str(),repr(),format(),还有切片运算符 a = 'text'           单引号指定的字符串必须在一个逻辑 ...

  8. extern c

    extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码.加上extern "C"后,会指示编译器这部分代码按C语言的进行编译,而不是C+ ...

  9. java 命令行操作

    打包命令 例如:将testproject下的文件打包成test.war jar cvf test.war ./testproject

  10. c++ builder TListView控件按字符串排序(根据网上代码亲测ok)

    //--------------------------------------------------------------------------- /* 首先将一个列表框控件安放在Form上, ...