プライマリ・コンテンツに移動
Oracle® Database SQLチューニング・ガイド
12c リリース1 (12.1)
B71277-09
目次へ移動
目次
索引へ移動
索引

前
次
次へ

19 SQLチューニング・セットの管理

この章の内容は次のとおりです。

SQLチューニング・セットについて

SQLチューニング・セット(STS)は、チューニング・ツールへの入力として使用できるデータベース・オブジェクトです。

STSに含まれるのは、次のとおりです。

  • SQL文のセット

  • 関連する実行コンテキスト(ユーザー・スキーマ、アプリケーション・モジュール名およびアクション、バインド値のリストおよびカーソルのSQLのコンパイルの環境など)

  • 関連する基本実行統計(経過時間、CPUタイム、バッファ読取り、ディスク読取り、処理された行数、カーソル・フェッチ、実行数、実行完了数、オプティマイザ・コストおよびコマンドのタイプなど)

  • 各SQL文に関連する実行計画および行ソースの統計(オプション)

このデータベースは、SQLチューニング・セットをデータベース提供のスキーマに格納します。

この項の内容は次のとおりです。

注意:

STSをプラガブル・データベースとともに使用すると、データの可視性と権限の要件が一致しない場合があります。コンテナ・データベース(CDB)内での管理機能の動作をまとめた表が記載されている『Oracle Database管理者ガイド』を参照してください。

SQLチューニング・セットの目的

STSを使用すると、SQL文と関連するメタデータを単一のデータベース・オブジェクトにグループ化し、そのオブジェクトを使用してチューニングに関する目標を達成できます。具体的には、SQLチューニング・セットによって次の目標が達成されます。

  • パフォーマンス・チューニング・アドバイザへの入力の提供

    STSは、SQLチューニング・アドバイザ、SQLアクセス・アドバイザ、SQLパフォーマンス・アナライザなど、複数のデータベース・アドバイザの入力として使用できます。

  • データベース間でのSQLの転送

    SQLチューニングセットを別のデータベースにエクスポートすることで、SQLワークロードをデータベース間で転送してリモート・パフォーマンス診断およびチューニングを実行できます。本番データベースにパフォーマンスが最適でないSQL文がある場合、開発者が直接本番システム上で調査およびチューニングを実行することは望ましくありません。DBAにより、開発者が安全に分析およびチューニングできるテスト用データベースに、問題のあるSQL文を転送できます。

SQLチューニング・セットの概念

STSを作成するには、SQL文をソースからSTSにロードする必要があります。

図19-1のように、使用可能なソースには、自動ワークロード・リポジトリ(AWR)、共有SQL領域、ユーザーによって提供されたカスタマイズ済のSQL、トレース・ファイル、他のSTSなどがあります。

図19-1 SQLチューニング・セット

図19-1の説明は次にあります。
「図19-1 SQLチューニング・セット」の説明

SQLチューニング・セットでは、次の操作を実行できます。

  • アプリケーション・モジュール名とアクション、または任意の実行統計を使用して、SQL文をフィルタできます。

  • SQL文を実行統計の任意の組合せに基づいてランク付けできます。

  • アドバイザの入力として使用したり、それを異なるデータベースに転送したりできます。

関連項目:

AWRの詳細は、『Oracle Databaseパフォーマンス・チューニング・ガイド』を参照してください

SQLチューニング・セットのユーザー・インタフェース

Oracle Enterprise Manager Cloud Control (Cloud Control)またはPL/SQLパッケージを使用すると、SQLチューニング・セットを管理できます。Cloud Controlをお薦めします。

Cloud Controlでの「SQLチューニング・セット」ページへのアクセス

Cloud ControlのSQLチューニング・セット・ページは、SQLチューニング・セットに関係する多くの操作を実行できる開始ページです。

SQLチューニング・セット・ページにアクセスする手順は次のとおりです。

  1. 「Cloud Controlのデータベース・ホーム・ページへのアクセス」の説明に従って、「データベース・ホーム」ページにアクセスします。

  2. 「パフォーマンス」メニューから「SQL」を選択し、さらに「SQLチューニング・セット」を選択します。

    SQLチューニング・セット・ページは、図19-2のように表示されます。

    図19-2 SQLチューニング・セット

    図19-2の説明は次にあります。
    「図19-2 SQLチューニング・セット」の説明

