2017-08-01 8 views
1

私はデータベースに非常に新しいです。私はoracleの既存の大きなデータベーステーブルのシステムパーティションを実行したいと思います。誰かが提案することができます 私はOracleデータベースの既存のテーブルのシステムパーティションをどのように達成できますか?Oracle 11gでシステムパーティションを作成するには?

注記範囲またはハッシュまたはコンポジットパーティションを探していないシステムパーティションのみを検索しています。

+0

「システムパーティション」とは何ですか? –

+0

これは、アプリケーション・ロジックがパーティション構造を制御するデータ・パーティション化のOracle Databaseの方法です。 –

+0

[this](https://docs.oracle.com/cd/E11882_01/server.112/e25523/partition.htm#BABFCBHC)および[this](https://docs.oracle.com/cd/E11882_01)を参照してください。 /server.112/e41084/statements_7002.htm#BABJBDCC)...実際にOPがここでやりたいことを説明するのに役立つかどうかはわかりません。 –

答えて

6

私が知る限り、既存のテーブルを分割することはできません。あなたはそれを再作成する必要があります。 このシナリオではdbms_redefinitionというOracleパッケージがあります(詳細はhttps://docs.oracle.com/database/121/ARPLS/d_redefi.htmを参照)。このパッケージを使用しないで、非常に簡単な例を提供します。

次の非パーティションテーブルを持っている想像:

create table T_TABLE 
(
    pkey   NUMBER not null, 
    t_data  VARCHAR2(250) not null, 
    partitionkey NUMBER not null 
); 

あなたがそのテーブルを分割したい場合は、最初のステップは、表の名前を変更するには、次のようになります。

alter table t_table rename to old_table; 

次に、作成新しいテーブル

create table T_TABLE 
(
    pkey   NUMBER not null, 
    t_data  VARCHAR2(250) not null, 
    partitionkey NUMBER not null 
) 
partition by system 
(
    partition p1 tablespace users, 
    partition p2 tablespace users, 
    partition p3 tablespace users 
);  

これで、古いテーブルのテーブル行を新しいテーブル。アプリケーション/ sqlは、挿入するパーティションをサーバーに伝える必要があります。このような例 、:

insert into t_table partition (p1) select * from old_table where partitionkey = 1;  
insert into t_table partition (p2) select * from old_table where partitionkey = 2; 
insert into t_table partition (p3) select * from old_table where partitionkey = 3;   
commit; 

今すぐあなたの古いテーブルを削除することができます。

drop table old_table; 
+2

Fyi、Oracleには[12.2。でパーティション化されていないパーティショニング・テーブルが導入されました。](https://docs.oracle.com/en/cloud/paas/exadata-express-cloud/csdbf/oracle-database-12-2-new -features.html#GUID-D5D9C311-3597-4494-B8DE-CE33EE4FA546) – Boneist

+0

クール - そのヒントのおかげで。その新しい機能を使うまでには、おそらく数年かかるでしょう。 –

+0

ええ、私は同じボートにいる(私は12.2の拡張to_char/to_number/etcの機能に手を差し伸べたいと思っている)が、共有できる価値があると思った* {:-)私がそれについて読んだブログ、誰がそれについて今投稿したのか覚えていないことを除いて! – Boneist