ALTER TABLEを使用してFAST SPLITパーティションを実行するには?(ドキュメントID 1268714.1)

に適用されます:

Oracleデータベース-エンタープライズ・エディション-バージョン10.2.0.3以降
のOracle Databaseのクラウドスキーマサービス-バージョンN / A以降
のOracle DatabaseのExadataエクスプレスクラウドサービス-バージョンN / A以降
のOracle DatabaseのExadataクラウドマシン-バージョンN / A以降
のOracleクラウドインフラストラクチャ-データベース・サービス-バージョンN / A以降
このドキュメントの情報は、任意のプラットフォームに適用されます。

ゴール

記事:[ID 378138.1]の状態   : 記事:[ID 378138.1]は指摘しました:

ドキュメントによると:   文書によると、

「高速スプリット・パーティショニングは、すべての行で分割されたパーティションの結果は、単一のパーティションに移動されているような状況を利用しています。すべての行が単一のパーティションにマップする場合、セグメントは、古いパーティションの属性とセグメントはパーティションの属性場合すべての行が一致継承し、データベースは単に古いセグメントを再利用し、他のパーティションの空のセグメントを追加します。これのもう一つの利点は、グローバル索引が無効である必要はありませんと、特定の場合には、ローカル索引パーティションは、対応するということです新しいパーティションにも使用可能です。」

クイックスプリットパーティション次のような状況を使用して:スプリットのパーティションはすべての行を単一のパーティションにマップされている場合は、すべての行は、単一のパーティションを移動させ、古いパーティション・セグメントを継承し、すべての一致する行の内容のパーティションのセグメント属性を属性データベース単に古いセクションを再利用して別の空のセグメントにパーティションを追加します、そうすることのもう一つの利点は、グローバル索引が無効であり、いくつかのケースでは、新しいパーティションに対応するローカル索引パーティションを使用することも可能にする必要はありません。」

このように、新しいパーティションを持っている必要があり   、元のパーティションと同じストレージ構成を。 したがって、新しいパーティションが、元のストレージ構成と同じパーティションを持つ必要があります。

この最後の文は、その理由となっている  以下の加工した例。 この最後の文は、以下の例を作業の原因です。

解決

注:画像および/または下記文書内容では、使用されるユーザ情報及びデータは、Oracleデータベース製品に付属のOracleサンプル・スキーマ(複数可)または公開文書から架空のデータを表します。実際の人物、生きているか死んへの任意の類似性は、純粋に偶然、いかなる方法によっても意図していないです。

これは、10.2.0.5および11.2でテストされています   。 それは、10.2.0.5および11.2でテストされています。

SQLPLUSへのログオン  

接続rk_mview / PWD

上で動作するようにパーティションテーブルを作成します。   パーティションテーブルに対処するために作成されました

TABLEテストをドロップします。

