• <ul id="mayc0"></ul>
    <ul id="mayc0"><center id="mayc0"></center></ul>
    <strike id="mayc0"><input id="mayc0"></input></strike>
    <ul id="mayc0"></ul>
  • 始創于2000年 股票代碼:831685
    咨詢熱線:0371-60135900 注冊有禮 登錄
    • 掛牌上市企業
    • 60秒人工響應
    • 99.99%連通率
    • 7*24h人工
    • 故障100倍補償
    您的位置: 網站首頁 > 幫助中心>文章內容

    給Oracle 11g Interval分區進行重命名

    發布時間:  2012/9/17 17:25:19

    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。


     


    本文出自:億恩科技【www.vbseamall.com】

    服務器租用/服務器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質保障!--億恩科技[ENKJ.COM]

  • 您可能在找
  • 億恩北京公司:
  • 經營性ICP/ISP證:京B2-20150015
  • 億恩鄭州公司:
  • 經營性ICP/ISP/IDC證:豫B1.B2-20060070
  • 億恩南昌公司:
  • 經營性ICP/ISP證:贛B2-20080012
  • 服務器/云主機 24小時售后服務電話:0371-60135900
  • 虛擬主機/智能建站 24小時售后服務電話:0371-60135900
  • 專注服務器托管17年
    掃掃關注-微信公眾號
    0371-60135900
    Copyright© 1999-2019 ENKJ All Rights Reserved 億恩科技 版權所有  地址:鄭州市高新區翠竹街1號總部企業基地億恩大廈  法律顧問:河南亞太人律師事務所郝建鋒、杜慧月律師   京公網安備41019702002023號
      0
     
     
     
     

    0371-60135900
    7*24小時客服服務熱線