関連項目:

Oracle Database 2日でパフォーマンス・チューニング・ガイド

SQLチューニング・セットへのコマンドライン・インタフェース

コマンドラインでは、DBMS_SQLTUNEパッケージを使用してSQLチューニング・セットを管理できます。所有するSQLチューニング・セットを管理するためのADMINISTER SQL TUNING SETシステム権限が必要です。または、任意のSQLチューニング・セットを管理するためのADMINISTER ANY SQL TUNING SETシステム権限が必要です。

関連項目:

DBMS_SQLTUNEの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

SQLチューニング・セットの基本タスク

DBMS_SQLTUNEは、SQLチューニング・セットの作成、使用および削除に必要なプロシージャを提供します。

次の図は、基本ワークフローを示しています。

図19-3 SQLチューニング・セットAPI

図19-3の説明は次にあります。
「図19-3 SQLチューニング・セットAPI」の説明

通常、STS操作を実行する順序は次のとおりです。

  1. 新規STSを作成します。

    このタスクについては、「SQLチューニング・セットの作成」を参照してください。

  2. そのSTSをSQL文および関連するメタデータとともにロードします。

    このタスクについては、「SQLチューニング・セットのロード」を参照してください。

  3. オプションで、STSの内容を表示します。

    このタスクについては、「SQLチューニング・セットの内容の表示」を参照してください。

  4. オプションで、STSの内容を更新または削除します。

    このタスクについては、「SQLチューニング・セットの変更」を参照してください。

  5. 入力にSTSを使用してチューニング・タスクを作成します。

  6. オプションで、他のデータベースにSTSを転送します。

    このタスクについては、「SQLチューニング・セットの転送」を参照してください。

  7. 完了時にSTSを削除します。

    このタスクについては、「SQLチューニング・セットの削除」を参照してください。

SQLチューニング・セットの作成

データベース内に空のSTSを作成するには、DBMS_SQLTUNE.CREATE_SQLSETプロシージャを実行します。プロシージャのかわりにファンクションを使用すると、データベースによってSTSの名前が生成されます。

次の表では、一部のプロシージャ・パラメータを説明します。

表19-1 DBMS_SQLTUNE.CREATE_SQLSETパラメータ

パラメータ 説明

sqlset_name

STSの名前

description

STSに関するオプションの説明

前提条件

このチュートリアルでは、SQLT_WKLD_STSという名前のSTSを作成するものとします。

STSを作成する手順は次のとおりです。

  1. 適切な権限でデータベースにSQL*Plusを接続し、DBMS_SQLTUNE.CREATE_SQLSETプロシージャを実行します。

    たとえば、次のPL/SQLプログラムを実行します。

    BEGIN
      DBMS_SQLTUNE.CREATE_SQLSET (
        sqlset_name  => 'SQLT_WKLD_STS' 
    ,   description  => 'STS to store SQL from the private SQL area' 
    );
    END;
    
  2. オプションで、STSが作成されたことを確認します。

    次の例では、現行のユーザーによって所有されているすべてのSQLチューニング・セットのステータスを問い合せます。

    COLUMN NAME FORMAT a20
    COLUMN COUNT FORMAT 99999
    COLUMN DESCRIPTION FORMAT a30
    
    SELECT NAME, STATEMENT_COUNT AS "SQLCNT", DESCRIPTION
    FROM   USER_SQLSET;
    

    出力例は次のように表示されます。

    NAME                 SQLCNT DESCRIPTION
    -------------------- ------ ------------------------------
    SQLT_WKLD_STS             2 SQL Cache

関連項目:

詳細な参照情報については、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

SQLチューニング・セットのロード

STSをSQL文とともにロードするには、DBMS_SQLTUNE.LOAD_SQLSETプロシージャを実行します。STSにデータを移入するための標準ソースは、AWR、他のSTSまたは共有SQL領域です。ワークロード・リポジトリおよびSQLチューニング・セットのどちらの場合も、事前定義済のテーブル・ファンクションにより、新しいSTSに移入する列をソースから選択できます。

