oracle增加分割槽的方法
在專案中經常要增加大量的分割槽,總結了增加分割槽的方法:
1.如果只增加一級分割槽,沒有子分割槽,可以簡單的用如下語句增加:
alter table TDW_12580_ORD_REL_TAB_M
add PARTITION M_TDW_12580_201005 VALUES (201005)
2.如果增加的分割槽有子分割槽,則需要先建一個一級分割槽和子分割槽,然後用下面的指令碼來增加:
注意:表名用大寫,日期格式為20100801 結束日期為下一個月的1號,如20100901
指令碼:
declare
--初始化引數
v_table_name varchar2(30);
v_partition_name varchar2(30);
v_subpartition_name varchar2(30);
v_segment_type varchar2(30);
v_begin_date_str varchar2(10);
v_sql varchar2(1000);
v_begin_date date;
v_end_date date;
--查詢出所有分割槽表
cursor C_table_name is
select t1.table_name
from user_tables t1
where t1.table_name in ('&TABLE_NAME');
begin
open C_table_name;
loop
fetch C_table_name
into v_table_name;
exit when C_table_name%notfound;
--查詢出分割槽表的型別
select distinct (t2.segment_type)
into v_segment_type
from user_segments t2
where t2.segment_name = v_table_name;
if v_segment_type in ('TABLE SUBPARTITION') then
--取出分割槽和子分割槽表名的不含日期部分
select distinct substr(t3.partition_name,
0,
length(t3.partition_name) - 6),
substr(t3.subpartition_name,
0,
length(t3.subpartition_name) - 8)
into v_partition_name, v_subpartition_name
from user_tab_subpartitions t3
where t3.table_name = v_table_name;
--初始化日期
v_begin_date := to_date('&START_DATE', 'YYYYMMDD');
v_end_date := to_date('&END_DATE', 'YYYYMMDD');
--迴圈建立2010年的表分割槽
while v_begin_date < v_end_date loop
--建立增加分割槽語句,如:alter table v_table_name add partition v_partition_nameYYYYMM values (YYYYMM) (subpartition v_subpartition_nameYYYYMMDD values (YYYYMMDD));
v_begin_date_str := substr(to_char(v_begin_date, 'YYYYMMDD'), 7, 2);
if v_begin_date_str in ('01') then
v_sql := 'alter table ' || v_table_name || ' add partition ' ||
v_partition_name ||
substr(to_char(v_begin_date, 'YYYYMMDD'), 0, 6) ||
' values (' ||
substr(to_char(v_begin_date, 'YYYYMMDD'), 0, 6) ||
') (subpartition ' || v_subpartition_name ||
to_char(v_begin_date, 'YYYYMMDD') || ' values (' ||
to_char(v_begin_date, 'YYYYMMDD') || '))';
else
v_sql := 'alter table ' || v_table_name || ' modify partition ' ||
v_partition_name ||
substr(to_char(v_begin_date, 'YYYYMMDD'), 0, 6) ||
' add subpartition ' || v_subpartition_name ||
to_char(v_begin_date, 'YYYYMMDD') || ' values (' ||
to_char(v_begin_date, 'YYYYMMDD') || ')';
end if;
--顯示增加分割槽語句
--DBMS_OUTPUT.put_line(v_sql);
--執行增加分割槽語句
execute immediate v_sql;
--日期加一天
v_begin_date := v_begin_date + 1;
end loop;
elsif v_segment_type in ('TABLE PARTITION') then
--取出分割槽表名的不含日期部分
select distinct (substr(t4.partition_name,
0,
length(t4.partition_name) - 6))
into v_partition_name
from user_tab_partitions t4
where t4.table_name = v_table_name;
--初始化日期
v_begin_date := to_date('&START_DATE', 'YYYYMMDD');
v_end_date := to_date('&START_DATE', 'YYYYMMDD');
--迴圈建立2010年的表分割槽
while v_begin_date < v_end_date loop
--建立增加分割槽語句,如:alter table v_table_name add partition v_partition_nameYYYYMM values (YYYYMM);
v_sql := 'alter table ' || v_table_name || ' add partition ' ||
v_partition_name ||
substr(to_char(v_begin_date, 'YYYYMMDD'), 0, 6) ||
' values (' ||
substr(to_char(v_begin_date, 'YYYYMMDD'), 0, 6) || ')';
--顯示增加分割槽語句
--- DBMS_OUTPUT.put_line(v_sql);
--執行增加分割槽語句
execute immediate v_sql;
--日期加一月
v_begin_date := add_months(v_begin_date, 1);
end loop;
else
DBMS_OUTPUT.put_line(v_table_name || '表型別為' || v_segment_type ||
',請檢視!');
end if;
end loop;
close C_table_name;
end;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7490392/viewspace-1039636/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- vmware server 增加根分割槽的方法Server
- Oracle分割槽表基礎運維-07增加分割槽(2 HASH分割槽)Oracle運維
- Oracle分割槽表基礎運維-07增加分割槽(1範圍分割槽)Oracle運維
- Oracle分割槽表基礎運維-07增加分割槽(3列表分割槽)Oracle運維
- 【實驗】【PARTITION】RANGE分割槽表增加分割槽
- win10增加分割槽的方法_win10怎麼給磁碟新增分割槽Win10
- Oracle分割槽表基礎運維-07增加分割槽(4 RANGE_HASH)Oracle運維
- Oracle分割槽表基礎運維-07增加分割槽(5RANGE_LIST)Oracle運維
- Oracle分割槽表基礎運維-07增加分割槽(6RANGE_RANGE)Oracle運維
- Oracle的使用者表自動增加分割槽Oracle
- Linux 增加 swap 分割槽Linux
- rebuild分割槽表分割槽索引的方法Rebuild索引
- 全面學習分割槽表及分割槽索引(8)--增加和收縮表分割槽索引
- 全面學習分割槽表及分割槽索引(16)--增加和刪除索引分割槽索引
- [oracle] expdp 匯出分割槽表的分割槽Oracle
- linux下增加swap分割槽Linux
- lvm增加分割槽容量LVM
- linux中增加swap分割槽或檔案的步驟方法Linux
- Oracle分割槽表及分割槽索引Oracle索引
- oracle 分割槽Oracle
- Oracle普通表修改為分割槽表的方法Oracle
- Oracle分割槽表增加分割槽報錯“ORA-14760:不允許對間隔分割槽物件執行 ADD PARTITION”Oracle物件
- Oracle的分割槽管理Oracle
- Oracle帶區域性分割槽索引的分割槽表刪除舊分割槽新增新分割槽Oracle索引
- 簡單ORACLE分割槽表、分割槽索引Oracle索引
- oracle分割槽表和分割槽表exchangeOracle
- (轉) linux下增加swap分割槽Linux
- sql server針對表增加新的分割槽SQLServer
- 虛擬機器增加磁碟分割槽的大小虛擬機
- linux的分割槽方法Linux
- Oracle 表分割槽Oracle
- oracle分割槽表Oracle
- oracle表分割槽Oracle
- Oracle 分割槽表Oracle
- Oracle索引分割槽Oracle索引
- oracle分割槽及分割槽索引partition_partition index_維護(五)_快捷方法Oracle索引Index
- ORACLE 範圍分割槽 partition-range分割槽Oracle
- oracle分割槽表和非分割槽表exchangeOracle