Oracle Split Partitions
1. 创建分离分区的存储过程
CREATE OR REPLACE Procedure SP_Split_Partition(
v_table_name_in in varchar2,
v_part_name_prifex_in in varchar2,
v_split_partition_source_in in varchar2,
v_tablespace_name_in in varchar2,
v_field_tablespace_name_in in varchar2,
v_create_partition_count_in in number
) is
/*
名称:SP_Split_Partition
描述:oracle分区表分离分区的存储过程
参数说明:
v_table_name_in 分区表表名称
v_part_name_prifex_in 分区名称前缀
v_split_partition_source_in 要分离的目标分区
v_tablespace_name_in in 分区表所在表空间
v_field_tablespace_name_in 特别字段特别分区SQL
v_create_partition_count_in 从现在开始创建多少个分区
*/
-- Local variables here
i integer; ---最后一个分区信息
cursor cur_utp(v_table_name_in in user_tab_partitions.table_name%TYPE) is
select *
from (select utp.table_name,
utp.tablespace_name,
utp.partition_name,
utp.high_value,
utp.high_value_length,
utp.partition_position
from user_tab_partitions utp
where utp.table_name = UPPER(v_table_name_in)
and utp.high_value_length<>8
order by utp.partition_position desc
) utp
where rownum = 1; v_high_value varchar2(255); --less than value信息
v_partition_max_date date; ---- 当前最大分区
v_sqlexec VARCHAR2(2000); --DDL语句变量
v_count number := 0;
v_interver number := 1; --步长间隔 单位(月)
v_tablespace_name varchar2(200); v_max_date_this_time date; begin
-- 根据v_create_partition_count_in, 得到最后要生成的分区日期
v_max_date_this_time:=last_day(add_months(trunc(SYSDATE), v_create_partition_count_in))+1; --取值
for utp in cur_utp(v_table_name_in) loop
v_high_value := substr(utp.high_value,11,10);
v_partition_max_date := to_date(v_high_value,'YYYY-MM-DD'); dbms_output.put_line('v_high_value:' || v_high_value); --如果没有给默认值
if (v_tablespace_name_in is null) then
v_tablespace_name := utp.tablespace_name;
else
v_tablespace_name := v_tablespace_name_in;
end if;
end loop; i:= 0;
v_partition_max_date := add_months(v_partition_max_date,v_interver); /************************************************************
alter table Article_Detail split partition Article_Detail_Others at(TO_DATE('2014-01-01', 'yyyy-mm-dd'))
into(
partition Article_Detail_201401 LOB (CONTENT_HTML) store as SECUREFILE (TABLESPACE wm_article_detail_clob) tablespace WM_ARTICLE_DETAIL,
partition Article_Detail_Others LOB (CONTENT_HTML) store as SECUREFILE (TABLESPACE wm_article_detail_clob) tablespace WM_ARTICLE_DETAIL
);
*************************************************************/ while v_partition_max_date <= v_max_date_this_time loop
v_SqlExec := 'ALTER TABLE ' || v_table_name_in || ' SPLIT PARTITION ' || v_split_partition_source_in || ' AT' ||
'(TO_DATE('''||to_char(v_partition_max_date, 'YYYY-MM-DD')||''',''YYYY-MM-DD'')) INTO(PARTITION '||
v_part_name_prifex_in || to_char(v_partition_max_date,'YYYYMM') || ' ' || v_field_tablespace_name_in ||
' TABLESPACE ' || v_tablespace_name || ', PARTITION '||v_split_partition_source_in||')';
dbms_output.put_line('Added Partition ' || i || '=' || v_SqlExec);
DBMS_Utility.Exec_DDL_Statement(v_SqlExec);
v_partition_max_date := add_months(v_partition_max_date,v_interver);
i:= i + 1;
end loop; v_count := v_count + i;
dbms_output.put_line('Added Partition Count:' || v_count); commit;
Exception
when OTHERS then
--ReturnValue:=-1003;
dbms_output.put_line('The SQLCode is: '||SQLCODE);
dbms_output.put_line('The SQLERRM is: '||SQLERRM); end SP_Split_Partition;
2. 创建调度分离分区的存储过程
CREATE OR REPLACE Procedure SP_Call_SP_Split_Partition is
begin update Article_Detail t set t.transfer_done_time=t.extracted_time where t.transfer_done_time is null;
commit; dbms_stats.gather_table_stats('WDM_APP','ARTICLE_DETAIL',partname=>'ARTICLE_DETAIL_OTHERS'); SP_Split_Partition(
'ARTICLE_DETAIL',
'ARTICLE_DETAIL_',
'ARTICLE_DETAIL_OTHERS',
'WM_ARTICLE_DETAIL',
'LOB (CONTENT_HTML) store as SECUREFILE (TABLESPACE wm_article_detail_clob)',
3
); SP_Split_Partition(
'ARTICLE_DATA',
'ARTICLE_DATA_',
'ARTICLE_DATA_OTHERS',
'WM_ARTICLE_DATA',
'',
3
); Exception
when OTHERS then
--ReturnValue:=-1003;
dbms_output.put_line('The SQLCode is: '||SQLCODE);
dbms_output.put_line('The SQLERRM is: '||SQLERRM); end SP_Call_SP_Split_Partition;
3. 创建相应的JOB, 并执行.
CREATE OR REPLACE PROCEDURE Job_SP_Call_SP_Split_Partition AS
JobNo user_jobs.job%TYPE;
BEGIN
begin
dbms_job.submit(JobNo, 'begin SP_Call_SP_Split_Partition; end;',
SYSDATE+1/1440,'TRUNC(SYSDATE+15)');
COMMIT;
end;
END;
/ call Job_SP_Call_SP_Split_Partition();
Oracle Split Partitions的更多相关文章
- pipe row的用法, Oracle split 函数写法.
为了让 PL/SQL 函数返回数据的多个行,必须通过返回一个 REF CURSOR 或一个数据集合来完成.REF CURSOR 的这种情况局限于可以从查询中选择的数据,而整个集合在可以返回前,必须进行 ...
- Oracle Split 函数
为了让 PL/SQL 函数返回数据的多个行,必须通过返回一个 REF CURSOR 或一个数据集合来完成.REF CURSOR 的这种情况局限于可以从查询中选择的数据,而整个集合在可以返回前,必须进行 ...
- Oracle split分区表引起ORA-01502错误
继上次删除分区表的分区遇到ORA-01502错误后[详细见链接:Oracle分区表删除分区引发错误ORA-01502: 索引或这类索引的分区处于不可用状态],最近在split分区的时候又遇到了这个问题 ...
- (转)pipe row的用法, Oracle split 函数写法.
本文转载自:http://www.cnblogs.com/newsea/archive/2010/12/14/1905482.html 关于 pipe row的用法2009/12/30 14:53 = ...
- oracle split 以及 简单json解析存储过程
BEGIN; 由于之前工作上需要在oracle中做split功能以及json格分解.然后经过一番google和优化整合,最后整理到一个存储过程包中,易于管理,代码如下: 1.包定义: CREATE O ...
- oracle split
select * from table(fun_strsplit('1,2,3,4,5')); 1.创建一个类型 ) 2.创建函数 CREATE OR REPLACE FUNCTION Fun_Str ...
- Oracle Split字符串
为了让 PL/SQL 函数返回数据的多个行,必须通过返回一个 REF CURSOR 或一个数据集合来完成.REF CURSOR 的这种情况局限于可以从查询中选择的数据,而整个集合在可以返回前,必须进行 ...
- oracle split函数
PL/SQL 中没有split函数,需要自己写. 代码: ); --创建一个 type ,如果为了使split函数具有通用性,请将其size 设大些. --创建function create or r ...
- Partitioning & Archiving tables in SQL Server (Part 2: Split, Merge and Switch partitions)
Reference: http://blogs.msdn.com/b/felixmar/archive/2011/08/29/partitioning-amp-archiving-tables-in- ...
随机推荐
- 微软.NET各子技术领域的应用前景
从2002年微软发布.NET 1.0,其间历经了8年的发展,再到.NET 4.0,其已经成为一个庞大而复杂的软件开发与运行平台,架构日益复杂,应用领域也在不断地扩展,包容了“一堆”的子技术领域. 在. ...
- Python FTP多线程爆破脚本
初学python, 自己编写了个FTP多线爆破小脚本代码很丑= = #!usr/bin/env python #!coding=utf-8 __author__='zhengjim' from ftp ...
- WINHTTP的API接口说明。
BOOL WINAPI WinHttpAddRequestHeaders( _In_ HINTERNET hRequest, _In_ LPCWSTR pwszHeaders, _In ...
- Codeforces Round #325 (Div. 2) C. Gennady the Dentist 暴力
C. Gennady the Dentist Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/586 ...
- coffeeScript demo
#能够直接在浏览器嵌入coffee-script.js 解析xx.coffee脚本,但真正正式使用时不建议这样使用,coffee-script.js下载地址:http://coffeescript.o ...
- File transfer in android with asmack and Openfire
http://harryjoy.com/2012/08/18/file-transfer-in-android-with-asmack-and-openfire/ http://www.javacod ...
- [MODx] Build a CMP (Custom manager page) using MIGX in MODX 2.3 -- 2
We are not finishing yet... 1. Under MIGX Management, we need to add some "Actionbuttons" ...
- C# 墙纸更换程序
Win7 自带的主题可以实现墙纸更换功能,同时也提供了定时更换功能. 附带效果 淡入淡出 如图 C#编写墙纸更换程序,如果使用Windows Api你会看不到那种 淡入淡出 的效果,它只会很突兀的就换 ...
- [Effective C++ --016]成对使用New和Delete时要采用相同形式
这一节比较简单,可以总结为以下: std::string *stringPtr1 = new std::string; std::]; .. delete stringPtr1; // delete ...
- JS之正则表达式验证URL
function IsURL(str_url){ var strRegex = "^((https|http|ftp|rtsp|mms)?://)" + "?(([0-9 ...