oracle是沒有直接刪除全部分區(qū)或多個分區(qū)的語句,但是可以變通方法
成都創(chuàng)新互聯(lián)公司專注于富蘊網(wǎng)站建設服務及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供富蘊營銷型網(wǎng)站建設,富蘊網(wǎng)站制作、富蘊網(wǎng)頁設計、富蘊網(wǎng)站官網(wǎng)定制、小程序開發(fā)服務,打造富蘊網(wǎng)絡公司原創(chuàng)品牌,更為您提供富蘊網(wǎng)站排名全網(wǎng)營銷落地服務。
方法一:先備份表,再刪除表、重新創(chuàng)建表;
方法二:拼接
sql語句
,比如
SELECT
'ALTER
TABLE
LOG_INFO
DROP
PARTITION
'
||
PARTITION_NAME
||
';'
FROM
USER_TAB_PARTITIONS
WHERE
TABLE_NAME
=
'LOG_INFO';
可以列出刪除所有分區(qū)的語句,全部執(zhí)行即可。
一.表分區(qū)策略
1.識別大表
采用ANALYZE TABLE語句進行分析,然后查詢數(shù)據(jù)字典獲得相應的數(shù)據(jù)量。
2.大表如何分區(qū)
可根據(jù)月份,季度以及年份等進行分區(qū);
3.分區(qū)的表空間規(guī)劃
要對每個表空間的大小進行估計
二.創(chuàng)建表分區(qū)
a.創(chuàng)建范圍分區(qū)的關鍵字是'RANGE'
1.范圍分區(qū)
create table ware_retail_part --創(chuàng)建一個描述商品零售的數(shù)據(jù)表
(
id integer primary key,--銷售編號
retail_date date,--銷售日期
ware_name varchar2(50)--商品名稱
)
partition by range(retail_date)
(
--2011年第一個季度為part_01分區(qū)
partition par_01 values less than(to_date('2011-04-01','yyyy-mm-dd')) tablespace TEMP01,
--2011年第二個季度為part_02分區(qū)
partition par_02 values less than(to_date('2011-07-01','yyyy-mm-dd')) tablespace TEMP01,
--2011年第三個季度為part_03分區(qū)
partition par_03 values less than(to_date('2011-10-01','yyyy-mm-dd')) tablespace TEMP01,
--2011年第四個季度為part_04分區(qū)
partition par_04 values less than(to_date('2012-01-01','yyyy-mm-dd')) tablespace TEMP01
);
2.創(chuàng)建散列分區(qū)
3.組合分區(qū):
4.interval 分區(qū)
三.創(chuàng)建索引分區(qū)
索引分區(qū)分為本地索引分區(qū)和全局索引分區(qū),全局索引不反應基礎表的結構,要分區(qū)只能進行范圍分區(qū)。
創(chuàng)建索引分區(qū)要參照表分區(qū)
四.分區(qū)技術簡介
優(yōu)點:
1.減少維護工作量
2.增強數(shù)據(jù)的可用性
3.均衡I/O,提升性能
4.提高查詢速度
5.分區(qū)對用戶保持透明,用戶感覺不到分區(qū)的存在。
五,管理表分區(qū)
1.添加表分區(qū)
ALTER TABLE...ALTER PARATITION
2.合并表分區(qū)
3.刪除分區(qū)
ALTER TABLE...DROP PARTITION
刪除分區(qū)時,里面的數(shù)據(jù)也會被刪除。
-創(chuàng)建表和分區(qū)
create table sales--創(chuàng)建一個銷售記錄表
(
id number primary key,--記錄編號
goodsname varchar2(10),--商品名
saledate date--銷售日期
)
partition by range(saledate)--按照日期分區(qū)
(
--第一季度數(shù)據(jù)
partition part_sea1 values less than(to_date('2011-04-01','yyyy-mm-dd')) tablespace tbsp_1,
--第二季度數(shù)據(jù)
partition part_sea2 values less than(to_date('2011-07-01','yyyy-mm-dd')) tablespace tbsp_2,
--第三季度數(shù)據(jù)
partition part_sea3 values less than(to_date('2011-10-01','yyyy-mm-dd')) tablespace tbsp_1,
--第四季度數(shù)據(jù)
partition part_sea4 values less than(to_date('2012-01-01','yyyy-mm-dd')) tablespace tbsp_2
);
--創(chuàng)建局部索引
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
);
--并入分區(qū)
alter table sales merge partitions part_sea3,part_sea4 into partition part_sea4;
--重建局部索引
alter table sales modify partition part_sea4 rebuild unusable local indexes;
六.管理索引分區(qū)
刪除索引:DROP PARTITION
重建分區(qū):REBUILT PARTITION
更名索引分區(qū):RENAME PARTITION
分割索引分區(qū):SPLIT PARTITION
ALTER
TABLE
DROP
PARTITION
用于刪除table中某個PARTITION和其中的數(shù)據(jù),主要是用于歷史數(shù)據(jù)的刪除。如果還想保留數(shù)據(jù),就需要合并到另一個partition中。
刪除該partition之后,如果再insert該partition范圍內的值,要存放在更高的partition中。如果你刪除了最大的partition,就會出錯。
刪除table
partition的同時,刪除相應的local
index。即使該index是IU狀態(tài)。
如果table上有global
index,且該partition不空,drop
partition會使所有的global
index
為IU狀態(tài)。如果不想REBUIL
INDEX,可以用SQL語句手工刪除數(shù)據(jù),然后再DROP
PARTITION.
例子:
ALTR
ATBEL
sales
DROP
PARTITION
dec96;
到底是DROP
PARTITION或者是DELETE?
如果GLOBAL
INDEX是最重要的,就應該先DELETE
數(shù)據(jù)再DROP
PARTITION。
在下面情況下,手工刪除數(shù)據(jù)的代價比DROP
PARTITION要小
-
如果要刪除的數(shù)據(jù)只占整個TABLE的小部分
-
在TABLE中有很多的GLOBAL
INDEX。
在下面情況下,手工刪除數(shù)據(jù)的代價比DROP
PARTITION要大
-
如果要刪除的數(shù)據(jù)占整個TABLE的絕大部分
-
在TABLE中沒有很多的GLOBAL
INDEX。
如果在TABLE是父TABLE,有被引用的約束,且PARTITION不空,DROP
PARTITION時出錯。
如果要刪除有數(shù)據(jù)的PARTITION,應該先刪除引用約束?;蛘呦菵ELETE,然后再DROP
PARTITION。
如果TABLE只有一個PARTITON,不能DROP
PARTITION,只能DROP
TABLE。
可以用
ALTER
TABLE
DROP
PARTITION
來刪除分區(qū),元數(shù)據(jù)和數(shù)據(jù)將被一并刪除。
全刪除
ALTER
TABLE
yourTable
DROP
PARTITION
partionName1;
清數(shù)據(jù)
ALTER
TABLE
yourTable
TRUNCATE
PARTITION
partionName1;
語句雖簡單、操作需謹慎。
這個要看你的業(yè)務要不要備份保留這個分區(qū)的數(shù)據(jù),如果不需要保留,可以直接truncate/drop分區(qū)的,如果要保留,可以用交換分區(qū)方法;
具體步驟:
1.不保留,直接刪除:
alter
table
table_name
drop/truncate
partition
partition_name;
具體用drop還是truncate,得你自己衡量,drop的話原來的分區(qū)和數(shù)據(jù)直接就沒有了,truncate的話,只是數(shù)據(jù)沒有了,分區(qū)還在。
2.保留數(shù)據(jù)作為備份,交換分區(qū)
2.1創(chuàng)建一個表結構一樣的表:
create
table
teable_bak
as
select
*
from
table_name
where
1=2;
--只要表結構,不要數(shù)據(jù);
2.2分區(qū)交換
alter
table
table_name
exchange
partition
partition_name
with
table
table_bak;
這樣執(zhí)行后,分區(qū)partition_name的數(shù)據(jù)就會交換到table_bak中,table_bak的數(shù)據(jù)(剛剛建的空表)就會到分區(qū)里面去。