表19-2に、プロシージャの一部のDBMS_SQLTUNE.LOAD_SQLSETパラメータの説明を示します。完全なリファレンス情報については、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

表19-2 DBMS_SQLTUNE.LOAD_SQLSETのパラメータ

パラメータ 説明

populate_cursor

STSの入力に使用するカーソル参照を指定します。

load_option

STSへの文のロード方法を指定します。指定可能な値は、INSERT (デフォルト)、UPDATEおよびMERGEです。

DBMS_SQLTUNE.SELECT_CURSOR_CACHEファンクションは、指定されたフィルタに従って、SQL文を共有SQL領域から収集します。このファンクションは、各データ・ソースで検出されるSQL IDまたはPLAN_HASH_VALUEの組合せごとに1つのSQLSET_ROWを戻します。

CAPTURE_CURSOR_CACHE_SQLSETファンクションを使用すると、特定の間隔で共有SQL領域を繰り返しポーリングできます。このファンクションは、SELECT_CURSOR_CACHEおよびLOAD_SQLSETプロシージャを繰り返しコールする場合よりも効率的です。また、高負荷SQL文のワークロードのみを取得するAWR、またはデータ・ソースに1回のみアクセスするLOAD_SQLSETプロシージャとは対照的に、ワークロード全体を効果的に取得します。

前提条件

このチュートリアルの前提条件は、次のとおりです。

  • SELECT_CURSOR_CACHEファンクションで提供されるフィルタは、現行のユーザーが実行するSQL文の一部として評価されます。したがって、それらのフィルタは、ユーザーのセキュリティ権限で実行され、ユーザーがアクセスできるすべての構成メンバーおよび副問合せを含んでいますが、それ以外のものは含んでいません。

  • 現行のユーザーは、共有SQL領域のビューに対する権限を持っている必要があります。

前提条件

このチュートリアルでは、SQLT_WKLD_STSという名前のSQLチューニング・セットに共有SQL領域の文をロードするものとします。

STSをロードする手順は次のとおりです。

  1. 適切な権限を持つユーザーとして、SQL*Plusをデータベースに接続します。

  2. DBMS_SQLTUNE.LOAD_SQLSETプロシージャを実行します。

    たとえば、次のPL/SQLプログラムを実行すると、shスキーマに属するすべてのカーソル・キャッシュ文をSQLチューニング・セットに移入できます。

    DECLARE
      c_sqlarea_cursor DBMS_SQLTUNE.SQLSET_CURSOR;
    BEGIN
     OPEN c_sqlarea_cursor FOR
       SELECT VALUE(p)
       FROM   TABLE( 
                DBMS_SQLTUNE.SELECT_CURSOR_CACHE(
                ' module = ''SQLT_WKLD'' AND parsing_schema_name = ''SH'' ')
              ) p;
    -- load the tuning set
      DBMS_SQLTUNE.LOAD_SQLSET (  
        sqlset_name     => 'SQLT_WKLD_STS'
    ,   populate_cursor =>  c_sqlarea_cursor 
    );
    END;
    /

SQLチューニング・セットの内容の表示

STSを作成し、データを移入したら、DBMS_SQLTUNE.SELECT_SQLSETファンクションを実行して、STSの内容を(オプションでフィルタ条件を使用して)読み取ります。

PL/SQL パイプライン・テーブル・ファンクションを使用するSELECT_SQLSETの出力を選択し、行のコレクションを入力として受け入れます。SELECT文のFROMリストで表演算子のオペランドとしてテーブル・ファンクションを起動します。

表19-3に、SELECT_SQLSETファンクションの一部のパラメータの説明を示します。完全なリファレンス情報については、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

表19-3 DBMS_SQLTUNE.SELECT_SQLSETのパラメータ

パラメータ 説明

basic_filter

SQLSET_ROWの属性に対して定義されたSTSからSQLをフィルタするためのSQL述語。

object_filter

共有SQL領域から選択されたSQLのオブジェクト・リストに含まれるオブジェクトを指定します。

