oracle 12c中自增分区表 自动调整缓存分区的存储过程
发表于:2024-11-26 作者:千家信息网编辑
千家信息网最后更新 2024年11月26日,最近为了使用12c的强大的inmemory功能,新做了一个OGG从11gR2 RAC到12c的数据同步,分担主库的olap业务其中有几张分区表,按月分区自增,只缓存半年的数据,这样每个月的1号就需要缓
千家信息网最后更新 2024年11月26日oracle 12c中自增分区表 自动调整缓存分区的存储过程最近为了使用12c的强大的inmemory功能,新做了一个OGG从11gR2 RAC到12c的数据同步,分担主库的olap业务
其中有几张分区表,按月分区自增,只缓存半年的数据,这样每个月的1号就需要缓存新一个月的分区进去,同时需要移除6个月前的分区,所以写了个过程,做个简单记录
刚接触PLSQL,游标什么的也刚接触,只是自己做个简单记录
代码运行结果示例:
SQL> exec partition_cache
表名:TABLE1 需缓存分区名称:SYS_P1167 分区最大值:2018-07
SQL: ALTER TABLE CCPS.TABLE1 MODIFY PARTITION SYS_P1167 INMEMORY PRIORITY CRITICAL
表名:TABLE1 需移除分区名称:SYS_P388 分区最大值:2017-12
SQL: ALTER TABLE CCPS.TABLE1 MODIFY PARTITION SYS_P388 NO INMEMORY
*******************************************
表名:TABLE2 需移除分区名称:SYS_P588 分区最大值:2017-12
SQL: ALTER TABLE CCPS.TABLE2 MODIFY PARTITION SYS_P588 NO INMEMORY
*******************************************
表名:TABLE3 需缓存分区名称:SYS_P1168 分区最大值:2018-07
SQL: ALTER TABLE CCPS.TABLE3 MODIFY PARTITION SYS_P1168 INMEMORY PRIORITY CRITICAL
表名:TABLE3 需移除分区名称:SYS_P328 分区最大值:2017-12
SQL: ALTER TABLE CCPS.TABLE3 MODIFY PARTITION SYS_P328 NO INMEMORY
*******************************************
表名:TABLE4 需移除分区名称:SYS_P368 分区最大值:2017-12
SQL: ALTER TABLE CCPS.TABLE4 MODIFY PARTITION SYS_P368 NO INMEMORY
*******************************************
表名:TABLE5 需缓存分区名称:SYS_P1166 分区最大值:2018-07
SQL: ALTER TABLE CCPS.TABLE5 MODIFY PARTITION SYS_P1166 INMEMORY PRIORITY CRITICAL
表名:TABLE5 需移除分区名称:SYS_P428 分区最大值:2017-12
SQL: ALTER TABLE CCPS.TABLE5 MODIFY PARTITION SYS_P428 NO INMEMORY
*******************************************
PL/SQL procedure successfully completed
其中有几张分区表,按月分区自增,只缓存半年的数据,这样每个月的1号就需要缓存新一个月的分区进去,同时需要移除6个月前的分区,所以写了个过程,做个简单记录
点击(此处)折叠或打开
- CREATE OR REPLACE PROCEDURE PARTITION_CACHE
- IS
- TYPE REF_CURSOR_TYPE IS REF CURSOR;
- C1 REF_CURSOR_TYPE; --动态游标,用来循环处理需要缓存的5张表
- V_HIGHVALUE DBA_TAB_PARTITIONS.HIGH_VALUE%TYPE; --自增分区因为分区名不确定,需要根据分区的最大值来获取分区名
- V_PARTNAME DBA_TAB_PARTITIONS.PARTITION_NAME%TYPE; --分区名
- V_HIGHMONTH NVARCHAR2(10); --最大分区值截取成月份格式
- V_CURRMONTH NVARCHAR2(10); --当前月
- V_OLDMONTH NVARCHAR2(10); --6个月前的月份
- V_SQL1 NVARCHAR2(1000); --移除旧分区的sql
- V_SQL2 NVARCHAR2(1000); --缓存新分区的sql
- V_SQL VARCHAR2(1000); --获取分区名和分区最大值的sql
- BEGIN
- V_CURRMONTH := TO_CHAR(ADD_MONTHS(SYSDATE,1),'YYYY-MM');
- V_OLDMONTH := TO_CHAR(ADD_MONTHS(SYSDATE,-6),'YYYY-MM');
- DECLARE CURSOR C2 IS SELECT * FROM DBA_TABLES WHERE TABLE_NAME IN ('TABLE1','TABLE2','TABLE3','TABLE4','TABLE5') ORDER BY TABLE_NAME;
- BEGIN
- FOR TABNAME IN C2 --循环操作5张表
- LOOP
- V_SQL := 'SELECT HIGH_VALUE,PARTITION_NAME FROM DBA_TAB_PARTITIONS WHERE TABLE_NAME = '''|| TABNAME.TABLE_NAME||''' ORDER BY PARTITION_POSITION DESC';
- OPEN C1 FOR V_SQL;
- FETCH C1 INTO V_HIGHVALUE,V_PARTNAME;
- WHILE (C1%FOUND) LOOP
- V_HIGHMONTH := SUBSTR(V_HIGHVALUE,12,7);
- IF (V_HIGHMONTH = V_OLDMONTH) THEN
- DBMS_OUTPUT.PUT_LINE('表名:'||TABNAME.TABLE_NAME||' 需移除分区名称:'||V_PARTNAME||' 分区最大值:'||V_OLDMONTH);
- V_SQL1 := 'ALTER TABLE CCPS.'||TABNAME.TABLE_NAME||' MODIFY PARTITION '||V_PARTNAME||' NO INMEMORY';
- DBMS_OUTPUT.PUT_LINE('SQL: '||V_SQL1);
- ELSIF (V_HIGHMONTH = V_CURRMONTH) THEN
- DBMS_OUTPUT.PUT_LINE('表名:'||TABNAME.TABLE_NAME||' 需缓存分区名称:'||V_PARTNAME||' 分区最大值:'||V_HIGHMONTH);
- V_SQL2 := 'ALTER TABLE CCPS.'||TABNAME.TABLE_NAME||' MODIFY PARTITION '||V_PARTNAME||' INMEMORY PRIORITY CRITICAL';
- DBMS_OUTPUT.PUT_LINE('SQL: '||V_SQL2);
- END IF;
- FETCH C1 INTO V_HIGHVALUE,V_PARTNAME;
- END LOOP;
- CLOSE C1;
- DBMS_OUTPUT.PUT_LINE(' ');
- DBMS_OUTPUT.PUT_LINE('*******************************************');
- END LOOP;
- END;
- END;
刚接触PLSQL,游标什么的也刚接触,只是自己做个简单记录
代码运行结果示例:
SQL> exec partition_cache
表名:TABLE1 需缓存分区名称:SYS_P1167 分区最大值:2018-07
SQL: ALTER TABLE CCPS.TABLE1 MODIFY PARTITION SYS_P1167 INMEMORY PRIORITY CRITICAL
表名:TABLE1 需移除分区名称:SYS_P388 分区最大值:2017-12
SQL: ALTER TABLE CCPS.TABLE1 MODIFY PARTITION SYS_P388 NO INMEMORY
*******************************************
表名:TABLE2 需移除分区名称:SYS_P588 分区最大值:2017-12
SQL: ALTER TABLE CCPS.TABLE2 MODIFY PARTITION SYS_P588 NO INMEMORY
*******************************************
表名:TABLE3 需缓存分区名称:SYS_P1168 分区最大值:2018-07
SQL: ALTER TABLE CCPS.TABLE3 MODIFY PARTITION SYS_P1168 INMEMORY PRIORITY CRITICAL
表名:TABLE3 需移除分区名称:SYS_P328 分区最大值:2017-12
SQL: ALTER TABLE CCPS.TABLE3 MODIFY PARTITION SYS_P328 NO INMEMORY
*******************************************
表名:TABLE4 需移除分区名称:SYS_P368 分区最大值:2017-12
SQL: ALTER TABLE CCPS.TABLE4 MODIFY PARTITION SYS_P368 NO INMEMORY
*******************************************
表名:TABLE5 需缓存分区名称:SYS_P1166 分区最大值:2018-07
SQL: ALTER TABLE CCPS.TABLE5 MODIFY PARTITION SYS_P1166 INMEMORY PRIORITY CRITICAL
表名:TABLE5 需移除分区名称:SYS_P428 分区最大值:2017-12
SQL: ALTER TABLE CCPS.TABLE5 MODIFY PARTITION SYS_P428 NO INMEMORY
*******************************************
PL/SQL procedure successfully completed
最大
最大值
名称
缓存
只是
数据
月份
游标
循环
接触
过程
分区表
强大
业务
代码
功能
动态
半年
同时
格式
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
青海省网络安全会议
温州信息网络技术有哪些
互联网科技公司春联
计算机网络技术动态路由配置
海康多媒体服务器开不开
怎么设置手机版我的世界服务器
关于数据库设计的正确描述是
数据库管理系统的类型
软件开发增值税发票多少个点
大专毕业软件开发好吗
东莞理工网络安全学院
100tb存储服务器
福建省万云网络技术有限公司
建站iis服务器
广东销售软件开发收费
商城软件开发需要多少钱
通信系统软件开发
网络安全宣传怎么防范
物业设备数据库
网络安全工作专题会会议纪要
金山区营销软件开发售后服务
戴尔服务器t330主板型号
材料学数据库
青岛调度服务器品牌
sci数据库改革
非凡网络技术交流
幼儿园网络安全的教案
公共网络安全制定产品
网络技术 国家三级 含金量
软件开发项目毛利润