

# Oracle SQLT
<a name="Oracle.Options.SQLT"></a>

Amazon RDS は、SQLT オプションの使用を通じて SQLTPLAIN (SQLT) をサポートします。SQLT は Oracle Database 19c 以降の任意のエディションで使用できます。

Oracle `EXPLAIN PLAN` ステートメントでは、SQL ステートメントの実行計画を決定できます。Oracle オプティマイザが、ネステッドループされたループ結合などの特定の実行計画を選択しているかどうかを検証できます。また、ハッシュ結合を介してネステッドループ結合を選択した理由など、オプティマイザの決定を理解するのに役立ちます。そのため、`EXPLAIN PLAN` はステートメントのパフォーマンスの理解に役立ちます。

SQLT は、レポートを作成する Oracle ユーティリティです。このレポートには、オブジェクト統計、オブジェクトメタデータ、オプティマイザ関連の初期化パラメータ、およびデータベース管理者が最適なパフォーマンスを得るために SQL ステートメントを調節するために使用できるその他の情報が含まれています。SQLT は、レポート内のすべてのセクションへのハイパーリンクを含む HTML レポートを生成します。

SQLT は、自動ワークロードリポジトリまたは Statspack レポートとは異なり、個々の SQL ステートメントに対して機能します。SQLT は、パフォーマンスデータを収集、保存、表示する SQL、PL/SQL、および SQL\$1Plus ファイルのコレクションです。

各 SQLT バージョンでは次の Oracle バージョンがサポートされています。


****  

| SQLT バージョン | Oracle Database 21c | Oracle Database 19c | 
| --- | --- | --- | 
|  2018-07-25.v1  |  サポート  |  サポート  | 
|  2018-03-31.v1  |  サポートされません  |  サポートされません  | 
|  2016-04-29.v1  |  サポートされません  |  サポートされません  | 

