日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

给Oracle 11g Interval分区进行重命名

發布時間:2024/8/26 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 给Oracle 11g Interval分区进行重命名 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Oracle ?11g 眾多新特性中,我最喜歡的就是分區表增強,眾所周知很多大問題“化整為零”之后就不是個問題,分區表就是一種非常好用的“化整為零”的手段。

還是說回正題吧,使用Interval分區不難,為分區/子分區的重命名也不難,我的分區表大致定義如下:

1 CREATE?TABLE?Partition_Table
2 (
3 ??....
4 ??....
5 ??....
6 )
7 PARTITION?BY?RANGE( MSGDATE ) INTERVAL( NUMTOYMINTERVAL(1,'MONTH') )
8 SUBPARTITION?BY?LIST( DAY_V )

????? 分區和子分區的重命名語法如下:

1 alter?table?<table_name> rename partition <partition_name>?to?<new_partition_name>;
2 alter?table?<table_name> rename subpartition <subpartition_name>?to?<new_subpartition_name>;

????? 每當新數據觸發新建分區后,分區名字是系統給的,雖然不影響分區表的使用,但是看著很讓人迷茫:

1 select?
2 ??table_name ,
3 ??partition_name,
4 ??subpartition_name ,
5 ??tablespace_name
6 from?user_tab_subpartitions?
7 where?subpartition_name?like?'SYS%'?;
01 TABLE_NAME???????????????????? PARTITION_NAME? SUBPARTITION_NAME? TABLESPACE_NAME
02 ------------------------------ --------------- ------------------ ------------------------------
03 P_MYSYSLOG_IL_2010???????????? SYS_P116??????? SYS_SUBP100??????? FIREWALL16
04 P_MYSYSLOG_IL_2010???????????? SYS_P116??????? SYS_SUBP101??????? FIREWALL17
05 P_MYSYSLOG_IL_2010???????????? SYS_P116??????? SYS_SUBP102??????? FIREWALL18
06 P_MYSYSLOG_IL_2010???????????? SYS_P116??????? SYS_SUBP103??????? FIREWALL19
07 P_MYSYSLOG_IL_2010???????????? SYS_P116??????? SYS_SUBP104??????? FIREWALL20
08 P_MYSYSLOG_IL_2010???????????? SYS_P116??????? SYS_SUBP105??????? FIREWALL21
09 P_MYSYSLOG_IL_2010???????????? SYS_P116??????? SYS_SUBP106??????? FIREWALL22
10 P_MYSYSLOG_IL_2010???????????? SYS_P116??????? SYS_SUBP107??????? FIREWALL23
11 P_MYSYSLOG_IL_2010???????????? SYS_P116??????? SYS_SUBP108??????? FIREWALL24
12 P_MYSYSLOG_IL_2010???????????? SYS_P116??????? SYS_SUBP109??????? FIREWALL25
13 P_MYSYSLOG_IL_2010???????????? SYS_P116??????? SYS_SUBP110??????? FIREWALL26
14 ??
15 TABLE_NAME???????????????????? PARTITION_NAME? SUBPARTITION_NAME? TABLESPACE_NAME
16 ------------------------------ --------------- ------------------ ------------------------------
17 P_MYSYSLOG_IL_2010???????????? SYS_P116??????? SYS_SUBP111??????? FIREWALL27
18 P_MYSYSLOG_IL_2010???????????? SYS_P116??????? SYS_SUBP112??????? FIREWALL28
19 P_MYSYSLOG_IL_2010???????????? SYS_P116??????? SYS_SUBP113??????? FIREWALL29
20 P_MYSYSLOG_IL_2010???????????? SYS_P116??????? SYS_SUBP114??????? FIREWALL30
21 P_MYSYSLOG_IL_2010???????????? SYS_P116??????? SYS_SUBP115??????? FIREWALL31
22 P_MYSYSLOG_IL_2010???????????? SYS_P116??????? SYS_SUBP85???????? FIREWALL01
23 P_MYSYSLOG_IL_2010???????????? SYS_P116??????? SYS_SUBP86???????? FIREWALL02
24 P_MYSYSLOG_IL_2010???????????? SYS_P116??????? SYS_SUBP87???????? FIREWALL03
25 P_MYSYSLOG_IL_2010???????????? SYS_P116??????? SYS_SUBP88???????? FIREWALL04
26 P_MYSYSLOG_IL_2010???????????? SYS_P116??????? SYS_SUBP89???????? FIREWALL05
27 P_MYSYSLOG_IL_2010???????????? SYS_P116??????? SYS_SUBP90???????? FIREWALL06
28 ??
29 TABLE_NAME???????????????????? PARTITION_NAME? SUBPARTITION_NAME? TABLESPACE_NAME
30 ------------------------------ --------------- ------------------ ------------------------------
31 P_MYSYSLOG_IL_2010???????????? SYS_P116??????? SYS_SUBP91???????? FIREWALL07
32 P_MYSYSLOG_IL_2010???????????? SYS_P116??????? SYS_SUBP92???????? FIREWALL08
33 P_MYSYSLOG_IL_2010???????????? SYS_P116??????? SYS_SUBP93???????? FIREWALL09
34 P_MYSYSLOG_IL_2010???????????? SYS_P116??????? SYS_SUBP94???????? FIREWALL10
35 P_MYSYSLOG_IL_2010???????????? SYS_P116??????? SYS_SUBP95???????? FIREWALL11
36 P_MYSYSLOG_IL_2010???????????? SYS_P116??????? SYS_SUBP96???????? FIREWALL12
37 P_MYSYSLOG_IL_2010???????????? SYS_P116??????? SYS_SUBP97???????? FIREWALL13
38 P_MYSYSLOG_IL_2010???????????? SYS_P116??????? SYS_SUBP98???????? FIREWALL14
39 P_MYSYSLOG_IL_2010???????????? SYS_P116??????? SYS_SUBP99???????? FIREWALL15

