精华内容
下载资源
问答
  • Automatic List Partitioning in Oracle Database 12c Release 2 (12.2) Automatic list partitioning was introduced in Oracle Database 12c Release 2 (12.2) to solve the problem of how to handle new dist

    Automatic List Partitioning in Oracle Database 12c Release 2 (12.2)

    Automatic list partitioning was introduced in Oracle Database 12c Release 2 (12.2) to solve the problem of how to handle new distinct values of the list partitioning key.

    Oracle 12cR2中的自动列表分区是为了解决列表分区键中新的不同值。

    Related articles.

    The Problem

     问题

    Your company currently deals with customers from USA, UK and Ireland and you want to partition your orders table based on the country. You achieve this as follows.

    公司正在处理来自 USA, UK 和Ireland 的客户,你希望根据国家来分区你的订单表。采用如下方式实现:

    DROP TABLE orders PURGE;
    
    CREATE TABLE orders
    (
      id            NUMBER,
      country_code  VARCHAR2(5),
      customer_id   NUMBER,
      order_date    DATE,
      order_total   NUMBER(8,2),
      CONSTRAINT orders_pk PRIMARY KEY (id)
    )
    PARTITION BY LIST (country_code)
    (
      PARTITION part_usa VALUES ('USA'),
      PARTITION part_uk_and_ireland VALUES ('GBR', 'IRL')
    );
    
    INSERT INTO orders VALUES (1, 'USA', 10, SYSDATE, 10200.93);
    INSERT INTO orders VALUES (2, 'USA', 11, SYSDATE, 948.22);
    INSERT INTO orders VALUES (3, 'GBR', 22, SYSDATE, 300.83);
    INSERT INTO orders VALUES (4, 'IRL', 43, SYSDATE, 978.43);
    COMMIT;

    Your sales team accept an order from a new customer that happens to be based in a different country. The problem is nobody told the DBAs.

     销售部门接受了一个来自不同国家新客户的一个订单,该问题无人告知DBA。

    INSERT INTO orders VALUES (5, 'BGR', 96, SYSDATE, 2178.43);
                *
    ERROR at line 1:
    ORA-14400: inserted partition key does not map to any partition
    
    
    SQL>

    Automatic List Partitioning

    自动列表分区

    Automatic list partitioning creates a partition for any new distinct value of the list partitioning key. We can enable automatic list partitioning on the existing table using the ALTER TABLEcommand.

    自动列表分区会创建一个新的分区为新的分区键值。我们可以是用ALTER TABLE命令开启自动列表分区在一个已经存在的表上,如下:

    ALTER TABLE orders SET PARTITIONING AUTOMATIC;

    Alternatively we could recreate the table using the AUTOMATIC keyword.

    另外我们也可以使用AUTOMATIC关键字重建表,如下:

    DROP TABLE orders PURGE;
    
    CREATE TABLE orders
    (
      id            NUMBER,
      country_code  VARCHAR2(5),
      customer_id   NUMBER,
      order_date    DATE,
      order_total   NUMBER(8,2),
      CONSTRAINT orders_pk PRIMARY KEY (id)
    )
    PARTITION BY LIST (country_code) AUTOMATIC
    (
      PARTITION part_usa VALUES ('USA'),
      PARTITION part_uk_and_ireland VALUES ('GBR', 'IRL')
    );
    
    INSERT INTO orders VALUES (1, 'USA', 10, SYSDATE, 10200.93);
    INSERT INTO orders VALUES (2, 'USA', 11, SYSDATE, 948.22);
    INSERT INTO orders VALUES (3, 'GBR', 22, SYSDATE, 300.83);
    INSERT INTO orders VALUES (4, 'IRL', 43, SYSDATE, 978.43);
    COMMIT;

    Once automatic list partitioning is enabled we can successfully insert the new order.

    一旦自动列表分区开启,我们就可以成功插入新订单。

    INSERT INTO orders VALUES (5, 'BGR', 96, SYSDATE, 2178.43);
    
    1 row created.
    
    SQL>

    We can see a new partition has been created to hold the new order by querying the {CDB|DBA|ALL|USER}_TAB_PARTITIONS view.

    可以通过查询视图{CDB|DBA|ALL|USER}_TAB_PARTITIONS来查看自动新建的分区,如下:

    EXEC DBMS_STATS.gather_table_stats(USER, 'orders', cascade => TRUE);
    
    SET LINESIZE 100
    
    COLUMN table_name FORMAT A30
    COLUMN partition_name FORMAT A30
    COLUMN high_value FORMAT A15
    
    SELECT table_name,
           partition_name,
           high_value,
           num_rows
    FROM   user_tab_partitions
    ORDER BY 1, 2;
    
    TABLE_NAME                     PARTITION_NAME                 HIGH_VALUE        NUM_ROWS
    ------------------------------ ------------------------------ --------------- ----------
    ORDERS                         PART_UK_AND_IRELAND            'GBR', 'IRL'             2
    ORDERS                         PART_USA                       'USA'                    2
    ORDERS                         SYS_P549                       'BGR'                    1
    
    SQL>

    We can see automatic list partitioning is enabled by querying the AUTOLIST column in the {CDB|DBA|ALL|USER}_PART_TABLES view.

    可以通过查询{CDB|DBA|ALL|USER}_PART_TABLES视图的 AUTOLIST 列来确定是否开启了自动列表分区。

    COLUMN table_name FORMAT A30
    COLUMN autolist FORMAT A8
    
    SELECT table_name,
           autolist
    FROM   user_part_tables;
    
    TABLE_NAME                     AUTOLIST
    ------------------------------ --------
    ORDERS                         YES
    
    SQL>

     
    展开全文
  • oracle 创建分区表以及自动添加分区

    万次阅读 2018-08-01 16:25:51
     列表分区(list)  范围-哈希复合分区(range-hash)  范围-列表复合分区(range-list)    查看分区数 :select*from user_tab_partitions where table_name='表名'  查看分区内容:s...

    oracle提供了以下几种分区类型:
        范围分区(range)
        哈希分区(hash)
        列表分区(list)
        范围-哈希复合分区(range-hash)
        范围-列表复合分区(range-list)
        
        查看分区数  :select*from user_tab_partitions where table_name='表名'
        查看分区内容:select * from 表名 partition(分区名) ;
        
        alter table 表名 add partition 分区名 values (分区字段)
        tablespace tbs_zba_czc       --表空间
        pctfree 10                      --预留的空间大小,10%
        initrans 1                      --的是一个 block 上初始预分配给并行交易控制的空间
        maxtrans 255                  --如果initrans 不够了,自动扩展,最大这个值
        
        分区表示例:
            create table temp_fee(
            month_id             varchar2(6),
            prov_id              varchar2(3),
            total_fee            number)
            nologging
            
            partition by range (month_id)  --主分区
            
            subpartition by list (prov_id) --子分区
            (
              partition part201606 values less than ('201711')
                tablespace tbs_zba_jm
                pctfree 10
                initrans 1
                maxtrans 255
              (
                subpartition sys_subp20429 values (default) tablespace tbs_zba_jm
              )
            );
        
    一、范围分区(特别要注意的是"范围"中不包含=)

        1、单范围
            create table temp_fee(
                month_id             varchar2(6),
                prov_id              varchar2(3),
                device_number        varchar2(40))
                nologging
            partition by range (month_id)
            (
              partition part201606 values less than ('201711'),
              partition part201607 values less than ('201710'),
              partition part201608 values less than ('201709'),
              partition part201609 values less than ('201708')
            );
            
        2、多范围分区
            create table temp_fee(
                month_id             varchar2(6),
                prov_id              varchar2(3),
                device_number        varchar2(40))
                nologging
            partition by range (month_id,prov_id)
            (
              partition part201606 values less than ('201711','011'),
              partition part201607 values less than ('201710','012'),
              partition part201608 values less than ('201709','013'),
              partition part201609 values less than ('201708','014')
            );
            
        3、循环分区
        
            1)建表
                create table temp_fee(
                    month_id             varchar2(6),
                    prov_id              varchar2(3),
                    device_number        varchar2(40))
                    nologging
                partition by range (month_id)
                (
                  partition part201606 values less than ('201711')
                );
                
            2)分区拓展
                declare
                 v_table varchar2(64):='temp_fee';
                 v_month_start varchar2(8) := '201801';
                 v_month_end   varchar2(8) := '201803';
                 i     varchar2(8);
                 v_sql varchar2(5000);
                 v_nmon varchar2(8);
                begin
                        i := v_month_start;
                  while i <= v_month_end loop
                    v_nmon := to_char(add_months(to_date(i,'yyyymm'),1),'yyyymm');
                    v_sql := 'alter table '||v_table||' add partition part'||i||' values less than ('''||v_nmon||''')'; 
                    execute immediate v_sql ;
                    i := to_char(add_months(to_date(i,'yyyymm'),1),'yyyymm');
                  end loop;
                  commit;
                end;
        
    二、列表分区

        1、建表
              create table temp_qw(
                prov_id              varchar2(3),
                d_number             varchar2(15),
                user_id              varchar2(15))
                nologging
              partition by list (prov_id)
              (
                partition part09 values ('009')       
              );
              
        2、分区拓展
            declare
             v_table varchar2(64):='temp_qw';
             v_sql varchar2(5000);
            begin
                for j in (select prov_id from prov order by prov_id) loop
                  v_sql := 'alter table '||v_table||' add partition part'||j.prov_id||' values ('''||j.prov_id||''')'; 
                  execute immediate v_sql ;
                end loop;
              commit;
            end;
        
        需要注意的问题:
            一但列表分区后,如果插入了未分区的字段会报错,为了防止出现这种情况一般我们在添加完分区后
            alter table temp_qw add partition part_default values (default); 
            这样做的后续问题就是,在想添加分区的时候就的把这个分区删除掉
          示例:
              create table temp_qwe(
                    prov_id              varchar2(3),
                    d_number             varchar2(15),
                    user_id              varchar2(15))
                    nologging
              partition by list (prov_id)
                  (
                    partition part11 values ('011'),
                    partition part10 values ('010'),
                    partition part09 values (default)       
                  );
              删除分区:alter table temp_qwe drop partition part09
            需要注意的是,在删除分区的时候一定要将分区内数据备份,不然删除分区的时候会将数据删除
          
    三、哈希分区
        再碰到未知怎么去分区的时候
            create table test(
                      transaction_id number primary key,
                      item_id number(8) not null)
            partition by hash(transaction_id)
            (
                partition part_01 tablespace tablespace01,
                partition part_02 tablespace tablespace02,
                partition part_03 tablespace tablespace03
            );

    四、组合分区
        在生产中我们会常常用到这样的分区
        示例:
            create table temp_lfc_zcdwk_acct
                   (month_id      varchar2(6),
                   day_id         varchar2(6),
                   prov_id        varchar2(6),
                   flag           varchar2(2) 
                   )
            partition by range (month_id, prov_id)
            subpartition by list (day_id)
            (
              partition part201801_049 values less than ('201801', '050')
                
              (
                subpartition part201801_049_subpart_01 values ('01')  ,
                subpartition part201801_049_subpart_02 values ('02')  ,
                subpartition part201801_049_subpart_03 values ('03')  ,
                subpartition part201801_049_subpart_04 values ('04')  ,
                subpartition part201801_049_subpart_05 values ('05')  ,
                subpartition part201801_049_subpart_06 values ('06')  ,
                subpartition part201801_049_subpart_07 values ('07')  ,
                subpartition part201801_049_subpart_08 values ('08')  ,
                subpartition part201801_049_subpart_09 values ('09')  ,
                subpartition part201801_049_subpart_10 values ('10')  ,
                subpartition part201801_049_subpart_11 values ('11')  ,
                subpartition part201801_049_subpart_12 values ('12')  ,
                subpartition part201801_049_subpart_13 values ('13')  ,
                subpartition part201801_049_subpart_14 values ('14')  ,
                subpartition part201801_049_subpart_15 values ('15')  ,
                subpartition part201801_049_subpart_16 values ('16')  ,
                subpartition part201801_049_subpart_17 values ('17')  ,
                subpartition part201801_049_subpart_18 values ('18')  ,
                subpartition part201801_049_subpart_19 values ('19')  ,
                subpartition part201801_049_subpart_20 values ('20')  ,
                subpartition part201801_049_subpart_21 values ('21')  ,
                subpartition part201801_049_subpart_22 values ('22')  ,
                subpartition part201801_049_subpart_23 values ('23')  ,
                subpartition part201801_049_subpart_24 values ('24')  ,
                subpartition part201801_049_subpart_25 values ('25')  ,
                subpartition part201801_049_subpart_26 values ('26')  ,
                subpartition part201801_049_subpart_27 values ('27')  ,
                subpartition part201801_049_subpart_28 values ('28')  ,
                subpartition part201801_049_subpart_29 values ('29')  ,
                subpartition part201801_049_subpart_30 values ('30')  ,
                subpartition part201801_049_subpart_31 values ('31')  
              ),    
                partition part201801_050 values less than ('201801', '051')
                
              (
                subpartition part201801_050_subpart_01 values ('01')  ,
                subpartition part201801_050_subpart_02 values ('02')  ,
                subpartition part201801_050_subpart_03 values ('03')  ,
                subpartition part201801_050_subpart_04 values ('04')  ,
                subpartition part201801_050_subpart_05 values ('05')  ,
                subpartition part201801_050_subpart_06 values ('06')  ,
                subpartition part201801_050_subpart_07 values ('07')  ,
                subpartition part201801_050_subpart_08 values ('08')  ,
                subpartition part201801_050_subpart_09 values ('09')  ,
                subpartition part201801_050_subpart_10 values ('10')  ,
                subpartition part201801_050_subpart_11 values ('11')  ,
                subpartition part201801_050_subpart_12 values ('12')  ,
                subpartition part201801_050_subpart_13 values ('13')  ,
                subpartition part201801_050_subpart_14 values ('14')  ,
                subpartition part201801_050_subpart_15 values ('15')  ,
                subpartition part201801_050_subpart_16 values ('16')  ,
                subpartition part201801_050_subpart_17 values ('17')  ,
                subpartition part201801_050_subpart_18 values ('18')  ,
                subpartition part201801_050_subpart_19 values ('19')  ,
                subpartition part201801_050_subpart_20 values ('20')  ,
                subpartition part201801_050_subpart_21 values ('21')  ,
                subpartition part201801_050_subpart_22 values ('22')  ,
                subpartition part201801_050_subpart_23 values ('23')  ,
                subpartition part201801_050_subpart_24 values ('24')  ,
                subpartition part201801_050_subpart_25 values ('25')  ,
                subpartition part201801_050_subpart_26 values ('26')  ,
                subpartition part201801_050_subpart_27 values ('27')  ,
                subpartition part201801_050_subpart_28 values ('28')  ,
                subpartition part201801_050_subpart_29 values ('29')  ,
                subpartition part201801_050_subpart_30 values ('30')  ,
                subpartition part201801_050_subpart_31 values ('31')  
                ));                 

    双分区
        1、建表        
            create table temp_ee(
                month_id             varchar2(6),
                prov_id              varchar2(3),
                device_number        varchar2(40))
                nologging

            partition by range (month_id)
            subpartition by list (prov_id)
            (
              partition part201606 values less than ('201711')
              (
                subpartition sys_default values (default)
              )
            );

        2、分区拓展
            declare
             v_table varchar2(64):='temp_ee';
             v_month_start varchar2(8) := '201711';
             v_month_end   varchar2(8) := '201803';
             i     varchar2(8);
             v_sql varchar2(5000);
             v_nmon varchar2(8);
            begin
              i := v_month_start;
              while i <= v_month_end loop
                v_nmon := to_char(add_months(to_date(i,'yyyymm'),1),'yyyymm');
                v_sql := 'alter table '||v_table||' add partition part'||i||' values less than ('''||v_nmon||''')
                (
                  ';
                for j in (select prov_id from prov order by prov_id) loop
                  v_sql := v_sql || '  subpartition part'||i||'_subpart'||j.prov_id||' values ('''||j.prov_id||''') ,
                  ';
                end loop;
                v_sql := v_sql || '  subpartition part'||i||'_subpartdefault values (default) ) ';
                execute immediate v_sql ;
                i := to_char(add_months(to_date(i,'yyyymm'),1),'yyyymm');
              end loop;
              commit;
            end;

     

     

     

     

     

     

     

     

    展开全文
  • Oracle Database 12.2 之前,如果使用列表分区,当插入的数据超过了分区列表值设定,则会抛出异常;而如果存在大量的列表值需要定义,则可能需要一一设置。 在12.2引入的新特性中 - Auto-List Partitioning 可以...

    查看分区数据:

    select * from test partition(p1)
    

    在Oracle Database 12.2 之前,如果使用列表分区,当插入的数据超过了分区列表值设定,则会抛出异常;而如果存在大量的列表值需要定义,则可能需要一一设置。

    在12.2引入的新特性中 - Auto-List Partitioning 可以针对新的列表值,进行自动的分区创建,从而减少了维护的复杂性。

    通过以下测试来简单验证一下这个特性的表征,如果是常规的列表分区,在分区缺失时会遇到ORA-14400错误:

    SQL> CREATE TABLE enmotech (
      2    PartID	     integer	     not null,
      3    CretTm	     date	     not null,
      4    PartCD	     varchar2(2)     not null
      5  ) partition by list (partcd) (
      6    partition pBJ values ('BJ'),
      7    partition pCD values ('CD'),
      8    partition pGZ values ('GZ'),
      9    partition pSH values ('SH')
     10  );
    
    Table created.
    
    SQL> insert into enmotech values (1, sysdate, 'KM');
    insert into enmotech values (1, sysdate, 'KM')
                *
    ERROR at line 1:
    ORA-14400: inserted partition key does not map to any partition
    

    当设置了automatic关键字之后,分区变更为自动管理:

    drop table enmotech purge;
    
    CREATE TABLE enmotech (
      PartID	integer		not null,
      CretTm	date		not null,
      PartCD	varchar2(2)	not null
    ) partition by list (partcd) automatic (
      partition pBJ values ('BJ'),
      partition pCD values ('CD'),
      partition pGZ values ('GZ'),
      partition pSH values ('SH')
    );
    

    当插入一条未定义的分区数据时,新的分区被自动创建:

    SQL> insert into enmotech values (1, sysdate, 'KM');
    
    1 row created.
    
    SQL> select partition_name from   user_tab_partitions
      2  where  table_name = 'ENMOTECH';
    
    PARTITION_NAME
    ----------------------------------------------------
    PBJ
    PCD
    PGZ
    PSH
    SYS_P290
    

    如果这个自动分片的分区名不符合你的命名规则,可以通过DDL语句去修改变更:

    SQL> alter table enmotech rename partition SYS_P290 to pKM;
    
    Table altered.
    
    SQL> select partition_name from   user_tab_partitions
      2  where  table_name = 'ENMOTECH';
    
    PARTITION_NAME
    ---------------------------------------------------
    PBJ
    PCD
    PGZ
    PKM
    PSH
    

    对于已有的分区定义,可以通过关键字 automatic 和 manual 来进行分区定义的调整:

    alter table PEOPLE set partitioning automatic;
    
    alter table PEOPLE set partitioning manual;
    

    1.显示Oracle数据库所有分区表的信息:
    select * from DBA_PART_TABLES;

    2.显示表分区信息/显示Oracle数据库所有分区表的详细分区信息:
    select * from DBA_TAB_PARTITIONS

    3.显示子分区信息/显示Oracle数据库所有组合分区表的子分区信息:
    select * from DBA_TAB_SUBPARTITIONS

    4.显示分区列/显示Oracle数据库所有分区表的分区列信息:
    select * from DBA_PART_KEY_COLUMNS

    5.显示子分区列/显示Oracle数据库所有分区表的子分区列信息:
    select * from DBA_SUBPART_KEY_COLUMNS

    6.显示Oracle数据库所有分区表索引的信息:
    SELECT * FROM dba_part_indexes;

    展开全文
  • Oracle自动创建表分区

    千次阅读 2020-01-07 11:56:24
    Oracle的分区表大家应该都不陌生,分区表有范围分区,列表分区,HASH分区及组合分区4种。其中,范围分区应用的最为广泛,列表次之。 范围分区有几个关键字,一个是partition by range,表示分区为范围分区;values ...

    Oracle的分区表大家应该都不陌生,分区表有范围分区,列表分区,HASH分区及组合分区4种。其中,范围分区应用的最为广泛,列表次之。

    范围分区有几个关键字,一个是partition by range,表示分区为范围分区;values less than 是范围分区的特定语法,指明具体的范围。
    
    在生产应用中,我们经常会根据年份或者月份去创建范围分区。目前有个客户,他们需要根据月份做一个范围分区表,但是现在他们要每到月底,需要手动去创建一个分区。有时候因为遗忘可能导致新的数据进来没有对应的分区而报错。因此希望通过一个自动脚本,定时自动创建这个分区。
    
    大致思路:创建一个存储过程,这个存储过程根据日期,对字符串进行操作,生成对应的分区表名,然后创建一个作业,到月底最后一天的晚上10点执行。
    
    首先,分区表的创建语句如下:
    

    create table PAR_TEST
    (
    LOANTYPE VARCHAR2(8),
    REFNO VARCHAR2(25),
    CUSTCOD VARCHAR2(12),
    BRANCH VARCHAR2(6),
    FLSTSCD VARCHAR2(16),
    LNCCY VARCHAR2(3),
    VSPREAD NUMBER,
    DFTYPE VARCHAR2(4000),
    A23ACIT VARCHAR2(13),
    MAP_GL VARCHAR2(13),
    TSDATE DATE,
    CCY_TYPE CHAR(1)
    )
    partition by range (TSDATE)
    (
    partition DPT1 values less than (TO_DATE(’ 2015-07-31 00:00:00’, ‘SYYYY-MM-DD HH24:MI:SS’, ‘NLS_CALENDAR=GREGORIAN’))
    tablespace CRMDATA
    pctfree 10
    initrans 1
    maxtrans 255,
    partition DPT2 values less than (TO_DATE(’ 2015-08-31 00:00:00’, ‘SYYYY-MM-DD HH24:MI:SS’, ‘NLS_CALENDAR=GREGORIAN’))
    tablespace CRMDATA
    pctfree 10
    initrans 1
    maxtrans 255,
    partition DPT3 values less than (TO_DATE(’ 2015-09-30 00:00:00’, ‘SYYYY-MM-DD HH24:MI:SS’, ‘NLS_CALENDAR=GREGORIAN’))
    tablespace CRMDATA
    pctfree 10
    initrans 1
    maxtrans 255
    );
    根据我们对分区表的了解,多加一个分区的语句如下:

    alter table PAR_TEST add partition DPTxx values less than (to_date(‘2017-01-31 00:00:00’,‘SYYYY-MM-DD HH24:MI:SS’,‘NLS_CALENDAR=GREGORIAN’))
    tablespace CRMDATA pctfree 10 initrans 1 maxtrans 255;
    所以根据创建分区的语句,编写如下自动创建的存储过程:

    create or replace procedure add_newpartitions
    as
    cursor c_parts is
    select max(partition_name) as part_name from user_tab_partitions where table_name=‘PAR_TEST’ group by table_name; --捕捉表最大分区的分区表名

    v_pname varchar2(32);
    v_sql varchar2(3999);
    v_npart varchar2(32);
    v_newp date;

    begin
    for i in c_parts loop
    v_pname := i.part_name; --将刚才捕捉到的表名赋值给该变量

    dbms_output.put_line(‘v_pname:’); --代码调试打印,需要打开set serveroutput on才能看到结果
    dbms_output.put_line(v_pname);

    v_npart := substr(v_pname,instr(v_pname,‘T’)+1); --用字母T截取表名,获得DPTxx的T后面的数字xx

    v_newp := last_day(last_day(sysdate)+1); --取到下个月的最后一天
    dbms_output.put_line(v_newp);

    v_pname := substr(v_pname,1,instr(v_pname,‘T’))||to_char(to_number(v_npart)+1); --字符串拼接,拼接出将要创建的分区表的表名
    dbms_output.put_line(‘v_pname:’);
    dbms_output.put_line(v_pname);

    v_sql := ‘alter table DW_DPDAILY add partition ‘||v_pname||’ values less than (’||‘to_date(’’’||to_char(v_newp,‘yyyy-mm-dd’)||’ 00:00:00’’,’’’||‘SYYYY-MM-DD HH24:MI:SS’||’’’,’‘NLS_CALENDAR=GREGORIAN’’)’||’)’||’ tablespace CRMDATA pctfree 10 initrans 1 maxtrans 255’;

    dbms_output.put_line(v_sql);
    execute immediate v_sql;
    end loop;
    end;
    有了这个存储过程,需要定期执行,因此就需要创建一个JOB,让这个存储过程定期被调用执行,具体如下:

    DECLARE
    v_job number;
    begin
    dbms_job.submit(
    job => v_job,
    what => ‘add_newpartitions;’,
    next_date => trunc(last_day(SYSDATE))+22/24, --每月最后一天的晚上10点执行
    interval => ‘trunc(last_day(add_months(SYSDATE,1)))+22/24’); --下个月的最后一天晚上10点执行
    commit;
    end;
    /
    注:此脚本创建分区表的格式为DPT20,如果每个分区的命名规则不是这样,需要修改字符串拼接那部分。

    转自 http://www.learnfuture.com/article/1706

    展开全文
  • Oracle Database 12c第2版(12.2)中引入了自动列表分区,以解决如何处理列表分区键的新的不同值的问题。下面做个实验来说明:1.创建测试分区表SQL&gt; create table orders ( id number, country_code ...
  • Oracle分区

    2017-09-04 16:36:45
    一,自动列表分区,就是自动扩展列表分区 1,非自动扩展列表分区 SQL> create table t_t1( 2 id number, 3 name_code varchar2(10), 4 GDP number, 5 constraint t1_pk primary key(id) 6 ) 7 ...
  • 这个是带有模板子分区的,模板子分区详细到月中的天。这种分区模式只要建立了分区就会自动创建子分区的。处理海量数据很有必要
  • oracle分区方式

    2020-06-30 09:03:12
    数据中有空值,Oracle机制会自动将其规划到maxvalue的分区中。 2、散列分区 根据字段的hash值进行均匀分布,尽可能地实现各分区所散列的数据相等。 散列分区即为哈希分区Oracle采用哈希码技术分区,具体分区如何由...
  • 这个『动手实践』栏目就是这样一个改进和尝试吧,一个小小的范例,几分钟的线上实践(感谢Oracle),就能帮助大家熟悉一个知识点,几个重要的命令。如此是否会有不一样的体验?试一试吧。 在Oracle Database 12.2...
  • 自动列表分区创建 在线的普通表转换分区表 支持只读分区和读写分区混合 以下介绍的三个特性同样是12.2新增的: 多列列表分区、外部表分区、维护过滤 而对于多列列表分区的支持,也是大家关注已久的特性,先看一下...
  • 将表按列分区,每增加新的列值,表就会自动新增一个分区?是用函数来写还是存储过程
  • 列表分区表;哈希分区表;组合分区表 范围分区表 创建一个按字段数据范围分区的表,分区置于指定的不同表空间中 可以先创建一些分区,然后在把表和分区结合,也可以直接在创建表的时候结合分区名(分区会...
  • oracle分区

    2012-02-02 19:19:56
    1.分区方法 范围、哈希、列表(枚举)及组合 哈希分区数量最好为2的幂,否则会数据不...本地索引oracle自动维护  本地前缀索引的索引字段和表的分区字段一致(对于组合索引待确定),所以表分区的数据和对应的索
  • Oracle 12.2已经发布一段时间,公网上也可以下载试用。针对12.2,partitioning(分区)也有了不少增强。...Oracle 12c Release 2中引入的新分区功能之一是自动列表分区功能,使分区表更易于管...
  • 详解oracle 10g的分区

    2012-02-03 11:57:18
    包括表分区方法、索引分区方法。...列表分区(list partitioning); 范围-哈希组合分区(composite range-hash partitioning); 范围-列表组合分区(composite range-list partitioning); 11g中自动增加新分区。
  • interval分区,和范围分区类似,不过是自动按照范围分配。oracle中原有的几个分区:hash分区、范围分区、列表分区和混合分区。今天碰到一个问题:Hi Ming, As discussed with y...
  • oracle&&linux技能点记录

    2017-09-05 18:15:33
    oracle分区分为范围分区,列表分区以及hash分区,范围分区给定范围即可,列表分区需要列举出所有分区名称,hash分区则是对于不知道如何分区的表,给出分区数量就可以,oracle自动把表平均分在不同的分区
  • 分区方式可以分为:范围分区、列表分区、哈希分区(散列分区)、组合分区 11g版本加入了可以自动分区的功能 最常用的就是范围分区,下边是根据时间自动来分区的实例 创建分区表 在创建表的后边加上下边的sql -- ...
  • 10.4 列表分区 10.5 复合分区 10.6 Oracle11g的引用分区 10.7 Oracle11g的间隔 10.8 Oracle11g的基于虚拟列的分区 10.9 Oracle11g的系统分区 10.10 分区的维护操作 第11部分 同义词 11.1 ...
  •  本书是经典名著《oracle 10g数据库管理艺术》一书的姊妹篇,通过示例全面而又详细地讲述了oracle 11g的新特性,讲述了更改管理、数据库自动化、性能管理、故障诊断、存储管理、安全管理、性能管理、应用开发、数据...
  •  本书针对大多数日常的oracle database 11g数据库管理任务,全面覆盖dba行业知识,并将理论与实践相结合,旨在为初中级dba提供高效运行数据库所需的方方面面的知识,帮助他们从oracle公司发行的大量资料中找到自己...
  • 基于成本的Oracle优化法则

    热门讨论 2012-08-01 13:27:48
    明明已经明确选择了索引列,排序也正常,也做了统计,空列也已经选出米了,但优化器就是没有自动使用索引。到底是什么地方出了问题? 如果本应该以最优的执行方式,而且也花费了非常多的时间想要优化器能够按照自己...
  • Oracle编程艺术

    热门讨论 2010-07-19 11:51:57
    第 1章 开发成功的Oracle应用程序...................................................... 61 1.1 我的方法................................................................................ 63 3 / 976 1.2 ...
  • 3. 运行该批处理程序将自动完成oracle卸载工作,最后手动删除\app文件夹(可能需要重启才能删除) 4. 运行regedit命令,打开注册表窗口。删除注册表中与Oracle相关的内容,具体如下:  删除HKEY_LOCAL_MACHINE/...
  • 有近20年使用Oracle技术产品以及Oracle数据库管理员/Oracle数据库应用管理员的经验,是真正应用集群、性能调优以及数据库内部属性方面的专家。同时是一位演讲家及Oracle ACE。  JARED STILL 从1994年就开始使用...
  • 有近20年使用Oracle技术产品以及Oracle数据库管理员/Oracle数据库应用管理员的经验,是真正应用集群、性能调优以及数据库内部属性方面的专家。同时是一位演讲家及Oracle ACE。  JARED STILL 从1994年就开始使用...
  • oracle 常用语句 --逻辑备份 --导出ORACLE参数 参数 说明 USERID 确定执行导出实用程序的用户名和口令 BUFFER 确定导出数据时所使用的缓冲区大小,其大小用字节表示 FILE 指定导出的二进制文件名称,默认的扩展名是....
  • [Oracle.11g权威指南(第2版)].谷长勇.扫描版.pdf

    千次下载 热门讨论 2013-06-23 21:16:09
    14.2.3 列表分区(List) 328 14.2.4 组合分区 328 14.2.5 Interval分区 329 14.2.6 外键分区 330 14.2.7 虚拟列分区 331 14.3 表的分区策略 332 14.4 管理表分区 332 14.4.1 表分区管理的操作列表 332 14.4.2 表分区...
  • Oracle专家高级编程--详细书签版

    热门讨论 2012-08-21 11:57:09
    6.2.2 自由列表 168 6.2.3 PCTFREE 和PCTUSED 170 6.2.4 INITIAL, NEXT和PCTINCREASE 176 6.2.5 MINEXTENTS 和 MAXEXTENTS 177 6.2.6 LOGGING 和 NOLOGGING 177 6.2.7 INITRANS 和MAXTRANS 177 6.3 堆组织表 ...

空空如也

空空如也

1 2 3 4 5 6
收藏数 104
精华内容 41
关键字:

oracle列表分区自动分区