CREATE OUTLINE
目的
ノート:
ストアド・アウトラインは非推奨になりました。ストアド・アウトラインは、下位互換性を保つために今でもサポートされています。ただし、かわりにSQL計画管理を使用することをお薦めします。SQL計画管理では、ストアド・アウトラインよりも非常に安定したSQLパフォーマンスを実現するSQL計画ベースラインが作成されます。
DBMS_SPMパッケージのMIGRATE_STORED_OUTLINEファンクションまたはEnterprise Manager Cloud Controlを使用して、既存のストアド・アウトラインをSQL計画ベースラインに移行できます。移行が完了したら、ストアド・アウトラインに移行済のマークが付けられ、削除できるようになります。DBMS_SPMパッケージのDROP_MIGRATED_STORED_OUTLINEファンクションを使用して、システム上のすべての移行済ストアド・アウトラインを削除できます。
参照: SQL計画管理の詳細は、『Oracle Database SQLチューニング・ガイド』を参照してください。DBMS_SPMパッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。
CREATE OUTLINE文を使用すると、ストアド・アウトラインを作成できます。ストアド・アウトラインは、実行計画を生成するためにオプティマイザが使用する属性集合です。最適化に影響する要因に変更があるかどうかにかかわらず、特定のSQL文が発行された場合に、実行計画の生成に影響するアウトラインの集合を使用するように、オプティマイザに指示します。これらの要因における変更を考慮するように、アウトラインを変更することもできます。
ノート:
影響を与えるSQL文には、アウトライン作成時に指定した文と一致する文字列を指定する必要があります。
関連項目:
-
実行計画の詳細は、『Oracle Database SQLチューニング・ガイド』を参照してください。
-
アウトラインの変更については、「ALTER OUTLINE」を参照してください。
-
USE_STORED_OUTLINESパラメータおよびUSE_PRIVATE_OUTLINESパラメータの詳細は、「ALTER SESSION」および「ALTER SYSTEM」を参照してください。
前提条件
パブリック・アウトラインまたはプライベート・アウトラインの作成には、CREATE ANY OUTLINEシステム権限が必要です。
ソース・アウトラインからクローン・アウトラインを作成するには、SELECT_CATALOG_ROLEロールも必要です。
個々のセッションまたはシステムに対して、ストアド・アウトラインを動的に使用可能または使用禁止にできます。
-
USE_STORED_OUTLINESパラメータを使用可能にすると、パブリック・アウトラインが使用可能になります。 -
USE_PRIVATE_OUTLINESパラメータを使用可能にすると、プライベート・ストアド・アウトラインが使用可能になります。
構文
create_outline::=
ノート:
outlineの後に指定する必須の句はありません。ただし、outlineの後には1つ以上の句を指定する必要があり、FROM句またはON句のどちらかを指定する必要があります。
セマンティクス
PUBLIC | PRIVATE
PUBLICを指定すると、PUBLICが使用するアウトラインを作成できます。これはデフォルトです。
PRIVATEを指定すると、現行のセッションのみがプライベートに使用するアウトラインを作成できます。このアウトラインのデータは、現行のスキーマに格納されます。
outline
ストアド・アウトラインに割り当てる一意の名前を指定します。名前は、「データベース・オブジェクトのネーミング規則」に指定されている要件を満たしている必要があります。outlineを指定しない場合、データベースがアウトライン名を生成します。
関連項目:
FROM source_outline句
FROM句を使用すると、既存のアウトラインのコピーによって新しいアウトラインを作成できます。デフォルトでは、パブリック領域のsource_categoryが検索されます。PRIVATEを指定すると、現行のスキーマのアウトラインが検索されます。
アウトラインのコピーの制限事項
FROM句を指定する場合、ON句は指定できません。
関連項目:
「プライベート・クローン・アウトラインの作成: 例」および「プライベート・アウトラインのパブリック領域への公開: 例」を参照してください。
FOR CATEGORY句
ストアド・アウトラインをグループ化するために使用する任意の名前を指定します。たとえば、週末に使用するアウトラインの1つのカテゴリおよび四半期末に使用する別のカテゴリを指定できます。categoryを指定しない場合、アウトラインはDEFAULTカテゴリに格納されます。
ON句
文をコンパイルする際にアウトラインが作成されるSQL文を指定します。この句は、FROM句を使用して既存のアウトラインのコピーを作成する場合のみに指定するオプションです。
指定できる文は、SELECT、DELETE、UPDATE、INSERT ... SELECTまたはCREATE TABLE ... AS SELECTのいずれかです。
ON句の制限事項:
この句には、次の制限事項があります。
-
ON句を指定する場合、FROM句は指定できません。 -
マルチテーブル
INSERT文でアウトラインを作成できません。 -
ON句内のSQL文に、リモート・オブジェクトのDML操作を含めることはできません。
ノート:
後続の文で、同じSQL文に対して追加のアウトラインを指定できますが、同じ文の各アウトラインはCATEGORY句で異なるカテゴリを指定する必要があります。
例
アウトラインの作成: 例
次の文は、ON文をコンパイルすることによってストアド・アウトラインを作成します。アウトラインはsalariesという名前で、specialカテゴリに格納されます。
CREATE OUTLINE salaries FOR CATEGORY special ON SELECT last_name, salary FROM employees;
USE_STORED_OUTLINESパラメータにspecialが設定されている場合、同じSELECT文が後でコンパイルされると、アウトラインsalariesを作成する場合と同様に実行計画が生成されます。
プライベート・クローン・アウトラインの作成: 例
次の文は、前述の例で作成したパブリック・カテゴリsalariesに基づいて、ストアド・プライベート・アウトラインmy_salariesを作成します。
CREATE OR REPLACE PRIVATE OUTLINE my_salaries FROM salaries;
プライベート・アウトラインのパブリック領域への公開: 例
次の文は、プライベート編集の後、プライベート・アウトラインをパブリック領域にコピー(公開)します。
CREATE OR REPLACE OUTLINE public_salaries FROM PRIVATE my_salaries;