表19-4に、SQLSET_ROWオブジェクトの一部の属性の説明を示します。これらの属性は、TABLE(DBMS_SQLTUNE.SELECT_SQLSET())を問い合せたときに列として表示されます。

表19-4 SQLSET_ROWの属性

パラメータ 説明

parsing_schema_name

SQLの解析が行われるスキーマ

elapsed_time

このSQL文で経過した秒数の合計

buffer_gets

このSQL文のバッファ取得回数(データベースがブロックにアクセスした回数)の合計

前提条件

このチュートリアルでは、SQLT_WKLD_STSという名前のSTSの内容を表示するものとします。

STSの内容を表示する手順は次のとおりです。

  1. 適切な権限でデータベースにSQL*Plusを接続し、TABLEファンクションを使用してSTSの内容を問い合せます。

    たとえば、次の問合せを実行します。

    COLUMN SQL_TEXT FORMAT a30   
    COLUMN SCH FORMAT a3
    COLUMN ELAPSED FORMAT 999999999
    
    SELECT SQL_ID, PARSING_SCHEMA_NAME AS "SCH", SQL_TEXT, 
           ELAPSED_TIME AS "ELAPSED", BUFFER_GETS
    FROM   TABLE( DBMS_SQLTUNE.SELECT_SQLSET( 'SQLT_WKLD_STS' ) );
    

    出力例は次のように表示されます。

    SQL_ID        SCH SQL_TEXT                          ELAPSED BUFFER_GETS
    ------------- --- ------------------------------ ---------- -----------
    79f8shn041a1f SH  select * from sales where quan    8373148       24016
                      tity_sold < 5 union select * f
                      rom sales where quantity_sold
                      > 500
     
    2cqsw036j5u7r SH  select promo_name, count(*) c     3557373         309
                      from promotions p, sales s whe
                      re s.promo_id = p.promo_id and
                       p.promo_category = 'internet'
                       group by p.promo_name order b
                      y c desc
     
    fudq5z56g642p SH  select sum(quantity_sold) from    4787891       12118
                       sales s, products p where s.p
                      rod_id = p.prod_id and s.amoun
                      t_sold > 20000 and p.prod_name
                       = 'Linen Big Shirt'
     
    bzmnj0nbvmz8t SH  select * from sales where amou     442355       15281
                      nt_sold = 4
    
  2. オプションで、ユーザー固有の条件に基づいて結果をフィルタします。

    次の例では、バッファ取得に対するディスク読取りの比率が50%以上の文を表示します。

    COLUMN SQL_TEXT FORMAT a30   
    COLUMN SCH FORMAT a3
    COLUMN BUF_GETS FORMAT 99999999
    COLUMN DISK_READS FORMAT 99999999
    COLUMN %_DISK FORMAT 9999.99
    SELECT sql_id, parsing_schema_name as "SCH", sql_text, 
           buffer_gets as "B_GETS",
           disk_reads, ROUND(disk_reads/buffer_gets*100,2) "%_DISK"
    FROM TABLE( DBMS_SQLTUNE.SELECT_SQLSET( 
                'SQLT_WKLD_STS',
                '(disk_reads/buffer_gets) >= 0.50' ) );
    

    出力例は次のように表示されます。

    SQL_ID        SCH SQL_TEXT                       B_GETS DISK_READS %_DISK
    ------------- --- ------------------------------ ------ ---------- -------
    79f8shn041a1f SH  select * from sales where quan  24016      17287  71.98
                      tity_sold < 5 union select * f
                      rom sales where quantity_sold
                      > 500
     
    fudq5z56g642p SH  select sum(quantity_sold) from  12118       6355  52.44
                       sales s, products p where s.p
                      rod_id = p.prod_id and s.amoun
                      t_sold > 20000 and p.prod_name
                       = 'Linen Big Shirt'

SQLチューニング・セットの変更

SQL文をSTSから削除するには、DBMS_SQLTUNE.DELETE_SQLSETプロシージャを使用します。

UPDATE_SQLSETプロシージャを使用すると、STS名およびSQL IDで識別される既存のSTS内のSQL文の属性(PRIORITYまたはOTHERなど)を更新できます。

