頻道欄目
首頁 > 資訊 > Oracle > 正文

使用kettle交換工具自動創建oracle表分區

17-04-08        來源:[db:作者]  
收藏   我要投稿

使用kettle交換工具自動創建oracle表分區。有很多朋友都用不同的交換工具,但大多數功能還是一致的。這里我使用的kettle是我們公司自己的。

1.先在oracle數據庫里創建一個分區表實例,這里我按日分區:

create table DE_TEST(

name_tag varchar2(10),

day_tag DATE

)

PARTITION BY RANGE (day_tag)

(

PARTITION DE_TEST_20170405 VALUES LESS THAN (TO_DATE('2017-04-0600:00:00','yyyy-mm-ddhh24:mi:ss')),

PARTITION DE_TEST_20170406 VALUES LESS THAN (TO_DATE('2017-04-0700:00:00','yyyy-mm-ddhh24:mi:ss'))

)

在正式操作之前,先分析一下需求:如果我們需要自動創建表分區,就需要查詢該表的最大分區,來判斷是否需要創建新分區,日常創建分區要滿足的條件是至少建立到當天日期分區的第二天。

2.我的大體思路: 獲取最大分區-->將最大分區值日期與當天的日期做比較

比較的三種情況及結果如下:

如果相等,就表明最大分區正好建立到了當天日期,這種情況只需要提前建好明天(即當天系統日期的第二天)的日期分區如果最大分區值小于當天的日期值 ,就循環創建新分區 ,直到創建好當天系統日期的第二天日期分區為止如果最大分區值已經大于當天的日期值,就表明不需要創建新分區

3.具體步驟:

一、先建立交換:

(獲取最大分區:通過查詢最大分區 ,改寫SQL得到三個字段:比較天數,分區時間(需要新建的分區名稱),結束時間):

具體SQL如下

select

to_date(to_char(sysdate,'yyyymmdd'),'yyyymmdd')-to_date(substr(u.partition_name,9),'yyyymmdd') bjts

,'DE_TEST_'||to_char(to_date(substr(u.partition_name,9),'yyyymmdd')+1,'yyyymmdd')fqsj

,to_char(to_date(substr(u.partition_name,9),'yyyymmdd')+2,'yyyy-mm-ddhh24:mi:ss') jssj

from user_tab_partitions u

where u.table_name='DE_TEST'

orderbyPARTITION_NAMEdesc

通過以上SQL預覽數據如下:

BJTS(很重要,需理解)就是說系統當前時間-最大分區的時間所差的天數,如果=0,說明最大分區就是當天的,需要建好明天的一個分區;如果>0,就說明最大分區至少在當前系統時間的前一天乃至前N天,所以需要新建至少兩個新的分區;如果<0,就說明滿足條件,不需要新建分區

(bjts和BJTS大小寫無所謂,都一樣哈)

(設置變量):

將這三個獲得的字段 設置成環境變量供作業中調用

二、創建作業,來調度交換

(1)在作業中調度上面步驟創建的交換,然后把下一步連接到檢驗字段的值

(2)如何檢驗字段的值:

注意:調用變量,變量名需要外加 ${}

這里調用的變量就是交換中提到的bjts(比較天數,bjts只是我起的一個變量名,拼音比較容易理解),之前分析過。這里不再多加贅述。

成功條件,如果值bjts小于0,就是說不用創建新分區了,直接提示作業成功即可

如果不符合這個條件,就往下面走,去進行創建新分區步驟

(3)創建新分區

altertable DE_TEST

add partition ${fqsj}

values less than (TO_DATE(${jssj}))

注意: ${}用來調用之前的變量

如果再檢驗字段的值,還不滿足條件,就繼續循環,直到滿足條件為止,就成功

這是今天剛做的實例,純原創,當作是學習的記錄。

相關TAG標簽
上一篇:MySQL多表查詢
下一篇:kubernetes高級調度特性
相關文章
圖文推薦

關于我們 | 聯系我們 | 廣告服務 | 投資合作 | 版權申明 | 在線幫助 | 網站地圖 | 作品發布 | Vip技術培訓 | 舉報中心

版權所有: 紅黑聯盟--致力于做實用的IT技術學習網站

美女MM131爽爽爽毛片