????? 將分區/子分區的名字改成得有意義才是王道。以下是用一個過程配合游標來改分區名,重點是是從high_value字段獲得該分區的范圍描述,其他沒什么了:

01 declare?
02 ?v_sql?varchar(400);
03 ?v_table_name user_tab_partitions.table_name%type;
04 ?v_partition_name user_tab_partitions.partition_name%type;
05 ?v_high_value?varchar(200);
06 ?v_tmp_partition_name user_tab_partitions.partition_name%type;
07 ?cursor?cur?is?
08 ???select?
09 ??????table_name ,
10 ??????partition_name ,
11 ??????high_value?
12 ????from?user_tab_partitions?
13 ????where?partition_name?like?'SYS%'?;
14 begin
15 ??open?cur;
16 ??loop
17 ????fetch?cur?into?v_table_name,v_partition_name,v_high_value;
18 ????exit?when?cur%notfound;
19 ????v_tmp_partition_name := substr(v_high_value,11,10);
20 ????v_tmp_partition_name := to_char( to_date(v_tmp_partition_name,'yyyy-mm-dd')-1 ,?'yyyymm');
21 ????v_sql :=?'alter table '||v_table_name||' rename partition '
22 ??????||v_partition_name
23 ??????||' to P'||v_tmp_partition_name;
24 ????dbms_output.put_line( v_sql );
25 ????execute?immediate v_sql;
26 ??end?loop;
27 ??close?cur;
28 end;
29 /

????? 由于改分區名屬于DDL語句,對于忙碌的系統來說很容易遇到ORA-00054這個錯誤:

1 ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired

????? Oracle 11g 同時也引入了一個新特性——DDL Wait ,以前遇到這種情況要不就是找出那個該死的Transaction kill掉,要不就雇個人拼命堅持不懈地敲鍵盤跑這條DDL,直到成功執行,現在好了,這個人可以下崗了。只要設定ddl_lock_timeout這個參數就可以了,這個參數可以在實例級別和會話級別上設置,如果該值為0,遇到未提交事務時就會馬上報ORA-00054,如果設定為10,DDL語句會為這個事務最多等10秒,10秒內事務提交,DDL語句就會執行成功,否則10秒后再報ORA-00054。

總結

以上是生活随笔為你收集整理的给Oracle 11g Interval分区进行重命名的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。