分区表创建查询删除导出导入

一:分区表创建

先建三个表空间

createtablespace dinya_space01 datafile'E:\dinya01.dnf'size50M autoallocate;

createtablespace dinya_space02 datafile'E:\dinya02.dnf'size50M autoallocate;

createtablespace dinya_space03 datafile'E:\dinya03.dnf'size50M autoallocate;

建立分区表(按范围存储)

createtable kkkk

(

transaction_id numberprimarykey,

item_id number(8)notnull,

item_description varchar2(300),

transaction_date datenotnull

)

partitionbyrange(transaction_id)

(

partition part_01 valueslessthan(30000000)tablespace dinya_space01,

partition part_02 valueslessthan(60000000)tablespace dinya_space02,

partition part_03 valueslessthan(maxvalue)tablespace dinya_space03 )

建立分区表(按日期存储)

createtable PPP

(

transaction_id numberprimarykey,

item_id number(8)notnull,

item_description varchar2(300),

transaction_date datenotnull

)

partitionbyrange(transaction_date)

(

partition part_01 valueslessthan(to_date('2006-01-01','yyyy-mm-dd'))

tablespace dinya_space01,

partition part_02 valueslessthan(to_date('2010-01-01','yyyy-mm-dd'))

tablespace dinya_space02,

partition part_03 valueslessthan(maxvalue)tablespace dinya_space03

);

查询分区表

select table_name,partition_name,tablespace_name from user_tab_partitions;

SELECT*FROM useR_TAB_PARTITIONS WHERE TABLE_NAME='KKKK'

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

select*from DBA_PART_TABLES

select table_name,partitioned from user_tables;

插入数据

insert into KKKK values(3,12, 'BOOKS',to_date('2006-05-30','yyyy-mm-dd'));

insert into KKKK values(4,12, 'BOOKS',to_date('2007-06-23','yyyy-mm-dd'));

insert into KKKK values(5,12, 'BOOKS',to_date('2007-06-23','yyyy-mm-dd'));

insert into KKKK values(13,12, 'BOOKS',to_date('2006-05-30','yyyy-mm-dd'));

insert into KKKK values(14,12, 'BOOKS',to_date('2007-06-23','yyyy-mm-dd'));

insert into KKKK values(15,12, 'BOOKS',to_date('2007-06-23','yyyy-mm-dd'));

insert into KKKK values(54000000,12, 'BOOKS',to_date('2011-02-26','yyyy-mm-dd'));

insert into KKKK values(54000100,12, 'BOOKS',to_date('2011-02-26','yyyy-mm-dd'));

insert into KKKK values(54001000,12, 'BOOKS',to_date('2011-02-26','yyyy-mm-dd'));

insert into KKKK values(54000010,12, 'BOOKS',to_date('2011-02-26','yyyy-mm-dd'));

insert into KKKK values(54001020,12, 'BOOKS',to_date('2011-02-26','yyyy-mm-dd'));

insert into KKKK values(9999999999999,12, 'BOOKS',to_date('2011-04-30','yyyy-mm-dd'));

insert into KKKK values(9999999199999,12, 'BOOKS',to_date('2011-04-30','yyyy-mm-dd'));

insert into KKKK values(9999999299999,12, 'BOOKS',to_date('2011-04-30','yyyy-mm-dd'));

查询分区数据

select*from KKKK

select*from KKKK partition(part_01);

select*from KKKK partition(part_02);

select*from KKKK partition(part_03);

分区表分区及数据移动到另一个表空间

altertable GIS_CAMERA_RENAME movepartition CUS_PART1 tablespace sde ;

查询分区是否存在

select*from user_segments where segment_type='TABLE PARTITION'and partition_name like'PART%'

删除分区表:

此可以彻底删除分区表及分区

droptable KKKK purge;

此只删除分区表但不删除分区

truncatetable KKKK;

整个表创建索引:

Create index dinya_idx_t on dinya_test(item_id);

重建索引:

alter index xxx rebuild

查询所有索引

select*from all_indexes

删除分区:

alter table ABCD drop partition "p3";

增加分区:

ALTER TABLE ABCD add partition "p3" values less than (to_date('2014-01-01', 'yyyy-mm-dd') ) tablespace CAS;

合并分区:

alter table ABCD MERGE PARTITIONS "p1","p2" into partition "p2"

合并后的分区名,不能是边界值较低的那个

将一个分区分为两个分区:

alter table ABCD split Partition "p2" at (to_date('2012-07-01', 'yyyy-mm-dd'))

  into (Partition "p5" tablespace CAS2,

Partition "p6" tablespace CAS2);

注:原分区将自动删除

分区改名:

alter table ABCD rename Partition "p6" to "p7"

在此顺便再提一下truncate操作后不释放空间的解决办法
Truncate不支持回滚,并且不能truncate一个带有外键的表,如果要删除首先要取消外键,然后再删除。
truncate table 后,有可能表空间仍没有释放,可以使用如下语句:
alter table 表名称 deallocate   UNUSED KEEP 0;
注意如果不加KEEP 0的话,表空间是不会释放的。
例如:
alter table tablename deallocate   UNUSED KEEP 0;
或者:
TRUNCATE TABLE tablename DROP STORAGE
才能释放表空间。
例如: truncate table  tablename DROP STORAGE;

注:在删除带有分区表的表空间时必须删除表空间下所有的分区表,否则报错ora-14404

若分区表跨不同表空间,做导出、导入时目标数据库必须预建这些表空间。分区表各区所在表空间在做导入时目标数据库一定要预建这些表空间!这些表空间不一定是用户的默认表空间,只要存在即可。如果有一个不存在,就会报错!

分区表导出脚本:

expdp sde/sde directory=DIR dumpfile= GIS_CAMERA_RENAME.dmp logfile=kkkk.log tables= GIS_CAMERA_RENAME parallel=3

在分区表中的所属表空间可以不属于任何用户,但分区表属于某个用户就行

在导入数据时只需预建好目标表空间和相关用户即可,这样分区表就可以顺利导入(不需要单独导入备份文件然后再导入分区表备份文件,只要分区表在整个备份文件某个用户中.分区表在某个用户下,该用户下还有其他普通表,只需要把该用户备份还原将就可以了,不需要再单独还原分区表了)

分区表实际上是没有数据的,  所以dba_tables里,他的表空间是null,  实际数据是在分区中的,所以dba_tab_partitions里有

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值