普通表转分区表Word文档格式.docx

上传人:b****3 文档编号:15716424 上传时间:2022-11-15 格式:DOCX 页数:19 大小:22.57KB
下载 相关 举报
普通表转分区表Word文档格式.docx_第1页
第1页 / 共19页
普通表转分区表Word文档格式.docx_第2页
第2页 / 共19页
普通表转分区表Word文档格式.docx_第3页
第3页 / 共19页
普通表转分区表Word文档格式.docx_第4页
第4页 / 共19页
普通表转分区表Word文档格式.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

普通表转分区表Word文档格式.docx

《普通表转分区表Word文档格式.docx》由会员分享,可在线阅读,更多相关《普通表转分区表Word文档格式.docx(19页珍藏版)》请在冰豆网上搜索。

普通表转分区表Word文档格式.docx

select 

count(*) 

from 

dba;

COUNT(*)

----------

2713235

alter 

session 

set 

nls_date_format='

yyyy-mm-dd 

hh24:

mi:

ss'

;

会话已更改。

time_fee 

dba 

where 

rownum<

5;

TIME_FEE

-------------------

2011-02-17 

19:

29:

09

15

18

20

2.1.1Oracle11g的Interval

在11g里的Interval创建,这种方法对没有写全的分区会自动创建。

比如我这里只写了1月日期,如果插入的数据有其他月份的,会自动生成对应的分区。

/* 

Formatted 

on 

2011/03/02 

15:

41:

09 

(QP5 

v5.115.810.9015) 

*/

CREATE 

TABLE 

intervaldave

PARTITION 

BY 

RANGE 

(time_fee)

INTERVAL 

( 

NUMTOYMINTERVAL 

(1, 

'

MONTH'

) 

(PARTITION 

part1

VALUES 

LESS 

THAN 

(TO_DATE 

('

01/12/2010'

 

MM/DD/YYYY'

)))

AS

SELECT 

ID, 

TIME_FEE 

FROM 

DAVE;

table_name,partition_name 

user_tab_partitions 

table_name='

INTERVALDAVE'

TABLE_NAME 

PARTITION_NAME

------------------------------ 

------------------------------

INTERVALDAVE 

PART1

SYS_P24

SYS_P25

SYS_P26

SYS_P33

SYS_P27

SYS_P28

2.1.2Oracle10g版本

在10g里面,我需要写全所有的分区。

sql>

create 

table 

pdba 

(id, 

time) 

partition 

by 

range 

(time)

(partition 

p1 

values 

less 

than 

(to_date('

2010-10-1'

yyyy-mm-dd'

)),

p2 

2010-11-1'

p3 

2010-12-1'

p4 

(maxvalue))

as 

id, 

表已创建。

PDBA'

PDBA 

P1

P2

P3

P4

(p1);

count(*)

1718285

(p2);

183667

(p3);

188701

(p4);

622582

现在分区表已经建好了,但是表名不一样,需要用rename对表重命名一下:

rename 

dba_old;

表已重命名。

DBA'

DBA 

2.2.交换分区:

Partitionexchangemethod

这种方法只是对数据字典中分区和表的定义进行了修改,没有数据的修改或复制,效率最高。

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

尽量在闲时进行操作。

交换分区的操作步骤如下:

1.创建分区表,假设有2个分区,P1,P2.

2.创建表A存放P1规则的数据。

3.创建表B存放P2规则的数据。

4.用表A和P1分区交换。

把表A的数据放到到P1分区

5.用表B和p2分区交换。

把表B的数据存放到P2分区。

创建分区表:

p_dba

(id 

number,time 

date)

range(time)

2010-09-1'

))

);

注意:

我这里只创建了2个分区,没有创建存放其他数据的分区。

创建2个分别对应分区的基表:

dba_p1 

id,time_fee 

dba_old 

WHERE 

time_fee<

TO_DATE('

YYYY-MM-DD'

dba_p2 

and 

time_fee>

dba_p1;

1536020

dba_p2;

365932

讲2个基表与2个分区进行交换:

p_dba 

exchange 

with 

表已更改。

查询2个分区:

partition(p1);

partition(p2);

数据和之前的基表一致。

查询原来的2个基表:

2个基表的数据变成成0。

在这里我们看一个问题,一般情况下,我们在创建分区表的时候,都会有一个其他分区,用来存放不匹配分区规则的数据。

在这个例子中,

我只创建了2个分区,没有创建maxvalue分区。

现在我来插入一条不满足规则的数据,看结果:

insert 

into 

values(999999,to_date('

2012-12-29'

'

));

*

第1行出现错误:

ORA-14400:

插入的分区关键字未映射到任何分区

2009-12-29'

已创建1行。

id=999999;

ID 

TIME

---------- 

--------------

99999929-12月-09

999999 

2009-12-29 

00:

00

通过这个测试可以清楚,如果插入的数据不满足分区规则,会报ORA-144

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1