前提条件

このチュートリアルでは、SQLT_WKLD_STSを次のように変更するものとします。

  • フェッチ回数が100を超えるすべてのSQL文を削除します。

  • IDがfudq5z56g642pのSQL文の優先順位を1に変更します。優先順位は、SQLチューニング・アドバイザを実行するときのランク付け基準として使用できます。

STSの内容を変更する手順は次のとおりです。

  1. 適切な権限でデータベースにSQL*Plusを接続し、オプションでTABLEファンクションを使用してSTSの内容を問い合せます。

    たとえば、次の問合せを実行します。

    SELECT SQL_ID, ELAPSED_TIME, FETCHES, EXECUTIONS
    FROM   TABLE(DBMS_SQLTUNE.SELECT_SQLSET('SQLT_WKLD_STS'));
    

    出力例は次のように表示されます。

    SQL_ID        ELAPSED_TIME    FETCHES EXECUTIONS
    ------------- ------------ ---------- ----------
    2cqsw036j5u7r      3407459          2          1
    79f8shn041a1f      9453965      61258          1
    bzmnj0nbvmz8t       401869          1          1
    fudq5z56g642p      5300264          1          1
    
  2. ユーザー固有の条件に基づいてSQL文を削除します。

    SQLSET_ROWの属性に対して定義されたSTSからSQLをフィルタするには、basic_filter述語を使用します。次の例では、フェッチ回数が100を超えるSTS内の文をすべて削除します。

    BEGIN
      DBMS_SQLTUNE.DELETE_SQLSET (
          sqlset_name  => 'SQLT_WKLD_STS'
    ,     basic_filter => 'fetches > 100'
    );
    END;
    /
    
  3. SQL文の属性値を設定します。

    次の例では、文2cqsw036j5u7rの優先順位を1に設定します。

    BEGIN
      DBMS_SQLTUNE.UPDATE_SQLSET ( 
          sqlset_name     => 'SQLT_WKLD_STS'    
    ,     sql_id          => '2cqsw036j5u7r'    
    ,     attribute_name  => 'PRIORITY'         
    ,     attribute_value =>  1
    );
    END;
    /
    
  4. オプションで、STSを問い合せて、目的の変更が加えられたことを確認します。

    たとえば、次の問合せを実行します。

    SELECT SQL_ID, ELAPSED_TIME, FETCHES, EXECUTIONS, PRIORITY
    FROM   TABLE(DBMS_SQLTUNE.SELECT_SQLSET('SQLT_WKLD_STS'));
    

    出力例は次のように表示されます。

    SQL_ID        ELAPSED_TIME    FETCHES EXECUTIONS   PRIORITY
    ------------- ------------ ---------- ---------- ----------
    2cqsw036j5u7r      3407459          2          1          1
    bzmnj0nbvmz8t       401869          1          1
    fudq5z56g642p      5300264          1          1

関連項目:

詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください

SQLチューニング・セットの転送

Oracle Database 10gリリース2 (10.2)以降で作成された任意のデータベースにSTSを転送できます。これは、SQLパフォーマンス・アナライザを使用してテスト用データベースで回帰をチューニングする場合に役立ちます。

SQLチューニング・セットの転送について

データベース間のSQLチューニング・セットの転送は、SQLチューニング・セットとステージング表間でコピーして、他のツールを使用してステージング表を宛先データベースに移行することを意味します。最も一般的なツールは、Oracle Data Pumpまたはデータベース・リンクです。

SQLチューニング・セットを転送するための基本手順

SQLチューニング・セットを転送するには、STSをエクスポートし、ダンプ・ファイルを転送した後、ダンプ・ファイルをインポートする必要があります。

次の図は、Oracle Data Pumpとftpを使用したプロセスを示しています。

図19-4 SQLチューニング・セットの転送

図19-4の説明は次にあります。
「図19-4 SQLチューニング・セットの転送」の説明

