oracle 12c中自增分区表 自动调整缓存分区的存储过程
发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,最近为了使用12c的强大的inmemory功能,新做了一个OGG从11gR2 RAC到12c的数据同步,分担主库的olap业务其中有几张分区表,按月分区自增,只缓存半年的数据,这样每个月的1号就需要缓
千家信息网最后更新 2025年01月31日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安全错误
数据库的锁怎样保障安全
江苏游戏软件开发流程
数据库实验窗体 实验心得
数据库使用向导创建表
2017服务器系统
数据库技术的诞生
信息检索中文数据库
香港服务器访问快吗
rna 数据库
宜章网络安全大检查
开源数据库运维管理
网络技术应用全册
日本那一年组建政府网络安全
山航的软件开发
数据库服务迁移
电力监控系统网络安全防护
网店服务器怎么样
网络安全运营者应当坚强
梦飞科技租服务器
数据库服务器名称查询
我省网络安全知识竞赛
两会网络安全总结报告
宜章网络安全大检查
为什么dnf服务器总是维修
域名挂在别人服务器上安全吗
有效前沿 建模 数据库
信息通信网络安全员
萍乡公司赣西网络技术支持
网络安全舆情控制预案
30岁学嵌入式软件开发
数据库怎么插一列