6

私は次の表を持っています

  CREATE TABLE "METRIC_VALUE_RAW" 
   (    
    "SUBELEMENT_ID" INTEGER NOT NULL , 
    "METRIC_METADATA_ID" INTEGER NOT NULL , 
    "METRIC_VALUE_INT" INTEGER, 
    "METRIC_VALUE_FLOAT" FLOAT(126), 
    "TIME_STAMP" TIMESTAMP  NOT NULL 
   ) ;
  1. SQLローダーを使用して、1時間ごとにデータがテーブルにロードされます。
  2. 毎日のデータがパーティションに入るようにパーティションを作成したい。
  3. テーブルに30日間データを保存したい。したがって、30 日を超えると、最も古いパーティションが削除されます。

パーティションをどのように設計できるかについてのアイデアを共有できますか.

4

3 に答える 3

5

これは、Oracle 11g でそれを行う方法の例であり、非常にうまく機能します。私は Oracle 10g では試していません。試すことができます。

これは、毎日のパーティションでテーブルを作成する方法です。

CREATE TABLE XXX (
    partition_date   DATE,
  ...,
  ...,
)
PARTITION BY RANGE (partition_date)
INTERVAL (NUMTODSINTERVAL(1, 'day'))
(
   PARTITION part_01 values LESS THAN (TO_DATE('2000-01-01','YYYY-MM-DD'))
)
TABLESPACE  MY_TABLESPACE
NOLOGGING;

上記のように、Oracle は 2000 年 1 月 1 日以降、個別の partition_day ごとに個別のパーティションを自動的に作成します。partition_date がこの日付よりも古いレコードは、'part_01' というパーティションに格納されます。

次のステートメントを使用して、テーブル パーティションを監視できます。

SELECT * FROM user_tab_partitions WHERE table_name = 'XXX';

その後、いくつかのパーティションを削除したい場合は、次のコマンドを使用します:

ALTER TABLE XXX DROP PARTITION AAAAAA UPDATE GLOBAL INDEXES

「AAAAAA」はパーティション名です。

それがあなたを助けることを願っています!

于 2014-09-12T13:47:19.133 に答える
2

前述したように、10g と 11g ではパーティションの自動化に大きな違いがあります。10G では、ETL プロセス中に手動でパーティションを管理する必要があります (すべての 10g DBA は、パーティションを管理するために作成したユーティリティ パッケージを持っているはずです...)。

ステップ 1 と 2 には、いくつかのオプションがあります

  1. 日次パーティションにデータを直接ロードします。
  2. データを新しいパーティションにロードし、それを毎日のパーティションにマージします。
  3. 1 時間ごとに新しいパーティションにデータをロードし、メンテナンス ウィンドウ中にすべての時間単位のパーティションを日単位のパーティションにマージします。

適切な方法は、ニーズによって異なります。新しく追加されたデータはすぐに照会されますか? どのように?数時間 (または負荷...) にわたってデータをクエリしますか? 集計を表示していますか? データに対して DML 操作を実行していますか (パーティションで DDL 操作を行うと大規模なロックが発生します)。

約3、再び-手動。古いパーティションを削除します。

11G には、上記のタスクの一部を自動化する新しいインターバル パーティション機能があります。

于 2013-08-08T06:56:46.373 に答える
0

以下は、テーブル SQL を作成してデータをパーティション化するサンプルです。

CREATE TABLE quarterly_report_status (
    report_id INT NOT NULL,
    report_status VARCHAR(20) NOT NULL,
    report_updated TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)
PARTITION BY RANGE ( UNIX_TIMESTAMP(report_updated) ) (
    PARTITION p0 VALUES LESS THAN ( UNIX_TIMESTAMP('2008-01-01 00:00:00') ),
    PARTITION p1 VALUES LESS THAN ( UNIX_TIMESTAMP('2008-01-02 00:00:00') ),
    PARTITION p2 VALUES LESS THAN ( UNIX_TIMESTAMP('2008-01-03 00:00:00') ),
    PARTITION p3 VALUES LESS THAN ( UNIX_TIMESTAMP('2008-01-04 00:00:00') ),
    PARTITION p4 VALUES LESS THAN ( UNIX_TIMESTAMP('2008-01-05 00:00:00') ),
    PARTITION p5 VALUES LESS THAN ( UNIX_TIMESTAMP('2008-01-06 00:00:00') ),
    PARTITION p6 VALUES LESS THAN ( UNIX_TIMESTAMP('2008-01-07 00:00:00') ),
    PARTITION p7 VALUES LESS THAN ( UNIX_TIMESTAMP('2008-01-08 00:00:00') ),
    PARTITION p8 VALUES LESS THAN ( UNIX_TIMESTAMP('2008-01-09 00:00:00') ),
    PARTITION p9 VALUES LESS THAN (MAXVALUE)
);

パーティションは DBa によって作成され、残りはオラクルによって処理されます。パーティションを削除する場合は、別のジョブを作成する必要があります。

于 2013-08-08T08:57:39.137 に答える