成都网站建设设计

将想法与焦点和您一起共享

怎么删除oracle分区 oracle分区数据删除

ORACLE能不能一次删除或者清空多个分区

oracle是没有直接删除全部分区或多个分区的语句,但是可以变通方法

成都创新互联公司专注于富蕴网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供富蕴营销型网站建设,富蕴网站制作、富蕴网页设计、富蕴网站官网定制、小程序开发服务,打造富蕴网络公司原创品牌,更为您提供富蕴网站排名全网营销落地服务。

方法一:先备份表,再删除表、重新创建表;

方法二:拼接

sql语句

,比如

SELECT

'ALTER

TABLE

LOG_INFO

DROP

PARTITION

'

||

PARTITION_NAME

||

';'

FROM

USER_TAB_PARTITIONS

WHERE

TABLE_NAME

=

'LOG_INFO';

可以列出删除所有分区的语句,全部执行即可。

ORACLE表分区

一.表分区策略

1.识别大表

采用ANALYZE TABLE语句进行分析,然后查询数据字典获得相应的数据量。

2.大表如何分区

可根据月份,季度以及年份等进行分区;

3.分区的表空间规划

要对每个表空间的大小进行估计

二.创建表分区

a.创建范围分区的关键字是'RANGE'

1.范围分区

create table ware_retail_part --创建一个描述商品零售的数据表

(

id integer primary key,--销售编号

retail_date date,--销售日期

ware_name varchar2(50)--商品名称

)

partition by range(retail_date)

(

--2011年第一个季度为part_01分区

partition par_01 values less than(to_date('2011-04-01','yyyy-mm-dd')) tablespace TEMP01,

--2011年第二个季度为part_02分区

partition par_02 values less than(to_date('2011-07-01','yyyy-mm-dd')) tablespace TEMP01,

--2011年第三个季度为part_03分区

partition par_03 values less than(to_date('2011-10-01','yyyy-mm-dd')) tablespace TEMP01,

--2011年第四个季度为part_04分区

partition par_04 values less than(to_date('2012-01-01','yyyy-mm-dd')) tablespace TEMP01

);

2.创建散列分区

3.组合分区:

4.interval 分区

三.创建索引分区

索引分区分为本地索引分区和全局索引分区,全局索引不反应基础表的结构,要分区只能进行范围分区。

创建索引分区要参照表分区

四.分区技术简介

优点:

1.减少维护工作量

2.增强数据的可用性

3.均衡I/O,提升性能

4.提高查询速度

5.分区对用户保持透明,用户感觉不到分区的存在。

五,管理表分区

1.添加表分区

ALTER TABLE...ALTER PARATITION

2.合并表分区

3.删除分区

ALTER TABLE...DROP PARTITION

删除分区时,里面的数据也会被删除。

-创建表和分区

create table sales--创建一个销售记录表

(

id number primary key,--记录编号

goodsname varchar2(10),--商品名

saledate date--销售日期

)

partition by range(saledate)--按照日期分区

(

--第一季度数据

partition part_sea1 values less than(to_date('2011-04-01','yyyy-mm-dd')) tablespace tbsp_1,

--第二季度数据

partition part_sea2 values less than(to_date('2011-07-01','yyyy-mm-dd')) tablespace tbsp_2,

--第三季度数据

partition part_sea3 values less than(to_date('2011-10-01','yyyy-mm-dd')) tablespace tbsp_1,

--第四季度数据

partition part_sea4 values less than(to_date('2012-01-01','yyyy-mm-dd')) tablespace tbsp_2

);

--创建局部索引

create index index_3_4 on sales(saledate)

local(

partition part_seal tablespace tbsp_1,

partition part_sea2 tablespace tbsp_2,

partition part_sea3 tablespace tbsp_1,

partition part_sea4 tablespace tbsp_2

);

--并入分区

alter table sales merge partitions part_sea3,part_sea4 into partition part_sea4;

--重建局部索引

alter table sales modify partition part_sea4 rebuild unusable local indexes;

六.管理索引分区

删除索引:DROP PARTITION

重建分区:REBUILT PARTITION

更名索引分区:RENAME PARTITION

分割索引分区:SPLIT PARTITION

oracle 有全局索引怎么删除分区

ALTER

TABLE

DROP

PARTITION

用于删除table中某个PARTITION和其中的数据,主要是用于历史数据的删除。如果还想保留数据,就需要合并到另一个partition中。

删除该partition之后,如果再insert该partition范围内的值,要存放在更高的partition中。如果你删除了最大的partition,就会出错。

删除table

partition的同时,删除相应的local

index。即使该index是IU状态。

如果table上有global

index,且该partition不空,drop

partition会使所有的global

index

为IU状态。如果不想REBUIL

INDEX,可以用SQL语句手工删除数据,然后再DROP

PARTITION.

例子:

ALTR

ATBEL

sales

DROP

PARTITION

dec96;

到底是DROP

PARTITION或者是DELETE?

如果GLOBAL

INDEX是最重要的,就应该先DELETE

数据再DROP

PARTITION。

在下面情况下,手工删除数据的代价比DROP

PARTITION要小

-

如果要删除的数据只占整个TABLE的小部分

-

在TABLE中有很多的GLOBAL

INDEX。

在下面情况下,手工删除数据的代价比DROP

PARTITION要大

-

如果要删除的数据占整个TABLE的绝大部分

-

在TABLE中没有很多的GLOBAL

INDEX。

如果在TABLE是父TABLE,有被引用的约束,且PARTITION不空,DROP

PARTITION时出错。

如果要删除有数据的PARTITION,应该先删除引用约束。或者先DELETE,然后再DROP

PARTITION。

如果TABLE只有一个PARTITON,不能DROP

PARTITION,只能DROP

TABLE。

oracle中如何动态删除分区数据

可以用

ALTER

TABLE

DROP

PARTITION

来删除分区,元数据和数据将被一并删除。

全删除

ALTER

TABLE

yourTable

DROP

PARTITION

partionName1;

清数据

ALTER

TABLE

yourTable

TRUNCATE

PARTITION

partionName1;

语句虽简单、操作需谨慎。

ORACLE分区表用什么方法删除一个分区的所有数据

这个要看你的业务要不要备份保留这个分区的数据,如果不需要保留,可以直接truncate/drop分区的,如果要保留,可以用交换分区方法;

具体步骤:

1.不保留,直接删除:

alter

table

table_name

drop/truncate

partition

partition_name;

具体用drop还是truncate,得你自己衡量,drop的话原来的分区和数据直接就没有了,truncate的话,只是数据没有了,分区还在。

2.保留数据作为备份,交换分区

2.1创建一个表结构一样的表:

create

table

teable_bak

as

select

*

from

table_name

where

1=2;

--只要表结构,不要数据;

2.2分区交换

alter

table

table_name

exchange

partition

partition_name

with

table

table_bak;

这样执行后,分区partition_name的数据就会交换到table_bak中,table_bak的数据(刚刚建的空表)就会到分区里面去。


文章标题:怎么删除oracle分区 oracle分区数据删除
文章URL:http://chengdu.cdxwcx.cn/article/hjisge.html