sql >> データベース >  >> RDS >> Oracle

テーブルをパーティション分割/サブパーティション化する必要がありますか?

    次の方法で試すことができます。INTERVALを使用して、Oracleに自動パーティションを作成するように指示します。列(数値または日付)と間隔(私の例では1か月)を定義する必要があります。 Oracleは、すべての行を同じ間隔(この場合は同じ月)に同じパーティションに配置します。パーティションが存在しない場合は作成されます。

    create table log(
           id_dispositive    number,
           date    date,
           status  number,
           type    number
    )
    partition by range (date)                              
    interval (numtoyminterval(1,'MONTH'))(
       partition p0701 values less than (to_date('2007-02-01','yyyy-mm-dd'))
    );
    

    タイプ列でも同じことができます。詳細情報: http://www.oracle.com/ technetwork / articles / sql / 11g-partitioning-084209.html

    すべてのパーティションは、TEMPLATEキーを使用してサブパーティション化できます。

    create table log(
           id_dispositive    number,
           date    date,
           status  number,
           type    number
    )
    partition by range (date) interval (numtoyminterval(1,'MONTH'))
    subpartition by list (type)  
    subpartition TEMPLATE (
        SUBPARTITION types1 VALUES (1, 2) TABLESPACE tbs_1,
        SUBPARTITION types2 VALUES (3, 4) TABLESPACE tbs_1
    )                          
    (
       partition p0701 values less than (to_date('2007-02-01','yyyy-mm-dd'))
    );
    

    この場合、自動サブパーティションを作成することはできません。新しいタイプが追加される場合は、テーブル変更ステートメントを実行する必要があります。ここでより多くの情報; https://docs.oracle.com/cd /B28359_01/server.111/b32024/part_admin.htm#i1006655

    あなたの例では:

    create table prova_log(
           id_dispositive    number,
           type       number,
           date_verification    date,
           status  number
    )
    partition by range (date_verification) interval (numtoyminterval(1,'MONTH'))
    subpartition by list (type)  
    subpartition TEMPLATE (
        SUBPARTITION type1 VALUES (1),
        SUBPARTITION type2 VALUES (2),
        SUBPARTITION type3 VALUES (3),
        SUBPARTITION type4 VALUES (4)
    )                          
    (
       partition p0816 values less than (to_date('01/09/2016','dd/mm/yyyy'))
    );
    

    挿入しようとした場合:

    insert into prova_log values (1,1,TO_DATE('10/10/2016','dd/mm/yyyy'),1);
    

    テーブルに2つのパーティションが表示されます。

    今、私はそれをテストしました!




    1. RMANバックアップコマンド

    2. php5.2.6のmysqli_stmt_get_result代替

    3. 配列を使用して複数の行を更新する

    4. textまたはntextデータ型のREPLACEの代替