図19-4に示すとおり、次のような手順があります。

  1. 本番データベースで、DBMS_SQLTUNE.PACK_STGTAB_SQLSETを使用してSTSをステージング表にパックします。

  2. Oracle Data Pumpを使用して、STSをステージング表から.dmpファイルにエクスポートします。

  3. ftpなどの転送ツールを使用して本番ホストからテスト・ホストに.dmpファイルを転送します。

  4. テスト・データベースで、Oracle Data Pumpを使用して、STSを.dmpファイルからステージング表にインポートします。

  5. DBMS_SQLTUNE.UNPACK_STGTAB_SQLSETを使用して、STSをステージング表からアンパックします。

CON_DBID値が異なる場合のSQLチューニング・セットを転送するための基本手順

STSを転送するとき、ソース・データベースと宛先データベースのcon_dbidが異なる場合に、STS内の各SQL文のcon_dbidを再マップする必要があります。

con_dbid値が異なるのは、次の状況です。

  • 単一インスタンスのデータベースであり、そのインスタンスが再起動されている

  • Oracle RACデータベースに様々なインスタンスがある

  • PDBが異なっている

  • 非CDBとCDBが存在する

再マップする基本手順は次のとおりです。

  1. DBMS_SQLTUNE.PACK_STGTAB_SQLSETを使用してSTSをステージング表にパックします。

  2. DBMS_SQLTUNE.REMAP_STGTAB_SQLSETを使用して、ステージング表内の各con_dbidを再マップします。

  3. STSをエクスポートします。

  4. 転送先のCDBでSTSをアンパックします。

例19-1 非CDBからCDBにSTSを転送する場合のCON_DBIDの再マップ

この例では、STS_for_transportという名前のSTSを非CDBからCDBに転送します。ソース非CDB上で、DBMS_SQLTUNE.PACK_STGTAB_SQLSETプロシージャを使用して、すでにSTSをソース・ステージング表src_stg_tblにパックしています。転送先のCDBのコンテナIDは、12345です。

転送元の非CDBで、次のコマンドを実行します。

VARIABLE con_dbid_src NUMBER;

EXEC SELECT UNIQUE con_dbid INTO :con_dbid_src FROM src_stg_tbl;

BEGIN
  DBMS_SQLTUNE.REMAP_STGTAB_SQLSET (
    staging_table_name   => 'src_stg_tbl'
,   staging_schema_owner => 'dba1'
,   old_sqlset_name      => 'STS_for_transport'
,   old_con_dbid         => :con_dbid_src
,   new_con_dbid         => 12345);
END;

ステージング表のコンテンツをエクスポートして、引き続き通常の転送手順の使用できます。

関連項目:

REMAP_STGTAB_SQLSETの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください

DBMS_SQLTUNEを使用したSQLチューニング・セットの転送

SQLチューニング・セットを転送するには、DBMS_SQLTUNEパッケージの3つのサブプログラムを使用します。

次の表に、SQLチューニング・セットの転送に関連するDBMS_SQLTUNEプロシージャの説明を示します。

表19-5 SQLチューニング・セットを転送するためのDBMS_SQLTUNEプロシージャ

プロシージャ 説明

CREATE_STGTAB_SQLSET

エクスポートされたSQLチューニング・セットを保持するステージング表を作成します。

PACK_STGTAB_SQLSET

ステージング表にSQLチューニング・セットを移入します。

UNPACK_STGTAB_SQLSET

SQLチューニング・セットをステージング表からデータベースにコピーします。

前提条件

このチュートリアルでは、次のことが前提となっています。

  • 現在のリリースで作成した本番データベースに、低下したSQLを含むSTSが存在する場合。

  • Oracle Database 11gリリース2 (11.2)で作成したリモートのテスト用データベースでSQLパフォーマンス・アナライザの試行を実行する場合。

  • STSを本番データベースからテスト用データベースにコピーして、SQLパフォーマンス・アナライザの試行で回帰をチューニングする場合。

  • Oracle Database Pumpを使用して、データベース・ホスト間でSQLチューニング・セットを転送する場合。