CREATE TABLEテスト
(GPS_GUID RAW(16)DEFAULT(SYS_GUID())ENABLE nullでない、
DVC_ID NUMBER(12,0)ENABLE nullでない、
USR_ID NUMBER(12,0)ENABLE nullでない、
ENTRY_UTC TIMESTAMP(6)DEFAULT(SYS_EXTRACT_UTC( SYSTIMESTAMP))、ENABLE NULLでない
COVERAGE_STAT_ID NUMBER(12,0)ENABLE NULLでない、
SPEEDフロート(126)DEFAULT(0)、
DIRECTION FLOAT(126)DEFAULT(0)、
ESTIMATED_ACCURACY NUMBER(12,0)、
UPDATE_UTC TIMESTAMP(6 ENABLE nullでない)DEFAULT(SYS_EXTRACT_UTC(SYSTIMESTAMP))、
LATITUDEフロート(126)、
経度FLOAT(126)、
TS_GUID RAW(16)、
CLUSTER_ID VARCHAR2(50)、
GEOCODE_UTC TIMESTAMP(6)、 
STREET NVARCHAR2(100)、
SUITE VARCHAR2(50)、
CITY NVARCHAR2 (100)、 
STATE_PROVINCE NVARCHAR2(100)、
POSTAL_CODE NVARCHAR2(20)、
COUNTRY NVARCHAR2(100)、
CONSTRAINT PK_GPS PRIMARY KEY(GPS_GUID)
USING INDEXのPCTFREE 5つのINITRANS 10 MAXTRANS 255 COMPUTE STATISTICS 
STORAGE(INITIAL 1M NEXT 1048576のMINEXTENTS 1つのMAXEXTENTS 2147483645 
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOLデフォルト)
表領域ユーザーENABLE 
)PCTFREE 30 PCTUSED 0 INITRANS 10 MAXTRANS 255 
STORAGE(BUFFER_POOLデフォルト)
表領域ユーザー
RANGE(ENTRY_UTC BY PARTITION)
(PARTITION GPS_DATA_2010_08_08未満(TIMESTAMP'2010-08-08値夜12時00'分00秒)
PCTFREE 5 PCTUSED 0 INITRANS 10 MAXTRANS 255
STORAGE(INITIAL 1M NEXT 1048576のMINEXTENTS 1つのMAXEXTENTS 2147483645 
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1つのBUFFER_POOLデフォルト)
表領域ユーザーNOCOMPRESS、
PARTITION GPS_DATA_2010_08_15未満(TIMESTAMP'2010-08-15 00:00:00' )値
PCTFREE 5 PCTUSED 0 INITRANS 10 MAXTRANS 255 
STORAGE(INITIAL 1M NEXT 1048576のMINEXTENTS 1つのMAXEXTENTS 2147483645 
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOLデフォルト)
表領域ユーザーNOCOMPRESS、
PARTITION GPS_DATA_MAX未満(MAXVALUE)値
PCTFREE 5 PCTUSED 0 INITRANS 10 MAXTRANS 255 
STORAGE(INITIAL 1M NEXT 1048576のMINEXTENTSを1 MAXEXTENTS 2147483645 
PCTINCREASE 0 FREELISTS 1つのFREELISTグループ1つのBUFFER_POOLのDEFAULT)
TABLESPACEユーザーNOCOMPRESS)ROW MOVEMENTをENABLE; 

試験値への挿入( '2'、2,2、TIMESTAMP'2010-11-14 00:00:00' 、1,1,1,1、TIMESTAMP'2010-11-14 00:00:00' 、1 、1、 '1'、 '1'、TIMESTAMP'2010-11-14 00:00:00' 、 '1'、 '1'、 '1'、 '1'、 '1'、 '1')。
コミット; 

BEGIN 
DBMS_STATS.GATHER_TABLE_STATS( 'スキーマ名'、
'テスト' 
て、partnameを=> 'GPS_DATA_MAX'、
粒度=> 'PARTITION'、
ESTIMATE_PERCENT => 3、
DEGREE => 2)。
終わり; 
/

 

上記の状況では、挿入された行が欠落によりパーティションに、MAXのパーティションに追加されていることがわかります。そこで私たちは、このMAXパーティションの直前のパーティションを追加する必要がありますMAXパーティションの使用を避けるために、さらにパーティションを提供します。私たちは、SPLIT PARTITIONの構文を使用することができますし、すべてのデータが一つだけのパーティションで終わる場合、これは実際にFAST SPLITを実行します。

このような状況では、我々は、パーティションの欠如を見ることができ、挿入行がMAXのパーティションに追加されました。したがって、MAXパーティションの使用を避けるために、複数のパーティションを提供するために、我々はすぐにこのパーティションMAXの前にパーティションを追加する必要があります。私たちは、SPLIT PARTITIONの構文を使用し、可能なすべてのデータが最終的に実際にFASTのSPLITを実行する唯一のパーティションを、配置されている場合。

統計でMAXパーティションにNUM_ROWSでレビューを収集しての最適化にFAST SPLITを確認しに発生します。
- MAXパーティションの収集統計情報NUM_ROWSを参照し、FAST SPLITの最適化を確実にするために。
BEGIN 
DBMS_STATS.GATHER_TABLE_STATS( 'スキーマ名'、
'テスト' 
て、partname => 'GPS_DATA_MAX'、
粒状&=> 'PARTITION'、
ESTIMATE_PERCENT => 3、。
度=> 2); 
END; 
/

 

 
選択クエリは分割が発生したことを検証するために利用:
-选择用于验证拆分的查询:
PARTITION_NAME = 'GPS_DATA_MAX' DBA_EXTENTSからFILE_ID、EXTENT_ID、BLOCK_IDを選択します。
TABLE_NAME、PARTITION_NAME、table_nameは'TEST'を= DBA_TAB_PARTITIONSからNUM_ROWSを選択します。