SQLT および使用のためのアクセス手順をダウンロードします。
+ My Oracle Support アカウントにログインして、以下のドキュメントを開きます。
+ SQLT のダウンロード: [ドキュメント 215187.1](https://support.oracle.com/epmos/faces/DocumentDisplay?id=215187.1)
+ SQLT のご利用方法: [ドキュメント 1614107.1](https://support.oracle.com/epmos/faces/DocumentDisplay?id=1614107.1)
+ SQLT についてのよくある質問: [ドキュメント 1454160.1](https://support.oracle.com/epmos/faces/DocumentDisplay?id=1454160.1)
+ 出力された SQLT 読み取りについて: [ドキュメント 1456176.1](https://support.oracle.com/epmos/main/downloadattachmentprocessor?parent=DOCUMENT&sourceId=1456176.1&attachid=1456176.1:58&clickstream=yes)
+ メインレポートの解釈について: [ドキュメント 1922234.1](https://support.oracle.com/epmos/faces/DocumentDisplay?parent=DOCUMENT&sourceId=215187.1&id=1922234.1)

Amazon RDS は、以下の SQLT メソッドをサポートしていません。
+ `XPLORE` 
+ `XHUME` 

## &SQLT の前提条件
<a name="Oracle.Options.SQLT.PreReqs"></a>

SQLT を使用するための前提条件は次のとおりです。
+ 存在する場合は、SQLT で必要とされるロールとユーザーを削除する必要があります。

  SQLT オプションは、DB インスタンスの次のユーザーおよびロールを作成します。
  + `SQLTXPLAIN` ユーザー
  + `SQLTXADMIN` ユーザー
  + `SQLT_USER_ROLE` ロール

  DB インスタンスにこれらのユーザーまたはロールがある場合は、SQL クライアントを使用して DB インスタンスにログインし、次のステートメントを使用して削除します。

  ```
  DROP USER SQLTXPLAIN CASCADE;
  DROP USER SQLTXADMIN CASCADE;   
  DROP ROLE SQLT_USER_ROLE CASCADE;
  ```
+ 存在する場合は、SQLT で必要とされるテーブルスペースを削除する必要があります。

  SQLT オプションは、DB インスタンスの次のテーブルスペースを作成します。
  + `RDS_SQLT_TS`
  + `RDS_TEMP_SQLT_TS`

  DB インスタンスにこれらのテーブルスペースがある場合は、SQL クライアントを使用して DB インスタンスにログインし、削除します。

## SQLT オプション設定
<a name="Oracle.Options.SQLT.Options"></a>

 SQLT は、Oracle Tuning Pack および Oracle Diagnostics Pack によって提供されるライセンス機能を使用して動作します。Oracle Tuning Pack には SQL チューニングアドバイザが、Oracle Diagnostics Pack には自動ワークロードリポジトリが含まれています。SQLT 設定は、SQLT からこれらの機能へのアクセスを有効または無効にします。

Amazon RDS は、SQLT オプションの次の設定をサポートします。


****  

| オプション設定 | 有効な値 | デフォルト値 | 説明 | 
| --- | --- | --- | --- | 
|  `LICENSE_PACK`  |  `T`, `D`, `N`  |  `N`   |  SQLT を使用してアクセスする Oracle Management Pack。以下のいずれかの値にエラーがあります。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/Oracle.Options.SQLT.html)  Amazon RDS はこれらの Oracle Management Pack のライセンスを提供しません。DB インスタンスに含まれていないパックを使用することを指定した場合は、DB インスタンスで SQLT を使用できます。ただし、SQLT はパックにアクセスできず、SQLT レポートにはパックのデータは含まれません。例えば、`T` を指定したが、DB インスタンスに Oracle Tuning Pack が含まれていない場合、SQLT は DB インスタンス上で動作しますが、作成するレポートに Oracle Tuning Pack に関係するデータは含まれません。   | 
|  `VERSION`  |  `2016-04-29.v1` `2018-03-31.v1` `2018-07-25.v1`  |  `2016-04-29.v1`   |  インストールする SQLT のバージョン。  Oracle Database 19c と 21c では、サポートされているバージョンは `2018-07-25.v1` のみです。このバージョンは、これらのリリースのデフォルトです。   | 

## SQLT オプションの追加
<a name="Oracle.Options.SQLT.Add"></a>

DB インスタンスに SQLT オプションを追加する一般的なプロセスを次に示します。

1. 新しいオプショングループを作成するか、既存のオプショングループをコピーまたは変更します。

1. オプショングループに SQLT オプションを追加します。

1. オプショングループを DB インスタンスに関連付けます。

SQLT オプションの追加後、オプショングループがアクティブになるとすぐに、SQLT がアクティブになります。

**SQLT オプションを DB インスタンスに追加するには**

1. 使用するオプショングループを決定します。新しいオプショングループを作成することも、既存のオプショングループを使用することもできます。既存のオプショングループを使用する場合は、次のステップは飛ばしてください。または、次の設定でカスタム DB オプショングループを作成します。

   1. [**Engine**] で、使用する Oracle のエディションを選択します。SQLT オプションは、すべてのエディションでサポートされます。

   1. [**メジャーエンジンのバージョン**] で、DB インスタンスのバージョンを選択します。

   詳細については、「[オプショングループを作成する](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.Create)」を参照してください。

1. オプショングループに [**SQLT**] オプションを追加します。オプションの追加方法の詳細については、「[オプショングループにオプションを追加する](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.AddOption)」を参照してください。

1. 新規または既存の DB インスタンスに、DB オプショングループを適用します。
   + 新規 DB インスタンスの場合は、インスタンスを起動するときにオプショングループを適用します。詳細については、「[Amazon RDS DB インスタンスの作成](USER_CreateDBInstance.md)」を参照してください。

      
   + 既存の DB インスタンスの場合は、インスタンスを修正し、新しいオプショングループを添付することで、オプショングループを適用します。詳細については、「[Amazon RDS DB インスタンスを変更する](Overview.DBInstance.Modifying.md)」を参照してください。

1. (オプション) SQLT オプションを伴う各 DB インスタンスの SQLT のインストールを検証します。

   1. マスターユーザーとして DB インスタンスに接続している SQL クライアントを使用します。

      Oracle DB インスタンスで SQL クライアントに接続する詳細については、「[Oracle DB インスタンスへの接続](USER_ConnectToOracleInstance.md)」を参照してください。

   1. 次のクエリを実行します。

      ```
      SELECT sqltxplain.sqlt$a.get_param('tool_version') sqlt_version FROM DUAL;                        
      ```

      クエリは Amazon RDS の SQLT オプションの最新バージョンを返します。`12.1.160429` は Amazon RDS で使用可能である SQLT のバージョンの例です。

1. SQLT オプションで作成されたユーザーのパスワードを変更します。

   1. マスターユーザーとして DB インスタンスに接続している SQL クライアントを使用します。

   1. `SQLTXADMIN` ユーザーのパスワードを変更するには、以下の SQL ステートメントを実行します。

      ```
      ALTER USER SQLTXADMIN IDENTIFIED BY new_password ACCOUNT UNLOCK;                         
      ```
**注記**  
セキュリティ上のベストプラクティスとして、ここに示されているプロンプト以外のパスワードを指定してください。

   1. `SQLTXPLAIN` ユーザーのパスワードを変更するには、以下の SQL ステートメントを実行します。

      ```
      ALTER USER SQLTXPLAIN IDENTIFIED BY new_password ACCOUNT UNLOCK;                         
      ```
**注記**  
セキュリティ上のベストプラクティスとして、ここに示されているプロンプト以外のパスワードを指定してください。

**注記**  
SQLT をアップグレードするには、SQLT の旧バージョンをアンインストールしてから、新しいバージョンをインストールする必要があります。そのため、すべての SQLT メタデータが SQLT をアップグレードすると失われる可能性があります。データベースのメジャーバージョンのアップグレードでも、SQLT がアンインストールされ、再インストールされます。メジャーバージョンのアップグレードの例は、Oracle Database 18c から Oracle Database 19c へのアップグレードです。

## SQLT の使用
<a name="Oracle.Options.SQLT.Using"></a>

SQLT は Oracle SQL\$1Plus ユーティリティで動作します。

**使用する SQLT**

1.  My Oracle Support サイトの [ドキュメント 215187.1](https://support.oracle.com/epmos/faces/DocumentDisplay?id=215187.1) から SQLT .zip ファイルをダウンロードします。
**注記**  
My Oracle Support サイトから SQLT 12.1.160429 をダウンロードすることはできません。Oracle はこの古いバージョンを廃止しました。

1.  SQLT .zip ファイルを解凍します。

1.  コマンドプロンプトから、ファイルシステムの `sqlt/run` をディレクトリに変更します。

1.  コマンドプロンプトで、SQL\$1Plus を開き、マスターユーザーとして DB インスタンスに接続します。

   SQL\$1Plus を使用する DB インスタンスへの接続の詳細については、「[Oracle DB インスタンスへの接続](USER_ConnectToOracleInstance.md)」を参照してください。

1.  SQL ステートメントの SQL ID を取得します。

   ```
   SELECT SQL_ID FROM V$SQL WHERE SQL_TEXT='sql_statement';                               
   ```

   以下のような出力が生成されます。

   ```
   SQL_ID
   -------------
   chvsmttqjzjkn
   ```

1. SQLT を含む SQL ステートメントの分析: 

   ```
   START sqltxtract.sql sql_id sqltxplain_user_password                    
   ```

   例えば、SQL ID`chvsmttqjzjkn` に対して、以下を入力してください。

   ```
   START sqltxtract.sql chvsmttqjzjkn sqltxplain_user_password                    
   ```

   SQLT は、HTML レポートと関連リソースを SQLT コマンドが実行されたディレクトリに .zip ファイルとして生成します。

1.  (オプション) アプリケーションユーザーが SQLT を使用して SQL ステートメントを診断できるようにするには、次のステートメントを使用して `SQLT_USER_ROLE` を各アプリケーションユーザーに付与します。

   ```
   GRANT SQLT_USER_ROLE TO application_user_name;                
   ```
**注記**  
Oracle は、`SYS` ユーザー、または `DBA` ロールを持つユーザーで SQLT を実行することを推奨していません。`SQLT_USER_ROLE` をアプリケーションユーザーに付与することにより、アプリケーションユーザーのアカウントを使用して SQLT 診断を実行することをお勧めします。

## SQLT オプションのアップグレード
<a name="Oracle.Options.SQLT.Upgrading"></a>

Amazon RDS for Oracle では、SQLT オプションをバージョンを既存のバージョンから上位のバージョンにアップグレードできます。SQLT オプションをアップグレードするには、SQLT の新しいバージョンの [SQLT の使用](#Oracle.Options.SQLT.Using) のステップ 1-3 を完了します。また、そのセクションのステップ 7 で以前のバージョンの SQLT の特権を付与した場合は、新しい SQLT バージョンの特権を再度付与してください。

SQLT オプションをアップグレードすると、古い SQLT バージョンのメタデータが失われます。古い SQLT バージョンのスキーマおよび関連オブジェクトは削除され、新しいバージョンの SQLT がインストールされます。最新の SQLT バージョン における変更の詳細については、My Oracle Support サイトの「[ドキュメント 1614201.1](https://support.oracle.com/epmos/faces/DocumentDisplay?parent=DOCUMENT&sourceId=215187.1&id=1614201.1)」を参照してください。

**注記**  
バージョンのダウングレードはサポートされていません。

## SQLT 設定の変更
<a name="Oracle.Options.SQLT.ModifySettings"></a>

SQLT を有効にした後、オプションで `LICENSE_PACK` および `VERSION` 設定を変更できます。

オプション設定の変更方法の詳細については、「[オプションの設定を変更する](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.ModifyOption)」を参照してください。各設定の詳細については、「[SQLT オプション設定](#Oracle.Options.SQLT.Options)」を参照してください。

## SQLT オプションの削除
<a name="Oracle.Options.SQLT.Remove"></a>

DB インスタンスから SQLT を削除できます。

DB インスタンスから SQLT を削除するには、次のいずれかを実行します。
+ 複数の DB インスタンスから SQLT を削除するには、DB インスタンスが属しているオプショングループから SQLT オプションを削除します。この変更はそのオプショングループを使用するすべての DB インスタンスに影響します。詳細については、「[オプショングループからオプションを削除する](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.RemoveOption)」を参照してください。

   
+ 単一の DB インスタンスから SQLT を削除するには、DB インスタンスを変更し、NNE オプションが含まれていない別のオプショングループを指定します。デフォルト (空) のオプショングループや別のカスタムオプショングループを指定できます。詳細については、「[Amazon RDS DB インスタンスを変更する](Overview.DBInstance.Modifying.md)」を参照してください。