真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

oracle12c中自增分區(qū)表自動調(diào)整緩存分區(qū)的存儲過程

    最近為了使用12c的強(qiáng)大的inmemory功能,新做了一個(gè)OGG從11gR2 RAC到12c的數(shù)據(jù)同步,分擔(dān)主庫的olap業(yè)務(wù)
    其中有幾張分區(qū)表,按月分區(qū)自增,只緩存半年的數(shù)據(jù),這樣每個(gè)月的1號就需要緩存新一個(gè)月的分區(qū)進(jìn)去,同時(shí)需要移除6個(gè)月前的分區(qū),所以寫了個(gè)過程,做個(gè)簡單記錄
 

點(diǎn)擊(此處)折疊或打開

成都創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司,專注成都網(wǎng)站制作、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站營銷推廣,空間域名,雅安服務(wù)器托管,綿陽服務(wù)器托管有關(guān)企業(yè)網(wǎng)站制作方案、改版、費(fèi)用等問題,請聯(lián)系成都創(chuàng)新互聯(lián)。

  1. CREATE OR REPLACE PROCEDURE PARTITION_CACHE
  2. IS
  3. TYPE REF_CURSOR_TYPE IS REF CURSOR;
  4. C1 REF_CURSOR_TYPE;                     --動態(tài)游標(biāo),用來循環(huán)處理需要緩存的5張表
  5. V_HIGHVALUE DBA_TAB_PARTITIONS.HIGH_VALUE%TYPE;  --自增分區(qū)因?yàn)榉謪^(qū)名不確定,需要根據(jù)分區(qū)的最大值來獲取分區(qū)名
  6. V_PARTNAME DBA_TAB_PARTITIONS.PARTITION_NAME%TYPE;  --分區(qū)名
  7. V_HIGHMONTH NVARCHAR2(10);   --最大分區(qū)值截取成月份格式
  8. V_CURRMONTH NVARCHAR2(10);   --當(dāng)前月
  9. V_OLDMONTH NVARCHAR2(10);    --6個(gè)月前的月份
  10. V_SQL1 NVARCHAR2(1000);      --移除舊分區(qū)的sql
  11. V_SQL2 NVARCHAR2(1000);      --緩存新分區(qū)的sql
  12. V_SQL VARCHAR2(1000);        --獲取分區(qū)名和分區(qū)最大值的sql

  13. BEGIN
  14.   V_CURRMONTH := TO_CHAR(ADD_MONTHS(SYSDATE,1),'YYYY-MM');
  15.   V_OLDMONTH := TO_CHAR(ADD_MONTHS(SYSDATE,-6),'YYYY-MM');
  16.   
  17.   DECLARE CURSOR C2 IS SELECT * FROM DBA_TABLES WHERE TABLE_NAME IN ('TABLE1','TABLE2','TABLE3','TABLE4','TABLE5') ORDER BY TABLE_NAME;
  18.   BEGIN
  19.   FOR TABNAME IN C2       --循環(huán)操作5張表
  20.     LOOP
  21.       V_SQL := 'SELECT HIGH_VALUE,PARTITION_NAME FROM DBA_TAB_PARTITIONS WHERE TABLE_NAME = '''|| TABNAME.TABLE_NAME||''' ORDER BY PARTITION_POSITION DESC';
  22.       OPEN C1 FOR V_SQL;
  23.       FETCH C1 INTO V_HIGHVALUE,V_PARTNAME;
  24.       WHILE (C1%FOUND) LOOP
  25.            V_HIGHMONTH := SUBSTR(V_HIGHVALUE,12,7);
  26.            IF (V_HIGHMONTH = V_OLDMONTH) THEN
  27.               DBMS_OUTPUT.PUT_LINE('表名:'||TABNAME.TABLE_NAME||' 需移除分區(qū)名稱:'||V_PARTNAME||' 分區(qū)最大值:'||V_OLDMONTH);
  28.               V_SQL1 := 'ALTER TABLE CCPS.'||TABNAME.TABLE_NAME||' MODIFY PARTITION '||V_PARTNAME||' NO INMEMORY';
  29.               DBMS_OUTPUT.PUT_LINE('SQL: '||V_SQL1);
  30.            ELSIF (V_HIGHMONTH = V_CURRMONTH) THEN
  31.               DBMS_OUTPUT.PUT_LINE('表名:'||TABNAME.TABLE_NAME||' 需緩存分區(qū)名稱:'||V_PARTNAME||' 分區(qū)最大值:'||V_HIGHMONTH);
  32.               V_SQL2 := 'ALTER TABLE CCPS.'||TABNAME.TABLE_NAME||' MODIFY PARTITION '||V_PARTNAME||' INMEMORY PRIORITY CRITICAL';
  33.               DBMS_OUTPUT.PUT_LINE('SQL: '||V_SQL2);
  34.            END IF;
  35.            FETCH C1 INTO V_HIGHVALUE,V_PARTNAME;
  36.       END LOOP;
  37.     CLOSE C1;
  38.     DBMS_OUTPUT.PUT_LINE(' ');
  39.     DBMS_OUTPUT.PUT_LINE('*******************************************');
  40.     END LOOP;
  41.     END;
  42.   END;
   這里只是測試打印了sql,具體到線上改成執(zhí)行就OK了
   剛接觸PLSQL,游標(biāo)什么的也剛接觸,只是自己做個(gè)簡單記錄
  代碼運(yùn)行結(jié)果示例:

SQL> exec partition_cache
表名:TABLE1   需緩存分區(qū)名稱:SYS_P1167   分區(qū)最大值:2018-07
SQL:  ALTER TABLE CCPS.TABLE1 MODIFY PARTITION SYS_P1167 INMEMORY PRIORITY CRITICAL
表名:TABLE1   需移除分區(qū)名稱:SYS_P388   分區(qū)最大值:2017-12
SQL:  ALTER TABLE CCPS.TABLE1 MODIFY PARTITION SYS_P388 NO INMEMORY
   
*******************************************
表名:TABLE2   需移除分區(qū)名稱:SYS_P588   分區(qū)最大值:2017-12
SQL:  ALTER TABLE CCPS.TABLE2 MODIFY PARTITION SYS_P588 NO INMEMORY
   
*******************************************
表名:TABLE3   需緩存分區(qū)名稱:SYS_P1168   分區(qū)最大值:2018-07
SQL:  ALTER TABLE CCPS.TABLE3 MODIFY PARTITION SYS_P1168 INMEMORY PRIORITY CRITICAL
表名:TABLE3   需移除分區(qū)名稱:SYS_P328   分區(qū)最大值:2017-12
SQL:  ALTER TABLE CCPS.TABLE3 MODIFY PARTITION SYS_P328 NO INMEMORY
   
*******************************************
表名:TABLE4   需移除分區(qū)名稱:SYS_P368   分區(qū)最大值:2017-12
SQL:  ALTER TABLE CCPS.TABLE4 MODIFY PARTITION SYS_P368 NO INMEMORY
   
*******************************************
表名:TABLE5   需緩存分區(qū)名稱:SYS_P1166   分區(qū)最大值:2018-07
SQL:  ALTER TABLE CCPS.TABLE5 MODIFY PARTITION SYS_P1166 INMEMORY PRIORITY CRITICAL
表名:TABLE5   需移除分區(qū)名稱:SYS_P428   分區(qū)最大值:2017-12
SQL:  ALTER TABLE CCPS.TABLE5 MODIFY PARTITION SYS_P428 NO INMEMORY
   
*******************************************
PL/SQL procedure successfully completed


文章名稱:oracle12c中自增分區(qū)表自動調(diào)整緩存分區(qū)的存儲過程
文章路徑:http://weahome.cn/article/pejpdj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部