さて、実際の分割を実行するには:   今、実際の分割を実行します
。..通常、この注2ウィルにより、データパーティションおよびFAST SPLIT Aの追加パーティションとのデータのAに残すことで、この新しい新しいのパーティション境界でONに基づいて、それぞれに[移動を作成しますパーティションのデータフィット。注意してください。一般的に、これはその後、各パーティションにデータを移動するに基づいてパーティション境界を2つのパーティションを作成します。FAST SPLITの場合、これは新しいパーティションを追加し、データがパーティションのデータに保持しました。

ALTER TABLEテストSPLITのPARTITION 
GPS_DATA_MAX AT((TIMESTAMP'2010-11-28 00:00:00 +0:00' ))
INTO(パーティションGPS_DATA_2010_11_28 
ロギング
NOCOMPRESS 
表領域ユーザー
PCTFREE 5 
INITRANS 10 
MAXTRANS 255 
STORAGE(
INITIAL 1M 
MINEXTENTS 1 
MAXEXTENTS UNLIMITED 
BUFFER_POOLのDEFAULT 
)、
PARTITION GPS_DATA_MAX)。

 

証明分割が発生しました:    SPLI証拠を発生します。

之前拆分: - :スプリットBEFORE 

; SEGMENT_NAME = 'テスト' DBA_EXTENTSからFILE_ID、EXTENT_ID、BLOCK_ID、PARTITION_NAMEを選択 

FILE_ID EXTENT_ID BLOCK_ID PARTITION_NAME 
---------- ---------- ---------- ---------------- -------------- 
4 0 27657 GPS_DATA_2010_08_08 
4 0 27785 GPS_DATA_2010_08_15 
4 0 27913 GPS_DATA_MAXは


TABLE_NAMEを選択し、PARTITION_NAME、DBA_TAB_PARTITIONSからNUM_ROWSここTABLE_NAME = 'テスト'。

TABLE_NAME PARTITION_NAME NUM_ROWS 
------------------------------ ----------------- ------------- ---------- 
GPS GPS_DATA_2010_08_08 
GPS GPS_DATA_2010_08_15 
GPS GPS_DATA_MAX 1 


AFTERスプリット-拆分之后

FILE_ID、EXTENT_ID、BLOCK_ID、SEGMENT_NAME = 'テスト' DBA_EXTENTSからPARTITION_NAMEを選択します。

FILE_ID EXTENT_ID BLOCK_ID PARTITION_NAME 
---------- ---------- ---------- ---------------- -------------- 
4 0 27657 GPS_DATA_2010_08_08 
4 0 27785 GPS_DATA_2010_08_15 
4 0 27913 GPS_DATA_2010_11_28 
4 0 26377 GPS_DATA_MAXは

TABLE_NAMEを選択し、PARTITION_NAME、DBA_TAB_PARTITIONSからNUM_ROWSここTABLE_NAME = 'テスト'。

TABLE_NAME PARTITION_NAME NUM_ROWS 
------------------------------ ----------------- ------------- ---------- 
GPS GPS_DATA_2010_08_08 
GPS GPS_DATA_2010_08_15 
GPS GPS_DATA_MAX 0 
GPS GPS_DATA_2010_11_28 1

 

私たちは、上から見ることができるようにMAXパーティションは確かに新しいパーティションとなっており、新しいMAXが追加されたこと。だから、速いスプリットが発生しました。

私たちは、上から見ることができるように、MAXパーティションは確かに新しいパーティションになり、新しいMAXを追加しました。だから、速い分割が起こりました。

確認したFAST SPLIT構文は、   FAST SPLIT文法を確認しました

ALTER TABLEテストのSPLIT PARTITION 
GPS_DATA_MAX AT((TIMESTAMP'2010-11-20夜十二時00分00秒0:00' ))
INTO(PARTITIONのGPS_DATA_2010_11_20の
LOGGING 
NOCOMPRESSの
TABLESPACEのユーザーが
5 PCTFREE 
10 INITRANSを
MAXTRANS 255 -これは、作品1つです。ストレージ句外部PCTFREE、INITRANSおよびMAXTRANS。
STORAGE 
(INITIAL 1M NEXT 1048576のMINEXTENTS 1つのMAXEXTENTS 2147483645 
BUFFER_POOLデフォルト)、
PARTITION GPS_DATA_MAX)。

  

おすすめ

転載: www.cnblogs.com/zylong-sys/p/12120683.html