STSを転送する手順は次のとおりです。

  1. 管理者権限で、SQL*Plusを本番データベースに接続します。

  2. CREATE_STGTAB_SQLSETプロシージャを使用して、エクスポートされたSQLチューニング・セットを保持するステージング表を作成します。

    次の例では、dba1my_11g_staging_tableを作成し、ステージング表の形式を11.2に指定します。

    BEGIN
      DBMS_SQLTUNE.CREATE_STGTAB_SQLSET ( 
        table_name  => 'my_10g_staging_table'
    ,   schema_name => 'dba1'
    ,   db_version  => DBMS_SQLTUNE.STS_STGTAB_11_2_VERSION 
    );
    END;
    /
    
  3. PACK_STGTAB_SQLSETプロシージャを使用して、ステージング表にSQLチューニング・セットを移入します。

    次の例では、dba1.my_11g_staging_tableに、hrが所有するSTS my_stsを移入します。

    BEGIN
      DBMS_SQLTUNE.PACK_STGTAB_SQLSET (      
        sqlset_name         => 'sqlt_wkld_sts'
    ,   sqlset_owner        => 'sh'
    ,   staging_table_name  => 'my_11g_staging_table'
    ,   staging_schema_owner => 'dba1'
    ,   db_version          => DBMS_SQLTUNE.STS_STGTAB_11_2_VERSION 
    );
    END;
    / 
    
  4. 必要に応じて、「CON_DBID値が異なる場合のSQLチューニング・セットを転送するための基本手順」の説明に従って、STS内の文のコンテナIDの値を再マップします。

  5. Oracle Data Pumpを使用して、ステージング表のコンテンツをエクスポートします。

    たとえば、オペレーティング・システム・プロンプトでexpdpコマンドを実行します。

    expdp dba1 DIRECTORY=dpump_dir1 DUMPFILE=sts.dmp TABLES=my_11g_staging_table
    
  6. dumpファイルをテスト・データベースのホストに転送します。

  7. 管理者としてテスト・ホストにログインし、Oracle Data Pumpを使用してステージング表の内容をインポートします。

    たとえば、オペレーティング・システム・プロンプトでimpdpコマンドを実行します。

    impdp dba1 DIRECTORY=dpump_dir1 DUMPFILE=sts.dmp TABLES=my_11g_staging_table 
    
  8. テスト・データベースで、UNPACK_STGTAB_SQLSETプロシージャを使用してステージング表からデータベースにSQLチューニング・セットをコピーします。

    次の例は、SQLチューニング・セットをアンパックする方法を示しています。

    BEGIN
      DBMS_SQLTUNE.UNPACK_STGTAB_SQLSET (
        sqlset_name        => '%'
    ,   replace            => true
    ,   staging_table_name => 'my_11g_staging_table');
    END;
    /

関連項目:

DBMS_SQLTUNE.UNPACK_STGTAB_SQLSETの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください

SQLチューニング・セットの削除

データベースからSTSを削除するには、DBMS_SQLTUNE.DROP_SQLSETプロシージャを実行します。

前提条件

削除するSTSがチューニング・タスクによって現在使用されていないことを確認します。既存のチューニング・タスクがこのSTSを使用している場合は、STSを削除する前に、そのタスクを削除します。削除しないと、データベースからORA-13757エラーが発行されます。

前提条件

このチュートリアルでは、SQLT_WKLD_STSという名前のSTSを削除するものとします。

STSを削除する手順は次のとおりです。

  1. SQL*Plusを起動し、適切な権限でデータベースにログインします。

  2. DBMS_SQLTUNE.DROP_SQLSETプロシージャを実行します。

    たとえば、次のPL/SQLプログラムを実行します。

    BEGIN
      DBMS_SQLTUNE.DROP_SQLSET( sqlset_name => 'SQLT_WKLD_STS' );
    END;
    /
    
  3. オプションで、STSが削除されたことを確認します。

    次の例では、現行のユーザーによって所有されているSQLT_WKLD_STSという名前のSQLチューニング・セットの数をカウントします(出力例も示します)。

    SELECT COUNT(*) 
    FROM   USER_SQLSET 
    WHERE  NAME = 'SQLT_WKLD_STS';
    
      COUNT(*)
    ----------
             0

関連項目:

DBMS_SQLTUNEのSTSプロシージャの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。